HDTenEightyP/NetNews huggingface dataset:
Date: Saturday, 2 January 1993 19:03:59 MST
X-Mailer: TMail version 1.15R
From: "D. C. Sessions" <dcs@witsend.tnet.com>
Organization: Nobody but me -- really
Subject: Re: TVision : BUG in my head or in TV?
Newsgroups: comp.lang.pascal
Distribution: world

In <01JAN93.18333440.0031@music.mus.polymtl.ca>, CT80@music.mus.polymtl.ca (Steph)  wrote:
# 
# In article <765343d37755t218@witsend.uucp> "D. C. Sessions" <dcs@witsend.tnet.com> writes:
# >In <30DEC92.02825818.0033@music.mus.polymtl.ca>, CT80@music.mus.polymtl.ca (Steph)  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?
# >
# >  TObject.Init zeros out the object in question.  Therefore, any
# >  initialization you do prior to a call to the ancestral Init
# >  procedure is wasted.

# Someone else mentioned it before.  I don't know why/how it does it,
# but I programmed around it and now it works.  Sheesh, and I thought
# I didn't need people forcing me to do spaghetti.

  Actually, it makes considerable sense.  The runtime checks
  recognize a 0000:0000 pointer as invalid, so if you fail to
  initialize pointer fields you'll get caught.  Handy.  Much
  as I hate to admit it, I made that error on numerous
  occasions when writing TMail, so OF COURSE I'll defend
  Borland on this one!

  BTW, the workaround is pretty simple.  Just place your constant
  fields together & copy a constant into them.  Works for me.


--- D. C. Sessions                            Speaking for myself ---
--- Note new network address:                dcs@witsend.tnet.com ---
--- Author (and everything else!) of TMail  (DOS mail/news shell) ---
Newsgroups: comp.lang.pascal
From: dmurdoch@mast.queensu.ca (Duncan Murdoch)
Subject: Re: Calling DLL Procs via pointer.
Keywords: Pascal DLL Assembly
Organization: Queen's University
Distribution: usa
Date: Wed, 23 Dec 1992 02:51:29 GMT

In article <1h8diqINN64q@agate.berkeley.edu> matte@plutonium.CChem.Berkeley.EDU (Matt Rose) writes:

>Except that the BP manuals tell me there is no provision for making a
>call to a procedure that I have a pointer to.  

I don't think they say that, because there is:  procedural variables are 
just pointers to procedures.  There are limits on what you can do with them; 
you'll need absolute declarations or Move to convert a pointer to a 
procedural variable rather than typecasts, but it's not really that hard.

For example:

  type
    myproc : procedure(i:integer);
  var
    ptr : pointer;
    proc: myproc absolute ptr;
  begin
    ptr := GetProcAddress(...);  { get the address }
    proc(i);			 { call it }
  end.

Duncan Murdoch
Newsgroups: comp.lang.pascal
From: gyl.midroni@rose.com (gyl midroni)
Subject: debugging in BPW
Organization: Rose Media Inc, Toronto, Ontario.
Date: Wed, 30 Dec 1992 06:29:32 GMT
X-Gated-By: Usenet <==> RoseMail Gateway (v1.70)


Date Entered: 12-30-92 01:19
Can someone explain to me why BPW does NOT have an equivalent of the 
quick and dirty debugging that BP has in the IDE?
    I know that for serious debugging, you need the full debugger. 
However, most often it is only necessary to watch a few variables and 
set a few breakpoints, especially if you don't code in ASM.  It is a 
major pain to switch to the full debugger in windows.   
    First, it requires a recompile, which takes time. 
    Second, it completely eliminates access to the rest of Windows, 
    Third, it is relatively unstable.  Many a time I have had bugs 
that have crashed the debugger without any error messages, requiring a 
cold boot (RESET, not control-alt-del).  And yet, these programs ran 
just fine in Windows.
    Does anyone else agree with me?
    It is worth talking to Borland about putting some rudimentary 
debugging into the Windows IDE?

        Gyl   gyl.midroni@rose.com 
