HDTenEightyP/NetNews huggingface dataset:
From: vanney.raphael@lill.frmug.fr.mugnet.org (Vanney Raphael)
Newsgroups: comp.lang.pascal
Subject: I/O REDIRECTION IN A TURB
Date: 23 Dec 92 00:35:00 GMT
Reply-To: vanney.raphael@lill.frmug.fr.mugnet.org (Vanney Raphael)
Organization: Li'LL BBS - Paris, France

SD>  My questions are :

SD>    1. Does somebody know how TP I/O is implemented (or where on
SD>       the net such information may be found) ?

SD>    2. Is there a more or less elegant (and reliable) way to redirect
SD>       I/O that will work BOTH for TurboPascal and DOS ?

TP's IO handling is done fully via DOS, so what DOS redirects, TP
redirects... Except for screen I/O, if you use the CRT unit.
In this case, you have to do

Assign(OutPut, '') ;
ReWrite(OutPut) ;
Assign(InPut, '') ;
ReSet(InPut) ;

to restore DOS and TP's std input/output files' link.

Alp,                                              Raphael.

 * OLX 2.1 TD * Ain't got anything serious to write here ?
--- FMail 0.92
 * Origin: ICEBERG - La Garenne * FRANCE * Tel:(33)-1-47699261 (2:320/1)
From: roth@oasys.dt.navy.mil (Pete Roth)
Newsgroups: comp.lang.pascal
Subject: Polymorphic Poser
Date: 30 Dec 92 18:51:06 GMT
Reply-To: roth@oasys.dt.navy.mil (Pete Roth)
Organization: The David Taylor Model Basin

I must have left my brain home...

What I want to do is shown in the example code below. In words:
Given the pointer to a derived object P,
and Q declared as a pointer to an ancestor object type,
HOW DO I INSTANTIATE Q AS A CLONE OF P ???????

Going crazy...
-----Cut-here--------Cut-here--------Cut-here--------Cut-here-------Cut-here----
uses Objects;

type
 PBase = ^TBase;
 TBase = object(TObject)
   constructor Init;
   constructor Clone( B : TBase ) ;
   function    IsA : STRING ; VIRTUAL ;
 end;

 PDerived = ^TDerived;
 TDerived = object(TBase)
   constructor Init;
   constructor Clone( D : TDerived ) ;
   function    IsA : STRING ; VIRTUAL ;
 end;

constructor TBase.Init;
begin
 inherited Init;
end;

constructor TBase.Clone( B : TBase ) ;
   begin
      Self := B ;
   end ;

function TBase.IsA : STRING ;
   begin
      IsA := 'TBase'
   end ;

constructor TDerived.Init;
begin
 if not inherited Init then
   Fail;
end;

constructor TDerived.Clone( D : TDerived ) ;
   begin
      Self := D ;
   end ;

function TDerived.IsA : STRING ;
   begin
      IsA := 'TDerived'
   end ;

var
 P, Q, R: PBase ;
begin
   P := New(PDerived, Init);
   if P <> nil then begin
     Writeln( 'P is a ', P^.IsA ) ;
	 { how do I write a statement that instantiates Q as a PDerived
	   without specifying that TYPE, and without typecasting the Clone
	   method ? For example: }
     Q := New( PDerived, Clone( PDerived(P)^ )) ;
     Writeln( 'Q is a ', Q^.IsA ) ;
	 { works, but what I really want is something like
        R := New( X, Clone( P^ )) ;
       I've tried
        R := New( TypeOf(P^) , Clone( P^ )) ;
	   etc. What am I forgetting ?
	 }
   end ;
end.
-----Cut-here--------Cut-here--------Cut-here--------Cut-here-------Cut-here----

Grace & peace, pete
- - - - - - - - - - - - - - - - - - - - - - - - - -
Peter N Roth      roth@oasys.dt.navy.mil
Do what you can with what you have where you are. - D L Moody.
From: vanney.raphael@lill.frmug.fr.mugnet.org (Vanney Raphael)
Newsgroups: comp.lang.pascal
Subject: BRAINS REQUIRED HERE PLEA
Date: 23 Dec 92 21:43:00 GMT
Reply-To: vanney.raphael@lill.frmug.fr.mugnet.org (Vanney Raphael)
Organization: Li'LL BBS - Paris, France

