Linux-Development-Sys Digest #863, Volume #6 Wed, 23 Jun 99 06:14:35 EDT
Contents:
Pthread Resouces (Matthew Carl Schumaker)
Re: TAO: the ultimate OS (Christopher Browne)
Need HELP on GIF in C++ ([EMAIL PROTECTED])
Re: TAO: the ultimate OS (Stefaan A Eeckels)
Re: What about innovation? (Christopher Browne)
Re: You can now use Winmodems in Linux!!!!!!! (Christopher Browne)
Re: NT kernel guy playing with Linux ("B. James Phillippe")
Re: After Week 1 With Linux -- licking wounds. (Tyler)
Where can I find some image loading source? (mongoose)
Re: You can now use Winmodems in Linux!!!!!!! (Allin Cottrell)
Re: TAO: the ultimate OS (Bill Vermillion)
Re: USR OEM Alana DFV PCI V.90 modem (cookies)
Re: using C++ for linux device drivers (Peter Samuelson)
database -- questionnaire ([EMAIL PROTECTED])
Re: NT kernel guy playing with Linux (Peter Samuelson)
Re: Q: gdb support for multithreaded core on Linux? (Juan Altmayer Pizzorno)
Re: Making dynamic libraries (Andreas Schwab)
----------------------------------------------------------------------------
From: Matthew Carl Schumaker <[EMAIL PROTECTED]>
Subject: Pthread Resouces
Date: Tue, 22 Jun 1999 18:10:28 -0400
When Creating a pthread under linux what/how much resources are allocated
How much Mem that sort of thing
Is there a limit on the number of pthreads a process can have
what about Mutex's and Conditionals
I can't seem to find this info any where and I'm in the process of writing
a very thread intensive app for linux. Any info would be greatly
apprecieated
thanks in advance
matt
Matthew Carl Schumaker
[EMAIL PROTECTED]
veni, vedi, velcro
I came, I saw, I stuck around
------------------------------
From: [EMAIL PROTECTED] (Christopher Browne)
Crossposted-To: alt.os.linux,comp.os.linux.advocacy,comp.os.misc,comp.unix.advocacy
Subject: Re: TAO: the ultimate OS
Date: 22 Jun 1999 23:20:43 GMT
Reply-To: [EMAIL PROTECTED]
On Mon, 21 Jun 1999 09:21:01 GMT, Vladimir Z. Nuri <[EMAIL PROTECTED]>
wrote:
>Christopher B. Browne ([EMAIL PROTECTED]) wrote:
>: You have programmers that don't understand the way the users think;
>: you also have users that aren't capable of framing what they want/need
>: in a way that is conceivably implementable. And there are people that
>: control purse-strings that are a third group that understand neither
>: what is implementable nor what users truly want.
>
>most of above are subject to the evolutionary pressures of extinction.
>- programmers who do not understand how users think will go
>extinct.
If there's enough interference being run in between users and
programmers, then such situations can persist indefinitely. They
clearly *do* persist.
>- users that can't frame what they want/need as implementable..
>well, I think you are throwing out red herring.. it is not responsibility
>of user to implement features, and a common canard of programmers to
>complain that *difficult* features are *impossible*-- exactly the
>reaction I've received to my original post. but yes, there are plenty
>of users who ask for impossible..
- Some features are simply not computable.
- Some would-be features are blatantly incompatible with system
architectures.
As a common "for instance," in DBMS-oriented applications, I have
quite regularly heard users ask for the ability to modify the primary
key to a DB table, which is one of those basic things that by
necessity *cannot* be fiddled with. I *can't* modify the application
to allow what they want; the system *forbids* this, and that was in
fact the original intent.
>but imho it is largely responsibility
>of programmer to anticipate what users want without requiring them
>to articulate it explicitly. true? the greatest designer gives you
>something you didn't even know you wanted!! and you realize, only
>upon seeing it, that you can't live without it<g>
Clearly the writings of someone who has signed off on a lot of
computer system design specifications. Not.
--
VERITAS AETERNA -- DON'T SETQ T.
[EMAIL PROTECTED] <http://www.ntlug.org/~cbbrowne/lsf.html>
------------------------------
From: [EMAIL PROTECTED]
Subject: Need HELP on GIF in C++
Date: Wed, 23 Jun 1999 00:30:51 GMT
Hello!
I'm new to c++ and need some help from you. Please be patient!
Can someone write a little c++ (sample-) code for linux which makes
following (there is headerfile which is called 'gif_lib.h')?:
- Create an image with width of 500 pixels and height of 250 pixels
(should be located in the memory) with background color darkblue.
- Draw a red line from (10,10) to (490,10)
- Draw a yellow line from (10,240) to (490,240).
- Draw a filled darkgreen rectangle from (20,20) to (480,230).
- Writes at the position (100,60) the text "This should have be done!"
in white color.
- Saves that all to "test.gif".
All other parameters are not interesting. You can fill them to be
correct, because I don't understand all those stuff. I need this
sample for a part of my application...
I were very very happy if someone could have helped me! Thank you!
Regards
Erkan
------------------------------
From: [EMAIL PROTECTED] (Stefaan A Eeckels)
Crossposted-To: alt.os.linux,comp.os.linux.advocacy,comp.os.misc,comp.unix.advocacy
Subject: Re: TAO: the ultimate OS
Date: 22 Jun 1999 23:09:07 GMT
In article <[EMAIL PROTECTED]>,
[EMAIL PROTECTED] (Vladimir Z. Nuri) writes:
> void ([EMAIL PROTECTED]) wrote:
>: On Mon, 21 Jun 1999 08:53:44 GMT, Vladimir Z. Nuri <[EMAIL PROTECTED]> wrote:
>: >
>: >yes, Unix clearly epitomizes the
>: >sort of "real men don't design, they just start hacking"
>: >charade you allude to above.
>
>: As compared to what, hardware?
>
> as Terry Murphy was saying, in good design
>
> requirements -> design -> detailed design -> prototype -> beta -> release
The problem is that very often a detailed and unambiguous
design document is *more* difficult to realize, *and* less
unambiguous than the actual code. I know it, I've tried to
use almost every specification technique since HIPO.
The claims of UML notwithstanding, IMHO there is no
specification language that will let you correctly
specify an OS in a format that can be understood by
non-programmers; the moment your target audience is
a bunch of programmers, code is the best specification
available (remember ALGOL, was conceived specifically to
express algorithms). Don Knuth's classic books present
algorithms in a programming language, not in weird
little drawings.
> or something like that..
>
> now.. where is the unix requirements document? who wrote it?
The requirements when UNIX was designed were to develop an
OS that would be flexible and easy to use *by programmers*.
As a programmer, I can confirm that the requirements have
been met.
> if there was a unix requirements document or emphasis on
> writing /maintaining it, there would be less hostility to
Where do you get the idea that UNIX is a single entity that
has to conform to a unique requirements document? That's
a scenario that *might* be possible in a company like MS,
or IBM; it's risible to believe that it would have any
relevance for the companies and indviduals developing
UNIX based (derived / look-alike / etc) OSes.
I'm quite sure Sun, HP, SGI, Compaq, SCO etc. have quite
detailed requirements documents for each new release of
their respective OSes.
> my own requirements document.. but unix programmers do not
> think in terms of the above. instead we have, as ESR
> glorifies,
>
> code -> release -> code -> release -> code -> release
Are you perchance a PHB? Don't forget that what ESR describes
is the "prototype -> beta -> release" part of your
description of a "good development", not the "requirements ->
design" part, which has been done by the original author
*before* code is released.
The reason Open Source (no flames please) is so often
successful is that source code is the best specification
and design language available.
--
Stefaan
--
PGP key available from PGP key servers (http://www.pgp.net/pgpnet/)
___________________________________________________________________
Perfection is reached, not when there is no longer anything to add,
but when there is no longer anything to take away. -- Saint-Exup�ry
------------------------------
From: [EMAIL PROTECTED] (Christopher Browne)
Crossposted-To: comp.os.linux.advocacy
Subject: Re: What about innovation?
Reply-To: [EMAIL PROTECTED]
Date: Wed, 23 Jun 1999 00:51:24 GMT
On Tue, 22 Jun 1999 14:25:46 +0200, Francis Van Aeken
<[EMAIL PROTECTED]> wrote:
>Isn't it a shame that a rehashed version of UNIX is getting
>so much more attention than a more innovative product like
>BeOS?
>
>I would love to use a non-legacy OS, but no way I'm going to
>use outdated technology.
>
>Still, I want a system that is supported by a critical mass of
>users: I need those drivers...
You can't have it both ways. You *have* to pick one of:
a) Outdated technology, or
b) Outdated hardware.
It is arguable that Be isn't much more than a rehashed cross between
UNIX and MacOS.
It adds in message queues as a basic OS facility, and adds some
filesystem functionality (e.g. - multiple streams, "file as
namespace."), but isn't particularly novel in most respects, and borrows
heavily from technologies you'd likely consider "outdated."
That's not intended to indicate that Be is "bad;" on the contrary, if it
has "stolen" good ideas from good systems, and integrates them together
coherently, that can make for a very nice resulting system.
Indeed, that is *precisely* where UNIX came from, as a sort of "cut
down" version of Multics. UNIX's success may be attributed, in part, to
a design based on distilling features from some of the better OSes of
the '60s and '70s.
Windows' lack of attractiveness comes (at least in part) from a design
that grabbed things in in a vastly *less* organized way, and took
critical design features from systems that were desparately
*under*designed. (e.g. - MS-DOS, the underlying layer, represents
little more than a clone of CP/M, both of which are "merely" simple
program loaders)
--
VERITAS AETERNA -- DON'T SETQ T.
[EMAIL PROTECTED] <http://www.ntlug.org/~cbbrowne/lsf.html>
------------------------------
From: [EMAIL PROTECTED] (Christopher Browne)
Subject: Re: You can now use Winmodems in Linux!!!!!!!
Reply-To: [EMAIL PROTECTED]
Date: Wed, 23 Jun 1999 00:53:28 GMT
On Tue, 22 Jun 1999 20:30:59 GMT, Frank v Waveren <[EMAIL PROTECTED]> wrote:
>In article <[EMAIL PROTECTED]>,
> Medical Electronics Lab <[EMAIL PROTECTED]> writes:
>> The winmodem is just a digitizer that does DMA into a buffer. The
>> processor has to convert the audio bits to multiple tone data, and
>> then to data bits. It's straight forward data manipulation. There
>> is no reason we can't write a driver for any winmodem.
>
>1) The hardware interface of the winmodems is undocumented, and from what I heard
> not very simple
>2) Programming all of the modem protocol is going to be a lot of work, especially
> if you want to use the standards.. (Why else have a modem?)
>
>If anyone want to, let them feel free to, but I think that it would be better
>to convince the vendors....
Head over to <http://www.o2.net/~gromitkc/winmodem.html> and
<http://linmodems.org/> for a dueling set of points of view on this.
Note that the person that set up <linmodems.org> is Russ Nelson, who has
written serial port driver software for Linux. Don't dismiss the idea
out of hand...
--
'Mounten' wird fuer drei Dinge benutzt: 'Aufsitzen' auf Pferde,
'einklinken' von Festplatten in Dateisysteme, und, nun, 'besteigen'
beim Sex. (Christa Keil in a German posting: "Mounting is used for
three things: climbing on a horse, linking in a hard disk unit in file
systems, and, well, mounting during sex".)
[EMAIL PROTECTED] <http://www.ntlug.org/~cbbrowne/lsf.html>
------------------------------
From: "B. James Phillippe" <[EMAIL PROTECTED]>
Subject: Re: NT kernel guy playing with Linux
Date: 22 Jun 1999 20:37:48 GMT
On Tue, 22 Jun 1999, Holden McGroin wrote:
> I must say, I'm a little disappointed in the linux's apparent
> non-reentrancy. Rubini says there's a global semaphore that is grabbed
> every time a process enters the kernel.
You're really critiquing old technology; linux-2.2 resolves many of the
problems you've encountered. And linux-2.3 (currently in development) is
going even further. Unfortunately, I'm not aware of any book that covers
these issues.
But Rubini's book is a good one for introducing yourself to device driver
authoring in UNIX, and some of the fundamentals of Linux. I'd suggest you
keep a list of questions/limitations, read the book and do some of the
samples under a 2.0 kernel (as the book covers). Then, read the last
chapter about "Recent Developments" and see what remains. Then dig into
the 2.2 code and start to look for things that have changed. If you really
go gonzo and can handle poring through thousands of lines of code on your
weekends, just go straight for 2.3.
And remember, if you still find a limitation, you're welcome to fix it. :-)
btw, at least consider hiding an address in your signature..
-bp
--
# bryan at terran dot org
# http://www.terran.org/~bryan
------------------------------
From: Tyler <[EMAIL PROTECTED]>
Subject: Re: After Week 1 With Linux -- licking wounds.
Date: 23 Jun 1999 03:30:58 GMT
I don't know if this was mentioned in another post (I didn't see it), but
for me as an administrator working two jobs, one with Linux and one with
NT, I see the pain I go through every day with NT. Sure, it might be
simpler to get something working on NT - on one machine. Multiply that by
the 200+ machines we have in our CS department, and we get a couple
full-time employees and at least two FTEE students (like myself) doing
repetitive tasks because NT took the peer-to-peer networking approach a
little too seriously. It is absolutely ridiculous that we should spend our
time going around to each computer with a Netscape disk to install the
newest version when I could do it on one computer and update the entire
building in a UNIX installation.
Maybe it's a little harder/different for the end user to learn, but they
can get over it, especially with the new spiffy window managers available
today.
My $0.02
================== Posted via SearchLinux ==================
http://www.searchlinux.com
------------------------------
From: mongoose <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.development,comp.os.linux.development.apps
Subject: Where can I find some image loading source?
Date: Tue, 22 Jun 1999 23:46:12 -0500
Does anyone know where I could download some source/libraries for
loading various image formats into memory? Thanks.
-Mongoose, WPI student majoring in Computer Science.
"Whenever you find yourself on the side of the majority,
it's time to pause and reflect." -Mark Twain
------------------------------
From: Allin Cottrell <[EMAIL PROTECTED]>
Subject: Re: You can now use Winmodems in Linux!!!!!!!
Date: Wed, 23 Jun 1999 01:00:31 -0400
James Stevenson wrote:
> i am not invloded in this but has anyone asked the manufacuters yet??
Of course. Their response is basically that writing winmodem
drivers is difficult and time-consuming, and requires a lot of
help from the chip-makers -- and they're not willing to put
resources into helping write Linux drivers unless they see a
BIG market there. The more people who pester, e.g., Lucent,
the better.
--
Allin Cottrell
Department of Economics
Wake Forest University, NC
------------------------------
Crossposted-To: alt.os.linux,comp.os.linux.advocacy,comp.os.misc,comp.unix.advocacy
From: [EMAIL PROTECTED] (Bill Vermillion)
Subject: Re: TAO: the ultimate OS
Date: Wed, 23 Jun 1999 03:46:13 GMT
In article <7kp52j$f94$[EMAIL PROTECTED]>, Stefaan A Eeckels
<[EMAIL PROTECTED]> wrote:
>In article <[EMAIL PROTECTED]>, [EMAIL PROTECTED]
>(Vladimir Z. Nuri) writes:
>>: As compared to what, hardware?
>> as Terry Murphy was saying, in good design
>> requirements -> design -> detailed design -> prototype -> beta ->
>> release
>The problem is that very often a detailed and unambiguous design
>document is *more* difficult to realize, *and* less unambiguous
>than the actual code. ...
I think a classic case of that was in the AT&T Unix manuals
for V.2 - red covers - before the suits decided that sections
labeled 'BUGS' weren't appropriate for commericial system.
On the manual page for 'regex' is a comment at the end which says
(I think I have this quote approximately correct) "The source code is
probably easier to understand than this man page".
--
Bill Vermillion bv @ wjv.com
------------------------------
From: cookies <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.hardware,redhat.hardware.arch.intel
Subject: Re: USR OEM Alana DFV PCI V.90 modem
Date: 23 Jun 1999 04:30:53 GMT
Attention: I returned that 'Win modem' the second day. So I don't have any
driver at hand. Now I am using M56VI-ST1 V90/X2 from Powercom. It works
fine at Linux, however, I always get trouble from Win98 and WinNT4.0.
what a mazing!
cookies wrote:
> Hi, all!
> I got a USR OEM Alana DFV PCI V.90 modem, I didn't find it in the list
of
> Winmodem. But I am not sure it will work under Linux 5.2. is there
anyone
> who can help me?
> Yours,
> John
>
> ------------------ Posted via SearchLinux ------------------
> http://www.searchlinux.com
================== Posted via SearchLinux ==================
http://www.searchlinux.com
------------------------------
From: [EMAIL PROTECTED] (Peter Samuelson)
Subject: Re: using C++ for linux device drivers
Date: 23 Jun 1999 02:26:16 -0500
Reply-To: Peter Samuelson <[EMAIL PROTECTED]>
[Justin Vallon <[EMAIL PROTECTED]>]
> Inlining is a strong reason to use C++. Macros don't typecheck their
> parameters.
Fortunately GNU C supports inlining. And a few other nice C++isms like
//comments. I guess this stuff is going into C9X too. Not to say
there aren't still reasons to use C++ but there aren't quite as many as
there used to be. An excellent straw man (not that I'm accusing *you*
of such, don't get me wrong) would be to compare C++ to pre-ANSI C.
> String s = String("Your name is ") + UserName + ".";
[...]
> const char *s1 = strdup("Your name is ");
> const char *s2 = malloc(strlen(s1) + strlen(UserName) + 1);
> strcpy(s2, s1);
> strcat(s2, UserName);
> const char *s3 = malloc(strlen(s2) + strlen(".") + 1);
> strcpy(s3, s2);
> strcat(s3, ".");
> free(s1);
> free(s2);
> s = s3;
Not sure if I understand your point -- was this a satire? Surely you
didn't actually mean that code. Normal C practice is more like:
char *s = malloc(strlen(UserName) + strlen("Your name is .") + 1);
sprintf(s, "Your name is %s.", UserName);
Still not pretty, but readable. Also it would be trivial to write a
simple function sprintfdup(), analogous to strdup() vs. strcpy().
--
Peter Samuelson
<sampo.creighton.edu!psamuels>
------------------------------
From: [EMAIL PROTECTED]
Subject: database -- questionnaire
Date: Wed, 23 Jun 1999 14:56:23 +0800
Hi,
My company wants to focus our database product -DBMaker (Does
anyone hear about it? DBMaker has 5-user free package for anyone who
wants to try it.) on Linux. We need to gether more information. So I
have some questions need you guys' help.
1. Execpt Perl, PHP3 and Python, is there any more popular front-end
tool that I can use it to development application on database?
2. What's GTK+? Is it popular?
3. What do you think a database should have to make you like to use
it?
4. What do you think a well-defined database solution should have?
ChingYi
------------------------------
From: [EMAIL PROTECTED] (Peter Samuelson)
Subject: Re: NT kernel guy playing with Linux
Date: 23 Jun 1999 03:17:51 -0500
Reply-To: Peter Samuelson <[EMAIL PROTECTED]>
[Holden McGroin <[EMAIL PROTECTED]>]
> I must say, I'm a little disappointed in the linux's apparent
> non-reentrancy. Rubini says there's a global semaphore that is
> grabbed every time a process enters the kernel.
Old news. There are two big issues with regard to SMP performance:
kernel locking and kernel preemption.
As for locking, it *used* to be the case (2.0.x) that only one CPU
could execute kernel-mode code at a time, which works fine for
compute-bound stuff but sucks for I/O. The "global kernel lock" has
been replaced by finer-grained locks, and this is still a work in
progress. (The current push is the filesystem layer, which is
currently about as single-threaded as NT networking code pre-4.0SP3.)
As for preemption on a given CPU, there are two rules. One: interrupt
handlers are allowed to interrupt normal kernel code but must return
i.e. can't go schedule something else. Two: nothing else can disturb
running kernel code. However, if you look around, lots of kernel code
voluntarily yields to the scheduler's wisdom in places where it wants
to do things like blocking on I/O. Look for the idiom
if(need_resched)
schedule();
which is essentially cooperative multitasking. It works because
interrupt handlers can set the global variable `need_resched' if they
feel the need. If you want my bigoted opinion, total kernel preemption
like Solaris claims to have would not buy much unless you are concerned
with implementing fairly hard RT/QoS guarantees.
> Only one processor (BP) can handle interrupts in SMP too. So if a
> process is in the kernel in another processor, interrupts are not
> handled?
I don't know the details on this one. I *think* IO-APIC hardware is
used to distribute interrupts across CPU's. However, I also think
there are a lot of global-CLI calls that will at some point be
replaced with local-CPU-CLI as soon as someone gets around to figuring
out what else needs to change around them.
> Also, Rubini doesn't say much about threads in the kernel. Maybe
> they're in 2.2.xx ??
Not sure which of two things you mean: threads of user-mode processes
or threads of the kernel itself. Both have been around a long time.
> He mentions PThread's, but says these are manufactured threads in the
> process and the kernel still sees one process.
Nope. `pthreads' is the POSIX thread API, implemented in Linux some
time ago as the "linuxthreads" library and since integrated into libc.
> I think it would be fun to do an NT kernel IRP emulation environment
> in Linux that would allow some NT kernel drivers to run in binary
> form, and most to port with very little changes.
Methinks an NT driver-level emulation layer would be *a lot* of work,
but you're the NT hacker. Are drivers allowed to use things like
Win32? If so....
Also, IRP sounds conceptually a lot like SysV STREAMS. There have been
long and bitter flamewars about STREAMS support in Linux. The current
state of affairs is that someone at Caldera (?) is maintaining a
STREAMS implementation but this is not endorsed by the major kernel
players. Look at ftp.gcom.com (if memory serves).
--
Peter Samuelson
<sampo.creighton.edu!psamuels>
------------------------------
Date: Wed, 23 Jun 1999 07:32:49 +0200
From: Juan Altmayer Pizzorno <[EMAIL PROTECTED]>
Crossposted-To: comp.programming.threads,comp.os.linux.development.apps,gnu.gdb
Subject: Re: Q: gdb support for multithreaded core on Linux?
Aaron Coday wrote:
>
> AFAIK, the core format does not support multi-thread. And as such gdb doesn't
> support it either.
Yes, you are right, from a quick look at the source, the registers for
threads
other than the main one do not seem to get stored core file at all.
I meant to patch gdb to get me a post-mortem traceback (or 'backtrace')
of a
multithreaded program... I guess it is still possible, since the stacks
themselves should be in the core file, but it would be much nicer if we
had
support for the various' threads contexts in 'core'.
Who maintains that, anyway?
> If the crash is repeatable, you can run the program under gdb until it crashes
> and see where the crash is. If this is unfeasible, you can the play the game
> of attaching gdb at some time before the crash.
You mean attaching it from a signal handler? Thanks
.. Juan
------------------------------
From: Andreas Schwab <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.development,comp.os.linux.development.apps
Subject: Re: Making dynamic libraries
Date: 23 Jun 1999 10:53:40 +0200
mlw <[EMAIL PROTECTED]> writes:
|> John Burton wrote:
|> >
|> > mlw wrote in message <[EMAIL PROTECTED]>...
|> > >mongoose wrote:
|> > >>
|> > >> Ok I know how to make a static library that I can compile my programs
|> > >> with but how do I make a dynamic library? Is there a webpage or could
|> > >> anyone give me some info on how to do it? Also when compiling in a
|> > >> library as dynamic or static does it make any performance differences as
|> > >> to the speed of the program?
|> > >
|> > >I have big issues with how Linux does shared libraries. Phylosophically,
|> > >they are implemented in a way that is environmentally specific, even
|> > >though versions are the same, the environment on which they were built
|> > >is incorporated into the shared object.
|> >
|> > Specifically what do you mean? Which parts of the environment are you
|> > talking about?
|>
|> The shared library depends on the environment in which it was compiled.
|> Software being developed in a different environment (i.e. a different c
|> lib) can not use the shared object.
The static library depends on the environment in which it was compiled.
Software being developed in a different environment (i.e. a different c
lib) can not use the static library.
--
Andreas Schwab "And now for something
[EMAIL PROTECTED] completely different"
[EMAIL PROTECTED]
------------------------------
** FOR YOUR REFERENCE **
The service address, to which questions about the list itself and requests
to be added to or deleted from it should be directed, is:
Internet: [EMAIL PROTECTED]
You can send mail to the entire list (and comp.os.linux.development.system) via:
Internet: [EMAIL PROTECTED]
Linux may be obtained via one of these FTP sites:
ftp.funet.fi pub/Linux
tsx-11.mit.edu pub/linux
sunsite.unc.edu pub/Linux
End of Linux-Development-System Digest
******************************