 
 
         
       ޱޱޱޱޱޱޱ
       ްޱޱޱްޱްޱްްްޱ
       ޱޱޱޱޱޱޱޱްޱ
       ޱޱޱޱޱޱޱ
       ޱޱޱޱްްޱްޱޱ
       ޱޱޱޱޱޱޱޱޱްްޱ
       ޱޱޱޱޱޱޱ
       
       
         
 
   Volume 1, Number 18                                   24 December 1991
 
                  (c) Daniel Doekal, All Rights Reserved
 
      The BBS Clipper magazine, published WEEKLY, 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
    Codeblocks, is it for something or not?  ...............................  1
 2. ANOMALIES  .............................................................  7
    ANOMALIES reports and commets  .........................................  7
 3. CLIPPER NET  ...........................................................  8
    Index of described files in Clipper BBS Magazine  ......................  8
    ATTENTION! PDNDBASE Are is coming to be closed  ........................  9
 4. CLIPBBS  ............................................................... 11
    CLIPBBS distribution  .................................................. 11
    CLIPBBS, how to write an article!!!  ................................... 13

                                   - - - - -
 CLIPBBS 1-18                   Page 1                   24 Dec 1991


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


                    Codeblocks, is it for something or not?
                                 part ONE
 
 New serie is starting just NOW...... <grin>
 
 CODEBLOCK, new invention in Clipper 5.x described by Nantucket very shortly
 and without any effort to start new revolution in Clipper programming which
 Codeblock for sure is.
 
 For someone who knows "C" language is here a simple analogy of CodeBlock in
 this language. Codeblock is equivalent of POINTER TO FUNCTION which can be
 used for calling or any other manipulation with this function/pointer.
 Clipper is not yet giving any freedom in programming like "C" language,
 therefore Codeblock implementation is little different.
 
 Let say we will create simple program:
 
  1 function Main()
  2 local   bToDo := {|| MyFunction()}
  3     clear
  4     ? "starting function defined in bToDo"
  5     eval(bToDo)
  6     ? "function ended"
  7 return (NIL)
 
 After compilation of this program will programmer get of course error about
 undefined MyFunction(). Therefore we must put another few lines into file:
 
  8 function MyFunction()
  9     ? "- function was called by Eval() of codeblock"
  10return (NIL)
 
 CODEBLOCK which is defined on line (2) is telling simple story to compiler.
 First "{||" that we want to define codeblock ( "{" is just ARRAY, "{|" is
 just codeblock) and this codeblock will contain "program" represented at
 present case by one function "MyFunction()". Function will NOT get any
 parameters when called via this Codeblock.
 
 Line (5) then start execution of this Codeblock via EVAL() function which is
 entitled to EVALUATE codeblock. "Evaluate" term is used correctly in this
 case, because Codeblocks are used for passing and returning values also,
 therefore "Evaluate" is much correct that just EXECUTE (DOS program is
 executed in Clipper via RUN statement, and is not able to return ANY value
 back..).
 
 Evaluation of Codeblock will simple get definition of Codeblock (your
 debugger will also show place in source where codeblock is defined) and
 continue in program which is defined in BODY of codeblock. After all of it
 will continue normal running of program.
 
 At this moment, noone can see what is a profit from using a codeblock. Let us
 CLIPBBS 1-18                   Page 2                   24 Dec 1991


 take another example:
 
    function Main()
    local bToDo
        aadd(bToDo, {"First Menu Line", {|| FunctionOne()}  })
        aadd(bToDo, {"Second Menu Line",{|| FunctionTwo()}  })
        aadd(bToDo, {"Last Menu Line",  {|| FunctionThree()}})
        DoMenu(bToDo)
    return (NIL)
 
 What's happening now, bToDo will contain array of lines for MENU and
 codeblock which belong to every line from menu. Call of ONE function called
 DoMenu() with parameter of defined menu will draw menu on screen, ask for
 choice of needed line and then:
 
    function DoMenu(aDef)
        ..some lines of drawing menu, selection by user..
        EVAL(aDef[User_selected,2])
        ..some lines of restoring screen
    return (NIL)
 
 EVAL() function will then just RUN needed function which belongs into
 selected menu line. On this simple way is possible to eliminate old way of
 using MACRO evaluation for this or writing millions of DO CASE construction
 every different for different menu.
 
 And now, we are at important point. MACROs and CODEBLOCKS are functionally
 equal or not? Yes, they can be used on the same way with one big difference:
 
     CODEBLOCK is compiled and LINKED into application and then JUST
     executed in form of already linked code
 
     MACRO is stored in application in ASCII form and then is COMPILED
     and LINKED at RUNTIME.
 
 Comparation table for MACRO and CODEBLOCK CAN BE:
 
                                     MACRO           CODEBLOCK
 
 A.  already linked and compiled         NO              YES
 B.  linked and compiled at runtime     YES               NO
 C.  is using any special part
      of runtime modules of libraries   YES               NO   (about 30KBs)
 D.  is taking time of running          YES               NO
 E.  can be saved in .MEM or .DBF       YES (text)        NO
 F.  can pass parameters in full
      capabilities of Clipper            NO              YES
 G.  there is a check of existence
      of used functions or names         NO              YES
 
 Let us now discuss little bit above mentioned comparation.
 
 A.  Codeblock is compiled and linked during compiling and linking of
     application, therefore .EXE file contains only compiled and prepared
     code of Codeblock.
 
 CLIPBBS 1-18                   Page 3                   24 Dec 1991


 B.  MACRO instad is saved into .EXE as is defined in program in ASCII
     form and during running of .EXE is compiled and linked EACH time
     when is needed. CLIPPER is using for this functions which normally
     are not used.
 
 C.  Those functions are using about 30KB of memory and .EXE size and
     normally nobody needs them.
 
 D.  Also of course, calling of functions for MACRO means that it will
     take additional time to do this job. Codeblock has NOT this time because
     is already prepared during compile-link cycle.
 
 E.  Saving of MACRO is possible anywhere where programmers wants. It's simple
     text as is used in program. CODEBLOCK is impossible to save because it is
     ADRESS pointing somewhere into .EXE which is used in EVAL() function for
     passing execution onto this adress. Some people are offering way to save
     CODEBLOCKs in way of saving MACRO which is later reevaluated into
     codeblock using construction &("{||"+block+"}") and assigning result into
     variable which contains real codeblock. But this solution has advantage
     of saving, but it IS STILL MACRO and not codeblock.
     Anyway, i NEVER had any need to save codeblock to disk....
 
 F.  Calling a function in macro way:
 
         cMacro := "MyFunc(par1,par2)"
         result := &cMacro
 
     in not equal to calling a CODEBLOCK:
 
         bBlock := {|par1,par2| MyFunc(par1,par2)}
         result := Eval(bBlock,par1,par2)
 
     In case of MACRO there is limitation which is not nice. This limitation
     is coming from fact, that parameters passed into MyFunc() in presented
     example MUST have allways names "par1" and "par2". In Codeblock case one
     can just use:
 
         result := Eval(bBlock,FirstParameter,RowLine)
 
     And is problem of codeblock to transfer correct values into MyFunc()
     because definition of Codeblock is defining FORMAL NAMES of parameters,
     instead MACRO defintiion is defining REAL NAMES of parameters.
 
     Also limitation is in fact, that parameters used in MACRO MUST be
     non-local or non-static variables, because they are INVISIBLE in any
     macro evaluation..
 
 G.  On the same moment is there one important change from MACRO to codeblock,
     all names used in definition are checked in case of CODEBLOCK for
     existence or definition. MACRO definition are NOT checked in any way.
     Therefore can happend:
 
         myMacro := "substr(cString,10,2)+padr(cString2,5)"
 
     Can result in error DURING running of program (which is one from worst
     things happening to programmer) because for example padr() function was
 CLIPBBS 1-18                   Page 4                   24 Dec 1991


     NOT linked in program and programmer forget to use EXTERN statement for
     forcing linker to this function.
 
         myBlock := {|| substr(cString,10,2)+padr(cString2,5)}
 
     Will ALLWAYS link needed functions into your program because linker will
     see request for PADR() immediately during linking.
 
     This can cause serious troubles in case of MACRO using in Clipper
     programs which are jumping out during running without visible reason with
     messages about undefined functions. They are just not linked in, because
     programmer forget to EXTERN them.
 
 Back to lessons now :-)
 
 In general, definition of Codeblock looks like this:
 
     Codeblock  :=      "{|" [parameter[,...]] "|" definition "}"
 
     (this magazine is not able to use bold or underline, therefore
      i had to use some strange way of picking up parts of definition)
 
     First, "{|" starts definition of Codeblock, between "{" and "|" can be
     number of spaces which one wants without any troubles. It is not
     important. Combination of this two characters IS starting definition
     and is important for compiler to recognize codeblock definition.
 
     [parameter[,...]] is OPTIONAL list of FORMAL parameter names. Codeblock
     can receive parameters from EVAL() function (or any other CODEBLOCK
     related functions), but they have to be defined in definition of
     Codeblock. All names used in defintion of parameters are FORMAL and they
     have NOT connection to other names in program. Parameter names are as
     usual separated by comma character.
 
     Definition of parameter part is then closed with "|" character. In
     general, "|" characters are used for CLOSING parameters definition
     in Codeblock definition. "||" represents then EMPTY parameter definition
     and MUST be presend in case of definition of Codeblock which is NOT
     using parameters.
 
     BODY of codeblock contains definition of program to execute for codeblock
     when EVALuated(). THis body can be ONE function, or MORE functions
     separated with commas. This possibility is not used very often by
     programmers, because is not yet well known and got used. Therefore
     following example are defining codeblocks:
 
         {|| MyFunction()}
                     just call function nothing else
         {|x,y,z| Max(Max(x,y),Max(y,z))}
                     this is definition of function to pickup max
                     value from three, it can be defined also as:
                         function Max3(x,y,z)
                         return Max(Max(x,y),Max(y,z))
                     Codeblock can be used as   EVAL(block,14,5,8)
                     Function can be used ad    Max3(14,5,8)
         {|nArea,cSeek|  dbselectarea(narea),;
 CLIPBBS 1-18                   Page 5                   24 Dec 1991


                         dbseek(cSeek)}
                     just two lines of code equivalent in one codeblock
                     which can be used as EVAL(ALIAS("MYDBF"),"Hello")
         { {K_UP    , {|b| b:up()   } },;
           {K_DOWN  , {|b| b:down() } },;
           {K_LEFT  , {|b| b:left() } },;
           {K_RIGHT , {|b| b:right()} }  }
                     this is a ARRAY definition which is used as
                     "program" for executing action dependent on
                     pressed key. AEVAL() is used for this job as
                     another example of Codeblock() using:
                        AEVAL(aArray,{|aOne| TryIt(aOne)})
                       
                        function TryIt(aOne)
                            if lastkey()==aOne[1]
                                Eval(aOnep[2],BrowseBlock)
                            endif
                        return (NIL)
                     First one AEVAL() is just scanning whole array
                     and for every elemt is evaluating codeblock with
                     one parameter - field of array. Then codeblock is
                     calling TryIt({key , blockforthiskey}) and TryIt()
                     function will receive small array which then will
                     use for testing if key was the same as defined in
                     array. If so, then CodeBlock belongs to this key will
                     be promptly executed. This few lines construction
                     which is well flexble to change is replacement of:
 
                     do case
                         case lastkey()=K_UP
                             b:up()
                         case lastkey()=K_RIGHT
                             b:right()
                         ....etc....etc...
 
     That's it. Few examples.
 
 Another possibility of CodeBlock is, that body of codeblock RETURNS via
 EVAL() (or any other codeblock function) latest return value (return value of
 latest expression in body definition). Therefore it can be used for passing
 anything back (as for example of "max3" function). There is NO limitation of
 type of returned value.
 
 Clipper 5.0x is coming with Codeblock facilities and is huge using them at
 many places. Just take a short look onto STD.CH file defining translation of
 some clipper commands:
 
    #command SET FORMAT TO <proc>.<ext>                                     ;
                                                                            ;
          => _ProcReq_( <(proc)> + "." + <(ext)> )                          ;
           ; __SetFormat( {|| <proc>()} )
 
     See in __SetFormat, that it is directly pointing into "procedure" name
     via constructed codeblock.
 
    #command SET FORMAT TO <x:&>                                            ;
 CLIPBBS 1-18                   Page 6                   24 Dec 1991


                                                                            ;
          => if ( Empty(<(x)>) )                                            ;
        ;   SET FORMAT TO                                                ;
        ; else                                                           ;
        ;   __SetFormat( &("{||" + <(x)> + "()}") )                      ;
        ; end
 
     In this case one actually can see how to make MACRO/CODEBLOCK
     conversion.
 
    #command SET KEY <n> TO <proc>                                          ;
          => SetKey( <n>, {|p, l, v| <proc>(p, l, v)} )
 
     For sure is better use directly SetKey() function instead of OLD format
     with SET KEY command. In both cases it's ending in SetKey() which is
     using of course Codeblock.
 
    #command REPLACE [ <f1> WITH <x1> [, <fn> WITH <xn>] ]                  ;
             [FOR <for>]                                                    ;
             [WHILE <while>]                                                ;
             [NEXT <next>]                                                  ;
             [RECORD <rec>]                                                 ;
             [<rest:REST>]                                                  ;
             [ALL]                                                          ;
                                                                            ;
          => DBEval(                                                        ;
                     {|| _FIELD-><f1> := <x1> [, _FIELD-><fn> := <xn>]},    ;
                     <{for}>, <{while}>, <next>, <rec>, <.rest.>            ;
                   )
 
     This is typicall example, totally REDUNDANT REPLACE command is replaced
     immediately into DBEVAL() function with CODEBLOCK consists of:
 
             {|| FIELD->NAMEOFIT := value}
 
     On the same way are used DELETE, RECALL, UPDATE, COUNT, SUM,
         AVERAGE  commands...
 
 to be continued....

 ------------------------------------------------------------------------------
 CLIPBBS 1-18                   Page 7                   24 Dec 1991


 ==============================================================================
                                   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
 
 

 ------------------------------------------------------------------------------
 CLIPBBS 1-18                   Page 8                   24 Dec 1991


 ==============================================================================
                                  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]
 CALC14.ARJ   Cln PoPup Calculator                                [1-08]
 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]
 CLIPLINK.ARJ Cbs Complete text of R.Donnay about linkers         [1-04]
 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]
 COND.ARJ     Cln Builder of conditional indexes like SUBNTX      [1-03]
 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]
 ENDADD.ARJ   Cln replacement of incrementing last char of string [1-11]
 GETKEY.ARJ   Cln Input oriented library, wordprocessing          [1-12]
 GSR151.ARJ   Cln Global Search and replace for programmers       [1-07]
 HGLASS.ZIP   Cln Hour glass for indication of index progression  [1-04]
 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]
 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]
 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]
 POPUPCAL.ARJ Cln Popup calender                                  [1-05]
 POWER10.ARJ  Cln French library                                  [1-07]
 PRINTSUP.AJR Cln Low level BIOS routines for printing            [1-11]
 CLIPBBS 1-18                   Page 9                   24 Dec 1991


 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]
 SHELP50A.ARJ Cln SuperHelp for Clipper                           [1-07]
 SNAP497.ARJ  Cln Beta version of SNAP, partially compatible to 5 [1-12]
 SOUND.ARJ    Cln Multiple TONE() used as one SOUND function      [1-06]
 STATUS.ARJ   Cln Timer interrupt hooked status indicator         [1-12]
 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]
 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]
 
 
 Src can be:
     Cln     File is accesible on ClipperNet
     Cbs     File is accesible in HQ BBS of CLipper BBS Magazine
 

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


      As of January First, 1992, the Programmers Distribution Network
      will be closing down the file area known as PDNDBASE.  This is
      because of a new file distribution network that has moved into
      Zone 1 via my system called ClipperNet.
 
      ClipperNet is run by Mike Paschen, at 2:240/100 1:107/230 (and
      1:107/232) is handling Zone 1, and feeding a node in Zone 2.
 
      The (current) locations that one may link into the ClipperNet in
      Zone 1 and 2 are:
 
 Zone 1:
 13/13 - 102/531 - 107/230 232 - 116/36 - 134/21 - 147/17 - 170/407
 274/13 - 282/56 - 283/125 - 324/121 - 395/3 - 2604/101 - 3629/269
 
 (*Please note that 13/13 is currently not accepting any NEW links,
 except ones that are already established through his system*)
 
 Zone 2:
 200/305 306  201/254 - 231/62 - 234/64 - 240/1 100 102 600 - 241/2004
 2103 4008 4152 4501 4511 4512 5302 5303 5603 5608 5609 7000 7605 8007
 241/8501 - 242/47 66 92 - 243/29 93 - 245/5 9 36 60 102 - 246/5 10 12
 246/15 26 32 - 247/1 9 31 - 249/29 - 255/34 - 282/510 - 283/314
 285/402 608 - 285/610 - 294/5 296/10 20 - 302/801 804 807 - 313/9
 321/100 - 331/110 - 341/6 8 14 25 - 344/3 - 500/223
 
 
      The file areas currently available are:
 
      CL-50         Clipper-Net Clipper 5.0 Tools
      CL-87         Clipper-Net Clipper '87 Tools
 CLIPBBS 1-18                   Page 10                  24 Dec 1991


      CL-DBASE      Clipper-Net dBase Tools
      CL-DFLEX      Clipper-Net DFLEX Tools
      CL-DOC        Clipper-Net Documents, Anomalyreports
      CL-FCO        Clipper-Net Force (FCO) Tools
      CL-FOX        Clipper-Net FoxBase Tools
      CL-SQL        Clipper-Net SQL Tools
      CL-TOOL       Clipper-Net Clipper related Tools
 
      And two EchoMail conferences:
 
      ANNOUNCE.CLN  File Announcements
      SYSOPS.CLN    SysOps CLN support conference.
 
      1:107/230 and 232 are still accepting nodes for linking into the
      CLN.  I would prefer to have the PDN and CLN follow along the
      same lines, but this may take some time.  If you were picking up
      the PDNDBASE area from your PDN uplink, please request that your
      uplink pick up the ClipperNet from their uplink.  It is not
      mandatory that they do so, (nothing in the PDN is mandatory), but
      if you ask nice, they may do it for you!  :-)
 
      Please, help me to keep the list of nodes that are getting
      ClipperNet current by sending me link information as it occurs.
      This helps in finding the best possible link for everyone.
 
      IF YOU ARE NOT CURRENTLY PICKING UP THE PDNECHO, IT IS AVAILABLE
      ON THE BACKBONE.  PLEASE LINK INTO THIS, AS THERE ARE MAJOR
      CHANGES HAPPENING IN ALL THE FILE DISTRIBUTION NETWORKS, AND YOU
      WILL NEED TO KEEP ABREAST OF THEM!
 
      If you have any questions, my voice number is 516-666-6514, or
      you can send NetMail.
 
      Happy Holidays, Don't Drink and Drive, and enjoy the new services
      provided.
 
      /* Erik */

 ------------------------------------------------------------------------------
 CLIPBBS 1-18                   Page 11                  24 Dec 1991


 ==============================================================================
                                    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)
 
   United Kingdom   
   
       Welsh Wizard, SYSOP Dave Wall, phone 44-656-79477
       Daily whole day, modem speed HST
 
   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, 8:902/6@RBBS-Net
 
   Canada    
   
       SYSOP Gordon Kennet, phone 1-604-599-4451 
       Daily 24houts, 2400bps V42b, 1:153/931@fidonet
 
   WORLDWIDE   
   
   
       Clipper File Distrubution Network (ClipperNet, area CL-DOC)
       Various systems around whole world
 
       Programmers Distribution Network (PDN, area PDNDBASE)
       Various systems around whole world
 CLIPBBS 1-18                   Page 12                  24 Dec 1991


 

 ------------------------------------------------------------------------------
 CLIPBBS 1-18                   Page 13                  24 Dec 1991


                      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

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