home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_GEN / HLPSYS10.ZIP / HELPSYS.DOK < prev    next >
Text File  |  1993-12-28  |  25KB  |  705 lines

  1.  
  2.                                ┬  ┬     ┌─────┤
  3.                                ├──┤ elp └─┐ ys
  4.   ████████████████████████████ ┴  ┴ ├─────┘    ████████████████████████████
  5.                              █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
  6.                              ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  7.   ■ HelpSys 1.0
  8.  
  9.   Welcome to HelpSys V1.0, the universal Turbo-Vision helpfile creating 
  10.   utility. HelpSys is a complete help-project-managing utility, that makes 
  11.   it is easy to create, compile, maintain and debug Turbo-Vision style 
  12.   helpfiles.
  13.  
  14.   The included im- and exporters support converting existing helptexts
  15.   and helpfiles into other formats. It's possible to create multi-target 
  16.   helpfile, e.g. to create turbo-vision and windows helpfile in just one 
  17.   project.
  18.   
  19.  
  20.  
  21.   ■ Installation
  22.  
  23.   All HelpSys files should be copied into there own directory. HelpSys 
  24.   will create a subdirectory for each project.
  25.  
  26.  
  27.  
  28.   ■ Introduction
  29.  
  30.   This introduction will show how to create a new project, write helptopics, 
  31.   insert links and add the compiled helpfile into your Turbo-Vision program.
  32.   And some tricks how to optimize the help system.
  33.   
  34.   Attention: You should be familar with programing Turbo Vision and using
  35.              Borland Pascal. 
  36.  
  37.  
  38.   Step 1.) Creating a new project
  39.    Press F10|Project|New. Enter the project name, it must be a valid dos 
  40.    directory name, then enter a short description. HelpSys will open the 
  41.    project window.
  42.  
  43.    
  44.   Step 2.) Creating a help topic
  45.    Use the NEW-Button to create a new topic and its empty helppage. 
  46.    A topic has a symbolic name (i.e. aboutbox) that is refering the 
  47.    helppage, the helpcompiler will generate a pascal context file 
  48.    (i.e. "hcaboutbox = 14;") that can be used in the program source 
  49.    code.
  50.  
  51.    The syntax of a topic name is:
  52.      symbol[=+|=number|=+number][, symbol[=+|=number|=+number][...]]
  53.  
  54.    The symbolic topic name can be any combination of characters and 
  55.    numbers, a topicpage can have multiple topic names. After the topic 
  56.    name a topic number can follow, otherwise HelpSys will assign 
  57.    a topic number during compilation.
  58.  
  59.    More symbolic topic names can be defined by separating them with comma.
  60.  
  61.    I.e.:
  62.  
  63.     foo                   assigns a topic FOO
  64.     baa=100               assigns a topic BAA with page number 100
  65.  
  66.     foo1, baa1, baa2=200  multiple assignment
  67.  
  68.    When the topic is defined, it will appear in the topic list of the
  69.    project window. After placing the focus on the topic and pressing ENTER,
  70.    the topic editor will be opend. It will look something like that:
  71.  
  72.     ; topic created 05.07.93 09:11:37
  73.     ;
  74.     .TOPIC about
  75.     ;
  76.                                      <- up from here it's your job!
  77.      #f{About:about}#!
  78.      ▀▀▀▀▀▀▀▀
  79.  
  80.     This is a about box.
  81.     ^
  82.     │
  83.     └─ this is the first column
  84.  
  85.    The first four lines are created automaticly by HelpSys. They should
  86.    never be changed manualy!!
  87.  
  88.    The format of a help page is quite simple: Any text can be written into
  89.    it.
  90.  
  91.    Some special hints:
  92.     - Text begining in the first column will be wrapped, if it does not fit
  93.       into the window. All adjacent wrappable lines are wrapped as a
  94.       paragraph. To avoid wrapping, text must start with one or more
  95.       blanks.
  96.  
  97.     - Comments can be placed into helptext begining with a ";" in the 
  98.       first column.
  99.       Attention: HelpSys has a special methode to save topics. Due to 
  100.                  that methode, it is not possible to place comments at 
  101.                  the end of a topic file. If a comment must be placed at 
  102.                  the end, please use the ".ENDTOPIC" command to define
  103.                  the end of a topic.
  104.  
  105.     - A compiler keyword is defined by placing a "." into the first column,
  106.       following the keyword.
  107.  
  108.    Links to other pages can be inserted by placing cross references (links)
  109.    into the text. The syntax of a link is:
  110.  
  111.      {link description:topic}
  112.  
  113.    If the link description is equal to the topic, the topic can be omited. 
  114.    The text in the brackets is highlighted by the help viewer. This text 
  115.    can be selected and will take the user to that topic page.
  116.  
  117.    To insert links to already defined pages, the local editor function 
  118.    "insert link" (Alt+F10 or ^k^t) is helpfull...
  119.  
  120.  
  121.   Step 3.) Compiling
  122.    After writing all (or some) pages, the helpfile can be compiled by using
  123.    F10|Run|Compile (F9) or F10|Run|Run (Ctrl+F9). The methode of this
  124.    functions is equal the pascal compiler: COMPILE will compile every time 
  125.    again, RUN will only compile, if it is needed otherwise it will run
  126.    the helpfile at once.
  127.  
  128.    After errorfree compilation HelpSys will parse the pascal symbol file 
  129.    and display a topics list and the page numbers created for the pages.  
  130.    
  131.    Now it's possible to test the helpfile by pressing ENTER after focusing 
  132.    the corrosponding topic. A helpwindow will be opend and the helptext 
  133.    will be displayed. Choose between continuing displaying helptextes 
  134.    from the topics window or switch to the helpwindow and testing the 
  135.    helppage links.
  136.  
  137.    If an error is encounted during compilation, the belonging topic will 
  138.    be opened and the position of the error will be marked and an error 
  139.    description will be shown.
  140.  
  141.  
  142.   Step 4.) Including help into Turbo-Vision
  143.    Hint: The HelpSys package includes a sample program in the EXAMPLE dir. 
  144.          See this for a complete example about usage of help inside your
  145.          Turbo Vision program.  
  146.   
  147.    Including help into Turbo-Vision is quite easy: Each TView object and 
  148.    the descendants own a constant "helpctx". If F1 is pressed, Turbo-Vision 
  149.    will determine by calling the GETHELPCTX-methode the value of the actual 
  150.    helpctx.
  151.  
  152.    So the only thing to do is assigning the constants from the pascal 
  153.    symbol file made by HelpSys to the belonging objects. A dialog would 
  154.    look something like this:
  155.  
  156.      constructor texampledialog.init;
  157.      {...}
  158.      begin
  159.        {...}
  160.        inherited init(r,'Preferences');
  161.        helpctx:=hcpreverences_dialog; {.topic preverences_dialog }
  162.        
  163.        p:=new(Pinputline, Init(R,100)));
  164.        p^.helpctx:=hctheinputlinehelp; {.topic theinputlinehelp }
  165.        insert(p);
  166.  
  167.        {...}
  168.        p:=new(Pbutton, Init(R,'Buttontext',cmok,bfdefault)));
  169.        p^.helpctx:=hcbuttonhelp; {.topic buttonhelp }
  170.        insert(p);
  171.  
  172.        r.assign(01,06,49,07);
  173.        p:=new(PCheckboxes, Init(R,
  174.            NewSItem('a Tcheckboxs field',
  175.            NewSItem('a Tcheckboxs field',
  176.            NewSItem('a Tcheckboxs field',
  177.            NewSItem('a Tcheckboxs field',Nil)))));
  178.        p^.helpctx:=hc1000;
  179.        insert(p);
  180.  
  181.        SelectNext(False);
  182.      end;
  183.  
  184.    TCheckboxes and TRadiobuttons will give back "helpnumber" for the first
  185.    item, "helpnumber+1" for the next item and so one. This is very nice, if
  186.    help is needed for each item, but mostly it is not usefull. To deal with
  187.    this problem, there is only ONE solution:
  188.  
  189.      function tsetupdialog.gethelpctx;
  190.      Var tmp : word;
  191.      begin
  192.        tmp:=inherited gethelpctx;
  193.        case tmp of
  194.          hc1000..hc1010-1 : tmp:=hchelpforcheckboxes;
  195.        end;
  196.        gethelpctx:=tmp;
  197.      end;
  198.  
  199.    Attention: The way of defining a multi-topic line will not work. It
  200.               might work most times, but is not sure to assume, that
  201.               HelpSys generates consecutive topic numbers.
  202.  
  203.               (It will not. HelpSys will try to create consecutive
  204.                numbers, but it also will try to fill gaps. It won't work,
  205.                neither TVHC nor HelpSys can do that job. So its better to
  206.                be one the sure side....)
  207.                
  208.    If help is needed for every item, I suggest the following workaround:
  209.                
  210.      function tsetupdialog.gethelpctx;
  211.      Var tmp : word;
  212.      begin
  213.        tmp:=inherited gethelpctx;
  214.        case tmp of
  215.          hc1000+00 : tmp:=hc_help_for_item1;
  216.          hc1000+01 : tmp:=hc_help_for_item2;
  217.          hc1000+02 : tmp:=hc_help_for_item3;
  218.          hc1000+03 : tmp:=hc_help_for_item4;
  219.          hc1000+04 : tmp:=hc_help_for_item5;
  220.          hc1000+05 : tmp:=hc_help_for_item6;
  221.         else
  222.          tmp:=hc_generaldialoghelp 
  223.        end;
  224.        gethelpctx:=tmp;
  225.      end;
  226.  
  227.  
  228.    Now a quite important step: REGISTERHELPFILE!! You must register the 
  229.    streams HELPFILE uses. If this is not done, all HELPFILE objects will
  230.    FAIL, if a constructor is called. So: Include the REGISTERHELPFILE 
  231.    statement into your applications init constructor.
  232.  
  233.    The next step is to complement the applications GETEVENT-methode: It 
  234.    must get the helpcontext, open the helpfile (include all the error-
  235.    handling) insert or execute the helppage and so one...
  236.    
  237.    Why is this done within TPROGRAM.GETEVENT and not TPROGRAM.HANDLEEVENT? 
  238.    Good question: It is not sure to assume, that a Turbo Vision program will 
  239.    call the HANDLEEVENT, if it does not know what to do with the actual 
  240.    event (why should it??).
  241.    An example is a TMENUVIEW.EXECUTE (that methode, that handles the 
  242.    menubar): It will go into a "repeat {...} getevent {...} until"-loop 
  243.    that will only end with closing the menu. It will never call any 
  244.    HANDLEEVENT... 
  245.    
  246.    The code would look like this:
  247.  
  248.    procedure tmyapp.GetEvent(var event : tevent);
  249.    var   W         : PHelpWindow;
  250.          HFile     : PHelpFile;
  251.          HelpStrm  : PDosStream;
  252.          helpfound : PHelpWindow;
  253.          hlpctx    : word;
  254.  
  255.          modal     : boolean;
  256.  
  257.    Const nonmodal      : boolean = false;
  258.          helpopenerror : boolean = false;
  259.  
  260.      function isdialoghelp:boolean;
  261.      begin
  262.        (*
  263.        isdialoghelp:=modal;
  264.        *)
  265.        isdialoghelp:=(hlpctx>hc0firstcounterend) or (hlpctx<1);
  266.      end;
  267.  
  268.      procedure openhelpstream;
  269.      begin
  270.        w:=nil;
  271.    { you should use your helpfilename here... }
  272.        HelpStrm := New(PDosStream, Init('example.hlp',stOpenRead));
  273.        if (HelpStrm^.Status<>stOk) then begin
  274.    { help not found or not opend }
  275.          MessageBox(^c'Unable to open help', nil, mfError+mfOkButton);
  276.          ClearEvent(Event);
  277.          helpopenerror:=true;
  278.          exit;
  279.        end;
  280.        HFile:=New(PHelpFile, Init(HelpStrm));
  281.    { will be nil, if not REGISTERHELPFILE }
  282.        if (hfile<>nil) and (not hfile^.modified) then begin
  283.          W:=New(PHelpWindow,Init(HFile,HlpCtx,isdialoghelp));
  284.          disposestr(w^.title);
  285.          w^.title:=newstr('Demo Help');
  286.         end else begin
  287.    { didn't look like a Turbo Vision help or not REGISTERHELPFILE }
  288.          MessageBox(^c'Not a valid helpfile!', nil, mfError+mfOkButton);
  289.          ClearEvent(Event);
  290.          helpopenerror:=true;
  291.          exit;
  292.        end;
  293.      end;
  294.  
  295.      procedure callhelp;
  296.      Var deskcalc : byte;
  297.  
  298.        procedure quickcalcdesktop(p : pview); far;
  299.        begin
  300.          inc(deskcalc);
  301.        end;
  302.  
  303.        procedure findhelpfile(P: PView); far;
  304.        begin
  305.    { if helpwindow already on desktop: focus and switch to page }
  306.          if (p<>nil) and (p^.Valid(cmClose)) and (typeof(p^)=typeof(thelpwindow)) and
  307.             (phelpwindow(p)=myhelpwin) then begin
  308.            helpfound:=phelpwindow(p);
  309.  
  310.            phelpwindow(p)^.focus;
  311.            phelpwindow(p)^.phv^.SwitchToTopic(hlpctx);
  312.          end;
  313.        end;
  314.  
  315.        procedure gotomodalpage(P: PView); far;
  316.        begin
  317.    { if helpwindow already modal on desktop: switch to page }
  318.          if (p<>nil) and {(p^.Valid(cmClose)) and}
  319.             (typeof(p^)=typeof(thelpwindow)) and
  320.             (phelpwindow(p)^.ismodal) then begin
  321.            phelpwindow(p)^.phv^.SwitchToTopic(hlpctx);
  322.          end;
  323.        end;
  324.  
  325.      begin
  326.        deskcalc:=0;
  327.        desktop^.foreach(@quickcalcdesktop);
  328.    { desktop empty and no helpctx? }
  329.        if (deskcalc=1) and (hlpctx=0) then
  330.          hlpctx:=0{hcmenudesktop};
  331.  
  332.        if (not nonmodal) and (not isdialoghelp) and (not helpopenerror) then begin { ein Fenster ruft...}
  333.    { non modal }
  334.          helpfound:=nil;
  335.          desktop^.foreach(@findhelpfile);
  336.  
  337.          if (helpfound=nil) or (helpfound<>myhelpwin) then begin
  338.            openhelpstream;
  339.            if (not helpopenerror) and (ValidView(W)<>nil) then begin
  340.              desktop^.insert(W);
  341.              ClearEvent(Event);
  342.              myhelpwin:=w;
  343.            end;
  344.           end else
  345.            ClearEvent(Event);
  346.         end else begin
  347.    { modal }
  348.          if (not nonmodal) then begin
  349.            nonmodal:=true;
  350.  
  351.            openhelpstream;
  352.            if (not helpopenerror) and (ValidView(W)<>nil) then begin
  353.              execview(W);
  354.              dispose(w,done);
  355.            end;
  356.  
  357.            nonmodal:=false;
  358.            ClearEvent(Event);
  359.          end;
  360.        end;
  361.      end;
  362.  
  363.  
  364.    begin
  365.      inherited GetEvent(Event);
  366.  
  367.      if (Event.What=evCommand) and (Event.Command = cmHelp) then begin
  368.    { helpwindow open? }
  369.        if (desktop^.current<>nil) and (typeof(desktop^.current^)=typeof(thelpwindow))
  370.    {  yes: help about help }
  371.          then hlpctx:=hcabout
  372.         else
  373.    { no: check overridehelp }
  374.          if (overridehelp<>0)
  375.            then hlpctx:=overridehelp
  376.            else begin
  377.    { ok, get help. see Notice 2 }
  378.              if (desktop^.current=nil) and (current=pview(menubar))
  379.                then hlpctx:=0
  380.                else hlpctx:=gethelpctx;
  381.          end;
  382.        callhelp;
  383.      end;
  384.  
  385.    { open helpindex, if help not on desktop }
  386.      if ((Event.What=evkeydown) and (Event.keycode=kbshiftf1)) or
  387.         ((Event.What=evcommand) and (Event.command=cmhindexcall)) then begin
  388.        hlpctx:=hcindexpage;
  389.        callhelp;
  390.      end;
  391.    end;
  392.  
  393.      Notice: OVERRIDEHELP can hold a helpctx, if assigning it to a dialog or
  394.              something other is not possible. A good example is the
  395.              messageboxfunction:
  396.  
  397.              i.e.:
  398.               overridehelp:=hcHelp_for_messagebox;
  399.               messagebox('Hello! You made a mistake:....
  400.               overridehelp:=0;
  401.  
  402.              Attention: Don't forget: Reset to zero immediate after use!!!
  403.              
  404.      Notice: Why the way of assigning help to the desktop via 
  405.                if (desktop^.current=nil) and (current=pview(menubar))
  406.                  then hlpctx:=0
  407.                  else hlpctx:=gethelpctx;
  408.              and not by defining the HELPCTX of TPROGRAM?
  409.              
  410.              If a page is assigned to TPROGRAM, you will get this helpctx
  411.              every time the actual item has no help. So if you have forgotten
  412.              to assign help to any item, the user would get a WRONG helppage,
  413.              if TPROGRAM.HELPCTX is defined.
  414.              
  415.              By this way the user will get the "No help avail"-string, if no
  416.              help is availible and the desktop-help, if desktop is empty. Or
  417.              anything you want. But no WRONG help.
  418.  
  419.  
  420.   Step 5.) Using the new HELPFILE.PAS
  421.  
  422.    HELPFILE.PAS defines some constants that must be redefined. They will 
  423.    be expained here.
  424.  
  425.    indexpagenummer       : word = 100;
  426.      INDEXPAGENUMMER defines the page, help will jump if Shift+F1 is pressed.
  427.      Needs redefinition!!
  428.  
  429.    hilfeueberhilfe       : word = 99;
  430.      HILFEUEBERHILFE defines the page, help will jump, if F1 is pressed 
  431.      within help. Needs redefinition!!
  432.      
  433.    cmhelplast            = 65001;
  434.    cmhelpindex           = 65002;
  435.      Two new commands, help uses internal.
  436.  
  437.    resizeabledialog      : boolean = false;
  438.      Set this to true, if a resizable helpdialog is wanted.
  439.  
  440.    createcompressedhelp  : boolean = false;
  441.      Only used by HelpSys. Changes have no effects.
  442.  
  443.    helpdialogtitle       : string80 = 'Help-Dialog';
  444.      This text is displayed as dialogtitle, if a non-modal help is opend.
  445.  
  446.    helpwindowtitle       : string80 = 'Help';
  447.      This text is displayed as dialogtitle, if a modal help is opend.
  448.      
  449.    nohelpInvalidStr      : string80 = #13' No help for this topic link.';
  450.      This text is displayed, if a link has no helptext.
  451.      
  452.    emptyhelpInvalidStr   : string80 = #13' This helppage is empty.';
  453.      This text is displayed, if the page is empty.
  454.      
  455.  
  456.    Best place for redefinition would be the init-constructor of your 
  457.    application object.  
  458.  
  459.      
  460.  
  461.   Step 6.) Optimizations 
  462.    - Define directorys for symbol- and helpfile with F10|Options|Project.
  463.      Every time, the helpfile has been compiled errorfree, HelpSys will 
  464.      copy the symbolfile and the helpfile into that directorys. So it's 
  465.      easy to have the pascal-project up to date.
  466.   
  467.      Hint: Multiple directorys can be entered by separating them with
  468.            ";".
  469.            It can be choosen between "COPY" and "COPY + RENAME".
  470.  
  471.            i.e.:
  472.  
  473.            If TEST.PAS is the file and the directory entry looks like 
  474.                 C:\DOS\;F:\TEST\PROJ\TEST.DAT;G:\PROJECT\NEW.PAS
  475.            it will
  476.            -> copy to c:\dos\test.pas
  477.            -> copy to f:\test\proj\test.dat
  478.            -> copy to g:\project\new.pas
  479.  
  480.  
  481.    - automatic index generation
  482.      Use the .INDEX-keyword to create an index page. The syntax of .INDEX 
  483.      is similar to link definition: 
  484.      .INDEX {about:about}
  485.      .INDEX {about HelpSys:about}
  486.  
  487.      HelpSys will generate a helppage (-> F10|Options|Compiler) that is 
  488.      sorted alphabetical and will look something like this:
  489.  
  490.      i.e.:
  491.        Contents
  492.        ▀▀▀▀▀▀▀▀
  493.  
  494.        #fA#!
  495.        {about:about}             
  496.  
  497.        #fC#!
  498.        {copyrights:copyrights}        
  499.  
  500.  
  501.    - Define DEFAULT.IC
  502.      If a new topic is created, the contents of DEFAULT.IC will be copied 
  503.      into the new topic. This makes it easy to create topic that have an 
  504.      unique style and are consistent all over the helpfile.
  505.      
  506.      HelpSys will search for the file in the project directory first, 
  507.      after that in the HelpSys directory.
  508.  
  509.  
  510.   ■ Warnings and Errors
  511.  
  512.   An error is a fatal mistake that aborts compiling. A warning is only a
  513.   hint, that something is not that way the writer might expect it is. 
  514.   Normaly warnings are caused by links that point to not existing help 
  515.   pages. This can be normal because the linked page will be created later,
  516.   but finaly all pages should have links to existing pages.
  517.  
  518.   
  519.  
  520.   ■ non-modal versus modal help
  521.  
  522.   I like non-modal help. It's easier for the user: help stays on desktop
  523.   and can be read during work. But sometimes it is not possible to insert
  524.   a non-modal help: every time a modal TVIEW is opend, help must be modal, 
  525.   too.
  526.  
  527.   But there is no way to detect, wether the open dialog/window is modal or 
  528.   not. So the solution must be found in a different way, one possible
  529.   solution is:
  530.  
  531.     - define a certain range of topic numbers, that is only assigned to
  532.       modal windows and
  533.     - define another one, that is only assigned to non-modal windows.
  534.  
  535.   To meet that point, HelpSys uses two different internal topic counters,
  536.   that are used during topic number generation. The first counter generates
  537.   topic numbers for modal windows, the other for non-modal windows.
  538.     
  539.   The independent counters are a bit strange to access: via "=+".
  540.  
  541.    I.e.:
  542.       autofirst           -> automatic generation
  543.       autofirst=200       -> define 200 as first topic counter 
  544.       autosecond=+        -> automatic generation
  545.       autosecond=+400     -> define 400 as second topic counter
  546.  
  547.       foo, baa=+, foo2=200, baa2=+
  548.  
  549.  
  550.  
  551.   ■ HelpSys's HELPFILE.PAS enhancments
  552.  
  553.   Although HelpSys helpfiles can be compatible with Borlands Turbo 
  554.   Vision 2.0 HELPFILE.PAS, HelpSys implements some additional features:
  555.  
  556.     - color support
  557.     - Alt+F1 (previous topic)
  558.     - Shift+F1 (index)
  559.     - compressed help
  560.     - ultra-fast movement on pages with lots of links
  561.     - keyboard sensitiv topic links: type in linktext
  562.  
  563.   To uses these features, it is needed to uses the HELPFILE.TPU (.TPP) 
  564.   include with HelpSys instead of Borlands HELPFILE.PAS. 
  565.   
  566.   It possible to use Borland's original HELPFILE.PAS but then helpfiles 
  567.   can not use
  568.  
  569.     - color support    (won't harm, will look funny :-)
  570.     - compressed help  (won't work at all... )    
  571.   
  572.   The other features won't work, too. But this is not a problem, because 
  573.   the helpfiles are compatible. The function will only be missing...
  574.  
  575.  
  576.   ■ HelpSys and color support
  577.  
  578.   One of the main improvement is color support: By inserting special 
  579.   colorsequences into the topictext, text can be displayed in every color
  580.   availible in textmode.
  581.  
  582.   A colorsequence is started with a "#" followed by a colorcode from 
  583.   "0" to "f" or "!".
  584.  
  585.       dark colors:  Name        Code  Name         Code
  586.                     Black       0     Blue         1
  587.                     Green       2     Cyan         3
  588.                     Red         4     Magenta      5
  589.                     Brown       6     LightGray    7
  590.  
  591.       light colors: DarkGray    8     LightBlue    9
  592.                     Lightgreen  a     LightCyan    b
  593.                     LightRed    c     LightMagenta d
  594.                     Yellow      e     White        f
  595.  
  596.       reset to default:         !
  597.  
  598.   I.e.: #eThis text will be yellow, #fand now white#! and normal again.
  599.  
  600.   After inserting a colorcode, all following text will be display in that 
  601.   color, until a new colorcode or a reset-to-default code is inserted.
  602.  
  603.  
  604.  
  605.   ■ Escaping
  606.   
  607.   "Escaping" is used for inserting special characters into helptext, 
  608.   that can't be inserted on normal ways or would cause trouble, if 
  609.   inserted. 
  610.  
  611.   The characters are   and can be replaced by
  612.          {                     \{
  613.          }                     \}
  614.          #                     ##
  615.  
  616.   and within a link definition
  617.          :                     \:
  618.  
  619.   and finaly, at the begin of a line
  620.          .                     \.
  621.  
  622.   Special Escape-Sequences:
  623.   unwrapable space
  624.         " "                   "\ "
  625.  
  626.   escape-escaper
  627.          \                     \\
  628.  
  629.  
  630.  
  631.   ■ Compressed helpfiles
  632.  
  633.   HelpSys uses a simple compression scheme to compress the help pages. It 
  634.   is an enhanced version of the methode Borland (and various other manu- 
  635.   factors) uses in their helpfiles: a reduced bit-length with a static 
  636.   look-up table for the most used characters, detection of repeating 
  637.   characters and escaping of rare characters.
  638.  
  639.   The efficiency of this implemention is highly depending on the size of 
  640.   a topicpage and paragraph and the number of paragraphs within a page. 
  641.   (A parapgraph is a piece of text, that is limited by empty lines.)
  642.  
  643.   Short pages and paragraphs will have no or a bad compression ratio, longer 
  644.   paragraphs will have a better one. Index-, context- and referencetables 
  645.   will not be compressed.
  646.  
  647.   Avarage ratio is typicly from 20 to 30 percent (the compressed help is 
  648.   20 to 30 percent smaller).
  649.  
  650.   Hint: Compression needs time. Turn of compression during debugging!
  651.         (Compressing needs something about 50% more time.)
  652.  
  653.   Hint: When using file compressors like PKZIP or ARJ, compressed 
  654.         helpfiles will sometimes be GREATER than uncompressed helpfiles.
  655.  
  656.  
  657.  
  658.   ■ Shareware, Ordering HelpSys
  659.  
  660.   HelpSys is shareware. That means that this version is limited. The 
  661.   limitation are:
  662.  
  663.    - use is limited to a periode of 21 day after first installation.
  664.      Longer use requires registration.
  665.  
  666.    - maximal number of topics is limited to 100 (creating and editing 
  667.      will be impossible, all other functions are not affected)
  668.  
  669.   I think this limitations are a fair chance to test the program and to 
  670.   make a decision, wether this program is worth its money.
  671.  
  672.   If you want to order HelpSys, please send me a printout of the file 
  673.   ORDER.DOK via mail, fax or call me:
  674.  
  675.     Voice: +49-531-334676
  676.     Fax:   +49-531-126627
  677.  
  678.  
  679.  
  680.   ■ History
  681.  
  682.     V <0.9z  internal use only, for betatesters, preversions
  683.     V  1.0a  initial release
  684.  
  685.  
  686.  
  687.   ■ HelpSys V2.0
  688.  
  689.   Yes, HelpSys 2.0 will come. It's new features are designed and waiting
  690.   for implementation, give me a few seconds...
  691.  
  692.   Please send any ideas for new features...  Send bug reports, too. 
  693.  
  694.  
  695.  
  696.   ■ Copyrights
  697.   
  698.   All or some words or combinations of words might be copyrighted by anyone. 
  699.   It is not sure to assume, that if it is not stated, that there is a copy-
  700.   right, that there is no copyright.
  701.  
  702.   Borland, Borland Pascal, Turbo Vision, HL etc. are copyrighted by Borland.
  703.  
  704.   Dos, Windows, HC30, HC31 etc. are copyrighted by Microsoft.
  705.