---
   RR 1.60 R001881
   RM 2.00 : RoseNet<=>Usenet Gateway : Rose Media 416-733-2285
From: evsikov@lcta5.jinr.dubna.su (Igor Evsikov)
Newsgroups: comp.lang.pascal
Subject: Re: GRAPHIC MOUSE CURSOR IN Text mode
Date: Wed, 30 Dec 92 02:00:43 +0300
Distribution: world
Organization: Lcta
Reply-To: evsikov@lcta5.jinr.dubna.su

>vanney.raphael@lill.frmug.fr.mugnet.org (Vanney Raphael) writes:

>>I extremely highly suspect this is, say, easily, done by dynamically
>>(i.e.
>>whenever you move the mouse) redefining the character set :
>>When showing the mouse, replace the (up to) four characters (partially)
>>covered by the mouse cursor by, say     #255 #254
>>                                        #253 #252
>>then redefine the characters #252 to #255 to display... those characters
>>that where under the mouse... PLUS a mouse cursor !
>>That of course implies that you've got no other #252..#255 characters on
>>the screen (try #0..#3).
>>If you have never seen one thousand of mouse cursors moving
>>simultaneously
>>on your screen, just try to edit a binary file with PC-Tools 7....!!!
>
>You overlook the fact that in text mode, you can have 8 or so character
>sets available for use. Pick the highests numbered one and define your
>mouse cursor characters *there*. That way, since the default font is
>what gets picked for everything else, you can get away with all kinds
>of things.
>Leonard Erickson                     leonard@qiclab.scn.rain.com

This not easy. You must:

  1) Save old image 4 characters under cursor
  2) Get image characters under cursor
  3) Use miky Intr($33,$0b) for cursor position
  4) Restore old rectangle if mouse position changed
  5) CharImage OR ArrowImage in rectangle
  6) Put new Image to 2 layer video RAM
  7) Write new characters to cursor position
  8) and not all ...

I wrote TPU (see SIMTEL: <MSDOS.TURBOPAS>RMOUSE11.ZIP) which it do.
Igor
evsikov@lcta5.jinr.dubna.su
From: berend@contrast.wlink.nl (Berend de Boer)
Newsgroups: comp.lang.pascal
Subject: Calling Local Procedures - Problems
Date: Wed, 23 Dec 1992 08:17:36

Jeff Byrne wrote in a message to All:

 JB> Procedure TestObj.ForEach (Proc : LocalMethodType);
 JB> Var
 JB>   Count : Integer;
 JB> begin
 JB>   For Count := 1 to 10 do
 JB>     begin
 JB>       Proc (@Test);  { These would be different instances of
 JB> the object }     end;
 JB> end;

Hai Jeff,

I saw your question had already been answered. But here follows the ForEach
method Borland uses. It should work (although untested): 


procedure TList.ForEach(Action : pointer);
var
  Count : integer;
begin
  for Count := 1 to 10 do  begin
    asm
      les  di,Test
      push es
      push di
      push word ptr [bp]
      call dword ptr Action
    end;
  end;  { of for Count }
end;


Groetjes,

