

        
      ޱޱޱޱޱޱޱ
      ްޱޱޱްޱްޱްްްޱ
      ޱޱޱޱޱޱޱޱްޱ
      ޱޱޱޱޱޱޱ
      ޱޱޱޱްްޱްޱޱ
      ޱޱޱޱޱޱޱޱޱްްޱ
      ޱޱޱޱޱޱޱ
      
      
        

  Volume 2, Number 13                                       28 June 1992

                 (c) Daniel Doekal, All Rights Reserved

     The BBS Clipper magazine, published SEMIWEEKLY, every FRIDAY

     Some of the material used comes from scanning CLIPPER echoes
     which are carried in various BBS throughout the World.
     These Echoes are very often the source of the most often asked
     Questions and Answers about Clipper.

     Other material, which is fully signed or abbreviated is the
     copyright of the appropriate persons.

     The publisher is not responsible for other authors submissions....
     Published material is not necessarily the opinion of the publisher.

     Redaction:
        Publisher...................................Daniel Docekal
        Chief editor ...............................Daniel Docekal
        Language editor .................................Dave Wall



                               Table of Contents

1. ARTICLES  ...............................................................  1
   Hitch Hikers Guide To The Net (10)  .....................................  1
   Magic of SET DELETED  ...................................................  4
   How do we.... (2)  ......................................................  5
   How to detect available file handles?  .................................. 10
   Starters corner (4)  .................................................... 12
   How to read DOS serial number?  ......................................... 16
2. SOFTWARE  ............................................................... 17
   What is what (4)  ....................................................... 17
3. Q&A  .................................................................... 20
   What's address of Pinnacle Publishing?  ................................. 20
   Q&A:What to do in Windows for open more than 10 files?  ................. 20
   Q&A:How to send mail to Internet from FidoNet?  ......................... 20
4. ANOMALIES  .............................................................. 22
   ANOMALIES reports and commets  .......................................... 22
   //STDERR another undocumented switch!  .................................. 22
5. CLIPPER NET  ............................................................ 23
   Index of described files in Clipper BBS Magazine  ....................... 23
6. CLIPBBS  ................................................................ 25
CLIPBBS 2-13       Table of Contents (...)        28 Jun 1992


   CLIPBBS distribution  ................................................... 25
   CLIPBBS, how to write an article!!!  .................................... 27

                                   - - - - -
CLIPBBS 2-13                   Page 1                   28 Jun 1992


===============================================================================
                                   ARTICLES
===============================================================================


                    Hitch Hikers Guide To The Net
                             Episode 10

 (Xaphod, Rod, Gillian, and Marvin are still on their way to find out more
 about Life, the Net, and Everything. From off in the distance they hear a
 hollow roar punctuated by gunfire. Before they have a chance to grasp the
 situation, a huge battle tank screeches to a halt in front of them. It is
 a fearsome device with great nasty teeth painted on it. The cannon looks
 as if it could punch a hole through a small planet. A hatch opens and a
 rightly uniformed man steps out, crushing a passing cat under his boot.)

 Cat        : (splat)
 Rod        : Wh . . . who are you?
 Roarin' George: I'm General Roarin' George Pahton. I heard there was
         some Singularans around here. Thought I'd do some American style
         joggering.
 Xaphod     : Oh yeah, they went that a way.
 Arnold Lint: Why does everyone pick on the Singularans? They only seek
              meaningful personal relationships with people they find
              special.

 Roarin' George: Right, that's it, we're gonna have some order around
         here. No more of these damn cliches. From here on out, the following
         rules will apply: Anyone who uses the phrases 'special', 'personal
         relationship', or 'meaningful relationship' WILL be fined twenty
         dollars for the first offense. Subsequent offenders will have their
         genitalia removed with a sharp rock. Anyone who corrects the spelling
         of another, WILL be fined 100 dollars. I won't stand for any
         namby-pamby intellectuals checking spelling when there's so much to
         do. Anyone caught agreeing with anything an oppositely gendered
         personnel says in an obvious attempt to make points, WILL have both
         kneecaps shattered with a ball-pean hammer. Likewise, anyone saying
         things which are right out of soap operas with the intentions
         mentioned above WILL also have his (or her) kneecaps shattered with a
         ball-pean hammer. Remember, this is the NET, it's tough out there.
         Keep your emotions to yourself, do you want a bunch of commies to
         read that gooey crap? Why they'll think we're wimps, then they'll
         invade. They've started infiltrating already - ever been to one of
         the dating service places? They're all commies, draining away our
         precious bodily fluids. Now, get back to work|

 (With that, he climbs back into the tank and drives off, casually blowing
 a 4 foot hole in a nearby wall. Just then, the 12" CRT on Xaphod's
 shoulder springs to life. On it is a man in a white suit with a bible in
 one hand and a microphone in the other. He speaks:  "Friends. Why are we
 here today? We are here to hear the words - (Amen) - to hear the holy
 words from the Holy Box - (Amen). Oh blessed be the Holy Box, and it's
 disciples: Prophet Ronko, Prophet K-Dul, and the Prophet Popeel - (Amen
 Amen Amen). Yes, they lead is to immaculate spending. We here at the
 Church of the Divine Vision believe in Johnny and Merv and Mike. TV is the
 reflection of life, and life is a reflection of reality, therefore TV IS
CLIPBBS 2-13                   Page 2                   28 Jun 1992


 REALITY.  Yes, Mrs Olson may be a Nazi, but if you buy Foljers, you can
 bake just like her. And Robert Yung may have multiple personalities and a
 penchant for farm animals, but if you drink his coffee, you can remain
 calm in the midst of a nuclear explosion . . . ")

 Rod        : Shut that OFF.
 Xaphod     : Bloody religious fanatics.
 Arnold Lint: What an odd religion, worshiping a TV, seems hard to
              believe.
 Martin:      Not really, just another awful attempt to deal with this
              miserable Net. It's all a cop out. You can't understand
              something so you pretend that there is something else in
              control. It's all rubbish.
 Gillian    : Quiet. Of course there's a supreme being.
 Martin     : If you say so, but if God didn't already exist, he would have
              to be invented.
 Rod        : It's hopeless talking to him.

 [*****************************************************************************
 "The Hitch Hikers Guide To The Net" indicates that the members of the
 Church of the Divine Vision are basically agnostics. They prefer to
 believe what they see on the tube to what some half starved people wrote
 about over 2000 years ago. They can't meet God, but if the TV gives them
 trouble, they can always replace it. Their belief led to the writing of
 the Video Testament, which is the gospel for all believers in the Holy
 Box. Although it seems unlikely, the Church of the Divine Vision was
 supposed to have formed some amazing concepts as to how the Net exists.
 *****************************************************************************]

 Gillian    : Let's go.
 Martin     : Do we have to?

 (They all ignore Martin and press on. Two days later they arrive at their
 destination. In front of them is a rather bug-eyed looking lizard.)

 Xaphod     : Hey man, are you the one with the dope on Life, the Net, and
              Everything.
 Lizard     : Yes, I am Teddy the Wonder Lizard. I know all there is to
              know about Life, the Net, and Everything.
 Rod        : Well, tell us|
 Gillian    : Please do|
 Teddy      : You won't like it.
 Martin     : (sarcastically) Now that's a real surprise.
 Teddy      : Are you sure you want to know?
 Arnold Lint: Yes, what is it, got to more than forty-bloody-two.
 Teddy      : Yes, that was the answer we told the Net. We figured that the
              real answer was so awful, they'd rather get something vague
              and argue about it forever.
 Xaphod     : Well, out with it.
 Teddy      : It's all here, in the Video Testament|

 (He hands Xaphod an old looking book, pops about a dozen valiums, and then
 switches on a nearby TV set. He is watching 'Real People'.)

 Xaphod     : Well, that should finish him off.
 Arnold Lint: The drugs?
CLIPBBS 2-13                   Page 3                   28 Jun 1992


 Rod        : No, 'Real People', lowers the IQ so much that the brain just
              packs it in and you die.
 Gillian    : Find the answer already|
 Xaphod     : Okay, now lets see . . .

                 ******************** End Of Part 10 ********************

 What is the answer to Life, the Net, and Everything? Why are we here?  Are
 we here? And why is it that vampires never attack Jewish neighborhoods?
 For the answers to some of these questions . . . Tune in next time . . .
 same Net-time . . . same Net-channel.

-------------------------------------------------------------------------------
CLIPBBS 2-13                   Page 4                   28 Jun 1992


							Magic of SET DELETED?

1)  SET DELETED ON
    USE DATABASE      // 20s+ to open

