diff --git a/harbour/source/debug/dbghelp.prg b/harbour/source/debug/dbghelp.prg new file mode 100644 index 0000000000..59e5acfb75 --- /dev/null +++ b/harbour/source/debug/dbghelp.prg @@ -0,0 +1,937 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * The Debugger Help + * + * Copyright 2002 Antonio Linares + * www - http://www.harbour-project.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version, with one exception: + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries with other + * files to produce an executable, this does not by itself cause the + * resulting executable to be covered by the GNU General Public License. + * Your use of that executable is in no way restricted on account of + * linking the Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +#include "common.ch" +#include "inkey.ch" + +function __dbgHelp( nTopic ) + + local oDlg, n + local cColor := If( __Dbg():lMonoDisplay, "N/W, W/N, W+/W, W+/N",; + "N/W, N/BG, R/W, R/BG" ) + local oBrw, aTopics := GetTopics() + + DEFAULT nTopic TO 1 + + oDlg = TDbWindow():New( 2, 2, MaxRow() - 2, MaxCol() - 2, "Help", cColor ) + + oBrw = TBrowseNew( oDlg:nTop + 1, oDlg:nLeft + 1, oDlg:nBottom - 1,; + oDlg:nLeft + 12 ) + oBrw:Cargo = 1 + oBrw:AddColumn( TBColumnNew( "", { || aTopics[ oBrw:Cargo ][ 1 ] }, 12 ) ) + oBrw:ColorSpec = StrTran( __Dbg():ClrModal(), ", R/W", "" ) + oBrw:SkipBlock = { | nSkip, nOld | nOld := oBrw:Cargo, oBrw:Cargo += nSkip,; + oBrw:Cargo := Min( Max( oBrw:Cargo, 1 ), Len( aTopics ) ),; + oBrw:Cargo - nOld } + oBrw:GoTopBlock = { || oBrw:Cargo := 1 } + oBrw:GoBottomBlock = { || oBrw:Cargo := Len( aTopics ) } + + if nTopic > 1 + Eval( oBrw:SkipBlock, nTopic - 1 ) + endif + + oDlg:bPainted = { || PaintWindow( oDlg, oBrw, aTopics ) } + oDlg:bKeyPressed = { | nKey | ProcessKey( nKey, oDlg, oBrw, aTopics, oDlg:cColor ) } + + oDlg:ShowModal() + +return nil + +static procedure PaintWindow( oDlg, oBrw, aTopics ) + + @ oDlg:nTop + 1, oDlg:nLeft + 13 TO ; + oDlg:nBottom - 1, oDlg:nLeft + 13 ; + COLOR oDlg:cColor + + DispOutAt( oDlg:nTop , oDlg:nLeft + 13 , Chr( 194 ), oDlg:cColor ) + DispOutAt( oDlg:nBottom , oDlg:nLeft + 13 , Chr( 193 ), oDlg:cColor ) + + oBrw:ForceStable() + ShowTopic( oDlg, aTopics, oBrw:Cargo, 0 ) // Start on page 1 + +return + +static procedure ProcessKey( nKey, oDlg, oBrw, aTopics, cColor ) + + local n, nSkip + + do case + case nKey == K_UP + if oBrw:Cargo > 1 + oBrw:Up() + oBrw:ForceStable() + ShowTopic( oDlg, aTopics, oBrw:Cargo, 0 ) // Start on page 1 + endif + + case nKey == K_DOWN + if oBrw:Cargo < Len( aTopics ) + oBrw:Down() + oBrw:ForceStable() + ShowTopic( oDlg, aTopics, oBrw:Cargo, 0 ) // Start on page 1 + endif + + case nKey == K_HOME + if oBrw:Cargo > 1 + oBrw:GoTop() + oBrw:ForceStable() + ShowTopic( oDlg, aTopics, oBrw:Cargo, 0 ) // Start on page 1 + endif + + case nKey == K_END + if oBrw:Cargo < Len( aTopics ) + oBrw:GoBottom() + oBrw:ForceStable() + ShowTopic( oDlg, aTopics, oBrw:Cargo, 0 ) // Start on page 1 + endif + + case nKey == K_PGUP + ShowTopic( oDlg, aTopics, oBrw:Cargo, -1 ) // Skip to prev page + + case nKey == K_PGDN + ShowTopic( oDlg, aTopics, oBrw:Cargo, 1 ) // Skip to next page + + case nKey == K_LBUTTONDOWN + /* waiting to know the proper way to do this + if ( nSkip := MRow() - oDlg:nTop - oBrw:RowPos ) != 0 + if nSkip > 0 + for n = 1 to nSkip + oBrw:Down() + next + else + for n = 1 to nSkip step -1 + oBrw:Up() + next + endif + oBrw:ForceStable() + ShowTopic( oDlg, aTopics, oBrw:Cargo, 0 ) // Start on page 1 + endif */ + endcase + +return + +procedure ShowTopic( oDlg, aTopics, nTopic, nPageOp ) + + local n + local nRows := oDlg:nBottom - oDlg:nTop - 1 + local nPages := Len( aTopics[ nTopic ][ 2 ] ) / nRows + local nRowsToPaint + + static nPage + + if nPages > 1 .and. Int( nPages ) < nPages + nPages = Int( nPages ) + 1 + endif + + if nPages == 1 + if nPageOp == -1 .or. nPageOp == 1 + return + endif + nPage = 1 + else + do case + case nPageOp == 0 // Show first page + nPage = 1 + + case nPageOp == 1 // Show next page + if nPage < nPages + nPage++ + else + return + endif + + case nPageOp == -1 // Show prev page + if nPage > 1 + nPage-- + else + return + endif + endcase + endif + + @ oDlg:nTop + 1, oDlg:nLeft + 14 CLEAR TO oDlg:nBottom - 1,; + oDlg:nRight - 1 + + nRowsToPaint = Min( nRows, Len( aTopics[ nTopic ][ 2 ] ) - ( ( nPage - 1 ) * ; + nRows ) ) + + for n = 1 to nRowsToPaint + @ 2 + n, 16 SAY aTopics[ nTopic ][ 2 ][ ( ( nPage - 1 ) * nRows ) + n ] + next + + if Len( aTopics[ nTopic ][ 2 ] ) <= nRows + @ oDlg:nBottom, oDlg:nRight - 16 SAY " Page 1 of 1 " + else + @ oDlg:nBottom, oDlg:nRight - 16 SAY " Page " + Str( nPage, 1 ) + " of " + ; + Str( nPages, 1 ) + " " + endif + +return + +static function GetTopics() + + local aTopics := { { "About Help ", },; + { "Keys ", },; + { " Function ", },; + { " Window ", },; + { " Other ", },; + { "Windows ", },; + { " Command ", },; + { " Code ", },; + { " Watch ", },; + { " Monitor ", },; + { " CallStack", },; + { "Menus ", },; + { " File ", },; + { " Locate ", },; + { " View ", },; + { " Run ", },; + { " Point ", },; + { " Monitor ", },; + { " Options ", },; + { " Window ", },; + { "Commands ", },; + { "Script files", } } + + aTopics[ 1 ][ 2 ] = ; + { " " + Chr( 24 ) + Chr( 25 ) + " Select help topic.",; + " PageUp Page help text down.",; + " PageDn Page help text down.",; + " Esc Returns to debugger." } + + aTopics[ 2 ][ 2 ] = ; + { "Special debugger keys fall into the following",; + "categories:",; + "",; + " Function Keys",; + " Keys that execute debugger functions",; + "",; + " Window keys",; + " Keys that operate on the active window",; + "",; + " Others",; + " Keys for window navigation and sizing",; + "",; + "",; + "Other keys (typeable characters) are sent to",; + "the Command window and treated as input text." } + + aTopics[ 3 ][ 2 ] = ; + { "F1 Help",; + "F2 Zoom active window",; + "",; + "F3 Retype last command",; + "F4 View Application (User) screen",; + "",; + "F5 Go (Run application)",; + "F6 View Workareas screen",; + "",; + "F7 Run to cursor line",; + "F8 Step",; + "",; + "F9 Set breakpoint on cursor line",; + "F10 Trace" } + + aTopics[ 4 ][ 2 ] = ; + { "Enter If input is pending in the Command window,",; + " will execute the command, regardless",; + " of which window is active. Otherwise, if the",; + " Monitor or Watch window is active, ENTER will",; + " inspect the selected window item.",; + "",; + "Up In Code window, moves cursor line up.",; + " In Command window, recalls previous command.",; + " In other windows, moves selected item up.",; + "",; + "Down In Code window, moves cursor line down.",; + " In Command window, recalls previous command.",; + " In other windows, moves selected item down.",; + "",; + "PageUp In Code window, pages source up.",; + " In Command window, does nothing.",; + " In other windows, pages item list up.",; + "",; + "PageDn In Code window, pages source down.",; + " In Command window, does nothing.",; + " In other windows, pages item list down.",; + "",; + "Ctrl PageUp In Code window, moves cursor line to top.",; + " of source.",; + " In Command window, does nothing.",; + " In other windows, selects first item on list.",; + "",; + "Ctrl PageDn In Code window, moves cursor line to bottom.",; + " of source.",; + " In Command window, does nothing",; + " In other windows, selects last item on list.",; + "",; + "Left In Code window, scrolls left 1 column.",; + " In Command window, moves cursor left.",; + " In other windows, does nothing",; + "",; + "Right In Code window, scrolls right 1 column.",; + " In Command window, moves cursor right.",; + " In other windows, does nothing.",; + "",; + "Home In Code window, scrolls hard left.",; + " In Command window, moves cursor to beginning",; + " of line.",; + " In other windows, does nothing.",; + "",; + "End In Code window, scrolls hard right.",; + " In Command window, moves cursor to end",; + " of line.",; + " In other windows, does nothing.",; + "",; + "Esc In Command window, clears command line.",; + " In other windows, does nothing." } + + aTopics[ 5 ][ 2 ] = ; + { "TAB Next window",; + "",; + "SHIFT-TAB Previous window",; + "",; + "ALT-G Grow active window",; + "",; + "ALT-S Shrink active window",; + "",; + "ALT-U Move the border between Command and Code",; + " windows Up",; + "",; + "ALT-D Move the border between Command and Code",; + " windows Down",; + "",; + "ALT-X Exit" } + + aTopics[ 6 ][ 2 ] = ; + { "The Debugger display consists of the following five",; + "windows:",; + "",; + " Command Window",; + " Accepts and displays debugger commands.",; + " Always open.",; + "",; + " Code Window",; + " Displays program source code.",; + " Always open.",; + "",; + " Watch Window",; + " Displays Watchpoints and Tracepoints, and inspects",; + " their values.",; + " Open when any Watchpoints or Tracepoints are",; + " defined. These are set and deleted via the",; + " Point menu.",; + "",; + " Monitor Window",; + " Displays monitored variables, and inspects their",; + " values.",; + " Open when any classes of variables are being",; + " monitored, via commands in the Monitor menu.",; + "",; + " CallStack Window",; + " Displays program call stack.",; + " Opened via the View:CallStack menu option.",; + "",; + " If this window is active, the Code, Watch and",; + " Monitor windows will display information pertaining",; + " to the selected call on the CallStack.",; + "",; + "",; + "One debugger window is active at a time. The active window",; + "is displayed with a hilighted border. TAB and SHIFT-TAB",; + "navigate among open windows.",; + "",; + "The Window menu contains options to Move, Size, Zoom and",; + "Iconize the active window.",; + "",; + "After a long session of moving and sizing, the Window:Tile",; + "menu option will restore the windows to their original",; + "size and location." } + + aTopics[ 7 ][ 2 ] = ; + { "The Command window accepts debugger commands as line",; + "input, and displays the response from an executed",; + "command, if any.",; + "",; + "Commands are entered simply by typing in the command",; + "text, then pressing ENTER.",; + "",; + "Commands may be entered and executed while any",; + "window is active. However, the entry cursor is",; + "only visible within the Command window when it is",; + "active.",; + "",; + "When the Command window is active, the UP and DOWN",; + "arrow keys can be used to recall previous commands." } + + aTopics[ 8 ][ 2 ] = ; + { "The Code window displays Clipper source code for",; + "the program being debugged.",; + "",; + "",; + "What file the Code window displays may be controlled",; + "in the following ways:",; + "",; + " 1. By default, the Code window will contain the line",; + " of Clipper code currently being executed.",; + "",; + " 2. If the CallStack window is open, the code being",; + " viewed is that of the selected call in the CallStack",; + " window.",; + "",; + " NOTE: By default this will be the same code as 1,",; + " but code for the other calls may be viewed by",; + " making the CallStack window active and using UP",; + " and DOWN to traverse the call stack.",; + "",; + " 3. A specific file may be viewed by issuing a VIEW",; + " command, or selecting the File:View menu option.",; + "",; + "",; + "If the Code window contains the line of Clipper code",; + "currently being executed, that line will be hilighted.",; + "Any lines which have Breakpoints set on them will also",; + "be marked.",; + "",; + "",; + "In addition to standard navigation keys, you can search",; + "the viewed file for a specific string, or go to a particular",; + "line within it, using options found in the Locate menu." } + + aTopics[ 9 ][ 2 ] = ; + { "The Watch window displays Watchpoint and Tracepoint",; + "expressions, and their current values.",; + "",; + "Watchpoints and Tracepoints may be defined and deleted via",; + "options on the Point menu.",; + "",; + "If the Watch window is active, pressing ENTER will inspect",; + "the value of the selected expression. The navigation keys",; + "described in 'Window Keys' may be used to change the",; + "selected item.",; + "",; + "If the CallStack window is active, the Watch window will",; + "display the values for Watchpoints and Tracepoints at the",; + "activation level represented by the selected call in the",; + "CallStack window." } + + aTopics[ 10 ][ 2 ] = ; + { "The Monitor window displays monitored variables.",; + "",; + "Classes of variables may be monitored via options in the",; + "Monitor menu.",; + "",; + "If the Monitor window is active, pressing ENTER will",; + "inspect the value of the selected variable. The navigation",; + "keys described in 'Window Keys' may be used to change the",; + "selected item.",; + "",; + "If the CallStack window is active, the Monitor window will",; + "display the values of variables at the point of the",; + "activation level represented by the selected call in the",; + "CallStack window." } + + aTopics[ 11 ][ 2 ] = ; + { "The CallStack window displays the program's call stack.",; + "It is opened and closed via the View:CallStack menu",; + "option.",; + "",; + "By default, the selected call within the CallStack window",; + "is the top one -- i.e., the call currently being executed.",; + "When the CallStack window is active, the other call levels",; + "may be selected using the navigation keys described in",; + "'Window Keys'.",; + "",; + "All other windows except the Command window are synchronized",; + "with the CallStack window. The code viewed in the Code",; + "window, the values of Watchpoints and Tracepoints in the",; + "Watch window, and the values of variables in the Monitor",; + "window are all in the context of the activation level",; + "selected in the CallStack window." } + + aTopics[ 12 ][ 2 ] = ; + { "The debugger menus contain various debugger functions.",; + "",; + "Each menu may be accessed at any time by pressing the",; + "ALT key, and the first letter in the menu's name.",; + "",; + "Once in a menu, the UP and DOWN arrow keys navigate",; + "the list of options. An option may be selected by",; + "pressing ENTER, or by typing the first uppercase",; + "letter within the name of the desired option.",; + "",; + "",; + "Some menu options toggle a debugger setting. These",; + "options will have a checkmark displayed to their left",; + "if the setting they refer to is currently ON.",; + "",; + "",; + "Each menu option is also available as a command,",; + "made up of the Menu name, followed by the first",; + "word of the option name. For instance, the",; + "View:CallStack menu option may also be accessed via",; + "the command:",; + "",; + " View Call",; + "",; + "Words within these commands may be shortened in most",; + "cases to one letter.",; + "",; + "For more information on this class of commands, see",; + "the 'Commands' section of this help." } + + aTopics[ 13 ][ 2 ] = ; + { "Options:",; + "",; + " Open...",; + " Specify a file to be opened in the Code window",; + "",; + " DOS Access",; + " Shell to the DOS environment",; + "",; + " Exit Alt-X",; + " Exit the debugger" } + + aTopics[ 14 ][ 2 ] = ; + { "Facilites for navigating the file in the Code window",; + "",; + "Options:",; + "",; + " Find...",; + " Search for a specified string, from the beginning",; + " of the file onward.",; + "",; + " Next",; + " Search for the next occurence of the Find string,",; + " from the cursor line onward.",; + "",; + " Prev",; + " Search for the previous occurence of the Find string,",; + " from the cursor line backward.",; + "",; + " Goto Line...",; + " Go to a specific line in the file being viewed.",; + "",; + " Case Sensitivity",; + " Toggles case sensitivity in searches. Default is",; + " OFF." } + + aTopics[ 15 ][ 2 ] = ; + { "Options:",; + "",; + " Sets",; + " View Set status information",; + "",; + " Work Areas F6",; + " View Database status information",; + "",; + " App. screen F4",; + " Displays application screen, until key is pressed",; + "",; + " CallStack",; + " Toggles the CallStack window. Default is OFF" } + + aTopics[ 16 ][ 2 ] = ; + { "Options:",; + "",; + " Restart",; + " Terminate program and re-execute, leaving debugger",; + " settings in place",; + "",; + " Animate",; + " Execute program in Animate mode",; + "",; + " Step F8",; + " Execute one line of program code",; + "",; + " Trace F10",; + " Trace over function call in program code",; + "",; + " Go F5",; + " Execute program",; + "",; + " to Cursor F7",; + " Execute program, breaking at the current cursor",; + " line in Code window",; + "",; + " Next routine Ctrl-F5",; + " Execute program, breaking at line 1 of the next",; + " procedure or function call.,",; + "",; + " sPeed...",; + " Set step speed for Animate mode execution" } + + aTopics[ 17 ][ 2 ] = ; + { "Options:",; + "",; + " Watchpoint...",; + "",; + " Add Watchpoint. A Watchpoint is an expression which",; + " the debugger tracks during program execution -- the",; + " current value of a Watchpoint is displayed in the",; + " Watch window during debugging.",; + "",; + " A Watchpoint may be any valid Clipper expression,",; + " i.e.:",; + "",; + " s // variable",; + " a[n] // array element",; + " g:buffer // object instance variable",; + " At(s, t) // return value of function call",; + " ValType(s) == 'C' // value of expression",; + "",; + "",; + " Tracepoint...",; + "",; + " Add Tracepoint. A Tracepoint is similar to a Watchpoint,",; + " with the additional property that if the value of a",; + " Tracepoint expression changes, the debugger will be",; + " invoked as if a Breakpoint had been hit.",; + "",; + "",; + " Breakpoint F9",; + "",; + " Set Breakpoint on current cursor line in",; + " Code window",; + "",; + "",; + " Delete",; + "",; + " Delete Tracepoint or Watchpoint." } + + aTopics[ 18 ][ 2 ] = ; + { "Options:",; + "",; + " Public",; + " Monitor Public variables.",; + "",; + " Private",; + " Monitor Private variables.",; + "",; + " Local",; + " Monitor Local variables.",; + "",; + " Static",; + " Monitor Static variables.",; + "",; + " All",; + " Monitor All variables.",; + "",; + " Sort",; + " Toggles whether monitored variables are sorted by",; + " name. Default is OFF." } + + aTopics[ 19 ][ 2 ] = ; + { "Options:",; + "",; + " Preprocessed code",; + " Toggles the display of preprocessed code (from",; + " PPO file) within the Code window. Default is OFF.",; + "",; + " Line numbers",; + " Toggles the display of line numbers in the Code",; + " window. Default is OFF.",; + "",; + " Exchange screens",; + " Toggles whether debugger screen is swapped with",; + " application screen during debugger execution.",; + " Default is ON.",; + "",; + " Swap on Input",; + " Toggles whether debugger screen is swapped with",; + " application screen when the program being debugged",; + " is waiting for input. Default is ON.",; + " This setting is only meaningful when the Exchange",; + " Screens setting is OFF.",; + "",; + " Codeblock Trace",; + " Toggles whether the debugger will trace into",; + " code blocks when tracing (i.e., when in Trace",; + " mode). Defaults to ON.",; + "",; + " Menu Bar",; + " Toggles display of the debugger menu bar.",; + " Default is ON.",; + "",; + " mono Display",; + " Toggles display between monochrome and color.",; + " Default is OFF.",; + "",; + " Colors...",; + " Inspects debugger colors.",; + "",; + " Tab width...",; + " Set tab width in Code window. Default is 4.",; + "",; + " pAth for Files...",; + " Specify search path for source files.",; + " The debugger will use this path to search for",; + " files, if not found in the current directory.",; + " NOTE: If not found in the debugger path, the",; + " directories specified in the environment's PATH",; + " will be searched.",; + "",; + "",; + " Save Settings",; + " Save debugger settings to a script file.",; + "",; + " Restore Settings",; + " Restore debugger settings from a previously",; + " saved script file." } + + aTopics[ 20 ][ 2 ] = ; + { "Options:",; + "",; + " Next Tab",; + " Make next window active.",; + "",; + " Prev Sh-Tab",; + " Make previous window active.",; + "",; + " Move",; + " Move active window. UP, DOWN, LEFT, RIGHT,",; + " PGUP, PGDN, HOME, END move ENTER finishes,",; + " While Moving, top left corner of window is marked.",; + "",; + " Size",; + " Size active window. UP, DOWN, LEFT, RIGHT,",; + " PGUP, PGDN, HOME, END size ENTER finishes,",; + " While Sizing, bottom right corner of window is marked.",; + "",; + " Zoom F2",; + " Toggles whether active window is Zoomed. When",; + " Zoomed, window will fill entire display area.",; + "",; + " Iconize",; + " Toggles whether active window is Iconized. When",; + " Iconized, window will be one row high and a few",; + " columns wide.",; + "",; + " Tile",; + " Restore all windows to original size and position." } + + aTopics[ 21 ][ 2 ] = ; + { "There are two sets of debugger commands:",; + "",; + "1. Menu option commands. These commands are formed",; + "from the menu name, followed by the (first word of)",; + "the option name. For instance, the Monitor:Public",; + "menu option may be invoked via the command:",; + "",; + " Monitor Public",; + "",; + "These commands may be abbreviated down to one letter",; + "per word. However in some cases a second letter will",; + "be required in the second word, as in the case of",; + "Monitor Private:",; + "",; + " M P // invokes Monitor Public",; + " M Pr // invokes Monitor Private",; + "",; + "",; + "",; + "2. Other commands. Listed below.",; + "",; + "",; + "? ",; + " Display the value of a variable or expression.",; + "",; + "?? ",; + " Inspect the value of a variable or expression.",; + "",; + "ANIMATE",; + " Execute application in Animate Mode.",; + "",; + "BP [ [ ]]|[]",; + "",; + " BP",; + " Toggle breakpoint at current line in current",; + " source file.",; + "",; + " BP ",; + " Toggle breakpoint at in current source",; + " file.",; + "",; + " BP ",; + " Toggle breakpoint at in ",; + " source file.",; + " BP ",; + " Toggle breakpoint on function.",; + "",; + "CALLSTACK on|OFF",; + " Toggle display of CallStack window",; + "",; + "DELETE ALL [WP|TP|BP]",; + "DELETE WB|TP|BP ",; + " Delete all or particular Watchpoint, Tracepoint",; + " or Breakpoint.",; + "",; + "DOS",; + " Visit the operating system.",; + "",; + "FIND ",; + " Search currently viewed file for specified",; + " character string.",; + "",; + "GO",; + " Execute application in Run Mode.",; + "",; + "GOTO ",; + " Move cursor to specified line in currently viewed",; + " file.",; + "",; + "HELP",; + " Get advice in the form of the Help window.",; + "",; + "INPUT ",; + " Read commands from specified Script File.",; + "",; + "LIST BP|WP|TP",; + " List Breakpoints, Watchpoints or Tracepoints in",; + " the Command Window.",; + "",; + "NEXT",; + " Search for next occurence of FIND string.",; + "",; + "NUM ON|off",; + " Toggle display of line numbers in Code window.",; + "",; + "OUTPUT",; + " View application screen.",; + "",; + "",; + "PREV",; + " Search for previous occurence of FIND string.",; + "",; + "QUIT",; + " Quit.",; + "",; + "RESTART",; + " Restart application",; + "",; + "RESUME",; + " Resume viewing the currently executing program",; + " code in the Code Window, after VIEWing another",; + " file.",; + "",; + "SPEED ",; + " Set Animate mode step speed. designates",; + " the number of tenths of a second to delay.",; + " must be greater than or equal to 0.",; + "",; + "STEP",; + " Execute one line of program code.",; + "",; + "TP ",; + " Establish as a Tracepoint. may be a",; + " variable or expression.",; + "",; + "VIEW ",; + " View specified file in Code window.",; + "",; + "WP ",; + " Establish as a Watchpoint. may be a",; + " variable or expression." } + + aTopics[ 22 ][ 2 ] = ; + { "Script files contain debugger commands, in the same",; + "form they would take as input in the Command window.",; + "By default, script files use the extension CLD, as in",; + "'Myscript.CLD'.",; + "",; + "",; + "Creating a script file:",; + "",; + "A script file containing all the debugger's current",; + "settings may be created via the Options:Save menu",; + "option. A script file may also be written by hand,",; + "in a text editor.",; + "",; + "",; + "Reading a script file:",; + "",; + "A script file may be read into the debugger at any",; + "time using the Options:Restore menu option.",; + "",; + "When using CLD.EXE, a script file may also be",; + "specified on the command line, before the name of",; + "the program to be debugged, i.e.:",; + "",; + " CLD @ ",; + "",; + "In both of these, the extension '.CLD' will be assumed",; + "if no extension is supplied.",; + "",; + "When reading a script file, the debugger will look",; + "for the file in the current directory first. If the",; + "script is not found there, the debugger will search",; + "all directories in the PATH environment variable.",; + "",; + "",; + "INIT.CLD:",; + "",; + "On startup (or, if it is linked into a program, when",; + "it is first invoked), the debugger will look for a",; + "script file called INIT.CLD, in the current directory",; + "and then, if not found, in the directories specified",; + "by the PATH environment variable.",; + "",; + "If INIT.CLD is found, the debugger will read it",; + "automatically. It is useful to place general",; + "preferences in INIT.CLD -- specifying colors,",; + "turning on the CallStack window, and so on." } + +return aTopics \ No newline at end of file