Berend. (-:
fido: 2:281/527.23
email: berend@contrast.wlink.nl

Newsgroups: comp.lang.pascal
From: mtchris@srv.PacBell.COM (Mitch Christensen)
Subject:  Public Domain Pascal Compiler for Sparc II
Reply-To: mtchris@srv.PacBell.COM
Organization: Pacific * Bell
Date: Wed, 23 Dec 1992 19:59:33 GMT


I'm taking a course next semester and would like to spend the least amount of time possible
in the lab.

Anybody know if GNU or anyone else has one.

Thanks in advance.


-----------------------------------------------------------------------------
Mitchell T Christensen
Staff Analyst
Pacific*Bell
mtchris@pacbell.COM
(510) 823-2413
-----------------------------------------------------------------------------

Newsgroups: comp.lang.pascal
From: nowinski@sciborg.uwaterloo.ca (Andrew Nowinski)
Subject: TSR Problem
Organization: University of Waterloo
Date: Tue, 22 Dec 1992 13:55:22 GMT


Hi,
   my name is Jack Nowinski. I have a VGA to NTSC converter. I am
trying to write my own TSR program in TP 6 to work with the
external box. I am not used to programming in this field so if
someone who knows something about this could write.

I want my program to convert from VGA to NTSC.
I would also like it to overscan the graphics screen vertically
and horizontally so when I record it, it will be full screen on
TV.

Thanks.


--
Jack Nowinski
E-Mail: nowinski@sciborg.uwaterloo.ca
Newsgroups: comp.lang.pascal
Subject: Unzipping algorithm wanted...
From: nimcompu@oneb.almanac.bc.ca
Date: Tue, 29 Dec 92 11:46:03 PST
Organization: The Old Frog's Almanac, Nanaimo, B.C.

Does anyone have an unzipping algorithm that they could send to me?  I would 
like it in Pascal but C is OK.  Thanks in advance.


           nimcompu@oneb.almanac.bc.ca (Eric van Wiltenburg)
     The Old Frog's Almanac  (Home of The Almanac UNIX Users Group)    
(604) 245-3205 (v32)    <Public Access UseNet>    (604) 245-4366 (2400x4)
        Vancouver Island, British Columbia    Waffle XENIX 1.64  
Newsgroups: comp.lang.pascal
From: dmurdoch@mast.queensu.ca (Duncan Murdoch)
Subject: Re: Distributing TPUs
Organization: Queen's University
Date: Sat, 26 Dec 1992 13:52:58 GMT

In article <1992Dec26.124053.23373@beaver.cs.washington.edu> andrewb@lynx.cs.washington.edu (Andrew Berg) writes:

>This really isn't a big deal when you consider that there are really only 3
>versions of TP to distribute for.

If you're willing to limit yourself to DOS, there are 4 in common use now:
TP 5.5, 6.0, 7.0 and 7.0 protected mode.  If you want your code to be 
available to people programming for Windows, there are two more (TPW 1.5 and
BP 7.0 windows mode).  These are the common ones; there are also a few other 
people using other versions because of budget limitations or other special 
reasons.

Then there are the persistent rumours of 32 bit versions of TP coming out 
sometime next year - your old .TPU files would certainly be incompatible 
with those.

I don't think it's feasible any more to include enough .TPU files to cover 
a majority of the market.

Duncan Murdoch
dmurdoch@mast.queensu.ca
From: BAKERRE@awc1.eglin.af.mil (Baker, Robert E.)
Newsgroups: comp.lang.pascal
Subject: Determining drive type
Date: 22 Dec 92 15:50:40 GMT


	Does anyone have any ideas (or code) for determining whether a drive
is a Hard drive, RAM drive, Floppy, Bernoulli, or otherwise?  
	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.
	Any help or ideas would be appreciated.  

ADVThanksANCE,
Bob
BAKERRE@TAWC1.EGLIN.AF.MIL
Date: Saturday, 26 December 1992 23:13:17 MST
X-Mailer: TMail version 1.15R
From: "D. C. Sessions" <dcs@witsend.tnet.com>
Organization: Nobody but me -- really
Subject: Re: Distributing TPUs
Newsgroups: comp.lang.pascal
Distribution: world

In <1992Dec27.022633.14853@beaver.cs.washington.edu>, andrewb@lynx.cs.washington.edu (Andrew Berg)  wrote:
# 
# Does anyone know what the motivation for not ever having any backward com-
# patibility between any of the TPU formats?  It seems like it would be a useful
# thing.

  A while back I asked whether anyone had cooked up a TPU converter.
  Seems like the sort of thing that might even be useful, don't it?

  Well, folk?

--- D. C. Sessions                            Speaking for myself ---
--- Note new network address:                dcs@witsend.tnet.com ---
--- Author (and everything else!) of TMail  (DOS mail/news shell) ---
From: ts@uwasa.fi (Timo Salmi)
Newsgroups: comp.lang.pascal
Subject: Re: Turbo Vision Keys?
Date: 22 Dec 92 06:07:07 GMT
Organization: University of Vaasa, Finland

In article <1992Dec22.092853.327@lincoln.ac.nz> cachoo@lincoln.ac.nz writes:
>> So why the heck are they not using ENTER for 'Next Field'?????
>>
>> I just *HATE* when TAB moves to next field and ENTER accepts the stuff
>> by mistake when you really wanted next field!!!!
>
>Yes! I Thoroughly agree with you. Even after using this type of interface

I'd like to button up the whole dialog box idea, if you pardon the
pun.  Never liked it, probably never will.  The moment TP 6.0 came
out with it, I just hated it. 

   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
From: ba2cs252@troi.cc.rochester.edu (Leonidas Hepis)
Subject: Re: URGENT!! Need advice on Borland upgrade by Dec 31st!
Organization: University of Rochester - Rochester, New York
Date: Thu, 31 Dec 92 22:13:18 GMT

Thanks to each and every one who responded to my request.  I have 
forwarded all your replies to my friend.

-leo
From: leonard@qiclab.scn.rain.com (Leonard Erickson)
Newsgroups: comp.lang.pascal
Subject: Re: powers in TURBO pascal
Date: 2 Jan 93 17:12:53 GMT
Article-I.D.: qiclab.1993Jan2.171253.10580
Reply-To: Leonard.Erickson@f51.n105.z1.fidonet.org
Organization: SCN Research/Qic Laboratories of Tigard, Oregon.

chip@ac.dal.ca writes:

>> Function Power(a,b:real):real;
>> begin
>> {messy code goes here!}
>> end;

>NOTE:
> y    y * LN(x)
>x  = e

>Therefore:

>FUNCTION Power(Base, Power) : REAL;
>BEGIN
>  EXP(Power * LN(Base));
>END;

>That's the messy code....

That's also code that loses a *lot* of precision, and will crash on legal
values of base and power because LN(Base) may yield a value that EXP can't
deal with.

-- 
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: gordo@phsbbs.princeton.nj.us (Gordon Davidescu)
Newsgroups: comp.lang.pascal
Subject: Game data encryption
Date: Tue, 22 Dec 92 08:27:58 EST
Organization: Princeton High School, Princeton, New Jersey

I have finally finished a (relatively) good dungeon program, in which you 
can go around a 169 room dungeon, fight monsters, etc.  I recently added 
a "save" and "load" feature which lets people save a (Only one) saved 
game (to a data file) or load a saved game (from the data file).  In this 
data file goes the players statistics, & what the coordinates of the room 
he's in.  The problem is, anybody can edit the file, and, say, change his 
"Gold" to 1000000, or whatever.   How could I prevent this?

Incidently, what's the major difference between Turbo Pascal 6.0 & Turbo 
Pascal 7.0 (I heard it costs $500, so I want to know if the changes would 
help me a bunch, or whether or not I could safely live with Turbo 6.0)


-----
Gordon Davidescu, Princeton High School BBS
DNS: gordo@phsbbs.princeton.nj.us      UUCP: ...!princeton!phsbbs!gordo
Disclaimer: Author bears full responsibility for this message.
From: ppollet@cismibm.univ-lyon1.fr (Patrick POLLET)
Newsgroups: comp.lang.pascal
Subject: Re: Sprites in TP6.0 ???
Date: Mon, 21 Dec 1992 16:33:47 GMT
Organization: INSA  CENTRE INFORMATIQUE DU 1er CYCLE
NNTP-Posting-Host: 134.214.232.25
Keywords: sprite, seen, where, HEEEEELLP!

In article <1992Dec21.093910.13475@daimi.aau.dk> u912078@daimi.aau.dk (S|ren Erland Vest|) writes:
>From: u912078@daimi.aau.dk (S|ren Erland Vest|)
>Subject: Sprites in TP6.0 ???
>Keywords: sprite, seen, where, HEEEEELLP!
>Date: 21 Dec 92 09:39:10 GMT

>Hi all,
>I don't know if I have been dreaming, but I think I saw sprites mentioned on 
>this group a while ago. I didn't pay attention then (stupid me) but now I
>*REALLY* need them...

>P L E A S E, mail or post on this group, if you know where I can find these so
>needed things, preferrably on a ftp-site.

 go anonymous ftp garbo.uwasa.fi . in directory /pc/turbopas there is
something called tpsprites or turbosprite ?? I don't remember exactly.
ppollet@cismibm.univ-lyon1.fr (Patrick POLLET)
--------------------------------------------------------
Dr Patrick L.Pollet
Institut National des Sciences Appliques
Centre Informatique du 1er Cycle  Bat 110
20 Avenue A.Einstein
69621 Villeurbanne Cedex France
--------------------------------------------------------
Phone: 72 43 83 80 -   la premiere erreur c'est
Fax  : 72 43 85 33 -   de se lever le matin  ... GASTON
-------------------------------------------------------
Newsgroups: comp.lang.pascal
From: trodgers@nmsu.edu (Thomas Rodgers)
Subject: Re: winsys and OWL
Organization: NMSU Computer Science
Distribution: comp.lang.pascal
Date: Tue, 29 Dec 1992 02:57:08 GMT

I have had WinSys and Data Entry Workshop for about 2 months now.
WinSys is essentially the "functional" stuff from OPRO translated to
the Windows environment, where the various elements of OPRO made sense
to translate.  It has the Date & Time, String, Large Array, String
Array, String Dictionary, Large Bitsets, Lists, Stacks, Queues,
Sorting, and Inline functions which are essentially identical to OPRO,
except that all string manipulation works with PCHAR types, rather
than pascal STRING types and many Objects from OPRO are now
implemented as psuedo-objects (using records and call-backs rather
than virtual methods).  WinSys also adds some DPMI stuff which is
particularly useful if you have to talk to real mode dos stuff (eg.
device drivers).  I found a rather distressing bug in the WinSys
library early in the ExtractWord routine from the strings unit, but it
has since been corrected.

One minor annoyance which is no fault of TurboPower's is that if you
use WinSys as a DLL and your program crashes, that DLL may continue to
reside in memory.  If you try to restart the app, it will most likely
crash because WinSys is still managing some memory on behalf of the
former instance, so you really need to restart windows in this
situation.

One advantage of the WinSys library over OPRO is that the
functionality of the library is provided for both C++ and Pascal, so
if you do development in both languages (as I do), you don't have know
two different sets of function libraries.

Data Entry Workshop is effectively the other half of the OPRO library.
It provides most of the functionality of OPRO's data entry screens.
It even has a utility to convert your .OPL screen files from OPRO,
though it does not support scrolling entry screens.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
trodgers@nmsu.edu     In Real Life ???

                     ---------------------------
    "Bob's" promise is to widen the scope and nature of *abnormal 
behavior*, to explore NEW WAYS of going over the edge *and coming
back*.  PLUS to *bring back those who couldn't on their own*...to
help you create the HIGHEST POSSIBLE EARNINGS from the PSYCHODYNAMICS
of ABNORMALITY...to turn Conspiracy-implanted personality disorders
into an ILLUSION OF CREATIVITY that will *fool normals* and GET YOU
SEX!
--
  Excerpted from an online pamphlet for the Church Of The SubGenius
Date: Tuesday, 22 December 1992 20:08:01 MST
X-Mailer: TMail version 1.15R
From: "D. C. Sessions" <dcs@witsend.tnet.com>
Organization: Nobody but me -- really
Subject: Re: Calling Local Procedures - Problems
Newsgroups: comp.lang.pascal
Distribution: world

In <1992Dec21.233611.1711@mp.cs.niu.edu>, jeffbyrn@mp.cs.niu.edu (Jeff Byrne)  wrote:
#   I'm having a problem that I hope someone can help me with.  I want to
#   have a method that takes an address to a procedure/function and calls
#   that routine with some value.  I have tried this a couple ways and have
#   run into problems.  It seems that I am having problems because I want the
#   procedure/function to be local to another method.  I don't know enough
#   about assembler or the TP calling conventions to write the procedure
#   I need.

  Sorry, but you're out of luck.  The problem is that the caller, being
  out of the procedure's scope, can't set up the appropriate environment
  for it.  Local procedures make assumptions about the stack frames of
  the procedures calling them which are valid only when called in scope.

#   I know that it can be done because the ForEach and FirstThat methods in
#   TVISION's TGroup object do this.  However, I don't have the source to
#   these units and can't seem to figure it out.  I have written a small
#   test program below that illustrates the problem and two attempted
#   solutions.  The answer is probably a relativly simple assembler routine,
#   however, I lack knowledge in that area.  I would appreciate any ideas.

  The object methods you mention work only because they are assembly-
  coded to do magic on the stack frame.  As a result, the procedures
  they call get handed the same frame they would if called directly.
  You could do the same, but remember that the caller must be pretty
  simple (such as FirstThat) to work.

--- D. C. Sessions                            Speaking for myself ---
--- Note new network address:                dcs@witsend.tnet.com ---
--- Author (and everything else!) of TMail  (DOS mail/news shell) ---
From: del@babel.DIALix.oz.au (D Elson)
Newsgroups: comp.lang.pascal
Subject: Hash Coding Revisited -- need prime number generator 
Distribution: world
Date: Fri, 01 Jan 93 10:19:49 GMT
Organization: 


Sorry, I couldn't resist this one ...

In article <1993Jan1.042852.26677@netcom.com> jhesse@netcom.com writes:

  > I'm implementing a hashing algorithm and need a prime-number algorithm.
  > 
  > (At this time the size isn't known, so that's why I need the algorithm.)

Try this one ... all odd numbers are prime.

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, ...

(lifted, although not in its entirety from rec.humor  :) :) :)  )