2)  SET DELETED OFF
    USE DATABASE      // 0.39s to open

  Tests have been performed on 16Mhz AT.

  SET DELETED ON behaves like SET FILTER TO. My theory is that when opening
  file, CLipper is trying to find first record in database and is ending up
  processing a whole file !! What is going to happen with 40,000 records ! :-)

  My routine to save invoices took 30s+ and more as file grew with deleted
  records.

  I have just used magic statement SET DELETED OFF and saving took only 4s.

  Was fighting with this little bugger for days and was blaming everything
  on VMM but SET DELETED ON was the culprit.

  Good to know that there is a catch with SET DELETED ON !

-------------------------------------------------------------------------------
CLIPBBS 2-13                   Page 5                   28 Jun 1992


                               Ronald Offerman
                                How do we ...
                     How do we do it and what do we use

                           Working environment ...

'Late(st) news'___________________________________________________________
  Now is the time to... get Clipper for Windows, fast!
  After having installed Windows 3.1 and seeing it zip by on my system
  I think it's time for Nantucket to release a Windows version of Clipper
  fast. The Windows environment now looks fast enough to use it for both
  a serious programming environment and fast Windows database applications.
  Please remember that I'm also into Database Publishing and the use of
  OLE and DDE is very interesting when doing this. Of course the question
  remains if this Aspen project (the 'official' codename for the Windows
  version) is allowed to be finished now CA has taken over.

'REAL Latest news'________________________________________________________
  Have just received CA Statement of direction. Aspen is going to be the
  end goal for Clipper and dbFast. Beta release dates were stated for
  Clipper 5.2 and Aspen. Final delivery dates however were nowhere to be
  found. If you read it you'll find something peculiar. Clipper 5.2
  WON'T be the fully object oriented Clipper. This will be versie 5.X.
  If however beta tests for 5.2 and Aspen will be ready before the end
  of this year but no 5.X this means Aspen will be released before 5.X.
  Aspen looks and sounds GREAT!! But can they deliver, w'll have to wait
  and see. 'Seeing is believing'

'Working environment'_____________________________________________________
I promised, so lets begin.
I use two approaches in what you might call the 'programming enviroment'.
I.  Based in each 'root' directory for a project is a controlling Norton
    Commander menu (NC.MNU) containing options to start the editor,
    compile, start the program with or without the debugger
II. Working in 'plain' DOS I use Brief's state restore and the dBrief
    application dictionary to edit the source; in addition each 'root'
    directory contains 3 batch files: MK.BAT ; make application using
    PLL's (there is a MKP.BAT MaKePlain to make the final version
    without using PLL's) DB.BAT ; debug application GO.BAT ; run
    application without the debugger

    This provides me with 2 letter commands for all 'environment
    functions' The Norton Menu actually calls the same batch files but
    also contains options to backup, print, copy the source.

  Currently I occasionly try using Windows 3.1 as a multitasking
  enviroment. Each part of the proces is in a separate window and using
  a virtual desktop (provided by the PD BigDesk) is works fine.
  Advantage is you can kill a runaway application without rebooting the
  complete system and you can monitor output while it is being
  generated.

  In the past I tried using DesqView but I like to have several complete
  (eg. 80x25) windows on DOS. This proved to be quit impossible. Even
  with the A3 screen in 50x132 mode I can't fit 2 complete DOS windows
  on screen.
CLIPBBS 2-13                   Page 6                   28 Jun 1992


MK.BAT   this batch file calls either Dmake or Rmake with the
         appropriate make file with parameters like DEBUG or USEPLL.
         There is ONE make file to make both the final and debug
         versions with the option of using a PLL.

DB.BAT   Only difference between these two is that DB.BAT loads CLD.
GO.BAT   I never have a problem passing parameters because the are
         either automaticly read from a default ASCII parameter file or
         a single parameter is passed being the name of a different
         parameter file to be used.

         I think in most cases it's better to provide a file for the
         parameters most important reason being bypassing the DOS
         commandline limit.

         Do not however confuse the parameter file with something like a
         configuration file containing all kinds of values used in the
         program. I always store 'configuration' values in a
         multidimensional array which is written to disk from within the
         program and can't be edited with ASCII editors.

  Next time I'll let you have a closer look at the Make files and
  directory structures used for the projects.