Hello !

MC>Okay all you intelligent, wonderful, experts out there....,

Hey, did we happen to meet before ?

MC>why is it that
MC>when I add more than one record in this procedure, the value of Index
:= 0
MC>and then another procedure states, out of Range.....error when I try
MC>to access it.

Make sure the GLOBAL version of your Index variable is initialized...

MC>procedure add_a_record(Movies : Collection; Index : Integer);

Looks like your "Index" parameter is passed by value, not by address ;
hence,
any modification made down here do not affect the global variable, but
only
the copy created by the compiler for the procedure's use.
Try changing to :

MC>Procedure Add_a_Record(Movies : Collection; Var Index : Integer) ;

Merry Christmas,

Alp,                                              Raphael.

 * OLX 2.1 TD * On dirait que mon olmr fonctionne, non ?
--- FMail 0.92
 * Origin: ICEBERG - La Garenne * FRANCE * Tel:(33)-1-47699261 (2:320/1)
From: sweh@spuddy.uucp (Stephen Harris)
Newsgroups: comp.lang.pascal
Subject: Re: Hash Coding Revisited -- need prime number generator
Date: 2 Jan 93 23:47:04 GMT
Organization: Spuddy's Public Usenet Domain

In article <725883589snx@babel.DIALix.oz.au> del@babel.DIALix.oz.au (D Elson) writes:
>Sorry, I couldn't resist this one ...

Ditto...
>Proof (from a mathematician ...) 3 is prime, 5 is prime, 7 is prime,
>    therefore it is true by induction.
>
>Proof (from an engineer ...) 3 is prime, 5 is prime, 7 is prime, 9 is
>    an error of measurement, 11 is prime, ...

From memory....

Proof (from a physicist...) 1 is prime, 2 is prime, 3 is prime, 4 is prime,
    5 is prime, 6 is prime....

Proof (from a compsci...) 1 is prime, 1 is prime, 1 is prime, 1 is prime...

No doubt there are many variations on this theme :-)
-- 

                               Stephen Harris
               sweh@spuddy.uucp    ...!uknet!axion!spuddy!sweh

 * Meeeeow ! Call Spud the Cat on > +44 203 638780 < for free Usenet access *
Newsgroups: comp.lang.pascal
From: s2942275@techst02.technion.ac.il (Yaniv Golan)
Subject: Distributing TPUs
Reply-To: s2942275@techst02.technion.ac.il (Yaniv Golan)
Organization: Technion
Date: Mon, 21 Dec 1992 13:54:20 GMT

I've got a question, and it might be a stupid question...

I want to distribute a TP unit which uses a second unit. I do not want
to distribute the second unit with it, only the first TPU. Can it be done ?

Now the reason the question might be stupid, is that I've already done it 
once. But i tried it now, and to my surprise, when trying to compile a 
program using my unit without the other one being present, the compiler
produced an error message stating it can't find the used unit.

Maybe an example would be in place to clarify what I mean :

Unit A;
INTERFACE
procedure x;
IMPLEMENTATION
procedure x;
begin
  .
  .
end;

END.

------

Unit B;
INTERFACE
procedure y;
IMPLEMENTATION
Uses A;
procedure y;
begin
  .
  .
  x;
  .
end;

END.

And now, when i try to compile the following program :

program z;
uses B;
begin
  y;
end.


with only B.TPU in my path, the compiler says it can't find A.PAS...

What am i doing wrong? Or maybe it is impossible to do it?

Thanks,

Yaniv Golan
-- 
E-Mail : s2942275@techst02.technion.ac.il
From: enge@almaden.ibm.com
Date: Sat, 2 Jan 93 23:26:35 PST
Newsgroups: comp.lang.pascal
Subject: DPMI TSR calls
News-Software: UReply 3.1

I need to call a TSR from a protected mode TP7 program.  Unfortunately,
the RTL does not want to translate ES from a selector to a real segment
value even though I specifically allocated the area below the 640K line.

Are there any DPMI experts out there who can give me the proper INT 31H
call and parameters?  My reading says its probably the 300H action code
but I don't know what the registers should contain.

Any help would be appreciated.

Roy
Newsgroups: comp.lang.pascal
From: dmurdoch@mast.queensu.ca (Duncan Murdoch)
Subject: Bug testers wanted
Organization: Queen's University
Date: Sat, 2 Jan 1993 15:45:41 GMT