Del
-----------------------------------+-------------------------------------
D Elson                            |  del@DIALix.oz.au del@adied.oz.au
-----------------------------------+-------------------------------------
Newsgroups: comp.lang.pascal
From: dmurdoch@mast.queensu.ca (Duncan Murdoch)
Subject: Re: TVision : BUG in my head or in TV?
Organization: Queen's University
Date: Wed, 30 Dec 1992 17:20:08 GMT

In article <30DEC92.02825818.0033@music.mus.polymtl.ca> CT80@music.mus.polymtl.ca (Steph) writes:
>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?

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.

Duncan Murdoch
dmurdoch@mast.queensu.ca
From: momo@masg9.epfl.ch (Yves Mottet)
Newsgroups: comp.lang.pascal
Subject: TPW 1.5 dialog error -1
Date: 23 Dec 92 14:52:42 GMT
Organization: Swiss Federal Institute of Technology


After making a 
   Dlg := New();
   ExecDialog(Dlg);
   
I get an Application Error:
   Error Code = -1


But if I execute my program with the WorkShop iconized (even empty), this error DOES NOT occur...
How is that possible ?

Thank you for any help.... and merry christmas
_____________________________________________________________

     ____/  __  /  ____/   /   Yves Mottet
    /      /   /  /       /    Operation Research, DMA, EPFL
   ____/  ____/   ____/  /     CH-1015 Lausanne (Switzerland)
  /      /       /      /      e-mail : mottet@dma.epfl.ch
_____/ _/      _/     _____/   fax    : +41 -21 693 43 03
			       phone  : +41 -21 693 27 39
From: tech@crash.cts.com (Don Bontemps)
Newsgroups: comp.lang.pascal
Subject: Why doesn't this cause an error?
Date: 2 Jan 93 06:00:29 GMT
Organization: CTS Network Services (crash, ctsnet), El Cajon, CA

I know there is probably an easy answer to this question, but here is
a portion of a routine that I am using to convert a lowercase string
into an uppercase string.


    readln(comment);
    for l := 1 to length of comment do comment[l] := upcase(comment[l]);



If the user doesn't enter anything, this causes the length of comment to
become zero and what confuses me is that this event does not cause any
error whatsoever.  I would figure that "for l := 1 to 0" to cause a
run-time error or some other type of error, but it doesn't.  Why not??