'SIDELINE'________________________________________________________
S   Telemate is a superb Telecomm program using multithreading    S
I   so you can have the modem dialing while you view a log file   I
D   at the same time copy interesting things to an other file     D
E   while you reconfigure part of the program while you jump to   E
L   a dos window for a simple command to view a compressed file.  L
I   You actualy can have a Backscroll, Edit, View and Dos window  I
N   active at the same time even when the modem is dialling or    N
E   maybe more important, when you are downloading. It's GREAT!!  E

'Programming'_____________________________________________________________
Ok, this is a new subsection I hope will appear in each article. It will
discuss programming problems and solutions I found; when needed I will
also show the development path it took to get to the current solution
I'm using. Remember I think of anything I have to program as a problem
to solve.

  Menuing in Clipper
  ------------------
  Development path (in SEMI PSEUDO code so errorprone!! and sometimes
  shorthand or 5.01-like code for '87)
  (Started in Clipper '87)
      @ 1,1 prompt "Search" Message "Search for a record"
      @ 2,1 prompt "Add" Message "Add a record"
      @ 3,1 prompt "Delete" Message "Delete a record"
      @ 4,1 prompt "Quit" Message "Quit program"
      menu to x
      do case
      ...
      endcase
    __Disadvantage: Fixed menu; insert, move and delete options is difficult
                    and clumsy
CLIPBBS 2-13                   Page 7                   28 Jun 1992


    Refinement:
      x = 1
      y = 1
      @ x,y prompt "Search" Message "Search for a record"
      x=x+1
      @ x,y prompt "Add" Message "Add a record"
      x=x+1
      @ x,y prompt "Delete" Message "Delete a record"
      x=x+1
      @ x,y prompt "Quit" Message "Quit program"
      menu to x
      do case
         case x == 1
            ....
         case x == 2
            ....
      endcase
    __Advantage: easy move of menu options
    __Disadvantage: do case has to be update with each modification

    Refinement:
      DisplayMnu( Main, 1, 2, 4 )
      // param: Menu_ID, start x, start y, increment
      menu to x
      ExecMnu( Main, x )
      // param: Menu_ID, menu option

      function DisplayMnu( menu_id, x, y, z )
      do case
         case menu_id == main
            @ x,y prompt "Search" Message "Search for a record"
            x := x + z
            @ x,y prompt "Add" Message "Add a record"
            x := x + z
            @ x,y prompt "Delete" Message "Delete a record"
            x := x + z
            @ x,y prompt "Quit" Message "Quit program"
         case menu_id == search
            ...
      endcase
      return (.t.)

      function ExecMnu( menu_id, option )
      do case
         case ( menu_id == main ) .and. ( option == 1 ) // Search
            ...
         case ( menu_id == main ) .and. ( option == 2 ) // Add
            ...
            ...
         case ( menu_id == search ) .and. ( option == 1 ) // ...
            ...
      endcase
      return (.t.)
    __Advantage: got rid of do case in main program; menu configuration
                 is easy
    __Disadvantage: do case (ExecMnu) has to be update with each
CLIPBBS 2-13                   Page 8                   28 Jun 1992


                    modification

    Refinement:
      Public aArr1, aArr2, aArr3
      MnuConfig( main )
      nChoice := aChoice( aArr1, aArr2 )
      DO &aArr3[]nChoice]

      function MnuConfig( menu_id )
      // in super shorthand '87 code
      do case
         case ( menu_id == main )
            aArr1 := { "Search", "Add", "Delete", "Quit"}
            aArr2 := { .t.,      .t.,    .f.       .t.}
            aArr3 ;= { "FncSrch",  "FncAdd", "FncDel", "FncExit"}
         case ( menu_id == search )
            ...
      endcase
      return ( aArr )
    __Advantage: enabling/disabling options through parallel array and
                 security can easily be added because w're using aChoice
   __ Disadvantage?: using macro compiler

    (Clipper 5.01)
    Refinement:
      aArr := MnuConfig( main )
      nChoice := aChoice( aArr[ OPTIONS ] )
      ExecMnu( main, aArr[ CODEBLOCKS, nChoice ] )

      MnuConfig returns a multidimensional array
      assignment example: aArr[1] := { "Search", .t., { || FncSrch } }

    __Advantage: uses multidimensional arrays uses codeblocks instead of
      macro compiler strings so parameter passing to functions is easy
      Disadvantage: ?

    Refinement:
      ExecMnu() uses constants defined in .ch and a codeblock array
      Advantage: no macro compiler needed

  Current: using omenu (it's free and "easy" to modify) and execmnu with
  predefined constants; menu defined external in datafile Advantage: no
  recompile needed when reconfiguring with existing functions

I hope my menuing adventures are to your advantage; I'd like to repeat
that the above code is SUPER SEMI PSUEDO!! Hope this item will be
shorter too in the next article!

'By the way...'___________________________________________________________
  Something About Norton Guides
  'Peter (Norton) when will we get an update for the guides that like
  Tom Rettig's Help uses XMS/EMS, pastes a template/example into the
  source, has categories? Don't tell us Dos is dead and w'll have to
  move to Windows to get advanced (programmers) help.' I.D. Use
  Desqview/Windows multitasking to copy/paste NG text into source!
  It's a temporary be workable solution using Win 3.1
CLIPBBS 2-13                   Page 9                   28 Jun 1992


--------------------------------------------------------------------------
  NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET

  'C-style complex Case'
  Although you might think that the Clipper Do Case statement can
  only execute ONE of the cases, this isn't entirely TRUE.
  The keyword is TRUE. Case expects a statement the either is True or
  False, SO
  Do Case
     Case AnyFunc()
     ...
     Case OtherFunc()
     ...
     Case x == y
     ...
  end
  The function AnyFunc() will be first executed. This function should
  either return TRUE in which case the Do Case will end or return FALSE
  in which case OtherFunc() will be executed that should either return
  TRUE or FALSE and so on.

  The functions AnyFunc() and OtherFunc() can actually execute something
  and depending on the result end the Do Case or have it continuing
  execution. This provides you with a Semi C-style 'case' in which you
  have to actualy 'break' form the case to end it. Using Do Case this
  way has enormous potential. Try it and think about ways to have Do
  Case work for you!

Credits to whom credits are due
The idea came from Matt Whelan at a Clipper Seminar. He used it in
a different way, but he did initiate the idea.

  NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET NUGGET
--------------------------------------------------------------------------
'Next Nugget'
  Dos Nugget? 'Novell-style' path

-------------------------------------------------------------------------------
CLIPBBS 2-13                   Page 10                  28 Jun 1992


                    How to detect available file handles?
                           originally by Jim Lynch

 What's a problem? One, how to get knowledge of REALLY available FILE HANDLES
 for your CLIPPER program. How to do it?

 I prefer this solution. You could FREAD() the config.sys, but end up fooled
 by systems (such as mine) that have a minimum FILES= in config.sys, and the
 rest loaded high in AUTOEXEC. Or on a network, you could have a big FILES=
 in config.sys, but be limited by NetWare SHELL.CFG......

 Heres my function to report available handles. Comes in handy when you're
 developing, you can run it from the debugger and see how many handles you
 have left.


*---------------------------------------------------------------------*
*                                                                     *
* Function:   Handles_()                                              *
*                                                                     *
* Purpose:    To determine the number of available file handles.      *
*                                                                     *
* Syntax:     Handles_()                                              *
*                                                                     *
* Returns:    A numeric integer equal to the number of AVAILABLE      *
*             file handles.                                           *
*                                                                     *
* Usage:      Useful for a startup routine to determine if there is   *
*             enough file handles to run the application.             *
*                                                                     *
* Example:    if Handles_() < 15                                      *
*                 ? "Sorry, Not enough FILE HANDLES"                  *
*                 quit                                                *
*             endif                                                   *
*                                                                     *
*             Remember that DOS uses the first 5 handles for itself.  *
*             On a system booted with a FILES=20 in CONFIG.SYS,       *
*             Handles_() will return 15 assuming the application      *
*             has not opened any files.                               *
*                                                                     *
* Note:       A temporary file F???????.$$$ is created and repeatedly *
*             opened to get the  number of available handles.         *
*                                                                     *
*             NUL was *not* used, because on Novell Netware, NUL is   *
*             a local file, and therefore does not use up a           *
*             SHELL.CFG handle when it is opened.                     *
*---------------------------------------------------------------------*
function Handles_
private x,y,z,h,random,tempfile

do while .t.
    random   = lpad0_(right(strtran(str(seconds()),".",""),7),7)
    tempfile = "F"+m->random+"$$$"
    if ! file(m->tempfile)
        exit
    endif
CLIPBBS 2-13                   Page 11                  28 Jun 1992


enddo

z = fcreate(m->tempfile)
if m->z < 0
    return 0
endif

h = 1        && counter of handles opened
x = m->z     && save highest handle we opened

do while .t.
    y = fopen(m->tempfile)
    if ferror() != 0
        exit
    endif
    x = m->y        && save the highest handle we opened
    h = m->h+1      && increment the count of opened handles
enddo

&& close all the handles we opened,
&& starting with the highest, working
&& down to the lowest

if m->h = 1
    fclose(m->x)
else
    for y = m->x to m->z step -1
        fclose(m->y)
    next
endif

erase (m->tempfile)
return m->h

-------------------------------------------------------------------------------
CLIPBBS 2-13                   Page 12                  28 Jun 1992


                             Starters corner (4)
                                     by
                                  Paul Ket

Last time we left with a brand new way of storing the data in the files.  We
created the Thirdtry.dbf. It consisted of three files. Two containing the
real data, one is used as a reference to look-up words. In this episode we
look at the meganisms behind our program. Now the real fun starts!

Last time i've made a nasty mistake: i've forgotten to include a full
description of THIRDTRY.DBF. Sorry about that. Complains can be send to the
editor :-> . It is contained in the addendum of this episode.

I also promised to take a closer look at the files. That can wait till an
other time. Now is the time for the creative part of programming!

What do we want?
----------------
First we have to ask ourselves what we actually want our program to do.
Think about this at "grass-root" level. We want the program to start and
present us the contents of de files. On the screen to be precise.

Besides that we want to browse and to look up things. At the end we also want
to make a hardcopy of the recipe. After that we sign off and go off to the
kitchen.

What does the intended user want?
----------------------------------
What we want is important. But not as important as the wishes of the user.
Remember episode 1, in which we stated that this project was also intended to
pay in our debt to Mum. She agreed on buying a computer with the demand for a
good program for her recipes(A). In jargon: a novice user. Somebody who
doesn't want to learn about fields and records. Doesn't want to spent the
leisuretime at the keyboard. So: simplicity, clarity and easy to use are
major demands.

These demands are important because by our design with all those files we've
created a great opportunity for making things complex. Let's not do that!

Basics
------
To have something to show to anyone else, it's nice to start with the design
of the screen. We've waited with that to make a good design for our
datafiles, but now the time has come to do so (B)!

Designing the screen
--------------------
We start desinging with a few questions.

First: what has to be present on the screen?
Three categories of information can be present:

(1) Data
The real data:
     - the name of the recipe
     - the ingredients
CLIPBBS 2-13                   Page 13                  28 Jun 1992


     - the presription how to prepare it.

(2) Extra info
Things commonly seen, handy, but no complaints if you leave them out:
     - time
     - date
     - filepath
     - number of the recipe
     - number of ingredients

 INTERMEZZOĿ
 Altering the database structure                                     
 -------------------------------                                     
 At this point in the process i get the strong urge to add extra     
 information, extending the amound of information to store. Think of:
      - the last time the recepe was made                            
      - date of data-entry                                           
      - names of visitors who have eaten it                          
      - names of family who don't like it                            
      - record-size                                                  
                                                                     
 Why not? Go ahead!                                                  
 Some parts can be stored in THIRDTRY.DBF, others in LOOKUP (c).     
 

(3) Directives.
A user has a right to know where s/he is and what to do. So we have to tell
where we are and where we can go to.

These three types of information deserve a special place on the screen.
In the pre-windows-era this was called window-ing. Each type of information
has his own place on the screen. Now you talk about "view-ports". It means
the same without refering to that product of Microsoft.

Here's one of my favorite screen designs. It is 24 rows by 80 colums (D). You
might have to adjust your pinter. But it shows beautifully on your screen!
>---------- screen starts here --------------<

Date:  10 jan 1992                                             Recepe:    1
Time:  12:12                                                   Total:  1123

                                       Breek de eieren in een beslagkom.
Fried eggs Extra                       Roer ze goed door. Doe de boter in de
                                       pan, smelt ze. Doe de geroerde eieren
slices bread          3                in de pan. Zet het vuur zo laag
eggs                  5                mogelijk. Doe een deksel op de pan!
mature cheddar        50 grames        Laat het langzaam sudderen. Na 3
butter                little           minuten de kaas op het ei doen.
garlic                little           Kruiden naar smaak. Deksel weer op
red pepper            1                de pan doen. Als de kaas grotendeels
pepper                little           gesmolten is is het ei goed. Opdienen
                                       op de sneetjes brood.




CLIPBBS 2-13                   Page 14                  28 Jun 1992


< Display    >
F1= Help
F5= Look-Up
< Esc = Exit >
>---------- screen ends here --------------<

You can see three zones in this screen. At the top the Extra information. Two
lines. Left and right filled out. As you can see i present there the
number of this recepe and the total amount of recepe's i've got. In the middle
the main information. Note the absence of captions like "Name", "Ingredients"
etc. I think those are redundant. At the bottom the user-guide. It clearly
shows only three options and gives us information about where we are (Display).

Techniques
----------
There is some programming necessary for getting this screen. I don't intent
to give full listings but here's how i would do this.

For a start: i have a MAIN procedure/function which contains the main program.
In this function there's a loop.

          DO WHILE .not. <END>
              PresentScreen()
              GetUserKey()
              ProcessKey()
          ENDDO

The biggest part of the screen is organised in PresentScreen(). Not all. The
horizontal lines are not disturbed at all. So, i write them only once: at
the start of the program.

The time, presented in line 2, has to be updated -more ore less- continously.
So, i make a small function TimeUpd() which i call in all three functions
in the loop.

The keys available to the user are dependent on the place of the user in
the program. So, i present this information after i've processed the last
keystroke, in the function ProcessKey().

This leaves us with the thask to present the contents of THIRDTRY.DBF, the
date, recepe number and the total number of recepes. Below you find a
(buggy) source-listing of PresentScreen(). It depends on some unstated
assumptions but it is only intended to give an idea of how this can
be done(E).

>------------------ part of PresentScreen() ----------------<
USE THIRDTRY.DBF ALIAS Third
USE INGRDNT.DBF ALIAS Ing

@ 1,60 SAY "Recepe:" + STR(nRecepe),6)
@ 2,60 SAY "Total: " + STR(LASTREC(),6)
Select Third
LOCATE FOR Third->Re_num=nRecepe
IF found()
     @ 4,0 SAY third->Name
     cDesc := third->Desc
CLIPBBS 2-13                   Page 15                  28 Jun 1992


     Select Ing
     LOCATE FOR ing->re_num = rRecepe
     DO WHILE found()
        @ A,B SAY LookUp(ing->ing_num)
     ENDDO

ENDIF

>------------------ End of PresentScreen() -----------------<
- - - - -
Notes:
(A) complaints are received about the sexist approach. Author likes to
state that no harm is or was intended. Wherever wanted he can be replaced
by she or the other way around.

(B) Handbooks and people who have studied programming will get sick at
this time. Ok, it's wrong. But it works! Let's call it prototyping.

(C) What the result will be will be discussed in a forthcoming episode.

(D) Because i think you'll look at it with a Word-Perfect-alike. i haven't
made it 25 * 80. A normal screen is of course 25 * 80 but in WordPerfect
you "only" get 24 * 80.

(E) If somebody knows an equal simplistic but better way for doing the
same job: please let me know!

---------------------- ADDENDUM ------------------------------------

      Name: Lookup.dbf (3)
      ===========================
         NAME     TYPE     LENGTH
      1  Ing_num   N        3,0
      2  Ing_nam   C       30
      ---------------------------
      TOTAL                33

       Name: Ingrdnt.dbf  (3)
       ======================
          NAME     TYPE    LENGTH
       1  Re_num    N     4,0
       2  Ing_num   N     3,0
       3  Amount    C    10,0
       ----------------------
       TOTAL             17

       Name: THIRDTRY.DBF (3)
       =====================
          NAME     TYPE    LENGTH
       1  Re_num    N       4,0
       2  Name      C      40
       3  Desc      M      10
       --------------------------
       TOTAL               54

-------------------------------------------------------------------------------
CLIPBBS 2-13                   Page 16                  28 Jun 1992


                       How to read DOS serial number?
                        originally by Eric J. Givler

Here's how to read the DOS serial number.  This function assumes you have the
NanForum library (for the intterupt code) and you have some data conversion
functions, ie. Dec2Hex().  This function (and about 200 others) are in my
POTLUCK.LIB

#include "ftint86.ch"
PROCEDURE MAIN()
LOCAL midlabel := space(29), regs[12], r_ax, label_fat

    // these calls are Nantucket Forum ToolKit.
    Regs[AX] := 17421
    Regs[BX] := 0
    Regs[CX] := 2150
    Regs[DS_STRING] := Register( DX ) + midlabel
    FT_INT86( 33, Regs )
    r_ax := Regs[AX]
    do case
    case r_ax = 1 .or. r_ax = 2 .or. r_ax = 5  // an error occurred
        label_fat := .f.                       // probably wrong dos?
    otherwise
        label_fat := .T.
    endcase
    midlabel := regs[DS_STRING]               // info is in here.
    if label_Fat
        ? 'Volume: ' + substr(midlabel, 7, 11)
        ? 'FAT:    ' + substr(midlabel, 17, 8)
        ? 'Serial: ' + VolSerial(substr(midlabel,3,4))
    endif

RETURN


FUNCTION VOLSERIAL( FOUR_BYTES )
LOCAL nval := bin2l( four_bytes )
LOCAL n1, n2, c1, c2
    n1 := nVal % 65536
    n2 := (nVal - n1) / (2^16)
    c1 := Dec2Hex(n1)              // Returns HEX of a word value (IDL 2.0)
    c2 := Dec2Hex(n2)              // Returns HEX of a word value (IDL 2.0)
RETURN (c2 + "-" + c1)

-------------------------------------------------------------------------------
CLIPBBS 2-13                   Page 17                  28 Jun 1992


===============================================================================
                                   SOFTWARE
===============================================================================


                           What is what (4)

STAGE

        Sysstem development tool. Helps build screens and reports using
        template language. Supports arrays and virtual pages using 255
        page objetcs.

STEVE STRALEY'S TOOLKIT

        Steven Straley's Toolkit contains a lot of routines and tools
        for program development. Allows changing of says, gets, reads,
        pictures, colours without recompiling. Windowing, menus, array
        functions, backup and restore, database generation, DBT
        packing, word processing, report writer, source code debugger,
        560 page manual, free reader for Tom Rettigs Help.

SUBNTX()

        Fast and unique set of functiuons for thos who want much more
        speed and flexibility from indexes. Creates a subset of an
        index based upon your conditions or wildcards. Eliminates time
        delays caused by skipping unwanted records in an index. Ideal
        for reporting. Never use SET FILTER AGAIN.

SUPER.LIB Professional for Clipper

        database Warehouse, 198
        (c) Functional Software Inc.

        Complete drop-in procedures, compatible with Summer 87 and 5.0,
        all major clipper libraries, european data formats supported.
        100% source code, commented, readable and included at no extra
        charge. Organized, cross-referenced manual with examples for
        all function plus a NG database for fast reference. Over 100K
        of sample programs, 30days phone support, unlimited BBS
        support, Compuserver. No royalties. Included:

        -       report writter
        -       query/filter builder
        -       form letters
        -       mailing lables
        -       data driven data entry
        -       lookup tables
        -       help system
        -       frequency analysis
        -       duplicate checking
        -       selective global field replacement
        -       expression building
        -       record tagging
        -       calendar, calculator and TODO list utilities
CLIPBBS 2-13                   Page 18                  28 Jun 1992


        -       user definable pull down menus
        -       selective copying and appending
        -       text file browsing
        -       directory tree
        -       popup boxes and menus
        -       production analysis (data sensitive)
        -       interactive DBF and index building
T-BASE

        Work with pictures in databases in grand style. Scanned
        photographs, documents and pictures generated by drawing
        packages adn other soruces such as vide frame grabbers can be
        displayed alongside and active text screen at any [position
        scalled and resized. Saves in popular PCX format.

TELEPATHY

        Complete powerful serial communications library, easy to use
        and highly efficient. all the usual transfer protocols, high
        baud rate operation plus a notification mechanism for
        background comms.

THE LIBRARY (PLANET)

        Over 360 functuions covering 20 areas including arrays, date,
        disk, DOS, file, financial, graph, graphics, keyboard, memory,
        mouse, network, printer, screen, SQL API, statistical, time and
        trigonometric. Includes a complimentary copy of Gupta SQLBASE
        single user engine. Documentation only on disk.

TIME TRAK

        Multiple users and resource scheduling program with 100%
        Clipper source supplied. Includes simultaneous view of multiple
        calendars, recurring and rescheduling appointments, 4display
        formats (daily, weekly, monthly, 6month) things to do pad,
        alarm clock, password protection. 140 page manual.

UI2

        Powerful development environment which includes an editor for
        designing screens and reports as well as template drive
        applications generators, templates can generate Clipper, dbIII,
        dbIV, Fox, QS, dbXL and C programs.

UI2 TOUCH&GO

        Designed to generate complete systems using a few keystrokes
        and the supplied templates. The build in screen editor allows
        build own input and output screens. Multi user, interactive
        query system, scrolling input screens, easy customisation using
        template directives and integration with your own source code.

VALKYRIE

        Reverse engineer an EXE file back into its various PRG files.
CLIPBBS 2-13                   Page 19                  28 Jun 1992


        Works with S87. Lots of user configurable source code
        formatting options plus symbol and cross referencing. Comments
        cannot be reocevered, there is a password protection feature.

WARPLINK

        Very fast DOS compatible dynamic overlay linker for use wiuth
        any language that produces .OBJ files. Detailed map info and
        online error handler provide debugging help. Incremental
        linking and enhanced memory management. Includes ability to
        create COM files.

WIPEOUT

        Screen wipping routines, available as SHAREWARE (hope will stay
        some time). Serie of very nice and good working functions for
        clearing/displaying screens in many ways. Quite useful for
        producing demos.

WORDWRAPPER

        Alternative to using memo fields and .DBT files. Avoids file
        bloat by storing data to a .DBF file. Allows word wrapping,
        copy, zoom in.out, window size and position., Clipper source
        supplied.

-------------------------------------------------------------------------------
CLIPBBS 2-13                   Page 20                  28 Jun 1992


===============================================================================
                                      Q&A
===============================================================================


QUESTION: What's address of Pinnacle Publishing?

ANSWER:

            Pinnacle Publishing, Inc.
            28621 Pacific Hwy. So.
            P.O. Box 8099
            Federal Way, WA 98003
            (206) 941-2300
            (800) 231-1293
            Fax: (206) 946-1491

-------------------------------------------------------------------------------


QUESTION: What to do in Windows for open more than 10 files?

ANSWER:

        If you must run in the enhance mode, you must tell Windows to allow
        more than 10 files to be opened per window (10 is the default).
        The way you do that is in the SYSTEM.INI file under the 386en
        section add the following statement:  pervmfile=xx where xx is the
        number of files you need to open.  Make it reasonable, don't go
        overboard with it or you will slow down the system.  Hope it
        helps...

-------------------------------------------------------------------------------


QUESTION: How to send mail to Internet from FidoNet?


To send from fidonet to internet you must use a gateway.  one such gateway
is fidonet address 1:114/15. To use this gateway.  send mail to user "uucp"
at 1:114/15 from any fidonet system.  In the first line of the text, you
put the internet style address followed by 2 returns. for example to my
internet address "larry@panix.com"

To: larry@panix.com
<cr>
<cr>

to go from internet to fidonet you shoud send the message to user
"uucp"
first.lasttname.lastname.@fnet.nf107.n10.z1.fidonet.org
where f107 is the net 107, n2603 is node 2603, and z1 is zone 1.

(note this is the address of "MORE")

using the fidonet to internet gateway you can also send mail to
CLIPBBS 2-13                   Page 21                  28 Jun 1992


other systems like compuserve and  america on line
nnnn,nnnn@compuserve.com
screenname@aol.com

-------------------------------------------------------------------------------
CLIPBBS 2-13                   Page 22                  28 Jun 1992


===============================================================================
                                   ANOMALIES
===============================================================================


                     ANOMALIES and their comments

This part of Clipper BBS Magazine is dedicated to all discovered 
anomalies and comments about them in Clipper products. Because 
Nantucket is still unable to give own bug and anomalies reports (as 
actually did in past with Summer 87 version) is very handy to have 
results of many investigations done on many user places. I'm also
doing my own investigatings, because i'm always very good when someting 
has hidden problems. Everything what i buy will first show all problems 
and then all normal things. This amazing part of my live is sometime 
making me crazy, but for testing of programs it's great <grin>.

Daniel



-------------------------------------------------------------------------------


                   //STDERR another undocumented switch!

       application.exe //INFO //STDERR >>file.ext

That simple line will take a care of:

1) redirecting Clipper normally hardscreen coded output of //INFO to
   stderr device
2) redirect stderr device to file

