HDTenEightyP/NetNews huggingface dataset:
From: Paul.Robinson@f417.n109.z1.fidonet.org (Paul Robinson)
Newsgroups: comp.lang.pascal
Subject: String (2/4)
Date: 21 Nov 92 17:21:27 GMT

The Start and Span parameters in the following procedures
 
define a substring beginning at position Start (between
 
characters Start-1 and Start) with a length of Abs(Span).
 
If Span is positive, the substring is to the right of Start;
 
if negative, the substring is to the left.
 
 
 
Delete(S,Start,Span) - deletes the substring defined by
 
  Start, Span from the string S.
 
 
 
Substring(T,S,Start,Span) - the substring of string S
 
  defined by Start, Span is assigned to the target string T.
 
}
 
const   stringmax=100;
 
type    string=record
 
           len: 0..stringmax;
 
           ch: packed array[1..stringmax] of char
 
           end;
 
 
 
function len(VAR s:string):integer;
 
begin   len:= s.len
 
end;
 
 
 
procedure clear(var s:string);
 
var     i: integer;
 
begin   s.len:=0;
 
        for i:=1 to stringmax do s.ch[i]:=' '
 
end;
 
 
 
procedure concatenate(var s:string; VAR t:string);
 
var     i,j: integer;
 
begin
 
        if s.len+t.len>stringmax
 
           then j:=stringmax-s.len { overflow }
 
           else j:=t.len;
 
        for i:=1 to j do s.ch[s.len+i]:=t.ch[i];
 
        s.len:=s.len+j;
 
end;


Newsgroups: comp.lang.pascal
From: pigeons@JSP.UMontreal.CA (Pigeon Steven)
Subject: Re: Encryption and Random Numbers
Organization: Universite de Montreal
Date: Wed, 18 Nov 1992 03:03:35 GMT

In article <1992Nov17.211502.18511@lynx.dac.northeastern.edu> cschmidt@lynx.dac.northeastern.edu (Christopher Schmidt) writes:
>Duncan Murdoch's interesting STREAMS package includes some
>clever encryption logic that uses the TP random number
>generator.  It's a nice technique, except that if Borland
>modifies the TP random number generator, then you and your
>customers will be locked out of your encrypted data.
>
>What exactly are the chances Borland will modify the TP
>random number generator?  Do you feel lucky?
>
>Simple solution: Include your own random number generator in
>your program.  Anybody have such in TP?  I notice there is a
>random number generator in C in the SIMTEL directory
><MSDOS.C>, but I have not looked at it yet.

Good solution!... Better yet if you know that a simple random
generator (such as one found in TP, at least, up to version 6.0)
is ... simple to program: 


 procedure randomize;
  begin
   RandSeed := timer;
  end;

 procedure random(m:word):word;
  begin
   RandSeed:=(RandSeed*C+b) mod (2^32); {keep only the first 32 bits of 
                                        result }
   random:=(RandSeed and $0000ffff) mod m;  {keep lower part, and >=0}
  end;



The big deal about this method, is to find a C that will make
your random generator look random. An arbitrarly (sp!) large
relatively prime number C will do, and B can be any odd constant.
C is relatively prime to 2^32, which does not mean that it is
prime, only that it has no factor smaller (or equals) to (2^32-1).