BP 7 uses the 386 registers for faster computations, but some systems have
buggy system software (e.g. from Novell) that trashes them.  On those systems
longint calculations in BP 7 aren't safe.  You can tell if your system has 
the problem by compiling and running the following program; if you've got the
buggy software, it'll print errors every now and then (a few times a minute,
probably).

uses crt;
var X,Y,Z : LongInt;

begin
  while not keypressed do begin
    X := 20;
    Y := 30;
    Z := X * Y;
    if Z <> 600 then Writeln(Z);
  end;
end;

I've written a TSR that should fix this problem, but I don't have the buggy 
software to try it under.  Could anyone who gets errors from the program 
above and is willing to test my fix please let me know, and I'll send a copy 
of my program?

Thanks in advance.

Duncan Murdoch
dmurdoch@mast.queensu.ca
Newsgroups: comp.lang.pascal
From: pribik@aix.rpi.edu (Kristen Anne Pribis)
Subject: BP7 and Turbovision Questions
Organization: Rensselaer Polytechnic Institute, Troy NY
Date: Tue, 29 Dec 1992 15:47:20 GMT

The last time I programmed in Pascal I used TP 4.0.  I recently 
received BP 7.0 and am absolutely amazed at its capabilities.  
I am slowly working my way through Turbo Vision, and have a 
question.  I would like a data entry window to be opened as 
soon as the program starts, asking for the user to swipe a 
credit card through a card reader (simulates keyboard input).  
If the card is swiped through (the string ends with '?'), I 
want to run a routine without the user having to hit enter or 
any key.  If the user presses F3, instead of swiping the card, 
I would like to run another routine for manual entry.

1) Where should I place the first window procedure?  In the 
Application Init constructor?  Or can I simulate an event and
pass the simulated event (such as cmOpenInitWindow or 
something) to the HandleEvent procedure?

2) How can I scan a data entry field for a '?' and then end data 
entry once it receives the '?'?

3) If I'm scanning for a '?', can I still capture an F3 to run a 
different routing?

The following is an example of a credit card swipe, but imagine 
it all on a single line:

%B5123456789012345^SMITH/JOE^951110112102OP/0000000000000000?

The ^9511 is the expiration date - 11/95.  The first string of 
numbers is the credit card number.

Any sample code would be greatly appreciated.
Replies can be posted here, but preferably mailed to me at
pribik@rpi.edu.  Thanks in advance, and to all of those who
helped me with my async communications questions.
Newsgroups: comp.lang.pascal
From: dmurdoch@mast.queensu.ca (Duncan Murdoch)
Subject: Re: powers in TURBO pascal
Organization: Queen's University
Date: Thu, 31 Dec 1992 17:34:43 GMT

In article <1992Dec31.122326.7404@qiclab.scn.rain.com> leonard@qiclab.scn.rain.com (Leonard Erickson) writes:
>There *isn't* a power operator in Turbo Pascal. You see, Pascal as defined
>in the standard has no such operator. So it would be an extension of
>the standard, and they chose not to do it. 

Yes, Borland has always been very fastidious about sticking to the standard.
Not! :-) 

Happy New Year!

Duncan Murdoch
dmurdoch@mast.queensu.ca
From: fryman@webb.psych.ufl.edu (J. B. Fryman)
Newsgroups: comp.lang.pascal
Subject: Windows Programming and Timer Resolution question.
Summary: Windows prohibits timer resolution beyond 1/100 second?
Keywords: windows timer question time
Date: 21 Dec 92 21:37:45 GMT
Organization: Univ. of Florida, Psychology Dept.

DISCLAIMER: My apologies if this wound up on the net 3 (!) times. I had to
	go figure out what was wrong with the system news service before it
	would accept a post.

Greetings,

	I am in the process of writing various experimental software programs
for the University of Florida and have run into an interesting situation. I'm
writing the program to run under Windows, and am using BP7, although I have
access to all previous versions of TP and TPW.

	The problem is this: I need better than 1/100 second resolution under
Windows. Any suggestions? Has anyone gotten around this accurately? Or am I
just stupid?

	Some background: Windows (for those of you who would just tell me to
displace the timer interrupt code) is a time-slice "multitasking" (snicker)
system. It takes control of the timer, reprograms it for 1/100 second
resolution, and doesn't act very kindly when you try to change that. At least,
that's as far as I've tried doing this.
	I have written routines that work fine under DOS only environments to