Result? Copy of wanted information from //INFO into your FILE!

-------------------------------------------------------------------------------
CLIPBBS 2-13                   Page 23                  28 Jun 1992


===============================================================================
                                  CLIPPER NET
===============================================================================



Following is COMPLETE list of all published file descriptions in Clipper
BBS magazine in previous numbers. Purpose of this index list is to allow
anybody find needed file descriptions in growing number of described files.
Short description after name will give first possible close image about
file. Number enclosed in "[]" will mean number of Clipper BBS magazine.

Ŀ
FileName     Src Description                                     Where 
Ĵ
ACCESS.ARJ   Cln Source of speed testing program                 [1-06]
ACH2TB.ARJ   Cln Convert ACHOICE to TBROWSE                      [1-05]
ACHOO2.ARJ   Cln Replacement of ACHOICE with GET possibilites    [1-06]
ADHOC302.ARJ Cln Summer 87 inteligent report program             [1-04]
ASCPOS.ARJ   Cln replacement of ASC(substr(cString,nPosition,1)) [1-11]
BARNTX.ARJ   Cln Displaying bar indication during indexing       [1-13]
BLOCK.ARJ    Cln Tetris game written in Cliper (-->Clipper !!)   [1-19]
BUTTON.ARJ   Cln @GET in form of BUTTON                          [1-14]
CALC14.ARJ   Cln PoPup Calculator                                [1-08]
CIVMIL.ARJ   Cln Upgrade of Civil->Military time conversion      [1-19]
CL5103.ARJ   Cln Report of 5.01 anomaly number 3                 [1-04]
CL5REP6.ARJ  Cln 5.01 replacement of REPORT command              [1-04]
CLIP110.ARJ  Cln Clipper Documentor program                      [1-05]
CLIPFPCX.ARJ Cln Fast .PCX displayer for CLipper                 [1-15]
CLIPLINK.ARJ Cbs Complete text of R.Donnay about linkers         [1-04]
CLIPPLUS.ZIP Cln Object extension for CLIPPER 5.0                [1-14]
CLIPSQL.ARJ  Cln Demo of complete SQL library for CLipper        [1-05]
CLIPWARN.AJ  Cln Semaphore for convert WARNING: into ERRORLEVEL  [1-11]
CLPFON.ARJ   Cln Set of fonts for EXPAND.LIB from author         [1-03]
COMET.ARJ    Cln Demo version of communication library           [1-19]
COND.ARJ     Cln Builder of conditional indexes like SUBNTX      [1-03]
CWDEMO.ARJ   Cln Classworks lib written in CLASS(Y)              [1-13]
DBSCN2.ARJ   Cln Screen designer generator                       [1-05]
DIAL.CLN     Cln Dialer with using of FOPEN()                    [1-07]
DOC111.ARJ   Cln Documentor, newer version                       [1-08]
DTF102.ARJ   Cln .DBT files replacement, fully functional        [1-14]
ENDADD.ARJ   Cln replacement of incrementing last char of string [1-11]
GETKEY.ARJ   Cln Input oriented library, wordprocessing          [1-12]
GETPP.ARJ    Cln Modified GETSYS.PRG well documented             [1-19]
GSR151.ARJ   Cln Global Search and replace for programmers       [1-07]
HGLASS.ZIP   Cln Hour glass for indication of index progression  [1-04]
HILITO.ARJ   Cln Highlighting of keywords on screen              [1-19]
HOTKEY.ARJ   Cln Makin unique hot key letter for every arrat el. [1-14]
INDXSL.ARJ   Cln User Fields selection builder for index generate[1-03]
IOBASYS9.ARJ Cln Demo of S87 library and calling Clipper from C  [1-03]
IS.ARJ       Cln Several c sources of ISxxxx functions           [1-11]
JG2.ARJ      Cln Jumping between GET statements in READ          [1-08]
KF_LOKUP.ARJ Cln Set of program for database relations           [1-07]
LUTLIB.ARJ   Cln Another Clipper library                         [1-08]
MK30.ARJ     Cln Mouse library demo version                      [1-03]
MOVEGETS.ARJ Cln GETSYS change for moving between gets via VALID [1-03]
CLIPBBS 2-13                   Page 24                  28 Jun 1992