(also note that computing (Randseed*C+b) mod (2^32) may cause 
some problems with overflow... Some assembly lang, and it's done!)


>
>Christopher Schmidt
>Waltham, Massachusetts, USA
>cschmidt@lynx.northeastern.edu


-- 
 _ ___  __       __ _  | Steven Pigeon
(_  |  (__ \  / (__ |\ | (a.k.a)
__) |  (__  \/  (__ | \| pigeons@JSP.UMONTREAL.CA
==Computer Science & Operation Research, Universite de Montreal==
Newsgroups: comp.lang.pascal
From: rwirthli@nyx.cs.du.edu (Ralph Wirthlin)
Subject: Re: Comments on Turbo (Borland) Pascal 7.0?
Organization: University of Denver, Dept. of Math & Comp. Sci.
Date: Fri, 20 Nov 92 15:59:38 GMT


>1: Source code hilighting

This *one* has personally saved me alot of grief.  Have you ever
commented a piece of code and forgot to put on the closing "*)" and
wonder why you get a "Expected ; " at the end of the file with
absolutely no clue why?
  This will show it to you!
From: exuhag@exu.ericsson.se (James Hague)
Newsgroups: comp.lang.pascal
Subject: Re: Comments on Turbo (Borland) Pascal 7.0?
Date: 18 Nov 92 17:43:35 GMT
Reply-To: exuhag@exu.ericsson.se
Organization: Ericsson Network Systems, Richardson, TX
X-Disclaimer: This article was posted by a user at Ericsson.
              Any opinions expressed are strictly those of the
              user and not necessarily those of Ericsson.

Niels Ull Jacobsen writes:
>
>1: Source code highlighting
>You can set it up so that all keywords are white,
>all user identifiers are green, all constants are black, all comments 
>are grey and some syntactic errors are red. Of course you can change
>the colour set up. It may sound trivial and confusing, but I find it 
>VERY useful - you catch a lot of typing errors as you type.

I have seen this feature in Borland C++ 3.1 and it has me wondering.
I think that having comments and code in different colors is a great
idea.  But I can't figure out why anyone in their right mind would
want to have constants, keywords, and identifiers in different colors.
People made a big ruckus over Modula-2's forced "IF a = b THEN"
syntax, because it draws attention to keywords (similar to emphasizing
puncutation over sentence content, in many people's opinion).

And on a vaguely related subject, here's a neat idea:  since the
editor already has to go through the trouble of doing lexical
scanning (to determing proper colors), maybe it should be taken
one step further.  Keep the files, both internally and on disk,
in a tokenized format.  This would allow better memory usage (smaller
files) and would speed up the compiler.  Many assemblers and a 
few compilers on 8-bit computers used to use such a scheme.

Of course, there would still be an option to save untokenized
files and Borland could provide a filter to convert tokenized
files to straight text files.

--
James Hague   
exuhag@exu.ericsson.se
Newsgroups: comp.lang.pascal
From: p2018756@cumulus.csd.unsw.OZ.AU (Yagna Pant)
Subject: TPW TCollection
Organization: University of New South Wales
Date: Thu, 19 Nov 1992 08:17:27 GMT

I am a newcomer to Turbo Pascal for Windows programming and
would be grateful if you could give me a hint on storing
a record using TCollection.

Suppose if I have a record:

     PClientInformation = ^TClientInformation;
     ClientInformation = record
       Name: array[0..50] of Char;
       Phone: PChar;
       RegistrationNo: Integer;
     end;

How can I store this record using TCollection Object.
TPW manual doesn't treat this topic in detail.

Thanks in advance.

Yagna Pant
From: larry.guay@freddy.ersys.edmonton.ab.ca (Larry Guay) 
Newsgroups: comp.lang.pascal
Subject: POKER
Date: 22 Nov 92 21:39:00 GMT
Reply-To: larry.guay@freddy.ersys.edmonton.ab.ca (Larry Guay) 
Distribution: world
Organization: Freddy's Place BBS - Edmonton, AB - 403-456-4241

To all;
I am trying to write a Pascal program where the program will evaluate
the players card hand. For example, if I imput my hand, the program will
tell me what type of hand I have, ie: straight, flush, 2 of a kind, etc.
All help will be greatly appreciated.
                                                                                                                          
Newsgroups: comp.lang.pascal
From: dmurdoch@mast.queensu.ca (Duncan Murdoch)
Subject: First BP 7 bug :-)
Organization: Queen's University
Date: Thu, 19 Nov 1992 13:55:39 GMT

Here's my first bug report on BP 7.  File dialogs created using the STDDLG 
unit's TFileDialog don't work.  You can't select a file in any directory 
except the current directory.  

Interestingly, there aren't any problems in the file dialogs in the BP 
or TURBO IDEs.  I guess the distributed versions of the units aren't the 
ones used to build these programs.  I wonder what other differences there 
are?

Here's the official Borland fix, from Compuserve.

#: 177943 S1/Turbo Vision  [BPASCAL]
    18-Nov-92  16:27:17
Sb: #177813-TFileDialog broken?
Fm: Mark Edington (Borland) 75140,2240
To: dj murdoch 71631,122

Duncan,

   Here is a fix which you can apply to STDDLG.PAS:

On line 947:

Change:

  RelativePath := not (S <> '') and ((S[1] = '\') or (S[2] = ':'));

to:

  RelativePath := not ((S <> '') and ((S[1] = '\') or (S[2] = ':')));

Mark
Newsgroups: comp.lang.pascal
From: shadow@r-node.gts.org (Jay Chu)
Subject: Re: Breaking up a HUGE file safely
Organization: Microsoft, Canada
Date: Fri, 20 Nov 1992 22:27:38 GMT

In article <2951.2B09361E@catpe.alt.za> Shane.Greyvenstein@f61.n7101.z5.fidonet.org (Shane Greyvenstein) writes:
>In a msg of <14 Nov 92>, Jay Chu writes to All:
>
> -> Is there a safe method for breaking this HUGE file up into
> -> smaller files like 1.2 meg each?  Then, using a combining method,
> -> I can combine the smaller files into the original file again? --
>
>I use ARJ as a compression program, and it has a nifty feature capable of this.  The format would be something to the effect of
>
>ARJ a [path]archivename [path][filespec] -v1200000

How do you reverse the process and combine the broken files together?
-- 
        ______                shadow@r-node.gts.org
       | |__| |   If it's there and you can see it       - it's real
       |  ()  |   If it's there and you can't see it     - it's transparent
       |______|   If it's not there and you can't see it - you erased it!
Newsgroups: comp.lang.pascal
From: dmurdoch@mast.queensu.ca (Duncan Murdoch)
Subject: Re: Comments on Turbo (Borland) Pascal 7.0?
Organization: Queen's University
Date: Tue, 17 Nov 1992 14:40:49 GMT

In article <92322.082711DGB4@psuvm.psu.edu> <DGB4@psuvm.psu.edu> writes:
>The lab that I presently work for is considering upgrading to the latest
>version of Turbo (Borland) Pascal and I would like the nets opinion. We
>are still using version 5.0 & 5.5 in our labs. Is there any great
>advantage to upgrading if the majority of our users are using only the
>basic routines?

There are advantages to always having the current release of software on 
your machines.  If you find a bug, Borland can't tell you to upgrade to fix 
it.  Newer versions are generally less buggy than older versions; for 
example, version 6.01 of TP was less buggy than any of versions 4 thru 5.5.  
I don't have an impression yet about 7.0 in this regard.  If you want to use 
free software from ftp sites, you'll find that it mostly supports only the 
current release (though of course 7.0 hasn't caught on there yet).

As to specifics, there aren't a lot of enhancements in TP 7.0 over TP 5.5.  
There's much better support for objects, as there was in 6.0; there's a 
better IDE (though the change is traumatic for some users :-). Many of the 
complaints about the 6.0 IDE seem to have been addressed in the TP 7 IDE.
These days people are more familiar with Windows; that should help in the 
acceptance of the new IDE.

There are a few more code optimizations, so you can expect TP 7 programs to 
be marginally faster and smaller than earlier versions, but not by much.

BP 7.0 has a huge number of enhancements over TP 5.x, but I don't know if 
I'd want to put it out in a lab.  You can make full use of extended memory 
in your programs now by writing them for protected mode; you can write for 
Windows too.  The big problem is the size and the cost - 20 or 30 
megabytes for a full installation, and at least twice the price of TP 7.
If you do upgrade the machines, perhaps it would be a good idea to get just 
one or two copies of BP, and put TP on most of the machines.

I hope this helps.

Duncan Murdoch
dmurdoch@mast.queensu.ca
Newsgroups: comp.lang.pascal
From: sbakker@cs.vu.nl (Bakker S)
Subject: Re: Comparing record types
Organization: Fac. Wiskunde & Informatica, VU, Amsterdam
Date: Mon, 16 Nov 1992 12:56:43 GMT

jbm@hal.trl.OZ.AU (Jacques Guy) writes:

>That is indeed pretty poor, as it is quite illogical
>to be able to assign a record to another, but not
>compare them for equality!

>I tried a couple of tricks, which failed, and had to 
>turn back to the age-old trick, which alas limits you
>to records up to 256 bytes long:

>type aRecord=record x,y,z: integer end;
>     pseudoRecord=string[SizeOf(aRecord)-1];
                   ^^^^^^
>var  x,y: aRecord;
>begin x:=y;
>      if pseudoRecord(x)=pseudoRecord(y) then (*....*)

>end.

>No, I don't like it either and I'd like to hear of any
>better way too. Anyone, please?

Well, this won't work. Consider the case in which the first byte of both
records is null. The Pascal runtime compare routine will simply return equal
regardless of the rest of the record.


type aRecord=record x,y,z: integer end;
     pseudoRecord=packed array [1..SizeOf(aRecord)] of char;
		  ^^^^^^^^^^^^
var  x,y: aRecord;
begin x:=y;
      if pseudoRecord(x)=pseudoRecord(y) then (*....*)
end.

Now this *will* work, since the runtime code will compare *all* bytes (well,
at least until there's a difference). You might also make pseudoRecord a
function returning a string, with the length byte set properly (of course,
this results in terrible performance).


						Huibert & Steven.

[=============================================================================]
| Steven Bakker, Vrije Universiteit Amsterdam.				      |
| sbakker@cs.vu.nl                   					      |
[-----------------------------------------------------------------------------]
| ".. if a tree falls in the woods, and there's no one there to hear it, does |
| it fall upwards or downwards. And its corollary, if a deaf man falls in the |
| woods, does he make a sound?"						      |
|					-- Captain Rick.		      |
[=============================================================================]
From: randyd@csd4.csd.uwm.edu (Randall Elton Ding)
Newsgroups: comp.lang.pascal
Subject: Re: TPW1.0 Hex Numbers ...
Date: 23 Nov 1992 03:53:15 GMT
Organization: Computing Services Division, University of Wisconsin - Milwaukee
NNTP-Posting-Host: 129.89.7.4

procedure PrintHexNibble (n: word);
  begin
    n:= n and $F;
    case n of
      0..9   : write (n);
      $A..$F : write (chr(n-$A+ord('A')));
    end;
  end;

procedure PrintHexByte (b: word);
  begin
    PrintHexNibble (b shr 4);
    PrintHexNibble (b);
  end;

procedure PrintHexWord (w: word);
  begin
    PrintHexByte (hi(w));
    PrintHexByte (lo(w));
  end;
From: guglielmetti@elia.epfl.ch (Philippe Guglielmetti)
Newsgroups: comp.lang.pascal
Subject: Re: Comparing record types
Date: 19 Nov 92 09:24:28 GMT
Organization: IA-DME-EPFL
X-UserAgent: Nuntius v1.1.1d11
X-XXMessage-ID: <A7311D0D73017B20@iamace9.epfl.ch>
X-XXDate: Thu, 19 Nov 92 10:29:33 GMT

Now it's time to consider RECORD's as a special case of OBJECT's. Use
this concept and you can add comparison (not only equality) as a method
in your objects.
OBJECT's are now included in most Pascal Compilers and it's a logical
evolution for those of us who have been putting pointers to procedures in
their RECORD's from a long time... We actually have "Pascal++". Use it !
Sometimes I dream about operators beeing added to Pascal langage (or at
least some compilers) but then I recall my experiments with C++ and I
realize my dream is turning into a nightmare...

Goulu
              _#      **MMp     g#00   `N##0"    _agN#0P0N#           _#L
             g##       jN##    j##F     J##    _dN0"      "          g##L
           _#]##      _0 ##L  jN##F     ###   g#0"                 _03##L
          gE_j##      #  0## jF ##F    j##F  j##     ______       gE_j##L
        _0"""N##     d"  J##L0  ##F    0##   0##     "9##F"     _0"""5##L
      _gF    ]##    jF    ##0   ##F    ##F   `##k     d##     _gF    j##L
    _g#_    _j##L__g#__   ]N  _j##L_ _d##L_   `#Nh___g#N'   _g#_    _j##L_
   `""""    """""'""""'    "  """""" """"""      """""""   `""""    """"""
From: ppollet@cismibm.ibm.univ-lyon1.fr (Patrick POLLET)
Newsgroups: comp.lang.pascal
Subject: Re: TP's heap
Date: Mon, 23 Nov 1992 15:10:05 GMT
Organization: INSA
NNTP-Posting-Host: 134.214.232.25

In article <2950.2B09361C@catpe.alt.za> louis@p2.f42.n7101.z5.fidonet.org (Louis Mandelstam) writes:
>From: louis@p2.f42.n7101.z5.fidonet.org (Louis Mandelstam)
>Subject: TP's heap
>Date: 16 Nov 92 15:37:01 GMT

>Anyone have a simple way to deallocate TP's heap and then allocate it again?

>My project needs a large heap but I also need to run COMMAND.COM from the
>program.  The data in the heap can be lost during the execution, it'll be
>saved before and reloaded afterwards.

>Cheers
>The Poltergeist

>--  
>INTERNET: louis@catpe.alt.za  -  Louis Mandelstam.
>PO Box 4574, Randburg, 2125.  South Africa.
>"Even if *had* an employer, this would probably not be his opinion."

The following piece of code should do the Trick in TP6
  (cf TVDEMO.PAS demo file in TP6\TVDEMOS directory )
  Uses Memory; (* for setmemtop*)

    DoneMemory;
    SetMemTop(HeapPtr);
    SwapVectors;
    Exec(GetEnv('COMSPEC'),'/C '+ the name of the EXE,COm or BAT file to 
run);
    SwapVectors;
    SetMemTop(HeapEnd);
    Initmemory;
Xref: sparky comp.lang.pascal:6830 comp.object:4298
From: d85-jmh@dront.nada.kth.se (Jan-Olof Hendig)
Newsgroups: comp.lang.pascal,comp.object
Subject: Re: BP/TP OOP is missing something...
Date: 23 Nov 92 10:22:38 GMT
Organization: Royal Institute of Technology, Stockholm, Sweden

In article <1992Nov23.070908.141@jyu.fi> sakkinen@jyu.fi (Markku Sakkinen) writes:
>In article <1992Nov20.135804.8752@ida.liu.se> c89ponga@odalix.ida.liu.se (kand. Pontus Gagge) writes:
>> ...
>>>>I would guess that good Pascal implementation may also initialise
>>>>pointer variables to NIL so that using them before assignment
>>>>will not cause catastrophic effects.
>>
>>>On a PC in "real" mode, NIL is likely the most catastrophic value to 
>>                                                ^^^^^^^^^^^^
>>>initialize a pointer to :-).  TP doesn't initialize pointers, but at 
>>>least one TP clone (Pascal+ from Stony Brook) does.
>>
>>In case someone misses the implicit irony, let me point out the obvious:
>>the best errors are those that generate the worst cataclysms. This makes
>>them sort of hard to miss...
>
>IMO, it is a bad and unsafe Pascal compiler that does not support
>the run-time detection of dereferencing NIL, even as an option.
>I realise that such detection is too expensive on some unsophisticated
>processor architectures to be always done.
>
>----------------------------------------------------------------------
>Markku Sakkinen (sakkinen@jytko.jyu.fi)
>       SAKKINEN@FINJYU.bitnet (alternative network address)
>Department of Computer Science and Information Systems
>University of Jyvaskyla (a's with umlauts)
>PL 35
>SF-40351 Jyvaskyla (umlauts again)
>Finland
>----------------------------------------------------------------------

Being able to detect NIL pointer dereferencing is a good reason to upgrade
to BP7. You 'just have to recompile' your programs with target set to 
'Protected', and then run them. All NIL pointers that are dereferenced will
generate Runtime error 216, as will most illegal pointer operations, like
for instance using a noninitialized pointer. Protected mode has its benefits.

Jan-Olof
Newsgroups: comp.lang.pascal
From: dmurdoch@mast.queensu.ca (Duncan Murdoch)
Subject: Re: TP vs. TPW
Organization: Queen's University
Date: Thu, 19 Nov 1992 13:50:21 GMT

In article <19NOV199204230272@pavo.concordia.ca> m_rheau@pavo.concordia.ca writes:
>
>Is it just a matter of preference, or is there a significant difference
>between Turbo Pascal under DOS and Windows?

There's a fair difference between TP 6 and TPW, but TP 7 is very close to 
TPW.  The main difference is the operating system:  programming for Windows 
is very different from programming for DOS.  

Duncan Murdoch
Newsgroups: comp.lang.pascal
From: dmurdoch@mast.queensu.ca (Duncan Murdoch)
Subject: Re: BP/TP OOP is missing something...
Organization: Queen's University
Date: Tue, 17 Nov 1992 17:10:56 GMT

In article <1992Nov17.153804.21729@news.clarkson.edu> kooijman@sun.soe.clarkson.edu (Harry Kooijman,Peyt314a,3808) writes:
>Why is it that TP with objects does not have the capability to call the
>constructors when variables are declared? And when an object goes out of
>scope it should be destructed automatically. For example:
>
>Function DoSomethingWithD;
>Var D:DoubleObject(1.2);
>Begin
>  ... 
>  Do something with D
>  ...
>End; {and here D gets destructed}

This is there in TP, to a very limited extent:  you can have an initialized 
variable which is an object, and you needn't call the constructor.  It's 
initialized at program load time, not each time the variable comes into 
scope.  The destructor is never called.

I think the main reason that TP doesn't have automatic constructor/
destructor calls is because it is descended from Pascal.  In Pascal in 
general, code doesn't get executed unless you explicitly ask for it.  
Adding automatic code would be a big change to the flavour of the language.

It's pretty unlikely that Borland would make such a fundamental change
that doesn't add any power to the language.  Your code fragment is exactly 
equivalent to

 var D:DoubleObject;
 begin
   D.init(1.2);
   ...
   D.done;
 end;

Since what you want to do is already possible with nothing more than a 
couple of extra lines of code, why make a big change to the language?

Duncan Murdoch
dmurdoch@mast.queensu.ca
From: F0O@psuvm.psu.edu
Newsgroups: comp.lang.pascal
Subject: Those @#%&$ tabs in TPW!
Date: 23 Nov 92 20:36:21 GMT
Organization: Penn State University


   I read the on-line documentation for the preferences dialog box,
and it sounded like if I turned off Use tab characters and optimal
fill, I would have no tab characters in my file once it was saved to
disk.  One time I loaded the file into Word for Windows, and behold,
tab characters!
   Is there a way to save a file without any tab characters in it, or
is this a bug in TPW?

                                                            [Tim]
From: Phil.Hodges@f601.n105.z1.fidonet.org (Phil Hodges)
Newsgroups: comp.lang.pascal
Subject: tp graphics
Date: 15 Nov 92 05:09:04 GMT
Article-I.D.: therose.722079471.AA00000

NA-O>From: nowinski@watserv1.uwaterloo.ca (NOWINSKI A - OPTOMETRY )
    >Newsgroups: comp.lang.pascal

NA-O>Subject : Help needed for Graphics in Turbo Pascal 6.

NA-O>Hi,

NA-O>1) I want a picture that has the PCX or GIF extension to show up
    >   on my graphics screen, and in any screen resolution I want
    >   i.e. (320x200x256, 640x480x16 etc). I also want the
    >   picture to show up in a flash, instead of a slow fade.


    Well, I can probably help you here. I have some public domain source
code that will read CGA, EGA, VGA and 256 MCGA PCX files in a flash,
requiring no external .BGI files whatsoever. Thing is, I haven't had
much success converting it to a procedure, which I really need to do.
I'm new to this "newsgroup," so I don't know if uuencoding is allowed,
or what. I can post the source for the PCX unit, as well as the simple
code used to load the picture.
    Maybe someone can figure out how to make it work as a procedure
or function? I'm pretty new to TP, but am loving it more and more every
day!

 * SLMR 2.1a * TOE - A device for finding furniture in the dark.
Newsgroups: comp.lang.pascal
From: npstewar@eos.ncsu.edu (NATHAN PHILLIP STEWART)
Subject: Pointers to functions w/o Turbo
Originator: npstewar@c00720-239rd.eos.ncsu.edu
Reply-To: npstewar@eos.ncsu.edu (NATHAN PHILLIP STEWART)
Organization: North Carolina State University, Project Eos
Date: Fri, 20 Nov 1992 15:56:06 GMT


I've seen the thread about doing this in turbo, but I couldn't get my problem to
work even in TP6.0, and I'd like to do this on DEC's pascal.  I tried to set up
a function Simps1_3(a,b:real;functionpoint:sometype):real; to integrate Function
Bob(a:real):real; and Function Fred(a:real):real; by Simpson's 1/3 rule.

The other thread dealt with this using objects, which aren't supported by this
pascal (to my knowledge), and the other way tried to hide its use of pointers,
but hid it's concept from me as well.

1) How do I find the address of function Bob?  Or howbout system functions like
cos(x)?

2) Can I pass the pointer directly like this?
	Procedure Something;
	...
	begin
	   Al:=Simps1_3(0,Td,@Bob);
	end;

3) Why didn't I learn C in the first place? :-)

npstewar@eos.ncsu.edu
Nathan Stewart
Newsgroups: comp.lang.pascal