about 10 nanosecond resolution. Even running these under a Dos-Shell will
cause windows serious distress, and running it in a "window" is an absolute
no-no.
	The only (which are indirect) references I have to timer control under
Windows tell you how to perform 1/100 second timers. Windows itself will let
you set the time-slice in "milliseconds" in the SYSTEM.INI file. Other than
that, I have no references. Also, I don't have any of those (but wish I did)
super-thick Windows Tech Ref manuals of any nature -- just the Docs that came
with BP7 and TPW, plus some misc. old PC systems programming manuals.

		Thanks for any help,
					Josh

PS: For those who can't think of applications that need micro second resolution
	for beyond a few minutes, I need that resolution for _hours_. Ick.

--------------------------------------------------------------------------------
J. B. Fryman	      					   fryman@psych.ufl.edu
University of Florida						 fryman@ufl.edu
Department of Psychology
From: tcscs!zeta@src.honeywell.com (Gregory Youngblood)
Newsgroups: comp.lang.pascal
Subject: How do I work in a lantastic network with share running? 
Date: Tue, 29 Dec 92 20:03:48 CST
Reply-To: zeta%tcscs@src.honeywell.com
Organization: TCS Consulting Services

At work I use a lantastic network.  So far things haven't been too bad.
I have a problem though.  Earlier today for the first time, one of my 
programs tried to access a file in use by someone else and my program
terminated with Run Time Error {I know I know..these were prototypes
and didn't have the overhead of error trapping in them yet}.  

I was thinking there was  a way to work with share.  The other programs
in basic (PDS) work with it.   Are there any tricks or hints anyone 
can give me?  I'd appreciate it.

Thanks in advance for any help you can give me.
Greg



.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.
.   TCS Consulting Services   P.O. Box 600008   St. Paul, MN  55106-0008    .
.   ..!srcsip!tcscs!zeta                 ..!src.honeywell.com!tcscs!zeta    .
.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.-=-.
From: beyer@coco.ihi.ku.dk (Georg Beyer Clausen)
Newsgroups: comp.lang.pascal
Subject: METAWINDOWS fonts and TP
Date: 23 Dec 92 02:10:31 GMT

Hi!

I am looking for informations how to use MetaWindows fonts in Turbo Pascal
programs.


Thanks for any help!

Merry X-mas and a happy New Year to all!

Greetings

Georg

---
a student at the University of Copenhagen, Denmark
E-mail:  beyer@coco.ihi.ku.dk
Newsgroups: comp.lang.pascal
From: dmurdoch@mast.queensu.ca (Duncan Murdoch)
Subject: BP 7 bug list 
Organization: Queen's University
Date: Thu, 24 Dec 1992 05:35:18 GMT

I've decided to try to continue my unofficial bug list with the DOS parts of
BP 7.  I've checked a lot of the TP 6 bugs in the new version; besides the
leftovers, I've come up with 11 new ones.  If you know of any others than
the ones below, please let me know.  In a few days or so, I'll put together
a full list that includes all fixes and patches, and send it out to garbo.

Duncan Murdoch
dmurdoch@mast.queensu.ca

(Old leftover bugs have been omitted here.)

28. Coprocessor errors are reported with the address normalized, but the
IDE can't find source lines with errors specified that way.  Use the
command line compilers with /F ssss:oooo to find them.

29. On a 386, a longint shift of 16 bits or more is unreliable. (A fix
is available in NEWSHR.FIX.)

30. On a 386, interrupt routines must save the extended registers EAX
through to EDX or risk corrupting longint calculations.

31. On a 386, longint calculations are unreliable in environments (like
certain Novell netware versions) which don't preserve the extended
registers. (The only "fix" to BP is to turn off 386 operations by
executing Test8086=0 at the start of your program, if you can't get the
buggy netware fixed.)

32. The DisposeNode procedure in the Outline unit neglects to dispose of
the Text string. (A fix is available in OUTLINE.FIX.)

33. Overflow checking $Q+ sometimes misses overflows in operations on
bytes.

34. The file dialog in STDDLG.PAS messes up directory changes.  (A fix
is available in FILEDIAL.FIX.)

35. Spurious compiler arithmetic overflow errors are generated in
constant expressions containing products of negative numbers with zero.

36. If a running program changes a file that's currently loaded in the
IDE, when you exit you'll lose the IDE version no matter how you answer
the dialog about which version to keep.

37. The expression "Word(hi(wordvar))" doesn't zero-extend the high byte
of wordvar to give a word, it gives the word from memory starting at the
location of the high byte of wordvar, i.e. the high byte plus the low
byte of the next variable.

38. With the extended syntax $X+, asciiz character arrays that are
fields in records passed as const parameters aren't handled properly by
Writeln.  (This bug report clearly needs some work!)
Newsgroups: comp.lang.pascal
From: leonard@qiclab.scn.rain.com (Leonard Erickson)
Subject: Re: Distributing TPUs
Reply-To: Leonard.Erickson@f51.n105.z1.fidonet.org
Organization: SCN Research/Qic Laboratories of Tigard, Oregon.
Date: Thu, 31 Dec 1992 12:16:45 GMT

trodgers@nmsu.edu (Thomas Rodgers) writes:

>dmurdoch@mast.queensu.ca writes :
>> It's a trade-off.  .TPU files contain some optimizations that make
>> compiling and linking go much faster than ic could with .OBJ files; 
>> these mean upward compatibility is essentially impossible.

>Hmmm...Having used Borland's C++ product as well as their pascal
>product, I think I would rather put up with slightly slower compile times
>to get the ability to use .OBJ files, for several reasons.  Borland's
>C++ product is not that slow of a compiler, the biggest slowdown comes
>from compiling all of those <.h> files, but you can pre-compile the
>headers (not the greatest solution, but it works).  Borland could go a
>similar route with the Pascal units.

Well, TPU files have a *big* advantage over OBJ and LIB files in one
area. If I only use *one* function or procedure from a TPU, only the
code required for *that* is incorporated in the final EXE. Ditto for
constants defined in the TPU. Only the ones that get *used* are incorporated.

-- 
Leonard Erickson		      leonard@qiclab.scn.rain.com
CIS: [70465,203]			 70465.203@compuserve.com
FIDO:   1:105/51	 Leonard.Erickson@f51.n105.z1.fidonet.org
(The CIS & Fido addresses are preferred)
From: sweh@spuddy.uucp (Stephen Harris)
Newsgroups: comp.lang.pascal
Subject: Re: BP 7.0
Date: 19 Dec 92 13:28:18 GMT
Organization: Spuddy's Public Usenet Domain

In article <1992Dec15.132615.29226@welchgate.welch.jhu.edu> francois@welchgate.welch.jhu.edu (Francois Schiettecatte) writes:
>I have a couple of questions about BP 7.0, I understand that 
>it will compile programs so that they can run in protected
>mode ( thus accessing memory above the 1Mb line ). If this 

Correct.  BP7 comes with a DPMI server (if needed) that can be
distributed royalty free with your BP7 program.

>is the case, then do they do away with the 64K segment limit,

Ha!  I wish they had...:-(
You still can not define arrays to span over 64Kb :-(
Array subscripts are still words :-(

>I need to be able to extend my data segment beyond the 64K limit
>and I dont want to do a lot of rewritting of code. Currently
>I use TP 6.0 and I am limited to 64K segments, but I can only
>run in real mode.

I posted a similar question in comp.os.msdos.programmer, and the answer I
got was either muck around with selectors (see the BP7 manuals), or 
use the same cheat methods as are needed for real mode :-(

If someone can show me wrong, I would be very very grateful!

It does seem silly that you can run in Protected mode, but still have this
64Kb limit :-(  This sort of abstraction should IMHO be handled by the
compiler.  Oh well.

-- 

                               Stephen Harris
               sweh@spuddy.uucp    ...!uknet!axion!spuddy!sweh

 * Meeeeow ! Call Spud the Cat on > +44 203 638780 < for free Usenet access *
Newsgroups: comp.lang.pascal
From: ts@uwasa.fi (Timo Salmi)
Subject: Pascal+ vs TP and OBJs
Organization: University of Vaasa, Finland
Date: Thu, 24 Dec 1992 04:44:13 GMT

I have two questions about Stony Brook's Pascal+ (Duncan?).

1) Does in make tighter and faster code than Turbo Pascal version
7.0?

2) Will it produce code that can be linked to any Turbo Pascal
version.  That is could I replace my TPU collection with OBJs?

(Please post your replys since there might be general interest).

..................................................................
Prof. Timo Salmi      Co-moderator of comp.archives.msdos.announce
Moderating at garbo.uwasa.fi anonymous FTP archives 128.214.87.1
Faculty of Accounting & Industrial Management; University of Vaasa
Internet: ts@uwasa.fi Bitnet: salmi@finfun   ; SF-65101, Finland
Newsgroups: comp.lang.pascal
From: pf@bilbo.bio.purdue.edu (Paul Furbacher)
Subject: Re: TVision : BUG in my head or in TV?
Organization: Purdue University
Distribution: comp.lang.pascal
Date: Thu, 31 Dec 1992 04:35:38 GMT


Step wrote:
> >What happens is this : I found out (after many bugs with this), that
> >EndOfStatic (my before-adding-spaces-to-AText-length) is set to 0
> >after the call to TStaticText.Init!  Why is this so?

 Duncan Murdoch wrote in response:
> This is a nasty surprise designed into TurboVision.  TObject.Init zeroes out 
> all fields of any descendant.  It's not done that way in OWL, and shouldn't 
> be in TurboVision, but Borland won't change it now because they're afraid of 
> breaking existing code.

I'm sometimes slow to pick up on why some things are 
problems.  There are pieces of advice here and there in 
the manual that the fields are set to zero, and that one
should not set any field before calling the ancestor's 
Init() method.  As long as one follows that prescription,
no problems are encountered.  

Please give me an example of why one would have to set a 
field *before* calling the ancestral Init().  It seems to
me to be unlikely that this would be necessary in 99.9999999%
of all cases. (I would have added a few more 'nines' but 
the nine key broke.  Don't use toooo much of a gooooood thing.)

Seriously, if you have to do something with the value of 
a parameter passed to Init(), you could save it to a local 
variable, manipulate it, call the ancestor, and then set 
the field.  Or something like that.

PF



Newsgroups: comp.lang.pascal
From: ts@uwasa.fi (Timo Salmi)
Subject: Re: Determining drive type
Organization: University of Vaasa, Finland
Date: Tue, 22 Dec 1992 21:34:26 GMT

In article <34785@adm.brl.mil> BAKERRE@awc1.eglin.af.mil (Baker, Robert E.) writes:
>	Also, I'm looking for a quick and dirty method for determining the    
>last drive installed on a system rather than depending upon the LASTDRIVE     
>environment variable.

Test the exisistence of the root directory of each drive [C,D,E,...]
until not found. 

Some additional paraphernalia:

  LASTDRFN Get last drive of the system, softcoded, not XTs
  ISDIRFN  Is a name a directory or not (not for DRDOS)
  ISDIR2FN Is a name a directory or not, alternative method

Maybe also of interest:
  ACTDRVFN Which floppy drive is active on a one drive system
  DRIVESFN Number of diskette drives on the system
  DSKCNTFN Get the number of disk devices (MsDos 3.0+)
  FDRIVEFN The name of the first diskette drive on the system
  FIXEDFN  Is a drive a fixed disk or not
  FLOPSTFN Floppy disk status. Is it present and formatted.
  INDRIVFN Is a media present in the given drive
  ISUBSTFN Is a drive a substituted drive (MsDos 3.1+)
  MEDIAFN  What kind of a disk media is present in a drive

  99367 Nov  8 19:13 garbo.uwasa.fi:/pc/ts/tspa3140.zip
 101110 Nov  8 19:13 garbo.uwasa.fi:/pc/ts/tspa3150.zip
 103186 Nov  8 19:13 garbo.uwasa.fi:/pc/ts/tspa3155.zip
 103345 Nov  8 19:13 garbo.uwasa.fi:/pc/ts/tspa3160.zip

   All the best, Timo

..................................................................
Prof. Timo Salmi      Co-moderator of comp.archives.msdos.announce
Moderating at garbo.uwasa.fi anonymous FTP archives 128.214.87.1
Faculty of Accounting & Industrial Management; University of Vaasa
Internet: ts@uwasa.fi Bitnet: salmi@finfun   ; SF-65101, Finland
Newsgroups: comp.lang.pascal