MSWIN.ARJ    Cln Detection of Windows mode when running Clipper  [1-14]
NFDESC2.ARJ  Cln NanForum library description list               [1-06]
NFLIB2.ARJ   Cln NanForum library main file                      [1-06]
NFSRC2.ARJ   Cln NanForum library Source files                   [1-06]
NOTATION.ARJ Cln Complete text of article about hungarian notat. [1-04]
NTXBAR.ARJ   Cln Bar of indexing via system interrupts           [1-19]
OCLIP.ARJ    Cln Object extension, real (not #define/command)    [1-12]
OOPSCL5.ARJ  Cln Another version of pseudo objects               [1-07]
PACKUP.ARJ   Cln ASM source of PACK/UNPACK replacement SCRSAVE.. [1-04]
PARTIDX3.ARJ Cln Partial indexing                                [1-12]
PAT1.ARJ     Cln CIX NanForum Libraryy PATCH                     [1-07]
PAT2-2.ARJ   Cln Fix for FLOPTST.ASM in Nanforum Library         [1-13]
PAT2-3.ARJ   Cln TBWHILE improvement for Nanforum libray         [1-14]
PAT2-4.ARJ   Cln FT_PEGS() patch for NFLIB                       [1-15]
PAT2-5.ARJ   Cln FT_TEMPFIL() patch for NFLIB                    [1-16]
POPUPCAL.ARJ Cln Popup calender                                  [1-05]
POSTPRNT.ARJ Cln Postscript printing from inside of Clipper      [1-14]
POWER10.ARJ  Cln French library                                  [1-07]
PRINTSUP.AJR Cln Low level BIOS routines for printing            [1-11]
QS20F.ARJ    Cln Screen designer, demo, looks very good          [1-11]
READPW.ARJ   Cln GETSYS change for password invisible reader     [1-03]
SCANCODE.ARJ Cln Database with scan codes                        [1-07]
SCRSAVE.ARJ  Cln Screen AntiBurning utility (inactivity snake)   [1-05]
SEGUE.ARJ    Cln Novell library - demo                           [1-15]
SHADO.ARJ    Cln Creating shadow on screen                       [1-14]
SHELP50A.ARJ Cln SuperHelp for Clipper                           [1-07]
SHOWANSI.ARJ Cln Displaying a ANSI from inside CLIPPER no ANSI.SY[1-15]
SNAP497.ARJ  Cln Beta version of SNAP, partially compatible to 5 [1-12]
SNAP50.ARJ   Cln dBASE/CLIPPER documentor supporting 5.01 little [1-15]
SOUND.ARJ    Cln Multiple TONE() used as one SOUND function      [1-06]
STATUS.ARJ   Cln Timer interrupt hooked status indicator         [1-12]
SUPER160.ARJ Cln SUPER.LIB for Summer87                          [1-13]
SYMBOL.ARJ   Cln Dumper of symbol tables of Summer87 .EXE        [1-03]
TBUNIQUE.ARJ Cln Browsing unique without unique index            [1-12]
TBWHL4.ARJ   Cln WHILE browsing using TBROWSE, well commented    [1-06]
TICKER.ARJ   Cln Real Time Clock, interrupt driven on screen     [1-12]
VOICE200.ARJ Cln VOICE synthetizing library for Clipper          [1-13]
VSIX711.ARJ  Cln Vernon Six Clipper utilities and library        [1-05]
VSIX800.ARJ  Cln Vernon's library, lot of functions              [1-12]
WIPEV11.EXE  Cln VERY good screen manipulation library           [1-11]
ZIP2BAR.ARJ  Cln Printing BAR (USPS) code on EPSON printer       [1-15]


Src can be:
    Cln     File is accesible on ClipperNet
    Cbs     File is accesible in HQ BBS of CLipper BBS Magazine


-------------------------------------------------------------------------------
CLIPBBS 2-13                   Page 25                  28 Jun 1992


===============================================================================
                                    CLIPBBS
===============================================================================


                             CLIPBBS Distribution

  CLIPBBS is special magazine about CLIPPER and CLIPPERing (or about
  another related problems and xBASE languages). This magazine is for
  free and articles aren't honored. Nobody can make a profit from the
  distribution of this magazine.

  CLIPBBS can be freely downloaded and uploaded to any BBS or any other
  public system without changes of original contents or number of files
  in original archive (kind of archive can be changed, but we are sup-
  porting ARJ archive because is best and smallest).

  If you are interested in CLIPBBS and would like to become a DISTRIBUTION
  site, contact publisher on 2:285/608@fidonet or 27:1331/4412@signet
  or just call to 31-10-4157141 (BBS, working 18:00->08:00, top is V32b) or
  voice to 31-10-4843870 in both cases asking for DANIEL (Docekal).

  Distribution sites:

  Clipper BBS Home system  
  
      NETCONSULT BBS, SYSOP Daniel Docekal, phone 31-10-4157141
      Daily 18:00 till 08:00 (GMT+1), sat+sun whole day
      Modem speed 1200, 2400, 9600, 12000, 14400 (V32b)
      2:285/608@fidonet.org

  United Kingdom   
  
      Welsh Wizard, SYSOP Dave Wall, phone 44-656-79477
      Daily whole day, modem speed HST

  Italy   
  
      Lady Bright BBS, SYSOP Gianni Bragante, Phone: +39-15-8353153
      20:00-08:00 monday to friday, from saturday 13:00 to 08:00 monday
      24h/24h holydays, 300-9600 baud v21,v22,v32,v42bis
      2:334/307@fidonet.org

  United States of America  
  
     The Southern Clipper, SYSOP Jerry Pults, phone 1-405-789-2078
      Daily whole day, modem speed HST

      The New Way BBS, SYSOP Tom Held, phone, 1-602-459-2412
      Daily 24hours, 1:309/1@Fidonet.org, 8:902/6@RBBS-Net

  Canada    
  
      SYSOP Gordon Kennet, phone 1-604-599-4451 
      Daily 24houts, 2400bps V42b, 1:153/931@fidonet.org

CLIPBBS 2-13                   Page 26                  28 Jun 1992


  WORLDWIDE   
  
  
      Clipper File Distrubution Network (ClipperNet, area CL-DOC)
      Various systems around whole world



-------------------------------------------------------------------------------
CLIPBBS 2-13                   Page 27                  28 Jun 1992


                     How to write articles in CLIPBBS?
  
  
  Submission of articles to CLIPBBS is really easy:
    Maximum of 78 characters per line, as long or as short as you like
    ASCII text.
    Choose from the list of extension which most describes your text, or
    just name it .ART as ARTicle and send it to publisher or to any
    distribution site via modem to BBS or with mailer as file attach.
    Article will come automatically appear in the next free issue.
  
  Extensions are:
  
          Articles (anything)             .ART
          Software                        .SOF
          News                            .NEW
          Question and Answers            .Q&A
          ANOMALIES and their comments    .ANO
          Letters to editors              .LET
          Advertisement                   .ADV
          Wanted                          .WAN
          Comments                        .CMS
          DUMP from conferences           .DMP
          Clipper Net                     .CLN
          
  That's all at the moment, there will probably be changes later, as the
  magazine evolves. If you have any ideas for a new section of CLIPBBS,
  please tell us, or just write an article about it.
  
  Daniel, publisher

-------------------------------------------------------------------------------
