home *** CD-ROM | disk | FTP | other *** search
/ Media Share 13 / mediashare_13.zip / mediashare_13 / ZIPPED / GRAFX / ALLY30.ZIP / ALLY.DOC < prev    next >
Text File  |  1994-03-24  |  136KB  |  2,822 lines

  1.  
  2.  
  3.  
  4.  
  5.                    ----------------------------------------
  6.  
  7.                           ALLY - A Lisp Analyzer (TM)
  8.  
  9.                         Version 3.0, Shareware Edition
  10.  
  11.                                  User's Manual
  12.  
  13.                    ----------------------------------------
  14.  
  15.  
  16.  
  17.                        Copyright 1990-1994 Steve Waskow
  18.  
  19.                               ALL RIGHTS RESERVED
  20.  
  21.  
  22.  
  23.  
  24.  
  25.                               _______
  26.                          ____|__     |                (R)
  27.                       --|       |    |-------------------
  28.                         |   ____|__  |  Association of
  29.                         |  |       |_|  Shareware
  30.                         |__|   o   |    Professionals
  31.                       -----|   |   |---------------------
  32.                            |___|___|    MEMBER
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.                    ----------------------------------------
  40.                            Wasco Technical Software
  41.                            1211 Grand Junction Drive
  42.                              Katy, TX  77450  USA
  43.                    ----------------------------------------
  44.  
  45.                      Tel: 713-392-1359   Fax: 713-392-1073
  46.                      CompuServe: 72020,2031 (Steve Waskow)
  47.                      Internet: 72020.2031@compuserve.com
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.      D I S C L A I M E R    A N D    L I M I T    O F    L I A B I L I T Y
  61.      ---------------------------------------------------------------------
  62.  
  63. STEVE WASKOW AND WASCO TECHNICAL SOFTWARE MAKES NO WARRANTY OF ANY KIND, EITHER
  64. EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF
  65. MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, WITH RESPECT TO THIS
  66. SOFTWARE AND ACCOMPANYING DOCUMENTATION.
  67.  
  68. IN NO EVENT SHALL STEVE WASKOW OR WASCO TECHNICAL SOFTWARE BE LIABLE FOR ANY
  69. DAMAGES (INCLUDING DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
  70. LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING OUT OF THE USE
  71. OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF STEVE WASKOW OR WASCO TECHNICAL
  72. SOFTWARE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  73.  
  74.  
  75.        C O P Y R I G H T    N O T I C E    A N D    T R A D E M A R K S
  76.        ----------------------------------------------------------------
  77.  
  78. This product, including all supporting software programs, files and printed
  79. documentation, is copyrighted and all rights are reserved by Steve Waskow,
  80. Wasco Technical Software.  Unauthorized duplication and/or distribution is a
  81. violation of U.S. copyright law and international copyright agreements.
  82.  
  83.                      Copyright (c) 1990-1994 Steve Waskow
  84.                               All Rights Reserved
  85.                            Wasco Technical Software
  86.  
  87. ALLY (tm) and A Lisp Analyzer (tm) are trademarks of Wasco Technical Software.
  88.  
  89. AutoCAD (R) and AutoLISP (R) are registered trademarks of Autodesk, Inc.
  90.  
  91. Other brand and product names are mentioned herein, which are trademarks and
  92. registered trademarks of their respective owners.  These mentions are of an
  93. editorial nature only, with no intention of endorsement or infringement.
  94.  
  95.  
  96.                                  C R E D I T S
  97.                                  -------------
  98.  
  99. Special thanks to beta testers past and present; Antonio Fernandes, Howard
  100. Johnson, Steve Johnson, Larry Leuallen, Eric Michalowsky, David Pitzer and
  101. Trent Riley.  These gentlemen--as well as other ALLY users too numerous to
  102. mention--have provided constructive criticism, numerous suggestions, and
  103. helpful support throughout ALLY's development and evolution.  To these and
  104. other supporters I offer my sincere appreciation.
  105.                                                             Steve Waskow, 1994
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.                       T A B L E    O F    C O N T E N T S
  120.                       -----------------------------------
  121. 1.0  INTRODUCTION
  122. 2.0  QUICK START INSTRUCTIONS
  123. 3.0  INSTALLATION AND CONFIGURATION
  124.      3.1  SYSTEM REQUIREMENTS
  125.      3.2  INSTALLATION
  126.      3.3  USING EXTENDED or EXPANDED MEMORY
  127.      3.4  INSTALLING ALLY TO RUN IN WINDOWS
  128.      3.5  FIRST TIME USERS
  129. 4.0  RUNNING ALLY
  130.      4.1  RUNNING ALLY FROM DOS
  131.      4.2  RUNNING ALLY FROM AUTOCAD
  132.      4.3  RUNNING ALLY FROM WINDOWS
  133.      4.4  ALLY DATA ENTRY SCREENS AND EDITING KEYS
  134.      4.5  MOUSE SUPPORT
  135. 5.0  ALLY SETUP OPTIONS
  136.      5.1  INSTALL USER PROGRAMS
  137.      5.2  DEFINE PAGE
  138.      5.3  CATEGORIES
  139.      5.4  REPORT OPTIONS
  140.      5.5  EXECUTION OPTIONS
  141.      5.6  VIDEO OPTIONS
  142.      5.7  PRINTER OPTIONS
  143.      5.8  ABOUT ALLY
  144. 6.0  THE ALLY WORKBENCH
  145.      6.1  FILE/DESTINATION
  146.      6.2  FILE SELECTION
  147.      6.3  WORKBENCH COMMANDS
  148. 7.0  THE ALLY CHECKER
  149.      7.1  COLOR CODING
  150.      7.2  PARENTHESES ERRORS
  151.      7.3  LINE POINTER
  152.      7.4  MOUSE SUPPORT
  153.      7.5  LINE EDITING
  154.      7.6  CALLING THE USER'S EDITOR
  155.      7.7  OTHER BROWSING KEYS
  156. 8.0  THE ALLY ANALYZER
  157.      8.1  ERROR FUNCTIONS
  158.      8.2  FOREACH CONTROL VARIABLES
  159.      8.3  DCL FUNCTIONS
  160.      8.4  DECLARATIONS AND SYMBOL SCOPE
  161.      8.5  ANALYZING MULTIPLE FILES
  162.      8.6  EXTERNAL SYMBOLS AND FUNCTIONS
  163.      8.7  EXAMPLE AUTOLISP PROGRAM
  164.      8.8  STATISTICS AND WARNINGS
  165.      8.9  FILE HIERARCHY OF USER DEFINED FUNCTIONS
  166.      8.10 FUNCTION CALL HIERARCHY - DYNAMIC SCOPE
  167.      8.11 CROSS-REFERENCE OF USER DEFINED FUNCTIONS
  168.      8.12 CROSS-REFERENCE OF USER DEFINED SYMBOLS
  169.      8.13 CROSS-REFERENCE OF RESERVED LISP SUBRS AND SYMBOLS
  170.      8.14 PROGRAM LISTING
  171.      8.15 ANALYZER SCREEN OUTPUT
  172. 9.0  PROBLEMS AND ERROR MESSAGES
  173. APPENDIX A - ASCII TABLE
  174. APPENDIX B - PRINTER COMMANDS
  175. APPENDIX C - STRING-EMBEDDED CODE
  176.  
  177.  
  178. 1.0   I N T R O D U C T I O N
  179. =============================
  180. ALLY is a programmer's workbench, code checker and analyzer for AutoLISP, to
  181. assist you in writing, debugging and documenting AutoLISP code.  The workbench
  182. integrates ALLY, your favorite DOS text editor and other programs to create a
  183. personalized programming environment, accessible from either DOS or AutoCAD.
  184.  
  185. The Analyzer generates a function call hierarchy and a comprehensive
  186. cross-reference of variables and functions with each symbol fully identified,
  187. scoped and categorized.  The analysis provides extensive error checking, and is
  188. useful in identifying symbol scopes, interactions and dependencies.  The
  189. Checker is a custom AutoLISP code browser which uses color coding to provide a
  190. fast and convenient visual check of mismatched parentheses, misplaced or
  191. missing string quotes, and missing comment semicolons.
  192.  
  193. 2.0   Q U I C K    S T A R T    I N S T R U C T I O N S
  194. =======================================================
  195. If you are the type of individual who likes to jump right in, the following
  196. instructions will get you off to a quick start.  We do recommend, however, that
  197. you review the manual before attempting to use ALLY extensively.
  198.  
  199. QUICK INSTALLATION
  200.   1. Insert the ALLY program diskette into drive A (or B).
  201.   2. Enter "A:" (or "B:") to make it the default drive.
  202.   3. Type "INSTALL" and press [Enter].
  203.   4. Follow the on-screen instructions.
  204.  
  205. QUICK START
  206.   o  To use ALLY from the AutoCAD command line, type "ALLY" and press [Enter],
  207.      just like any other AutoCAD command.
  208.   o  To use ALLY from the DOS command prompt, change to the ALLY directory,
  209.      type "ALLY" and press [Enter].
  210.  
  211. 3.0   I N S T A L L A T I O N    A N D    C O N F I G U R A T I O N
  212. ===================================================================
  213. 3.1  SYSTEM REQUIREMENTS
  214. ------------------------
  215. ALLY's system requirements are basically the same as AutoCAD's.  The minimum
  216. system supported is a 286 IBM compatible with 640K RAM, math chip, hard drive,
  217. and MS-DOS 3.1 or higher.  ALLY currently supports AutoCAD R10 286 DOS, R10 386
  218. DOS, R11 286 DOS, R11 386 DOS, R11 Windows, R12 386 DOS and R12 Windows.  ALLY
  219. runs as a "Windows Aware" DOS application in Windows 3.1, 386 Enhanced Mode.
  220.  
  221. 3.2  INSTALLATION
  222. -----------------
  223. ALLY's installation/configuration program is named INSTALL.EXE.  Log onto the
  224. drive and directory which contains ALLY and enter "INSTALL" at the DOS prompt.
  225. The program first prompts you to choose Installation or Configuration.  For new
  226. installations or upgrades, enter "I" for Installation.
  227.  
  228. The installation process begins with a search of your hard drives to locate
  229. existing AutoCAD support files.  No files are modified during this initial
  230. search.  The information gathered allows INSTALL to automate installation for
  231. single, multiple and even mixed AutoCAD versions.  Once the search is complete,
  232. you will be asked to name a directory for ALLY.  It is best to place ALLY in
  233. its own directory, so in most cases, this should simply be "C:\ALLY".  It is
  234. not necessary to install ALLY on your AutoCAD path.
  235.  
  236.  
  237. After copying ALLY's files into the named directory, INSTALL's next step is to
  238. make minor modifications to your ACAD.PGP and ACAD.LSP files.  You will be
  239. prompted before any modifications are actually made.  The first file modified
  240. is ACAD.PGP, into which INSTALL adds a single command line.  The following is
  241. an example of the command INSTALL adds.  Note that the 280000 byte shell size
  242. shown in the example is a default only used for 286 versions of AutoCAD.  Shell
  243. sizes are ignored by 386 and Windows versions of AutoCAD, so you will find it
  244. set to zero in such installations.
  245.  
  246.   ALLY3,C:\ALLY\ALLYWB,280000,,4
  247.  
  248. Next modified is ACAD.LSP.  If you do not have an ACAD.LSP file, one will be
  249. created.  INSTALL adds just a single line of code to the bottom of the file.
  250. The following is an example of the line INSTALL adds.
  251.  
  252.  (if (= (load "C:\\ALLY\\ALLY" "f") "f") (princ " *<ALLY load failed>* "))
  253.  
  254. ALLY cannot be installed directly into a protected ACAD.LSP file, so the
  255. installation program creates a "wrapper" if one is encountered.  This is a
  256. relatively simple process with no ill effects.  First, the protected ACAD.LSP
  257. file is renamed to ACADn.LSP, where n equals 1 (as in ACAD1.LSP) or the next
  258. higher number which will yield a unique file name.  INSTALL then creates a new
  259. ACAD.LSP file containing load commands for both the renamed original ACAD.LSP
  260. and ALLY.LSP.
  261.  
  262. INSTALL's final step is to create or update the ALLY.BAT and ALLY.LSP files in
  263. the ALLY directory.  To change the few defaults set by the installation
  264. program, you can re-run it in Configuration mode at any later time.
  265.  
  266. The installed ALLY must now be setup prior to use.  ALLY's setup handles the
  267. detailed configuration, in which you select execution and output options, and
  268. provide information on other programs you wish to incorporate into the
  269. Workbench.  See the following section, ALLY SETUP OPTIONS, for instructions.
  270.  
  271. 3.3  USING EXTENDED or EXPANDED MEMORY
  272. --------------------------------------
  273. ALLY can be configured to use XMS (extended memory) or EMS (expanded memory)
  274. for its swapping operations.  Refer to the section ALLY SETUP OPTIONS,
  275. Execution Options, for details of the "Swap ALLY to" option.
  276.  
  277. In running ALLY from DOS versions of AutoCAD, keep in mind that without
  278. intervention AutoCAD may default to using all extended and expanded memory.
  279. This will not prevent ALLY from operating, but will limit ALLY to disk swap
  280. files.  To instruct AutoCAD to reserve EMS or XMS for ALLY's use, you must
  281. change certain AutoCAD settings.
  282.  
  283. XMS and EMS memory usage in 286 versions of AutoCAD can be controlled with
  284. AutoCAD's acadxmem and acadlimem environmental variables, respectively.  XMS
  285. and EMS usage in AutoCAD 386 can be configured via the -demandload,
  286. -maxvcpimem, -maxxmsmem and -maxextmem switches of AutoCAD's CFIG386.EXE
  287. program.  The demandload switch (R11 and later, R11 requires the updated v2.6
  288. DOS Extender from AutoCAD's NEWDX utility) is the most practical and easiest to
  289. use of the four switches mentioned.  Demandload normally leaves enough extended
  290. memory for ALLY's use, without removing it from the pool available to AutoCAD.
  291.  
  292. Refer to AutoCAD's Installation and Performance Guide for more details of
  293. memory management specific to your hardware and software.
  294.  
  295.  
  296. 3.4  INSTALLING ALLY TO RUN IN WINDOWS
  297. --------------------------------------
  298. Although a DOS application, ALLY is "Windows aware" and will run under Windows
  299. 3.1 in 386 Enhanced mode.  The standard installation and setup procedure is
  300. enough to run ALLY from AutoCAD R11 for Windows.  Additional steps are required
  301. to run ALLY independently under Windows and with AutoCAD R12 Windows.  To set
  302. up ALLY to run as a stand-alone application from the Windows Desktop Manager,
  303. perform the following steps.
  304.  
  305.  1.  From Window's Program Manager, open the group window you want ALLY to
  306.      appear in (we suggest using the AutoCAD group).
  307.  2.  Choose NEW from Program Manager's FILE menu to open the NEW PROGRAM OBJECT
  308.      dialog.
  309.  3.  Choose PROGRAM ITEM, then choose OK to open the PROGRAM ITEM PROPERTIES
  310.      dialog box.
  311.  4.  Type C:\ALLY\ALLYWB.PIF in the COMMAND LINE field (use appropriate path).
  312.  5.  Choose CHANGE ICON.  If the "no icons available" alert box appears, choose
  313.      OK to ignore it and open the CHANGE ICON dialog.
  314.  6.  Type C:\ALLY\ALLYWB.ICO in the FILE NAME field of the CHANGE ICON dialog
  315.      (use appropriate path).
  316.  7.  Choose OK to return to the PROGRAM ITEM PROPERTIES dialog box, which will
  317.      now display the ALLY icon.
  318.  8.  Choose OK, and the ALLY icon will appear in the program group.
  319.  
  320. Windows uses Program Information Files (PIF) to store settings which affect the
  321. way it executes individual DOS programs.  The PIF file used for ALLY depends on
  322. the AutoCAD release it is run from.  AutoCAD R11 for Windows uses the settings
  323. from ALLYWB.PIF, an approach which works well.
  324.  
  325. AutoCAD R12 Windows uses a simpler, if less flexible approach.  It uses the
  326. settings from Window's general purpose _DEFAULT.PIF to run ALLY and other shell
  327. applications.  Since the standard _DEFAULT.PIF settings are inadequate for
  328. ALLY, AutoCAD R12 Windows users must do one of two things.  The first option is
  329. to launch ALLY independently from the Program Manager rather than calling it
  330. from within AutoCAD.  The only disadvantage to this arrangement is that you
  331. loose ALLY's interactive file loading feature.
  332.  
  333. The second option is to replace your existing _DEFAULT.PIF file with the
  334. modified version shipped with ALLY.  First, save a backup of the original
  335. _DEFAULT.PIF in your Window's directory by renaming or moving the file, then
  336. copy the _DEFAULT.PIF from the ALLY directory to the Windows directory.  This
  337. will give ALLY adequate performance when executed from AutoCAD R12.  Be aware
  338. that other applications using _DEFAULT.PIF will consume more Windows resources
  339. with the new file than they did previously.
  340.  
  341. Here are some general tips for using ALLY with AutoCAD for Windows.  Always
  342. exit ALLY by its own exit commands.  When you execute ALLY from within AutoCAD,
  343. do not try to minimize ALLY to complete some drawing task.  Though visible,
  344. AutoCAD is in a suspended state.  Should you make this mistake, regain control
  345. by pressing [Alt-Esc] to cycle back through the open tasks to ALLY.  AutoCAD
  346. will be reactivated when you exit ALLY.
  347.  
  348. 3.5  FIRST TIME USERS
  349. ---------------------
  350. Although no trouble is anticipated, in keeping with the spirit of "better safe
  351. than sorry", we suggest you save your drawing and any open files prior to
  352. executing ALLY the first few times you try it.  This is especially wise if you
  353. have a highly customized system or are trying an untested video mode in ALLY.
  354.  
  355.  
  356. If other DOS programs work for you through AutoCAD's SHELL, you should expect
  357. no trouble with ALLY, once properly installed.  Once it is apparent that no
  358. problems exist, the act of saving the drawing first is unnecessary.
  359.  
  360. 4.0   R U N N I N G    A L L Y
  361. ==============================
  362. 4.1  RUNNING ALLY FROM DOS
  363. --------------------------
  364. To use ALLY from the DOS command prompt, change to the ALLY directory, and
  365. enter "ALLY".  If desired, ALLY's path can be prefixed or the ALLY directory
  366. added to the DOS PATH statement to execute ALLY from any directory.  ALLY also
  367. allows a filename to be specified as a command line parameter.  The current
  368. path and a LSP extension is assumed if not included as part of the filename.
  369. If a filename is not passed as a parameter, ALLY defaults to the file last
  370. worked on.  The complete syntax follows:
  371.  
  372.  [drive:][path]ALLY [[drive:][path]filename[.ext]]
  373.  
  374. 4.2  RUNNING ALLY FROM AUTOCAD
  375. ------------------------------
  376. Properly installed, ALLY's AutoCAD interface is automatically loaded via your
  377. ACAD.LSP file.  To use it, enter "ALLY" at the AutoCAD command prompt.  The
  378. system switches to text mode and the ALLY Workbench appears--with the AutoLISP
  379. file last checked or analyzed as the default file.  Upon exiting ALLY, you are
  380. returned to AutoCAD where you will be asked if you want to load the file or
  381. files last examined in ALLY.
  382.  
  383. 4.3  RUNNING ALLY FROM WINDOWS
  384. ------------------------------
  385. Inside of AutoCAD for Windows, just enter "ALLY" as described above.  To run
  386. ALLY independently of AutoCAD, double-click the ALLY icon from Window's Desktop
  387. Manager.  See the installation chapter INSTALLING ALLY TO RUN IN WINDOWS for
  388. additional information on the Windows environment.
  389.  
  390. 4.4  ALLY DATA ENTRY SCREENS AND EDITING KEYS
  391. ---------------------------------------------
  392. The ALLY Workbench and Setup programs have a series of data entry fields for
  393. user input.  Use the cursor keys or mouse to move about the screen to add or
  394. change entries.  The active field is always highlighted.  Fields can also be
  395. selected with a mouse by picking the field with the mouse cursor.
  396.  
  397. To exit any menu or data entry screen, press [F10], [Alt-X], or use a mouse to
  398. pick the [F10]-Exit function from the top command menu or the exit window
  399. button in the upper left hand corner of the window.
  400.  
  401. This section is a summary listing of common command keys.  Following chapters
  402. will detail additional keys used in other components of ALLY.
  403. The following keys are common to all components of ALLY which perform editing
  404. or data entry.
  405.  
  406. [Enter]  . . . . Enter key, enters data or picks item from a selection list.
  407.  
  408. [Up], [Down],
  409. [Right], [Left]  Cursor keys, moves the cursor left/right/up/down.
  410.  
  411. [^Left]  . . . . Control-Left cursor moves the cursor left one word.
  412.  
  413.  
  414. [^Right] . . . . Control-Right cursor moves the cursor right one word.
  415.  
  416. [Home] . . . . . Moves cursor to the start of the line or the top of the list.
  417.  
  418. [End]  . . . . . Moves cursor to the end of the line or bottom of the list.
  419.  
  420. [PgUp] . . . . . Moves to the top of the window or display previous page.
  421.  
  422. [PgDn] . . . . . Moves to the bottom of the window or display next page.
  423.  
  424. [Ins]  . . . . . The Insert key toggles the insert/overwrite mode.
  425.  
  426. [Esc]  . . . . . Undo changes to the current line, exit menu, or abort pending
  427.                  command or active process.
  428.  
  429. [BkSp] . . . . . Deletes the character to the immediate left of the cursor.
  430.  
  431. [Del]  . . . . . Deletes the character directly above the cursor.
  432.  
  433. [^End] . . . . . Deletes text from the cursor position to the end of the line.
  434.  
  435. [^Home]  . . . . Deletes text from cursor position to the start of the line.
  436.  
  437. [Spacebar] . . . Toggles the entry of a highlighted fixed response field, such
  438.                  as YES/NO and NAME/EXTN/TIME/SIZE.
  439.  
  440. [MouseRight] . . The Right mouse button performs the same function as the
  441.                  [Spacebar] for fixed response fields.
  442.  
  443. [MouseBoth]  . . Clicking both right and left mouse buttons simultaneously is
  444.                  the same as pressing [Esc].
  445.  
  446. [MouseLeft]  . . The left mouse button serves as a Pick/Enter key.
  447.  
  448. 4.5  MOUSE SUPPORT
  449. ------------------
  450. The following is a brief listing of areas in which ALLY supports mouse input.
  451. More details are available in the documentation of the influenced commands.
  452.  
  453. o  Commands.  Pick any command listed at the top or bottom of the screen to
  454.    execute the command.
  455.  
  456. o  Responses to Prompts.  Respond to prompts which require a fixed reply, such
  457.    as YES/NO and NAME/EXTN/TIME/SIZE, by picking the response to the right of
  458.    the message prompt.
  459.  
  460. o  Menu Choices.  Choose any listed item in a menu window by picking it with
  461.    the mouse.
  462.  
  463. o  Data Entry Windows.  Pick any field on a data entry window to move the
  464.    cursor and highlight bar into it.
  465.  
  466. o  Checker Line Pointer.  Pick any position on the Checker's screen to
  467.    reposition the line pointer.
  468.  
  469. o  Window Exit Buttons.  Pick the rectangle in the top left hand corner of a
  470.    window border to exit the window.
  471.  
  472.  
  473. o  Filename Selection.  Picking a name in the file selection window which is
  474.    not highlighted moves the highlight bar to the picked position.  Picking the
  475.    highlighted file name selects the file and exits the window.
  476.  
  477. o  Scroll bar Slider.  Pick any position on the file selection scroll bar to
  478.    reposition the slider.  Hold button down to drag the slider to desired
  479.    position on the scroll bar.
  480.  
  481. o  Scroll bar Arrows.  Pick up or down arrows to scroll one item at a time,
  482.    hold button down to scroll continuously.
  483.  
  484. o  Checker Scroll Arrows.  Pick the up or down arrows on the Checker's command
  485.    line to scroll the line pointer up or down, hold button down to scroll
  486.    continuously.
  487.  
  488. 5.0   A L L Y    S E T U P    O P T I O N S
  489. ===========================================
  490. ALLY setup options can either be set directly from DOS or from the ALLY
  491. Workbench.  From DOS type "ALLYSU" and press [Enter].  From the ALLY Workbench
  492. you can press either [F2] or [Alt-O], or use your mouse to pick [F2]-Opt in the
  493. top command menu line.  The Options screen presents a main menu of options.
  494.  
  495.                           o------- Options --------+
  496.                           | Install User Programs  |
  497.                           | Define Page            |
  498.                           | Categories             |
  499.                           | Report Options         |
  500.                           | Execution Options      |
  501.                           | Video Options          |
  502.                           | Printer Options        |
  503.                           | About ALLY             |
  504.                           +------------------------+
  505.  
  506. To make a menu choice, you can either cursor to the desired option and press
  507. [Enter], press the highlighted first letter of option name, or pick the option
  508. with your mouse.  Each menu choice will bring up a new screen, most of which
  509. are data entry windows.  We next describe each screen in detail.
  510.  
  511. 5.1  INSTALL USER PROGRAMS
  512. --------------------------
  513. This is where you install your external programs into the ALLY Workbench.
  514. There are fields for your browser, text editor, and up to 8 other external
  515. programs or DOS commands.  The browser attaches to key [F7]/[Alt-B], the editor
  516. to key [F8]/[Alt-E], and other user programs are attached to keys [Ctrl-F1]
  517. through [Ctrl-F8].
  518.  
  519.              o-------------- Install User Programs --------------+
  520.              | F7 Browser: ~list ]                               |
  521.              | F8 Editor : ~c:\qedit\q.exe ] ^                   |
  522.              |^F1 Program: c:\sdk\lb ] [.new                     |
  523.              |^F2 Program: @c:\sdk\kelv ] > d:\x\;.k             |
  524.              |^F3 Program: c:\sdk\protect d:\x\;.k g c:\app\;.lsp|
  525.              |^F4 Program: c:\util\ljbook *                      |
  526.              |^F5 Program: ~fc /l /c /w /n ] [.bak | list /s     |
  527.              |^F6 Program: del *.bak                             |
  528.              |^F7 Program: copy ] ?                              |
  529.              |^F8 Program: print *                               |
  530.              +---------------------------------------------------+
  531.  
  532. With properly installed user programs, editing, browsing and other operations
  533. are a one key operation in ALLY.  The user installed editor must be capable of
  534. editing and saving files in a plain ASCII format.  The browser can be any one
  535. of many common utilities for viewing ASCII files or, if you desire, your editor
  536. can be used for browsing.  Both the editor and browser must be capable of
  537. loading a file by specifying it as a command line parameter, but this is an
  538. almost universal feature.  For best results with the ALLY Checker, the text
  539. editor should also provide for a command line parameter which will direct it to
  540. position the cursor at a specific line of the file.  Consult your editor's
  541. documentation, most good editors have this capability.
  542.  
  543. To maximize the memory available for running user programs, ALLY swaps itself
  544. nearly completely out of conventional memory.  AutoCAD itself does not do as
  545. well, so if you plan to run ALLY from within AutoCAD, you are generally better
  546. off using small memory efficient programs rather than large, full-blown
  547. applications.  Some word processors, for instance, may require more memory than
  548. can be made available with AutoCAD in the background.
  549.  
  550. External programs and DOS commands are installed in the same fashion, except
  551. internal DOS commands (such as COPY) have no path or file extension.  Just
  552. enter the command or program name followed by any required command line
  553. parameters.  If a program's directory is not listed in DOS's path, prefix the
  554. program name with its full directory path.
  555.  
  556. If you give the full path name of your program and the file extension (for
  557. example: C:\QEDIT\Q.EXE), ALLY will execute it directly, without first loading
  558. a new copy of the DOS command interpreter (command.com).  Depending on the
  559. version of DOS being used, this will make as much as 3.5 kilobytes more memory
  560. available to the program being executed.  Other special instructions, filenames
  561. and command parameters require one or more of the following ALLY special
  562. symbols in the user program command line.
  563.  
  564. Right bracket - Pathname alias
  565. ------------------------------
  566. ALLY's various file and path name aliases allow it to automatically provide
  567. current file information to user programs and commands.  A right bracket (]) is
  568. used as a full pathname alias.  When you add a right bracket as a command line
  569. parameter, ALLY converts it to the full path and filename of the selected LISP
  570. file.  The example below shows the user command as you would enter it, and the
  571. command as ALLY expands it assuming that the currently selected file is
  572. C:\DEV\LAY.LSP.
  573.  
  574.    list ]
  575. =  list C:\DEV\LAY.LSP
  576.  
  577. Left bracket - Pathname less extension alias
  578. --------------------------------------------
  579. The left bracket ([) alias converts to the full pathname of the current file,
  580. less the filename extension.  This is useful for programs which process an
  581. incoming file to a new output file--you can create output files with the same
  582. name as the original but a different extension.  The example below shows a user
  583. command with both right and left brackets, to supply the program with input and
  584. output file names.  Also shown is the result of ALLY's expansion of the
  585. command, assuming the currently selected file is C:\DEV\LAY.LSP.
  586.  
  587.    c:\sdk\lb ] [.new
  588. =  c:\sdk\lb C:\DEV\LAY.LSP C:\DEV\LAY.new
  589.  
  590.  
  591. Semicolon - Filename less path and extension alias
  592. --------------------------------------------------
  593. The semicolon (;) alias converts to the current filename less path and
  594. extension.  Similar to the left bracket alias, it is useful for specifying
  595. output files with the same file name as the original, but with a different path
  596. and extension.  The example below is a modification of the one used previously,
  597. this time using semicolon to allow output to a different directory.
  598.  
  599.    c:\sdk\lb [ c:\clean\;.new
  600. =  c:\sdk\lb C:\DEV\LAY.LSP c:\clean\LAY.new
  601.  
  602. Asterisk - Report pathname alias
  603. --------------------------------
  604. A lone asterisk symbol (*) converts to the full path and filename of the
  605. Analyzer report file.  This is useful for sending ALLY's report file to a
  606. printing or formatting utility.  The asterisk symbol must be separated from the
  607. rest of the command line by spaces to prevent ALLY from confusing it with the
  608. DOS wildcard character.  The asterisk symbol in the example below provides the
  609. current report file name to a printing utility.  ALLY's expansion of the
  610. command is also shown, assuming a report file of C:\TMP\LAY.RPT.
  611.  
  612.    c:\util\ljbook *
  613. =  c:\util\ljbook C:\TMP\LAY.RPT
  614.  
  615. Question mark - Pause for input command
  616. ---------------------------------------
  617. If you place a lone question mark (?) in the command line, ALLY pauses at
  618. execution time to allow you to add parameters or edit the command line.  The
  619. question mark must be separated from the rest of the command line by spaces to
  620. prevent ALLY from confusing it with the DOS wildcard character.  The command
  621. line editor positions the cursor at the position of the question mark.  For
  622. example, assuming the current file is C:\DEV\LAY.LSP, the following COPY
  623. command pauses for the user to enter a destination.
  624.  
  625.    copy ] ?
  626. =  copy C:\DEV\LAY.LSP _
  627.  
  628. Ampersand - Switch to directory prefix
  629. --------------------------------------
  630. If a program must execute from within its own directory, include its path and
  631. prefix it with an ampersand symbol (@).  The ampersand forces a directory
  632. change to the program's directory before execution, and a directory change back
  633. after execution.  This is useful for programs which expect their support files
  634. to be in the current directory.  In the example below, ALLY will make D:\SDK
  635. the active directory before executing the program, and will return to the
  636. previous directory after the program executes.
  637.  
  638.   @c:\sdk\kelv ] > d:\x\;.k
  639. =  c:\sdk\kelv C:\DEV\LAY.LSP > d:\x\LAY.k
  640.  
  641. Tilde - Keep video mode prefix
  642. ------------------------------
  643. The tilde prefix allows the same video mode control for user programs that
  644. Execution Options' "Keep mode in DOS" does for the DOS shell.  When a tilde
  645. symbol (~), is placed in front of the user command, ALLY retains its video mode
  646. when executing the program or command.  Retaining ALLY's video mode is useful
  647. for editors, browsers and other programs which can operate in extended modes.
  648.  
  649.  
  650. The example below shows the tilde prefix for the browser.  If, for instance,
  651. ALLY is operating in 132 column x 43 row text mode, the browser will appear in
  652. the same screen resolution when called by ALLY.
  653.  
  654.   ~list ]
  655.  
  656. If you do not add the tilde prefix, ALLY restores the previously active DOS
  657. video mode before executing the program or command.  The ALLY video mode is
  658. restored when you exit back to ALLY, regardless of changes outside.  The tilde
  659. prefix can be used in conjunction with the ampersand prefix, the order of
  660. appearance is not important.
  661.  
  662. Carat - line number alias
  663. -------------------------
  664. A line number alias is used to support executing your editor from the ALLY
  665. Checker.  Many text editors allow a special parameter which directs them to
  666. jump to a specific line of the file specified for editing.  Using the carat
  667. symbol (^) to represent the line number, enter the rest of the "go to" command
  668. line parameter per your editor's instructions.
  669.  
  670. The line number is meaningful only when the Editor is called from the ALLY
  671. Checker.  When the [F8]-Edit command is executed from the Checker, the user's
  672. editor is called upon to load the file and position the cursor on the same line
  673. the Checker is viewing.  This is different than the general [F8]-Edit command
  674. in ALLY's Workbench, which simply passes line number 1 to the editor.
  675.  
  676. Below, specific examples are given for use of the carat alias with Qedit and
  677. Brief editors, other editors will likely expect a different format.  Also shown
  678. are the commands as ALLY expands them, assuming C:\DEV\LAY.LSP is in the
  679. Checker positioned at line number 91.
  680.  
  681.   ~c:\qedit\q.exe ] ^
  682. =  c:\qedit\q.exe C:\DEV\LAY.LSP 91
  683.  
  684.    c:\brief\b.exe ] -m"goto_line ^"
  685. =  c:\brief\b.exe  C:\DEV\LAY.LSP -m"goto_line 91"
  686.  
  687. Combined symbols
  688. ----------------
  689. There is no limit as to how you can combine ALLY's special symbols.  Here are
  690. some more examples of ALLY's command expansions.
  691.  
  692.    c:\sdk\protect d:\x\;.k g c:\app\;.lsp
  693. =  c:\sdk\protect d:\x\LAY.k g c:\app\LAY.lsp
  694.  
  695.   ~fc /c /w /n ] [.bak | list /s
  696. =  fc /c /w /n C:\DEV\LAY.LSP C:\DEV\LAY.bak | list /s
  697.  
  698. If ever in doubt as to how ALLY is expanding a user command line, add a
  699. question mark pause command at the end of the line.  You will then get an
  700. opportunity to inspect the expanded command.
  701.  
  702. TSR programs
  703. ------------
  704. TSR programs should not be installed as ALLY user programs unless they are
  705. already loaded and resident prior to executing ALLY (and prior to AutoCAD, if
  706. ALLY is used from AutoCAD).
  707.  
  708.  
  709. To be of any use when attached to an ALLY user program key, the TSR program
  710. must be accessible from the DOS command line after going resident, in lieu of
  711. or in addition to intercepting a hot key.  One suitable TSR program is DOS's
  712. PRINT program.  Assuming PRINT is resident prior to running ALLY, the following
  713. user command can print report files in the background.
  714.  
  715.    print *
  716. =  print C:\TMP\LAY.RPT
  717.  
  718. If you use the above PRINT command, be careful to not overwrite or otherwise
  719. disturb the file while printing.
  720.  
  721.  
  722. 5.2  DEFINE PAGE
  723. ----------------
  724. These options affect the page format and page size of Analyzer reports.
  725.  
  726.                           o------ Define Page ------+
  727.                           | Page width······: 80    |
  728.                           | Left margin·····: 2     |
  729.                           | Right margin····: 2     |
  730.                           | Page length·····: 66    |
  731.                           | Top margin······: 2     |
  732.                           | Bottom margin···: 2     |
  733.                           +-------------------------+
  734.  
  735. Page width
  736. ----------
  737. Enter the page width for ALLY's report.  The report page width is adjustable
  738. from 70 to 255 characters, defaulting to 80 characters wide.  For a typical
  739. narrow carriage dot-matrix printer, try using 80 for its normal (10 CPI) print
  740. mode, or 132 for a compressed (17 CPI) print mode.  Higher values can be used
  741. for laser and wide carriage printers, the maximum width depends on the paper
  742. width and font size being used.
  743.  
  744. Left margin
  745. -----------
  746. Enter the size of the left margin for ALLY's report.  The margin is adjustable
  747. from 0 to 10 characters, defaulting to 0 characters wide.
  748.  
  749. Right margin
  750. ------------
  751. Enter the size of the right margin for ALLY's report.  The margin is adjustable
  752. from 0 to 10 characters, defaulting to 0 characters wide.
  753.  
  754. Page length
  755. -----------
  756. The page length for the ALLY's report can be set from 44 to 32767 lines, or 0
  757. for continuous paper feed.   The length must match your paper and printer
  758. settings.  Typical defaults are 66 lines for dot-matrix and 60 lines for laser
  759. and ink jet printers.  Some fonts require different settings.  The number of
  760. printed lines per page is the page length minus the top and bottom margins.
  761.  
  762. Top margin
  763. ----------
  764. Enter the length of the top margin for ALLY's report.  The margin is adjustable
  765. from 0 to 10 lines, defaulting to 2 lines.
  766.  
  767.  
  768. Bottom margin
  769. -------------
  770. Enter the length of the bottom margin for ALLY's report.  The margin is
  771. adjustable from 0 to 10 lines, defaulting to 2 lines.
  772.  
  773. 5.3  CATEGORIES
  774. ---------------
  775. In this window choose the categories you wish the ALLY Analyzer to report.
  776. Turn individual report categories on or off with a YES or NO response.
  777.  
  778.                           o------ Categories -------+
  779.                           | Statistics······: YES   |
  780.                           | File hierarchy··: YES   |
  781.                           | Call hierarchy··: YES   |
  782.                           | X-ref functions·: YES   |
  783.                           | X-ref symbols···: YES   |
  784.                           | X-ref reserved··: NO    |
  785.                           | Program listing·: YES   |
  786.                           +-------------------------+
  787. Statistics
  788. ----------
  789. The statistical section summarizes code and comments processed, functions and
  790. symbols found, and includes several other measures of processed code.
  791.  
  792. File hierarchy
  793. --------------
  794. ALLY's file hierarchy is a tree structure of all user defined functions, which
  795. optionally shows each functions beginning and ending line numbers.
  796.  
  797. Call hierarchy
  798. --------------
  799. The call hierarchy is a tree structure of all called and user defined
  800. functions, illustrating their dynamic scope and dependencies.
  801.  
  802. X-ref functions
  803. ---------------
  804. This is ALLY's cross-reference of all user defined functions, showing where
  805. each is declared, defined, and used.  Optionally, you can include summaries
  806. showing the functions and symbols declared and used by the function.
  807.  
  808. X-ref symbols
  809. -------------
  810. All user defined symbols which are not functions are cross-referenced in this
  811. section.  Declarations and each instance of use are shown.
  812.  
  813. X-ref reserved
  814. --------------
  815. This cross-reference of AutoLISP's reserved symbols includes the predefined
  816. constants, such as Pi, T and nil, and AutoLISP's built-in subrs (functions).
  817. Although useful in identifying AutoLISP version compatibility, memory
  818. requirements and execution time of the Analyzer increase with its use.
  819.  
  820. Program listing
  821. ---------------
  822. This option adds a listing of the analyzed AutoLISP source files to the report.
  823. Each line is numbered to cross-reference with the listing of functions and
  824. symbols.  This is valuable for locating reported errors and instances of symbol
  825. use, and should always be used for producing final program documentation.
  826.  
  827. 5.4  REPORT OPTIONS
  828. -------------------
  829. These options effect the output of the report the ALLY Analyzer produces.
  830.  
  831.                           o---- Report Options -----+
  832.                           | File tree detail: YES   |
  833.                           | Call tree level·: 0     |
  834.                           | Function summary: YES   |
  835.                           | Detach globals··: YES   |
  836.                           | Detach undefined: YES   |
  837.                           | Double space····: NO    |
  838.                           | ASCII lines·····: YES   |
  839.                           | Form feeds······: YES   |
  840.                           | Printer commands: NO    |
  841.                           | Page breaks·····: LIST  |
  842.                           +-------------------------+
  843. File tree detail
  844. ----------------
  845. By default, ALLY's file hierarchy tree displays the beginning and ending line
  846. numbers of all user-defined functions, and includes lambda functions.  If you
  847. answer NO, the file tree will show function names without details such as line
  848. numbers, and will not include lambda functions.
  849.  
  850. Call tree level
  851. ---------------
  852. This leveling option allows you to specify the maximum depth for branches of
  853. the function call hierarchy tree.  Leveling gives you an abbreviated view of
  854. the hierarchy tree if you are only interested in major functions a few levels
  855. deep.  See the FUNCTION CALL HIERARCHY section of the manual for an
  856. illustration of leveling.  Each function call is a branch of the tree.  A
  857. branches level is its depth from the global root.  When the call tree level is
  858. set to zero, the default, ALLY creates the entire hierarchy tree without
  859. leveling.  When the call tree level is set between 2 and 30, branches of the
  860. tree deeper than the specified level from the global root are pared off, with
  861. an indicator.
  862.  
  863. Function summary
  864. ----------------
  865. Answer NO to this option, and the ALLY Analyzer will omit the default
  866. "declares" and "uses" summaries from function cross-references, and only
  867. display instances of the functions.
  868.  
  869. Detach globals
  870. --------------
  871. The detach globals option splits ALLY's function and symbol reports into global
  872. and local sections.  This can be a convenience when scrutinizing the report to
  873. identify global symbols which can be declared local.
  874.  
  875. Detach undefined
  876. ----------------
  877. This option allows you to separate the cross-references of undefined and
  878. external functions into a separate category.  This can be used with or without
  879. the above described "Detach globals" option.
  880.  
  881. Double space
  882. ------------
  883. Answer YES to force the listing of the source file to be printed double spaced,
  884. with room to add editorial comments.
  885.  
  886.  
  887. ASCII lines
  888. -----------
  889. If you respond YES, the ALLY Analyzer will use the "box" characters from the
  890. IBM extended character set to draw lines and tree diagrams in its report.  If
  891. your printer or editor does not support this character set (perhaps producing
  892. foreign or italic characters instead), turn this option off with NO.  When off,
  893. ALLY substitutes dashes and other common characters which any printer should be
  894. capable of producing.
  895.  
  896. Form feeds
  897. ----------
  898. If YES, ALLY inserts hard form feed characters (ASCII 12) to terminate each
  899. page.  If NO, blank lines are used to pad the bottom of each page to the
  900. specified length.
  901.  
  902. Printer commands
  903. ----------------
  904. By default, ALLY does not include hard form-feeds and user-defined printer
  905. setup and reset strings in Analyzer reports written to files (FILE and EDITOR
  906. destinations).  If you plan to create report files for printing at a later time
  907. with the DOS PRINT or COPY commands without reformatting, respond YES to this
  908. option to ensure the files include the printer codes ALLY normally uses for
  909. outputing reports to the printer.
  910.  
  911. Page breaks
  912. -----------
  913. Enter YES, NO or LIST.  The ALLY Analyzer generates several distinct sections
  914. in its reports.  YES forces a page break after each of the sections--regardless
  915. of length.  NO uses the least amount of paper to generate a printed report, by
  916. allowing report sections to follow directly behind one another as page space
  917. permits.  LIST, the default, allows the analysis sections of the report to mix
  918. but forces a page break between program listings, so that they may be separated
  919. and studied side-by-side with the analysis.
  920.  
  921.  
  922. 5.5  EXECUTION OPTIONS
  923. ----------------------
  924. These options effect the way the ALLY programs operate.
  925.  
  926.                           o--- Execution Options ---+
  927.                           | Tab expansion···: 8     |
  928.                           | Read buffer size: 1     |
  929.                           | File sort method: NAME  |
  930.                           | Default to last·: YES   |
  931.                           | Browse 2 files··: NO    |
  932.                           | Edit 2 files····: NO    |
  933.                           | Pause Analyzer··: NO    |
  934.                           | Use mouse·······: YES   |
  935.                           | Swap ALLY to····: DISK  |
  936.                           +-------------------------+
  937.  
  938. Tab expansion
  939. -------------
  940. Enter the number of spaces that Tabs (ASCII 9) in your source code should be
  941. expanded to in Analyzer reports and Checker displays.  It is adjustable from 2
  942. to 8 spaces, default is 8.
  943.  
  944.  
  945. Read buffer size
  946. ----------------
  947. Enter a size for ALLY's line reading buffer, 1K to 64K.  The buffer size
  948. dictates the maximum line length that the Analyzer and Checker can read.  A 1K
  949. buffer allows 1024 character lines and is generally adequate.  Increasing the
  950. buffer decreases the memory available for analyzing and checking.
  951.  
  952. File sort method
  953. ----------------
  954. Enter a default sorting method for the ALLY Workbench point-and-shoot file
  955. selection window.  Choose NAME, EXTN, TIME or SIZE.  The default sorting order
  956. can be changed when selecting files.
  957.  
  958. Default to last
  959. ---------------
  960. By default, ALLY's file selection starts in the directory of the file which was
  961. last analyzed.  If NO, file selection will always start in the current
  962. directory. Reload ALLY after editing this option for the change to take effect.
  963.  
  964. Browse 2 files
  965. --------------
  966. When reports are destined to BROWSER, a YES causes ALLY to send both the report
  967. and source file names to the browser's execution command line.  This option is
  968. useful for "windowing" browsers which can switch between or display two files
  969. on the screen simultaneously.
  970.  
  971. Edit 2 files
  972. ------------
  973. When reports are destined to EDITOR, a YES causes ALLY to send both the report
  974. and source file names to the editor's execution command line.  This option is
  975. useful for "Windowing" editors which can display and edit two files
  976. simultaneously.
  977.  
  978. Pause Analyzer
  979. --------------
  980. When the pause option is on, ALLY pauses after completing the analysis so that
  981. you can review the status window before browsing the report.  Press [Esc] to
  982. abort or any other key to continue.
  983.  
  984. Use mouse
  985. ---------
  986. This option controls whether or not ALLY makes use of a mouse.  ALLY
  987. automatically determines whether or not a mouse driver is present, but this
  988. option provides a means to totally disable the mouse event handler in case of
  989. conflict.  Reload ALLY after editing this option for the change to take effect.
  990.  
  991. Swap ALLY to
  992. ------------
  993. The swap option allows users to choose a destination for ALLY's swap;  EMS, XMS
  994. or DISK.  The default is DISK, which creates a temporary swap file (about 96K
  995. in size) in the ALLY directory.  Swap files are named in the format
  996. ALLYnnnn.$$$, and are deleted during ALLY's normal exit routine.
  997.  
  998. The EMS option works with any expanded memory manager providing EMS 3.x or
  999. higher.  The XMS option operates with extended memory managers such as
  1000. HIMEM.SYS, QEMM, 386^MAX, and NETROOM.  VCPI support provided by EMM386 and
  1001. most modern memory managers allow the XMS option to work even if the manager is
  1002. configured to simulate EMS memory.
  1003.  
  1004. ALLY requires about 96K of EMS or XMS.  If the selected type of memory is
  1005. absent or insufficient when ALLY is run, it uses a disk swap file instead.  See
  1006. the USING EXTENDED OR EXPANDED MEMORY section for details on configuring
  1007. AutoCAD to share memory with ALLY.
  1008.  
  1009.  
  1010. 5.6  VIDEO OPTIONS
  1011. ------------------
  1012. These options effect ALLY's video display resolution and use of color.
  1013.  
  1014.                           o----- Video Options -----+
  1015.                           | Force video mode: NONE  |
  1016.                           | User video mode·: 69    |
  1017.                           | Keep mode in DOS: NO    |
  1018.                           | Allow from ACAD·: NO    |
  1019.                           | Resistor colors·: NO    |
  1020.                           | Mono colors·····: NO    |
  1021.                           +-------------------------+
  1022.  
  1023. Force video mode
  1024. ----------------
  1025. The force video mode option has three choices: NONE, VGA, and USER.  NONE tells
  1026. ALLY to execute in the current DOS video mode, without switching modes itself.
  1027. With this setting, ALLY will operate properly in any character resolution, even
  1028. extended text modes set by another utility.
  1029.  
  1030. Choose VGA to force ALLY to switch to 80x50 text mode if VGA, or 80x43 text
  1031. mode if EGA.  These 50/43 line VGA/EGA modes are standard, independent of video
  1032. card manufacture.
  1033.  
  1034. Choose USER to force ALLY, at startup, to switch to the video mode defined in
  1035. the "User video mode" field, described below, generally used to define
  1036. high-resolution extended text modes.
  1037.  
  1038. User video mode
  1039. ---------------
  1040. Enter any extended video text mode in this field, using hexadecimal notation.
  1041. If the previously described "Force video mode" field is set to USER, ALLY will
  1042. attempt to switch into the user-selected video mode at start-up.
  1043.  
  1044. Since extended mode numbers are specific to brand, refer to your video card
  1045. manual for a listing of applicable text mode numbers.  If a manual is
  1046. unavailable, refer to the text file VGAMODES.DOC supplied with ALLY.  This
  1047. document lists 132 column text modes for several common adapters.  If you are
  1048. unsure of the brand, Microsoft's MSD.EXE program (included with MS-DOS 6.x and
  1049. Windows 3.1) is capable of identifying many video adapters.
  1050.  
  1051. The user video mode option is designed primarily for EGA and VGA cards which
  1052. use standard BIOS calls to set video modes, but ALLY does detect and support
  1053. some non-standard models.  VESA standard SuperVGA extended text modes are
  1054. supported as well.  Most modern VGA cards are VESA capable, although some
  1055. require a companion TSR program to be loaded.
  1056.  
  1057. Numbers 02..FF hexadecimal are used for the OEM (Original Equipment
  1058. Manufacturer) extended modes, and numbers 100..FFF hexadecimal are reserved for
  1059. VESA extended modes.  Forty column text modes 0 and 1, and graphics modes (if
  1060. detectable) are either ignored or rejected.
  1061.  
  1062.  
  1063. Keep mode in DOS
  1064. ----------------
  1065. NO causes ALLY to restore the previous DOS active video mode before shelling to
  1066. DOS from the Workbench, and to restore ALLY's video mode upon return.  YES
  1067. causes ALLY to retain its current video mode, row and column resolution when
  1068. shelling to DOS.  Be aware that present MS-DOS ANSI.SYS drivers do not support
  1069. extended text modes, and will not write to the extended portions of the screen.
  1070. If you have ANSI installed and wish to try DOS in extended text modes, remove
  1071. ANSI.SYS from your CONFIG.SYS file or switch to an ANSI replacement with
  1072. extended mode support, such as ANSI.COM by PC Magazine.
  1073.  
  1074. Allow from ACAD
  1075. ---------------
  1076. YES allows ALLY to function from AutoCAD just as it would from DOS.  Choose NO
  1077. to force ALLY to override all other video configurations when it detects it is
  1078. being run from AutoCAD, and prevent video mode changes.  The NO option is only
  1079. necessary when ALLY is used with certain display-list processor and video card
  1080. combinations which do not tolerate video mode changes from AutoCAD's shell.  A
  1081. bad video combination usually results in a corrupted graphics screen display
  1082. upon returning to AutoCAD.
  1083.  
  1084. Resistor colors
  1085. ---------------
  1086. This allows you to choose the color set used for coloring parentheses in the
  1087. ALLY Checker.  The default color set attempts to maximize contrast in nested
  1088. parentheses.  The alternate resistor color set follows the
  1089. Brown-Red-Orange-Yellow-Green-Blue-Violet-Gray-White-Black sequence which
  1090. certain users with electronics background may find more familiar and
  1091. informative.  Answer YES to force ALLY to use the Resistor color set.  This
  1092. option is only valid for color displays.
  1093.  
  1094. Mono colors
  1095. -----------
  1096. Although ALLY generally provides automatic video detection, you can set this
  1097. option to force it to use monochrome (black and white) colors for its screen
  1098. displays, regardless of the actual hardware.  Forcing monochrome mode also
  1099. defeats all other ALLY video mode configurations.
  1100.  
  1101. 5.7  PRINTER OPTIONS
  1102. --------------------
  1103. Use the printer options screen to select a printer port and set up printer
  1104. defaults for Analyzer reports.  Scrolling input fields allow the Printer Setup
  1105. and Printer Reset strings to contain up to 254 characters.
  1106.  
  1107.             o----------------- Printer Options ------------------+
  1108.             | Printer port·: LPT1                                |
  1109.             | Printer setup: 15,27,48                            |
  1110.             | Printer reset: 18,27,50                            |
  1111.             +----------------------------------------------------+
  1112.  
  1113. Printer port
  1114. ------------
  1115. Use this field to tell ALLY which communications port your printer is attached
  1116. to--LPT1, LPT2, LPT3, COM1, COM2, COM3 or COM4.  The most common connection is
  1117. LPT1 (often by redirection), try this if you are unsure which port your printer
  1118. is attached to.  Serial printers must be initialized to the proper baud,
  1119. parity, databits, etc. with the DOS MODE command.
  1120.  
  1121.  
  1122. Printer setup
  1123. -------------
  1124. This entry is optional, used to define a string of control codes and/or escape
  1125. sequences to be sent to your printer prior to printing ALLY's reports.  Printer
  1126. commands are hardware specific--although some de facto standards exist,
  1127. compatibility may be limited to a subset of commands.  Most differences in
  1128. control codes occur between the different technologies--laser, dot-matrix, etc.
  1129. See your printer manual for codes specific to your hardware.
  1130.  
  1131. List control characters, escape sequences, or a string of both.  Each code and
  1132. character must be entered in its decimal ASCII value with each value separated
  1133. by a comma.  Blank spaces are not required between codes (ALLY will strip them
  1134. out anyway) and leading zeros are optional.
  1135.  
  1136. Appendix B further describes printer commands and contains a condensed table of
  1137. commands specific to IBM, Epson and compatible dot-matrix printers.  Appendix
  1138. A, an ASCII table, will help you to convert other printer commands to the
  1139. required format.
  1140.  
  1141. To illustrate the method, let's set an Epson compatible dot-matrix printer to
  1142. condensed print mode and 1/8 inch line spacing.  The control code to turn on
  1143. the printer's condensed print mode is SI (Shift In), which is decimal ASCII 15.
  1144. To set 1/8 inch line spacing, the escape sequence ESC+0 is required.  ESC
  1145. (Escape) is decimal ASCII 27, and the character 0 (zero) is decimal ASCII 48.
  1146. Thus the string you enter to send these two commands is:  15,27,48
  1147.  
  1148. Printer reset
  1149. -------------
  1150. This entry is optional.  The instructions for entering a reset string are the
  1151. same as for entering a printer setup string.  This is normally used only in
  1152. conjunction with a printer setup string, to return the printer to its previous
  1153. state.
  1154.  
  1155. To continue the example we began with the setup string, let's return the
  1156. printer to its previous state.  The control code to turn the condensed print
  1157. mode off is DC2 (Device Control 2), which is decimal ASCII 18.  To reset the
  1158. line spacing to a normal 1/6, the escape sequence ESC+2 is required.  ESC
  1159. (Escape) is decimal ASCII 27, and the character 2 (two) is decimal ASCII 50.
  1160. The developed reset string is:  18,27,50
  1161.  
  1162. Sample printer configurations
  1163. -----------------------------
  1164. The following sample configuration summarizes the examples used previously for
  1165. an Epson compatible narrow carriage dot-matrix printer.  It configures the
  1166. printer to use its built-in 17 cpi condensed print mode and an 88 line page
  1167. with 1/8 inch line spacing (with continuous form pager, the entire 11" page
  1168. length is printable, so 1/8" spacing = 11" page length/88 lines).
  1169.  
  1170. To support this setup, ALLY's "Define Page" window must be set with a page
  1171. width of 132 and a page length of 88, or 0 for continuous paper feed.
  1172.  
  1173. Setup: 15, 27, 48
  1174. Reset: 18, 27, 50
  1175.  
  1176. The next sample setup is for an HP Laserjet compatible printer.  It configures
  1177. the laser printer to use its built-in 16.67 cpi line-printer font with a
  1178. 5.45/48" line spacing (laser printers are limited to 10" printing area on an
  1179. 11" long page, so 5.45/48" spacing ≈ 10" printable page length/88).
  1180.  
  1181.  
  1182. To support this setup, ALLY's "Define Page" window must be set with a page
  1183. width of 132 and a page length of 88, or 0 for continuous paper feed.
  1184.  
  1185. Setup: 27, 38, 108, 53, 46, 52, 53, 67, 27, 40, 49, 48, 85, 27, 40, 115, 48,
  1186.        112, 49, 54, 46, 54, 55, 104, 56, 46, 53, 118, 48, 115, 48, 98, 48, 84
  1187.  
  1188. Reset: 27, 69
  1189.  
  1190. 5.8  ABOUT ALLY
  1191. ---------------
  1192. Choose this menu item to display some brief information about ALLY's developer.
  1193.  
  1194.  
  1195. 6.0   T H E    A L L Y    W O R K B E N C H
  1196. ===========================================
  1197. ALLY starts up in the Workbench at the main File/Destination data entry screen.
  1198. Here you select the file search mask, the file and report directories, the
  1199. source file to be analyzed, checked, or edited, and the report destination.
  1200.  
  1201. Function keys are available for help, for configuring ALLY, and to perform
  1202. actions such as executing the ALLY Analyzer, a DOS shell, your editor, file
  1203. browser and other installed external programs.
  1204.  
  1205. 6.1  FILE/DESTINATION
  1206. ---------------------
  1207. This is the main ALLY screen, where you select AutoLISP files and direct their
  1208. reports.  All ALLY functions are available from this screen: editing, checking,
  1209. analyzing, and other user installed programs.
  1210.  
  1211.             o---------------- File/Destination ------------------+
  1212.             | File search mask: *.LSP                            |
  1213.             | File directory··: D:\ACAD12\SUPPORT\               |
  1214.             | Report directory: E:\                              |
  1215.             | Lisp file name··: D:\ACAD12\SUPPORT\DLINE.LSP      |
  1216.             | Destination·····: SCREEN                           |
  1217.             | Report file name: E:\DLINE.RPT                     |
  1218.             +----------------------------------------------------+
  1219.  
  1220. File search mask
  1221. ----------------
  1222. This is the search mask that the ALLY pop-up file selection window ([F3] or
  1223. [Alt-F]) uses to select which files are displayed.  The default is  *.LSP, but
  1224. you may enter any combination of wildcard and match characters that DOS
  1225. permits.  Do not prefix a path to the search mask.
  1226.  
  1227. File directory
  1228. --------------
  1229. This is the directory path where your AutoLISP source files are located.  The
  1230. path must contain the appropriate drive letter and must be terminated with a
  1231. backslash. If you do not supply a path, ALLY inserts the current path.  The
  1232. pop-up file selection window ([F3] or [Alt-F]) searches from this field's
  1233. directory, and updates it when directories are changed.
  1234.  
  1235. By default, ALLY starts up with the file directory being used the last time it
  1236. was run.  The "Default to last" option of EXECUTION OPTIONS can change this
  1237. behavior to startup with the current directory.
  1238.  
  1239.  
  1240. Report directory
  1241. ----------------
  1242. ALLY uses the report directory, by default, as a destination for report file
  1243. output.  Like the file directory, this must be a valid path with a drive letter
  1244. and terminating backslash--if blank, the current path is inserted as a default.
  1245. This directory is also used for temporary files created for reports sent to the
  1246. browser.  If you have a ram disk with adequate free space, naming it as the
  1247. report directory may result in a significant speed increase.  You can override
  1248. this default path for EDITOR and FILE destinations by editing the report file
  1249. name after an AutoLISP file has been selected.
  1250.  
  1251. Lisp file name
  1252. --------------
  1253. Enter the name of the AutoLISP file you wish to operate on.  Your chosen file
  1254. directory automatically prefixes the file name, but you can enter a different
  1255. path name if needed.  If you omit the file extension, ALLY adds .LSP by
  1256. default.  When changing a file name, the old name clears if any key other than
  1257. a cursor or editing key is pressed first.  Rather than manually entering the
  1258. LISP file name, you can select files from ALLY's point-and-shoot file selection
  1259. window (press function key [F3] or [Alt-F]).
  1260.  
  1261. Destination
  1262. -----------
  1263. Use this field to direct the ALLY Analyzer's report to your choice of SCREEN,
  1264. FILE, PRINTER, BROWSER or EDITOR.  The SCREEN option directs the output to a
  1265. simple screen display routine, which pages but does not provide backward
  1266. scrolling.  The FILE option writes the report to the named output disk file.
  1267. PRINTER prints the report to the printer attached to the specified port.  For
  1268. BROWSER, ALLY writes the report to a temporary disk file, then loads it into
  1269. your browser (the temporary file is erased as you leave the browser).  When
  1270. EDITOR is chosen for the destination, ALLY writes the report to the named
  1271. output disk file and loads it into your editor.
  1272.  
  1273. Report file name
  1274. ----------------
  1275. Enter the file name for the report generated by the ALLY Analyzer.  A file name
  1276. is only required when FILE or EDITOR has been chosen for the destination.  ALLY
  1277. will automatically fill this field, using the chosen report directory and the
  1278. same file name as the AutoLISP source, except with a  RPT extension.  You can
  1279. edit this field or enter a different path or name if desired.  If you change
  1280. the name but omit the file extension, ALLY adds .RPT by default.
  1281.  
  1282. 6.2  FILE SELECTION
  1283. -------------------
  1284. Point-and-shoot file selection is available from the ALLY Workbench by pressing
  1285. [F3] or [Alt-F].  A window pops up with a file listing gathered from your
  1286. specified file directory and filename search mask.  Drive letters and
  1287. subdirectories are also included, and are marked and displayed in unique
  1288. colors.  Lists which contain more items than can fit in the window will scroll
  1289. as you traverse them.
  1290.  
  1291. The files are sorted according to the default order chosen in ALLY's Setup
  1292. Options.  To temporarily change the sort method, press [F9] or [Alt-S] and
  1293. choose NAME, EXTN, TIME or SIZE.
  1294.  
  1295. Pick your selection by moving the highlight bar over the file or subdirectory
  1296. name and pressing [Enter].  The [Up] and [Down] cursor keys traverse the list
  1297. one name at a time.  If you have a mouse, you can move the mouse cursor over
  1298.  
  1299. the chosen file name and click the left button to highlight the file.  Clicking
  1300. the left mouse button again with the mouse cursor over the highlighted file
  1301. enters your selection.
  1302.  
  1303. There are other ways to move the highlight bar through longer lists.  Typing
  1304. the first character of a file name moves the highlight bar to the first
  1305. matching file.  Typing the second character within two seconds of the first
  1306. moves the highlight bar again to the first name matching both characters.  ALLY
  1307. continues to track and match the name so long as you continue to type
  1308. characters within two second intervals.  The string of characters being tracked
  1309. are displayed below the file selection window.  After a two second interval,
  1310. the tracking string clears.  You can force the tracking string to clear at any
  1311. time by pressing the spacebar.
  1312.  
  1313. The [PgUp] and [PgDn] keys page the highlight bar up or down the length of the
  1314. window, and [Home] and [End] move it to the respective ends of the list.
  1315.  
  1316. The right hand side of the file window is a mouse sensitive scroll bar.  The
  1317. slider on the scroll bar shows the position of the highlighted file relative to
  1318. the length of the file list.  The up and down arrows at the top and bottom of
  1319. the scroll bar are mouse hot spots.  Pick the arrows with the mouse to cursor
  1320. up and down, holding the mouse button down will scroll continuously.  Pick any
  1321. position on the scroll bar to reposition the slider and file list.  To make a
  1322. high speed cruise through the file list, hold the mouse button down on the
  1323. slider and drag the slider up or down the scroll bar.
  1324.  
  1325. Press [Esc] to exit the file selection window.  You can also exit by pressing
  1326. [F10] or [Alt-X], pressing both mouse buttons simultaneously, or by picking the
  1327. exit window button in the upper left corner of the window border with the
  1328. mouse.
  1329.  
  1330. To take a quick peek at a file, highlight it and press [F3], [Alt-P] or the
  1331. right mouse button.  The first three lines of the file will be displayed at the
  1332. bottom of the screen.  Other ALLY commands--Check, Analyze, Browse, Edit, and
  1333. your [^F1] through [^F8] programs--are active and can be executed on any file
  1334. highlighted in the list.
  1335.  
  1336. The directory tree can be traversed by picking a subdirectory name from the
  1337. list--the window will be redrawn to display files from the new directory.  To
  1338. traverse the directory tree towards the root, pick the displayed directory's
  1339. parent directory.  The parent directory is indicated in the list as a pair of
  1340. periods followed by a backslash: (..\)
  1341.  
  1342. To change drives, simply pick the desired drive letter from the list.
  1343. Alternatively, you can exit the file selection window by pressing [Esc], enter
  1344. the new drive and directory into the file directory field and press [F3] again.
  1345.  
  1346. Once a file name is picked, the window clears and the name is entered into the
  1347. LISP file name field.  If FILE or EDITOR is used as the report destination, a
  1348. matching name with the extension  RPT is assigned as the report file.  The file
  1349. directory field is updated each time you pick a file.
  1350.  
  1351.  
  1352. 6.3  WORKBENCH COMMANDS
  1353. -----------------------
  1354. The ALLY Workbench uses the keyboard's function keys and Alt key combinations
  1355. to execute commands and perform various actions on the selected AutoLISP source
  1356. code file.
  1357.  
  1358.  
  1359. If you are using a mouse, you can move its cursor over any active command item
  1360. in the menu at the top of the screen, and press the left button to execute the
  1361. command or program.  The top command menu includes the built-in ALLY functions
  1362. and the user-installed browser and editor.
  1363.  
  1364. F1-Help F2-Opt F3-File F4-Check F5-Analyze F7-Browse F8-Edit F9-Shell F10-Exit
  1365.  
  1366. Other user-installed programs and their associated keys are displayed directly
  1367. below the top command menu.  The following is an example of a user program
  1368. command menu.
  1369.  
  1370. ^F1 Lb  ^F2 Kelv  ^F3 Protect  ^F4 Ljbook  ^F5 Fc  ^F6 Del  ^F7 Copy  ^F8 Print
  1371.  
  1372. The carat (^) prefix to the user program function keys indicates that they are
  1373. control keys--for instance, ^F1 means Ctrl-F1.  The items in the user program
  1374. menu can also be picked and executed with a mouse.
  1375.  
  1376. Help - [F1] or [Alt-H]
  1377. ----------------------
  1378. Pressing [F1] or [Alt-H] displays a help screen.  The screen shows a summary of
  1379. each function key and a brief description of the editing keys available for
  1380. ALLY's data entry screen.
  1381.  
  1382. Opt(ions) - [F2] or [Alt-O]
  1383. ---------------------------
  1384. These keys bring up the ALLY Setup Options menu.  This menu and its sub-menus
  1385. are described in detail in an earlier section of the manual--see ALLY SETUP
  1386. OPTIONS.
  1387.  
  1388. File - [F3] or [Alt-F]
  1389. ----------------------
  1390. Press [F3] or [Alt-F] to bring up ALLY's point-and-shoot file selection window.
  1391. Its operation is described in a previous manual section titled FILE SELECTION.
  1392.  
  1393. Check - [F4] or [Alt-C]
  1394. -----------------------
  1395. These keys execute the ALLY Checker.  The Checker is a LISP file browser which
  1396. colorizes parentheses, quoted strings and comments to help you spot errors. The
  1397. Checker is described in more detail later.
  1398.  
  1399. Analyze - [F5] or [Alt-A]
  1400. -------------------------
  1401. Pressing [F5] or [Alt-A] analyzes the selected AutoLISP source file with the
  1402. ALLY Analyzer.  Multiple source files can be analyzed together--see the section
  1403. ANALYZING MULTIPLE FILES.  The functions of the ALLY Analyzer itself are
  1404. described in a later section of the manual.
  1405.  
  1406. Your current report settings are passed to the Analyzer at execution.  As your
  1407. source file is being analyzed, a running tally of the number of lines, symbols,
  1408. and errors encountered are displayed on screen.  ALLY then writes or prints the
  1409. report to the selected destination.
  1410.  
  1411. If the selected destination is your browser or editor, the report file name is
  1412. passed to the command line and the editor or browser is executed.  When the
  1413. output is to an existing file, you have the option of overwriting or appending
  1414. the file.  You can abort the analysis at any time by picking the exit window
  1415. button with a mouse or pressing [Esc].
  1416.  
  1417.  
  1418. If there are any problems accessing the chosen file--such as a nonexistent file
  1419. name or directory--ALLY displays an error message and moves the cursor to the
  1420. offending entry.
  1421.  
  1422. Because the encryption methods employed produce incomprehensible results,
  1423. protected AutoLISP files are not allowed to be analyzed.
  1424.  
  1425. Browse - [F7] or [Alt-B]
  1426. ------------------------
  1427. Press function key [F7] or [Alt-B] to use your installed file browser to browse
  1428. the selected AutoLISP file.  If you have installed the browser using a file
  1429. name alias symbol (see the [F2]/[Alt-O] Options command), ALLY passes the file
  1430. name to the browser along with any command line parameters you have entered.
  1431. When you exit the browser you are returned to the ALLY Workbench.
  1432.  
  1433. Edit - [F8] or [Alt-E]
  1434. ----------------------
  1435. Function key [F8] or [Alt-E] executes your installed text editor to edit the
  1436. selected AutoLISP file.  If you have installed the editor using a file name
  1437. alias symbol (see the [F2]/[Alt-O] Options command), ALLY passes the file name
  1438. to the editor along with any command line parameters you have entered.  You are
  1439. returned to ALLY after exiting the editor.
  1440.  
  1441. Shell - [F9] or [Alt-S]
  1442. -----------------------
  1443. ALLY implements a sophisticated DOS shell feature, available by pressing
  1444. function key [F9] or [Alt-S].  ALLY prompts for a DOS command line when the
  1445. command is entered.  ALLY's shell command can be used in two different methods.
  1446.  
  1447. The first method is a DOS shell.  When ALLY prompts you for a DOS command,
  1448. press [Enter].  Without a command string, ALLY loads a copy of your DOS command
  1449. interpreter (command.com) and shells out to the DOS environment where you are
  1450. greeted with the familiar DOS prompt.  You can stay in DOS as long as you wish,
  1451. performing DOS commands or running other programs.  To return to the ALLY
  1452. Workbench, type EXIT at the DOS prompt and press [Enter].
  1453.  
  1454. The second method is a program shell.  Enter a program name or DOS command at
  1455. the prompt and press [Enter], and ALLY will execute it, pause, then return to
  1456. the Workbench after you press a key.  You can add command line parameters
  1457. behind the command and use any of ALLY's special command line symbol except the
  1458. question mark pause symbol.
  1459.  
  1460. To execute a program residing in a directory not listed in your DOS PATH
  1461. statement, you can prefix the program name with its full directory path
  1462. (example: C:\UTIL\MYPROG).  If the program needs to execute from within its own
  1463. directory, prefix the program path with an ampersand (example:
  1464. @C:\UTIL\MYPROG).  When ALLY encounters the ampersand, it changes to the listed
  1465. program directory before execution, and back after.
  1466.  
  1467. If you give the full path name of a COM or EXE executable program and the file
  1468. extension (example: C:\UTIL\MYPROG.EXE), ALLY will execute it directly, without
  1469. loading a copy of the DOS command interpreter.  With some versions of DOS, this
  1470. makes as much as 3.5 KB more memory available for the program being executed.
  1471.  
  1472. You can use any of ALLY's special command prefixes and filename alias symbols
  1473. when entering your command line.  See the preceding INSTALL USER PROGRAMS
  1474. section for a description of these special symbols.
  1475.  
  1476.  
  1477. To maximize the amount of memory for the DOS shell, ALLY swaps most of its own
  1478. code and data out of memory--into extended memory, expanded memory or a
  1479. temporary disk file.  See ALLY SETUP OPTIONS, Execution Options, for details of
  1480. the "Swap ALLY to" option.
  1481.  
  1482. There is one warning we wish to stress.  You may access a TSR program which is
  1483. already resident, but never load a TSR while in a DOS shell.  Doing so can
  1484. cause unpredictable results when you try to return to the parent program, and
  1485. open files could be lost.
  1486.  
  1487. Exit - [F10] or [Alt-X]
  1488. -----------------------
  1489. Press [F10] or [Alt-X] when you are ready to leave ALLY and return to the
  1490. operating system (or to return to AutoCAD if you have run ALLY from AutoCAD).
  1491. You will be prompted to confirm your command to leave ALLY.
  1492.  
  1493. If run from AutoCAD, you are asked if you want to load the AutoLISP source file
  1494. which was last examined in ALLY.  If you respond yes, the file is loaded into
  1495. AutoLISP.  If multiple LISP files were analyzed with ALLY's special include
  1496. file directive, they are all loaded--see the section ANALYZING MULTIPLE FILES.
  1497. Use this feature to load new or modified AutoLISP programs to try them out.  If
  1498. you find more editing is needed, execute ALLY again to automatically return to
  1499. the same file.
  1500.  
  1501. User Programs - [Ctrl-F1] through [Ctrl-F8]
  1502. -------------------------------------------
  1503. These keys execute the installed external programs.  For more information, see
  1504. the description of the INSTALL USER PROGRAMS section of the ALLY SETUP OPTIONS
  1505. chapter.  These programs may be executed from either the Workbench or the file
  1506. selection window.
  1507.  
  1508.  
  1509. 7.0   T H E    A L L Y    C H E C K E R
  1510. =======================================
  1511. The ALLY Checker is a LISP file browser which colors parentheses, quoted
  1512. strings and comments to help you spot errors.  Each line of code is numbered on
  1513. the left side of the screen.  Lines longer than the display are wrapped and
  1514. indented.  A plus mark in the line number column indicates a wrapped line.
  1515.  
  1516. Embedded Tabs (ASCII 9) are expanded to the number of spaces specified in
  1517. ALLY's Setup Options (the default is 8 spaces).  Other control characters
  1518. (ASCII 0 to 31) are represented by a carat symbol followed by the control
  1519. letter.  For example, a backspace character (ASCII 8) is displayed as ^H.
  1520.  
  1521. 7.1  COLOR CODING
  1522. -----------------
  1523. Matching left and right parentheses are paired in the same color.  Colors
  1524. change at each level of parentheses nesting, repeating at the tenth level.  The
  1525. line numbers on the left side of the display are colored to match the current
  1526. open parentheses, or colored cyan if no parentheses are open.  You can choose
  1527. between two different parentheses color sets in ALLY's Setup Options.
  1528.  
  1529. Normal LISP code is colored light gray, quoted text strings are colored green
  1530. and comments are colored cyan (regular comments and inline comments--introduced
  1531. in R12--are supported).  This makes quoted strings and comments stand out from
  1532. the rest of the code.  The change (or lack of change) in color makes it easy to
  1533. recognize cases of missing quote marks and semicolons.
  1534.  
  1535. 7.2  PARENTHESES ERRORS
  1536. -----------------------
  1537. The right hand side of the Checker's status/command line shows the number of
  1538. parentheses which are open after the current line.  If no parentheses are open,
  1539. the parentheses indicator is blank.  For a quick file-wide check of parentheses
  1540. errors just jump to the end of the file with the [End] key.
  1541.  
  1542. If an error involving too many closing parentheses is detected, all following
  1543. parentheses are displayed in blinking white.  This may not necessarily pinpoint
  1544. the error itself, but does show where the error first becomes apparent.
  1545.  
  1546. 7.3  LINE POINTER
  1547. -----------------
  1548. The Checker has a movable line pointer which allows you to edit or inspect any
  1549. line of source code on the screen.  The line number's background is highlighted
  1550. to indicate the pointer position.  The pointer can be moved up and down with
  1551. the cursor keys, and will scroll the file being viewed when it reaches the top
  1552. or bottom of the screen.
  1553.  
  1554. 7.4  MOUSE SUPPORT
  1555. ------------------
  1556. Commands can be executed and prompts can be answered by picking responses off
  1557. the command line with a mouse.  The line pointer can be repositioned by using
  1558. the mouse to pick the new position on screen.  The command line's up and down
  1559. arrows can be picked with the mouse to scroll the file being viewed, and will
  1560. scroll continuously as long as the mouse button is held down.
  1561.  
  1562. 7.5  LINE EDITING
  1563. -----------------
  1564. The Checker has built-in line editing capability.  Although you can call the
  1565. user-installed editor from the Checker if you need to do extensive editing, the
  1566. built-in line editor is perfect for making minor changes--such as correcting a
  1567. parentheses or quote imbalance.
  1568.  
  1569. To edit a line of code, position the line pointer at the desired location and
  1570. press [Alt-L] or [L] for LineEd.  The text is loaded in the line editor on the
  1571. Checker's command line.  The line editor can handle individual lines of up to
  1572. 64K in size, depending on the "Read buffer size" in ALLY's Execution Options.
  1573.  
  1574. LineEd's editing keys [Ins], [Del] and [BkSp] perform the usual editing
  1575. functions.  [Ctrl-BkSp] is used to delete words.  Cursor positioning keys
  1576. include [Right], [Left], [Home] and [End], with [Ctrl-Right] and [Ctrl-Left]
  1577. combinations for moving the cursor from word to word.  A mouse can also be used
  1578. to reposition the cursor.
  1579.  
  1580. To save the changes and exit the line editor, press [Enter].  To abandon
  1581. changes, press [Esc].  If changes have been made, you will be prompted to save
  1582. the file when you leave the Checker for the Workbench or the user editor.  When
  1583. saving modifications, the Checker makes a backup with the file extension BAK.
  1584.  
  1585. 7.6  CALLING THE USER'S EDITOR
  1586. ------------------------------
  1587. ALLY has the ability to execute your editor directly from the Checker with the
  1588. [F8], [Alt-E] or [E] keys.  In addition, if your editor supports it, the file
  1589. will be loaded with the cursor placed on the line currently pointed to by the
  1590. Checker's line pointer.  See the INSTALL USER PROGRAMS section regarding line
  1591. number alias.  When you finish editing the file, it is automatically reloaded
  1592. into the Checker and returned to the previous position.
  1593.  
  1594. 7.7  OTHER BROWSING KEYS
  1595. ------------------------
  1596. [F],[Alt-F] . The Find function is used to enter a text string and initiate a
  1597.               search.  Searches start from the top of the file, and are
  1598.               conducted in a case-insensitive manner.  If the search is
  1599.               successful, the line pointer is repositioned to the first line
  1600.               which contains the match.  If no match is found, the line pointer
  1601.               remains stationary.
  1602.  
  1603. [N],[Alt-N] . The Next function is used to find additional matches following a
  1604.               successful Find operation.
  1605.  
  1606. [G],[Alt-G] . The Go-to function prompts for and moves the line indicator to a
  1607.               specified line.
  1608.  
  1609. [X],[Alt-X] . The Exit function leaves the Checker and returns to the ALLY
  1610.               Workbench.
  1611.  
  1612. [F10] . . . . Same as [Alt-X], Exit.
  1613.  
  1614. [Esc] . . . . In the line editor, [Esc] aborts editing and returns to the
  1615.               Checker.  When browsing, [Esc] exits the Checker and returns to
  1616.               the Workbench.
  1617.  
  1618. [Up]/[Down] . Cursor keys, moves line indicator up or down one line.
  1619.  
  1620. [Home]  . . . Moves the line indicator to the first line of the file.
  1621.  
  1622. [End] . . . . Moves the line indicator to the end of the file.
  1623.  
  1624. [PgUp]  . . . Displays the previous screen of code.
  1625.  
  1626. [PgDn]  . . . Displays the next screen of code.
  1627.  
  1628. [MouseRight]  The left mouse button is the same as pressing the [Down] cursor,
  1629.               but without continuous scrolling.
  1630.  
  1631. [MouseBoth] . Both mouse buttons pressed simultaneously together is the same as
  1632.               pressing [Esc].
  1633.  
  1634. [MouseLeft] . The pick button.  The right mouse button is used to pick new
  1635.               positions for the line pointer, and to pick commands and answer
  1636.               prompts on the Checker's command line.
  1637.  
  1638.  
  1639. 8.0   T H E    A L L Y    A N A L Y Z E R
  1640. =========================================
  1641. A symbol cross-referencer and more, the ALLY Analyzer performs several
  1642. functions to help debug and document AutoLISP programs.  The Analyzer generates
  1643. a comprehensive report of statistics, warnings, symbol usage, scope and
  1644. function calls.  Individual report categories are described in the following
  1645. chapters, and report format options are detailed in ALLY SETUP OPTIONS.
  1646.  
  1647. The size of files which ALLY can analyze is limited only by available memory-
  1648. -up to 16 MB of extended memory can be addressed, and each line of the file can
  1649. contain up to 64K characters.  The report destination is user-selectable;
  1650. choose output to screen, disk file, printer, user-designated text editor, or
  1651. user-designated file browser.
  1652.  
  1653.  
  1654. ALLY displays a status window during its analysis.  To abort the analysis at
  1655. any time, press the [Esc] key or both mouse buttons simultaneously.
  1656.  
  1657. 8.1  ERROR FUNCTIONS
  1658. --------------------
  1659. To insure proper scoping of dynamic symbols to error functions, ALLY treats any
  1660. binding of a symbol to *error* as a function call, regardless of it being
  1661. defined or called elsewhere in the code.  This includes symbols used to
  1662. temporarily hold and reset the true *error* definition.
  1663.  
  1664. 8.2  FOREACH CONTROL VARIABLES
  1665. ------------------------------
  1666. ALLY recognizes the uniqueness of foreach control variables.  These control
  1667. variables are always local in scope to the foreach function, and neither
  1668. affect, nor are affected by, symbols sharing the same variable name outside the
  1669. foreach statement.  The abbreviation fcv is used in report notations.
  1670.  
  1671. 8.3  DCL FUNCTIONS
  1672. ------------------
  1673. The Analyzer will read and analyze AutoLISP code embedded in double-quoted
  1674. action-expression strings of action_tile and new_dialog function calls.  The
  1675. Analyzer cannot, however, evaluate such string-embedded code if it is
  1676. referenced by variable or further masked in a nested function such as strcat.
  1677.  
  1678. If action-expression string concatenation cannot be avoided or if the string
  1679. must be referenced by variable, see Appendix C.   This appendix describes a
  1680. work-around using the special ally_cat alias for strcat which allows ALLY to
  1681. analyze string-embedded AutoLISP code at any point in your program.
  1682.  
  1683. 8.4  DECLARATIONS AND SYMBOL SCOPE
  1684. ----------------------------------
  1685. The scope of a symbol is the region of the program's environment where it is
  1686. accessible for evaluation, established by where--and if--the symbol is declared
  1687. in a defun (function definition) argument list.  A symbol is global if not
  1688. explicitly declared.  Global symbols are stored in the current session's
  1689. defined symbol list (formerly called the atomlist) and bound (reserved a place
  1690. in memory to hold values) when first encountered by the AutoLISP interpreter.
  1691. Global symbols can be set (assigned a value) or evaluated anywhere--by
  1692. expressions evaluated when the LISP file is loaded, during function execution,
  1693. or by user input at the command line.  Global symbols have global scope.
  1694.  
  1695. Symbols declared in a defun argument list are local symbols.  In addition to
  1696. arguments, a defun argument list can contain other local symbols as well.
  1697. Local symbols are both bound and assigned values when the function is entered.
  1698. Arguments get their values from the function call, other local symbols are
  1699. initialized to nil.  This dynamic binding of local symbols conserves memory,
  1700. since they are bound only when needed for the function call.
  1701.  
  1702. Local symbols may be bound to new values as the function executes.  Changing
  1703. the bindings of local symbols does not effect identically named symbols outside
  1704. the function.  When a function exits, all its local symbol bindings are lost
  1705. and the memory allocated to them recaptured in the next garbage collection.  In
  1706. summary, the scope of a local symbol is the transient localized environment
  1707. created when the function which spawns it is called.
  1708.  
  1709. Function definitions can be nested inside other function definitions in the
  1710. source code.  An inner function can be made local to the outer function by
  1711.  
  1712. declaring its name in the outer function definition's argument list.  The
  1713. benefit of using local functions is the same as using local variables--memory
  1714. conservation.  In AutoLISP a nested function, like any other symbol, is still
  1715. global if not explicitly declared.
  1716.  
  1717. Free variables are instances of symbols used inside a function in which they
  1718. are not local.  Free variables are commonly used to produce side effects
  1719. outside the function.  Perhaps the best known class of free variable is the
  1720. global variable, but it is not the only kind.  AutoLISP provides another class
  1721. of free variable known as dynamic free variables (also referred to as special
  1722. variables).  Dynamic free variables are instances of local symbols used outside
  1723. the function in which they have been declared.  This outside referencing is
  1724. made possible by AutoLISP's dynamic scoping method.
  1725.  
  1726. There are two major methods employed for computer language scoping, dynamic and
  1727. lexical.  Dynamic scoping is run-time scoping, whereas lexical scoping is
  1728. compile-time scoping.  AutoLISP's interpreter uses dynamic scoping, which is
  1729. rare compared to the lexical scoping used by the majority of other, compiled
  1730. languages.  Because AutoLISP's scoping is so unlike other languages with which
  1731. you may be familiar, it is important to explain the difference.
  1732.  
  1733. To illustrate the difference between dynamic and lexical scoping, consider the
  1734. following example.
  1735.  
  1736.     (setq S "three")
  1737.     (defun Test ( / S)
  1738.       (defun Check (S)
  1739.          (Write)
  1740.       )
  1741.       (defun Write ()
  1742.          (print S)
  1743.       )
  1744.       (setq S "two")
  1745.       (Check "one")
  1746.       (princ)
  1747.     )
  1748.  
  1749. Test is a global function.  In most languages, functions Check and Write would
  1750. be considered local to Test, but in AutoLISP they are latent globals--although
  1751. nested, they are not declared in Test's local symbol list.  Their latency is
  1752. another AutoLISP oddity, due to its interpretive nature.  Initially after
  1753. loading, Check and Write are unavailable outside the function Test, but once
  1754. Test is called they become global--and would become so even if Test itself
  1755. calls neither one.  The reason for this behavior is that AutoLISP evaluates
  1756. nothing within a defun statement until the function is called, so AutoLISP
  1757. initially does not evaluate nested defun statements into operable functions.
  1758.  
  1759. Our example has been contrived to illustrate the differences between dynamic
  1760. and lexical scoping, and does not necessarily reflect good programming.  Be
  1761. aware that a global function consumes more memory nested than it does
  1762. otherwise, because AutoLISP ends up with two copies of the function in its
  1763. defined symbol list--the nested definition and the actual working copy outside.
  1764. This doubling also occurs on a temporary basis during execution of a function
  1765. with nested local functions, but the copies of the locals disappear after use
  1766. and the memory is reclaimed.  If however, a function is aborted due to an error
  1767. or canceled by the user, any copies of its locals will remain outside--in
  1768. effect elevating them to global status.
  1769.  
  1770.  
  1771. Now that we have established the scope of the functions, let us examine the
  1772. execution of our example.  The global symbol S is set to "three" at load time.
  1773. When executed, Test's local symbol S is set to "two".  Test's function call to
  1774. Check passes the value "one" to Check's argument S, then Check calls the
  1775. function Write, which prints S.  But what value of S does Write print?
  1776.  
  1777. Under AutoLISP's dynamic scoping, Write will print the word "one", whereas a
  1778. lexical scoped language would print the word "two".  Why?  When Write executes,
  1779. a binding for the symbol S must be found.  Both scoping methods require Write's
  1780. local environment to be searched first, and when a local binding for S is not
  1781. found, both establish that S is a free variable.  The two scoping methods
  1782. differ in the manner they search for a free variable's binding.
  1783.  
  1784. A dynamically scoped language such as AutoLISP searches for free variables, top
  1785. down, in the call stack environments.  You can visualize the call stack as a
  1786. record of active function calls.  As each call is made, the called function and
  1787. its local environment record is placed on the top of the stack, directly above
  1788. the calling function.  A called function may in turn call another, and so on,
  1789. further deepening the stack.  As each function completes its execution and
  1790. exits, its function record is popped off the top of the stack.  The following
  1791. illustration depicts the call stack growing and shrinking as our example Test
  1792. function goes through its execution life cycle.
  1793.  
  1794.                              +------+
  1795.                              |Write |
  1796.                    +------+  |------|  +------+
  1797.                    |Check |  |Check |  |Check |
  1798.          +------+  |------|  |------|  |------|  +------+
  1799.          |Test  |  |Test  |  |Test  |  |Test  |  |Test  |
  1800. +------+ |------|  |------|  |------|  |------|  |------| +------+
  1801. |Global| |Global|  |Global|  |Global|  |Global|  |Global| |Global|
  1802. +------+ +------+  +------+  +------+  +------+  +------+ +------+
  1803.  
  1804. Each called function has full access to the local symbol bindings of all other
  1805. function environments below it in the stack.  Where there are multiple local
  1806. bindings of identically named symbols, the called function uses the first
  1807. binding encountered in its top down search.  The global environment is searched
  1808. only after exhausting the call stack without finding a match.
  1809.  
  1810. In our dynamic example, the top down search when Write is at the top of the
  1811. call stack finds a binding for the dynamic free variable S in the environment
  1812. of function Check--where "one" is bound to its local argument S.  Had a binding
  1813. for S not been found in Check, the search would have continued down the call
  1814. stack--to Test in this case, and following that the global environment.
  1815.  
  1816. Lexical scoping is different.  A lexically scoped language searches for free
  1817. variables, inside out, in nested function environments.  For lexical languages,
  1818. nesting is accomplished by physically placing function definitions inside one
  1819. another in the source code.  Lexical scoping requires no further declaration
  1820. for a nested function to be considered local to the outer function.
  1821.  
  1822. Each lexical nested function has full access to the local symbol bindings of
  1823. all outer function environments.  In the case of multiple local bindings of
  1824. identically named symbols, the nested function will use the first one
  1825. encountered in its outward search.  The global environment is the outermost
  1826. environment.  By default, a function in a lexically scoped language does not
  1827. have access to the calling environment, unless by chance or design the function
  1828. is nested within the calling environment.
  1829.  
  1830.  
  1831. In our lexical example, Write's nearest outer environment is the environment of
  1832. Test, where "two" is bound to its local symbol S.  Had a binding for S not been
  1833. found in Test, the search would have continued outward to the next level of
  1834. nesting--which would be the global environment in this example.
  1835.  
  1836. The following illustrates the differing dynamic stack and lexical environment.
  1837.  
  1838.     +-Write-----------+              +--------Global---------+
  1839.     |     S="one"     |              |       S="three"       |
  1840.     |         |       |              |  +------Test-------+  |
  1841.     |-Check---|-------|              |  |     S="two"     |  |
  1842.     |     S="one"     |              |  |   +--Check--+   |  |
  1843.     |                 |              |  |   | S="one" |   |  |
  1844.     |-Test------------|              |  |   +---------+   |  |
  1845.     |     S="two"     |              |  |   +--Write--+   |  |
  1846.     |                 |              |  |   | S="two" |   |  |
  1847.     |-Global----------|              |  |   +-----|---+   |  |
  1848.     |    S="three"    |              |  |         |       |  |
  1849.     |                 |              |  +-----------------+  |
  1850.     +-----------------+              +-----------------------+
  1851.  
  1852. DYNAMIC SCOPE CALL STACK         LEXICAL SCOPE NESTED ENVIRONMENTS
  1853.         (AUTOLISP)                         (OTHER LANGUAGES)
  1854.  
  1855. Now that we have some understanding of how AutoLISP's dynamic scoping differs
  1856. from the more common lexical scoping, we can examine the reason for using
  1857. dynamic free variables.  All functions will return a value, but consider those
  1858. which need to effect more than one symbol outside the function.
  1859.  
  1860. In AutoLISP you can pass arguments to user defined functions by value only.
  1861. Changing the formal parameters in the function itself does not effect the
  1862. actual parameters used in the function call.  There is no mechanism for passing
  1863. parameters by reference (variable parameters) such that the actual parameters
  1864. outside the function can be changed.
  1865.  
  1866. To work around this limitation, free variables are employed.  Global variables
  1867. can be used, but dynamic free variables are more memory efficient since they
  1868. are transient local variables at some point in the call stack.
  1869.  
  1870. Although dynamic free variables can be difficult to track manually, the ALLY
  1871. Analyzer makes them much easier to manage.  Dynamic free variables can be a
  1872. powerful programming tool when used appropriately, don't be afraid to add them
  1873. to your arsenal.
  1874.  
  1875. 8.5  ANALYZING MULTIPLE FILES
  1876. -----------------------------
  1877. By adding special include directives into your source files, ALLY can be used
  1878. to analyze multiple LISP files and generate a single report of symbol and
  1879. function interactions.  The syntax of the include directive is:
  1880.  
  1881.   ;ALLY([drive:][path]filename[.ext])
  1882.  
  1883. Here are a couple of examples:
  1884.  
  1885.   ;ALLY(TrigFunc.lsp)  -  trigonometric routines.
  1886.   ;ally(D:\Lisp\MyFile)
  1887.  
  1888.  
  1889. ALLY assumes a filename extension of .LSP if no other extension is given, and
  1890. will search AutoCAD's support path (set by the ACAD environment variable) for
  1891. included files if the path is omitted.  Use the conventional DOS backslash for
  1892. directory path separators, not AutoLISP's forward slash or double backslash.
  1893.  
  1894. The directive statement is not case sensitive, but it is space sensitive.  You
  1895. must not include any blank spaces between the semicolon and the terminating
  1896. right parenthesis.  You may precede the directive with spaces for indentation,
  1897. but no other characters are allowed to the left of the semicolon.  ALLY does
  1898. not allow two directives in the same line--any text following the directive is
  1899. ignored, so you may follow the directive with comments.
  1900.  
  1901. AutoLISP itself ignores ALLY's include directives as comments, so the
  1902. directives may be placed anywhere in your AutoLISP files.  ALLY builds its list
  1903. of included files as the directives are encountered.  The next file in the list
  1904. is processed after the analysis of the current file is complete.  Include
  1905. directives may be nested to any level, for example, a file included by the main
  1906. file may contain include directives of its own.  Duplicate include directives
  1907. are ignored, and the order of included files is unimportant except for special
  1908. cases where functions are redefined from one source file to the next.
  1909.  
  1910. As an alternative to editing your AutoLISP source files to add include
  1911. directives, you can create and analyze "project" files--small files which
  1912. contain nothing but ALLY include directives.  You may find that creating and
  1913. maintaining the include list is easier with this method.
  1914.  
  1915. When multiple LISP files are analyzed with ALLY's include directives, they are
  1916. all loaded along with the main file when you use ALLY's automatic AutoLISP load
  1917. feature.
  1918.  
  1919. 8.6  EXTERNAL SYMBOLS AND FUNCTIONS
  1920. -----------------------------------
  1921. AutoCAD R11 and later AutoLISP programs can use functions externally defined in
  1922. ADS programs.  This results in AutoLISP files which call functions which, like
  1923. AutoLISP's internal functions, are never defined in the AutoLISP code.  Another
  1924. common practice is to use separate AutoLISP files to define libraries of
  1925. standard functions and global symbols.  Once thoroughly debugged, you may not
  1926. want to use ALLY include directives to reanalyze these standard libraries for
  1927. each new program that relies on them.
  1928.  
  1929. ALLY considers Autodesk's standard ADS functions and commands defined in
  1930. ACADAPP.EXP file to be internal AutoLISP functions, but you must inform ALLY of
  1931. other legitimate external symbols.  Otherwise, ALLY reports warnings for any
  1932. symbol undefined or unset in the analyzed code.  It is also desirable to have a
  1933. mechanism to insure new AutoLISP programs do not inadvertently redefine
  1934. external functions relied on elsewhere.
  1935.  
  1936. ALLY uses external symbol files to accomplish this.  The format for an ALLY
  1937. external symbol file follows.  Only one symbol may be listed per line.  Upper,
  1938. lower or mixed case is acceptable, and the symbols need not be sorted.  Blank
  1939. lines may be included, and any line beginning with a semicolon is treated as a
  1940. general comment and is ignored.  Individual symbol comments (up to 40
  1941. characters) may be added following any symbol, separated by at least one space.
  1942. These symbol comments are printed in ALLY's reports, allowing you to identify
  1943. the source of the external symbols.  For example:
  1944.  
  1945.   C:SOLMESH  std acadr12.lsp function
  1946.  
  1947.  
  1948. The main external symbol file is named EXTERNAL.SYM, and must reside in the
  1949. ALLY directory.  The default EXTERNAL.SYM shipped with ALLY contains the
  1950. AutoLISP functions which automatically load when AutoCAD R12 starts in its
  1951. default configuration.  This consists of the functions defined in Autodesk's
  1952. ACADR12.LSP file, which is loaded with the AutoCAD R12 menu by the ACAD.MNL
  1953. file.  You can modify your installed copy of EXTERNAL.SYM to fit your
  1954. particular needs.
  1955.  
  1956. You can also create external symbol files specific to particular AutoLISP
  1957. applications.  These files must share the same file name as the main LSP file
  1958. being analyzed, except with a SYM file name extension.   For example, an
  1959. AutoLISP file named MYFILE.LSP can have a matching external symbol file named
  1960. MYFILE.SYM.  These application specific external symbol files must be located
  1961. in the same directory as their mating AutoLISP files, but otherwise follow the
  1962. same format exemplified in EXTERNAL.SYM.
  1963.  
  1964. 8.7  EXAMPLE AUTOLISP PROGRAM
  1965. -----------------------------
  1966. The following AutoLISP program is used to illustrate the Analyzer's reports.
  1967. This itself illustrates the "program listing" option of a typical report.
  1968.  
  1969.   1  ;; BUB.LSP   Copyright (c) 1992, 1994 Steve Waskow
  1970.   2  ;; Draws item # bubble, leader, and numbers bubble
  1971.   3  ;; Example program to illustrate Analyzer features
  1972.   4
  1973.   5  (defun leader (/ i pt2 drawln)
  1974.   6  ;draws pline arrowhead and line leader
  1975.   7
  1976.   8    (defun drawln ()
  1977.   9    ;draws one or more leader line segments
  1978.  10      (if (> (distance pt pt2) (* 0.1875 dimsc))
  1979.  11        (command ".line" pt pt2 "")
  1980.  12        (setq pt2 pt pt i i (prompt "\nToo short!"))
  1981.  13      )
  1982.  14      ;ask for another line segment
  1983.  15      (if (setq i pt pt pt2
  1984.  16            pt2 (getpoint pt "\nTo point: ")
  1985.  17          )
  1986.  18        (drawln) ;recursively draw next line segment
  1987.  19      )
  1988.  20    )
  1989.  21
  1990.  22    (setq dimsc (getvar "dimscale") ;use for scale
  1991.  23      pt  (getpoint "\nPoint of arrowhead: ")
  1992.  24      pt2 (getpoint pt "\nLeader to point: ")
  1993.  25    )
  1994.  26    ;draw proportioned arrowhead
  1995.  27    (command ".pline" pt "W" 0 (* 0.0416 dimsc)
  1996.  28      (setq
  1997.  29        pt (polar pt (angle pt pt2) (* 0.125 dimsc))
  1998.  30      )
  1999.  31      ""
  2000.  32    )
  2001.  33    (drawln) ;draw first line segment
  2002.  34  )
  2003.  35
  2004.  36  (defun bubble ()
  2005.  37  ;draws bubble centered on last point and item #
  2006.  
  2007.  38    (command ".circle" pt (* 0.1875 dimsc)
  2008.  39      ".trim" (entlast) "" pt ""
  2009.  40      ".text" "M" pt (* 0.125 dimsc) 0 item
  2010.  41    )
  2011.  42  )
  2012.  43
  2013.  44  (defun C:BUB (/ i pt s dimsc)
  2014.  45  ;auto-incremented item bubble with arrow leader.
  2015.  46  ;press <enter> at point prompt to place bubble.
  2016.  47    (setq s (itoa (setq item (if item (1+ item) 1))))
  2017.  48    (if (setq i (getint (strcat "\nItem <" s ">: ")))
  2018.  49      (setq item i)
  2019.  50    )
  2020.  51    (leader)
  2021.  52    (bubble)
  2022.  53    (princ) ;exit with no echo
  2023.  54  )
  2024.  
  2025.  
  2026. 8.8  STATISTICS AND WARNINGS
  2027. ----------------------------
  2028. The first section of the Analyzer report includes information and statistics on
  2029. the analyzed file or files, and warnings of any errors or potential problems
  2030. encountered.  The statistics report--an optional report item--includes several
  2031. measures of the analyzed code, as shown in the following example from an
  2032. analysis of BUB.LSP.
  2033.  
  2034.               Characters    %   Statements    %        Lines    %
  2035.   Code:              613   45           43   75           39   72
  2036.   Comment:           445   32           14   25           14   26
  2037.   Blank:             314   23            -    -            5    9
  2038.   Total:            1372                57                54
  2039.  
  2040.                                             Maximum        Average
  2041.   Line length, number of characters:             51          25.41
  2042.   Statement depth, per line of code:              5           1.10
  2043.  
  2044.                    Undef/Ext       Global       Local        Total
  2045.   User functions:          0            3           1            4
  2046.   User variables:          -            1           6            7
  2047.   Internal subrs:          -           18           -           18
  2048.  
  2049.                     Avg number times used     Avg character length
  2050.   User functions:                    1.00                     5.75
  2051.   User variables:                    5.86                     2.43
  2052.   Internal subrs:                    2.17                        -
  2053.  
  2054.  
  2055. For an accurate representation, CR/LF and ^Z characters are ignored in the
  2056. character count.  Spaces and control characters, such as tabs, are counted as
  2057. blanks.  Code and comment character counts are exclusive of blanks.
  2058.  
  2059. ALLY supports both regular comments and the new inline style comments
  2060. introduced in R12.  It should be noted that the sum of the code, comment and
  2061. blank lines may exceed the reported total lines.  The reported total is
  2062. accurate, the seeming inconsistency is due to the fact that lines which contain
  2063. code and a comment are included in both categories.
  2064.  
  2065.  
  2066. Warnings and errors, if encountered, follow the statistical data.  The warning
  2067. report is the one report category which cannot be excluded.  One common error
  2068. is mismatch parentheses.  ALLY reports parentheses errors beginning with the
  2069. line the error first became apparent.  These errors can be easily located and
  2070. corrected in the ALLY Checker.
  2071.  
  2072. The Analyzer also checks that quotations are closed on the same line they are
  2073. opened, since this is often an unintentional error.  Some programmers insert
  2074. hard carriage returns in quoted text intentionally, and AutoLISP accepts them.
  2075. ALLY warns you when this condition is found, and lists the line numbers so an
  2076. inspection of the code can be made.  Usually a true quote error will show in
  2077. several successive line numbers and create one or more parentheses errors in
  2078. the report.
  2079.  
  2080. Both parentheses and quote errors are unrecoverable--that is, the analysis of
  2081. the code beyond the point of error will be inaccurate, since ALLY cannot
  2082. presume to know where the missing punctuation should go.  (HINT: Should this
  2083. occur, study the report to determine where the analysis has gone awry.  This
  2084. will help you to pinpoint the error).
  2085.  
  2086. The source code is also checked for improper use of reserved symbol and
  2087. functions names.  For instance, an error is reported if the code sets a value
  2088. to the reserved symbol T (AutoLISP reserves T for the Boolean TRUE, i.e.
  2089. non-nil).  ALLY checks that reserved symbols and functions are neither set,
  2090. defined, nor used in a function's argument list.
  2091.  
  2092. ALLY reports symbols which are declared but never used.  Although these
  2093. extraneous symbols may be harmless, they should be removed to eliminate
  2094. unnecessary memory overhead.
  2095.  
  2096. Functions which are called but not defined with defun in the analyzed source
  2097. code are listed as undefined functions in the warning report.  A function
  2098. listed by ALLY as undefined is not necessarily an error, the function may be
  2099. defined elsewhere, or set to another function, or created as a list without
  2100. using defun (a trick we do not recommend).  These occurrences, however, are
  2101. uncommon enough to warrant investigation if you are unsure.
  2102.  
  2103. If the omission of a function definition is intentional--it being defined
  2104. elsewhere--you can suppress the warning by including the function name in an
  2105. ALLY external symbol file (see EXTERNAL SYMBOLS AND FUNCTIONS).  Another
  2106. option, assuming the missing function is defined in a different, supporting
  2107. AutoLISP file, is to include the other file in the analysis by using an ALLY
  2108. include directive (see ANALYZING MULTIPLE FILES).
  2109.  
  2110. Another function warning occurs when two functions share the same name or a
  2111. function is redefined.  This warning is helpful in identifying conflicts
  2112. between one or more separate AutoLISP programs.  Sometimes a redefinition is
  2113. intentional, other times they are not.  Unintentional redefinitions can cause
  2114. unexpected results or lead to other problems.
  2115.  
  2116. ALLY also checks for certain scope errors--see the preceding SYMBOL AND
  2117. FUNCTION SCOPE section for a discussion of scope.  A warning is reported when a
  2118. symbol is referenced in a scope in which it is not an argument or has not
  2119. otherwise been assigned a value.
  2120.  
  2121. When multiple files are analyzed, the file name will head each section of the
  2122. warning report.
  2123.  
  2124.  
  2125. A sample warning report follows (an invented example, not from BUB.LSP).
  2126.  
  2127.   C:\ACAD\MYFILE.LSP
  2128.     Functions redefined:
  2129.       DoIt 44
  2130.     Undefined functions:
  2131.       itooa 36
  2132.     Symbols referenced but unset in scope:
  2133.       i 12,15,16
  2134.     Reserved symbols reset or redefined:
  2135.       max 49,53,57
  2136.       t 11,16,17,29
  2137.     Symbols declared but never used:
  2138.       r2 4
  2139.  
  2140.   C:\ACAD\TEST.LSP
  2141.     Quote not closed on line 4,5,6,7,8,9,10
  2142.     Parentheses not closed on line 10
  2143.  
  2144. Other types of errors can be found by studying ALLY's report.  For instance, it
  2145. is easy to spot a misspelling of one of AutoLISP's built-in functions, since
  2146. the misspelled name will immediately show up as an undefined function.
  2147.  
  2148. 8.9  FILE HIERARCHY OF USER DEFINED FUNCTIONS
  2149. ---------------------------------------------
  2150. The file hierarchy which ALLY generates is a tree structure of all user defined
  2151. functions.  This serves as a table of contents of your AutoLISP file.  All
  2152. globally accessible functions are shown as branches of the root file.  Nested
  2153. functions are shown as branches of their parent functions.  Lambda functions
  2154. are numbered sequentially as encountered.
  2155.  
  2156. The line numbers of the source file for the beginning and ending of each
  2157. function are shown.  When multiple files are analyzed, they are shown as a
  2158. continuation of the main trunk of the tree diagram.  Here is an example of a
  2159. file hierarchy, taken from an analysis of our sample file BUB.LSP.
  2160.  
  2161.  File C:\ALLY\BUB.LSP
  2162.   |--leader (5-34)
  2163.   |  `--drawln (8-20)
  2164.   |--bubble (36-42)
  2165.   `--C:BUB (44-54)
  2166.  
  2167. Use this report to determine if a function is nested and to quickly locate its
  2168. position in the file.  If you desire less detail you can have ALLY omit the
  2169. line numbers and lambda references.  See the "File tree detail" option in the
  2170. REPORT OPTIONS section for instructions.
  2171.  
  2172. 8.10  FUNCTION CALL HIERARCHY - DYNAMIC SCOPE
  2173. ---------------------------------------------
  2174. The function call hierarchy generated by ALLY is a tree structure of all called
  2175. or user defined functions.  This tree diagram illustrates the dynamic scope and
  2176. dependencies of the analyzed functions.
  2177.  
  2178. The global environment is the root of the tree.  Branching off the main trunk
  2179. are all global functions which are not specifically called by another function.
  2180. Each function call found produces a function branch off of its calling parent
  2181. function.  If a function is called by more than one parent function, it will be
  2182. reproduced as a branch for each parent.
  2183.  
  2184.  
  2185. Functions are arranged alphabetically along common branches.  Branches of
  2186. recursive functions are truncated at the first reoccurrence and marked with
  2187. three periods following the function name.  Indirect recursion--a recursive
  2188. loop with intervening functions--is illustrated likewise.  The following
  2189. example is taken from an analysis of the sample file BUB.LSP, and illustrates a
  2190. function, drawln, recursively calling itself.
  2191.  
  2192.  global
  2193.   `--C:BUB
  2194.      |--bubble
  2195.      `--leader
  2196.         `--drawln
  2197.            `--drawln...
  2198.  
  2199. To determine a function's hierarchy, follow its branch inward to the root.  To
  2200. determine its dependencies, follow its branches outward.
  2201.  
  2202. For large or complex programs ALLY offers leveling, which allows you to specify
  2203. the maximum depth for branches of the function call hierarchy tree.  The
  2204. leveling feature gives you an abbreviated view of the hierarchy tree if you are
  2205. only interested in major functions a few levels deep.  See the "Call tree
  2206. level" option in the REPORT OPTIONS section for details on setting the leveling
  2207. depth.  Branches of the tree which are pared due to leveling are marked with
  2208. two periods followed by an arrow.
  2209.  
  2210. The following example (an invented example, not from BUB.LSP) illustrates the
  2211. results of using call tree leveling.
  2212.  
  2213. BEFORE                    AFTER LEVELING TO DEPTH 2
  2214.  
  2215. global                    global
  2216.  `--MainFunct              `--MainFunct
  2217.     |--SubFunct1              |--SubFunct1..>
  2218.     |  `--SubFunct3           `--SubFunct2..>
  2219.     |     `--SubFunct4
  2220.     `--SubFunct2
  2221.        `--SubFunct5
  2222.  
  2223. TIP:
  2224. ----
  2225. If ALLY's call hierarchy fails to root your program's main function properly
  2226. due to indirect recursion,  you can force a correct hierarchy tree structure by
  2227. adding a dummy function which calls the main function.  For example:
  2228.  
  2229.   (defun DummyRoot () (MainFunct))
  2230.  
  2231. Since the dummy function is not called by any other function, it becomes the
  2232. tree root and the hierarchy which follows it will reflect actual execution:
  2233.  
  2234. BEFORE, UNDEFINED ROOT     AFTER, DUMMY ROOT DEFINED
  2235.  
  2236. global                     global
  2237.  `--SubFunct2               `--DummyRoot
  2238.     `--MainFunct               `--MainFunct
  2239.        `--SubFunct1               `--SubFunct1
  2240.           `--SubFunct2...            `--SubFunct2
  2241.                                         `--MainFunct...
  2242.  
  2243. 8.11  CROSS-REFERENCE OF USER DEFINED FUNCTIONS
  2244. -----------------------------------------------
  2245. In this section, all user defined functions are listed in alphabetical order.
  2246. Each function has a separate cross-reference for the parent functions and line
  2247. numbers in which it is declared, called, defined, referenced, and set.  A
  2248. function's scope is determined by where and if it is declared.  The preceding
  2249. DECLARATIONS AND SYMBOL SCOPE section has a detailed discussion of scope.
  2250.  
  2251. The function cross-reference can be split up into two or three subcategories if
  2252. desired; global functions, local functions, and undefined/external  functions.
  2253. For details of these reporting options, refer to the "Detach globals" and
  2254. "Detach undefined" options under REPORT OPTIONS.
  2255.  
  2256. By default, a function summary follows the cross-reference, including  a
  2257. listing of symbols and functions declared and used by the function.  The
  2258. "Function summary" option under REPORT OPTIONS can be used to disable this
  2259. feature.  Keep in mind that some apparently unused symbols in the summary may
  2260. have been declared for use as dynamic free variables in a called function, so
  2261. refer to the warnings report and its cross-reference to determine it's actual
  2262. use.
  2263.  
  2264. In parentheses following the function name, local functions are identified with
  2265. fully-qualified hierarchical function names.  Global functions are simply
  2266. marked global.  Hierarchical names are based on declared scope.  The function
  2267. name is prefixed by its parent function, which is prefixed by the parent's
  2268. parent and so forth until a global function is reached.  Periods serve as
  2269. dividers.  The hierarchical names are useful to differentiate between
  2270. identically named functions which have different ancestry and scope.
  2271.  
  2272. The following example cross-reference is taken from an analysis of the sample
  2273. BUB.LSP file.
  2274.  
  2275.  bubble (global)
  2276.    def in 36
  2277.    cal in C:BUB 52
  2278.    uses syms: dimsc item pt
  2279.  
  2280.  C:BUB (global)
  2281.    def in 44
  2282.    uses funs: bubble leader
  2283.    decs syms: dimsc i pt s
  2284.    uses syms: i item s
  2285.  
  2286. drawln (leader.drawln)
  2287.    dec in leader 5
  2288.    def in leader 8
  2289.    cal in leader 33
  2290.    cal in drawln 18
  2291.    uses funs: drawln
  2292.    uses syms: dimsc i pt pt2
  2293.  
  2294.  leader (global)
  2295.    def in 5
  2296.    cal in C:BUB 51
  2297.    decs funs: drawln
  2298.    uses funs: drawln
  2299.    decs syms: i pt2
  2300.    uses syms: dimsc pt pt2
  2301.  
  2302.  
  2303. When multiple files are analyzed, the file name precedes the parent function
  2304. names for each listed usage.
  2305.  
  2306. 8.12  CROSS-REFERENCE OF USER DEFINED SYMBOLS
  2307. ---------------------------------------------
  2308. User-defined symbols are those not explicitly defined as functions (with defun
  2309. statements) and not belonging to AutoLISP's reserved subr and symbol set.
  2310. These symbols are listed in alphabetical order.  Each symbol has a separate
  2311. cross-reference for the parent functions and line numbers in which it is
  2312. declared, referenced and set.
  2313.  
  2314. The symbol's scope is determined by where and if it is declared (see the
  2315. preceding DECLARATIONS AND SYMBOL SCOPE section for a discussion of scope).
  2316. ALLY uses dynamic scoping rules for duplicate named local symbols, properly
  2317. treating them as separate and distinct symbols.  Instances of dynamic free
  2318. variable usage (called functions using the calling function's local variables)
  2319. are noted and marked by asterisks prefixing the "set in" and "ref in" notices.
  2320.  
  2321. The symbol cross-reference can be split up into two subcategories if desired;
  2322. global functions and local functions.  For details of these reporting options,
  2323. refer to the "Detach globals" option under REPORT OPTIONS.
  2324.  
  2325. The format of the cross-reference is similar to the function report section,
  2326. and symbols are either marked global or with a hierarchical name.  In the
  2327. sample symbol listing which follows (from an analysis of BUB.LSP), note that
  2328. two unrelated symbols share the name i.  This is perfectly acceptable, since
  2329. the symbols have different scopes as their hierarchical names indicate.
  2330.  
  2331.  dimsc (c:bub.dimsc)
  2332.    dec in C:BUB 44
  2333.   *ref in drawln 10
  2334.   *set in leader 22
  2335.   *ref in leader 27,29
  2336.   *ref in bubble 38,40
  2337.  
  2338.  i (c:bub.i)
  2339.    dec in C:BUB 44
  2340.    set in C:BUB 48
  2341.    ref in C:BUB 49
  2342.  
  2343.  i (leader.i)
  2344.    dec in leader 5
  2345.   *set in drawln 12,15
  2346.   *ref in drawln 12
  2347.  
  2348.  item (global)
  2349.    ref in bubble 40
  2350.    set in C:BUB 47,49
  2351.    ref in C:BUB 47
  2352.  
  2353.  pt (c:bub.pt)
  2354.    dec in C:BUB 44
  2355.   *set in drawln 12,15
  2356.   *ref in drawln 10,11,12,15,16
  2357.   *set in leader 23,29
  2358.   *ref in leader 24,27,29
  2359.   *ref in bubble 38,39,40
  2360.  
  2361.  pt2 (leader.pt2)
  2362.    dec in leader 5
  2363.    set in leader 24
  2364.    ref in leader 29
  2365.   *set in drawln 12,16
  2366.   *ref in drawln 10,11,15
  2367.  
  2368.  s (c:bub.s)
  2369.    dec in C:BUB 44
  2370.    set in C:BUB 47
  2371.    ref in C:BUB 48
  2372.  
  2373. Like user defined functions, when multiple files are analyzed the file name
  2374. precedes the parent function names of each symbol usage.
  2375.  
  2376. 8.13  CROSS-REFERENCE OF RESERVED LISP SUBRS AND SYMBOLS
  2377. --------------------------------------------------------
  2378. This optional section of ALLY's report will alphabetically list AutoLISP
  2379. reserved subrs and symbols used by the analyzed file.  Each reserved symbol has
  2380. a separate cross-reference for the parent functions and line numbers in which
  2381. it is referenced, called or set.
  2382.  
  2383. The constants pi, T, and nil should only be referenced, *error* can be set, and
  2384. generally all remaining subrs are only to be called.  A short sample, excerpted
  2385. from an analysis of BUB.LSP, follows.
  2386.  
  2387.  >
  2388.    cal in drawln 10
  2389.  
  2390.  angle
  2391.    cal in leader 29
  2392.  
  2393.  command
  2394.    cal in drawln 11
  2395.    cal in leader 27
  2396.    cal in bubble 38
  2397.  
  2398. Generally, one has no reason to include this section in the Analyzer reports.
  2399. Cross-referencing reserved symbols adds to ALLY's memory overhead and increases
  2400. the size of report files and documents.  In some circumstances it can prove
  2401. useful, however, such as confirming AutoLISP version compatibility.
  2402.  
  2403. 8.14  PROGRAM LISTING
  2404. ---------------------
  2405. This section of the report contains a source listing of each AutoLISP file
  2406. analyzed.  ALLY numbers each line of the files for the purpose of
  2407. cross-referencing functions and symbols.
  2408.  
  2409. Embedded Tabs (ASCII 9) are expanded to the number of spaces set in the ALLY
  2410. Workbench (the default is 8 spaces).  All other control characters (ASCII 0 to
  2411. 31) are represented by a carat symbol followed by the control letter.  For
  2412. example, a backspace character (ASCII 8) is displayed and printed as ^H.  This
  2413. allows you to identify the inclusion of any of these normally unprintable
  2414. characters in the file.  Control characters are sometimes included
  2415. intentionally, but can occur from using a word processor in its proprietary
  2416. document mode rather than ASCII mode.  Appendix A of this manual contains an
  2417. ASCII table which lists the control characters.
  2418.  
  2419.  
  2420. The listing is formatted to the column width you specify in the ALLY Workbench.
  2421. Lines whose length exceed the specified page width are broken at the nearest
  2422. delimiter.  The remaining portion of the line is wrapped underneath.  For
  2423. better readability, the wrapped portion is indented to the same column of
  2424. indentation as the line above.  This is illustrated by line number 17 in the
  2425. following sample.
  2426.  
  2427. The following example (an invented example, not from BUB.LSP) illustrates the
  2428. features of ALLY program listings:
  2429.  
  2430.   16  (defun *error* (str1)
  2431.   17     (if (and str1 (/= str1 "console break") (/=
  2432.          str1 "Function canceled"))
  2433.   18        (prompt (strcat "\n^GError: " str1))
  2434.   19     )
  2435.   20     (grtext)
  2436.   21     (princ)
  2437.   22  )
  2438.  
  2439. Note the ^G on line 18 above.  It is an embedded BEL character (ASCII 7) to
  2440. beep the computer's speaker (this method of beeping, incidentally, is not
  2441. effective with all hardware).
  2442.  
  2443. 8.15  ANALYZER SCREEN OUTPUT
  2444. ----------------------------
  2445. When you choose to send the report to screen, the Analyzer simply redirects its
  2446. normal printer/file write operations to the console device.  Because there is
  2447. no disk or printer I/O involved, you get the report fast.
  2448.  
  2449. The downside is that due to the interception method employed, you cannot cursor
  2450. backwards to see text that has scrolled or paged off screen.  If you need
  2451. greater viewing flexibility, send the report to your editor or browser instead.
  2452.  
  2453. From Setup's Execution Options screen, you can configure ALLY to use 43/50-line
  2454. EGA/VGA display or extended text modes for the screen output.
  2455.  
  2456. Here is a summary of the commands available with report output to screen.
  2457.  
  2458. [A] or [Esc]   Aborts browsing and returns the Workbench.
  2459.  
  2460. [Down]   . . . Cursor key, displays the next line of the report.
  2461.  
  2462. [PgDn] . . . . Displays the next screen page of the report.
  2463.  
  2464. [N]  . . . . . Nonstop.  The report scrolls continuously until the end of file
  2465.                or a key is pressed.
  2466.  
  2467. [MouseRight] . The right mouse button is the same as pressing the [Down]
  2468.                cursor.
  2469.  
  2470. [MouseBoth]  . Both mouse buttons pressed simultaneously together is the same
  2471.                as pressing [Esc].
  2472.  
  2473. [MouseLeft]  . The left mouse button is the same as pressing the [PgDn] key.
  2474.  
  2475.  
  2476.  
  2477.  
  2478.  
  2479. 9.0   P R O B L E M S    A N D    E R R O R    M E S S A G E S
  2480. ==============================================================
  2481. This section illustrates some of the problems which can occur when initially
  2482. setting up ALLY, or after making changes to your disk directories or hardware.
  2483. You should begin by first reviewing the INSTALLATION and SETUP OPTIONS chapter
  2484. of this manual, then trying some of the solutions below before calling for
  2485. technical support.  Chances are, the solution is simple, often accomplished by
  2486. merely reconfiguring or reinstalling ALLY.
  2487.  
  2488. 9.1  ALLY FAILS TO RUN
  2489. ----------------------
  2490. Problems which may occur when using ALLY from AutoCAD are described in this
  2491. section, along with suggested corrective actions.  Error messages pertaining to
  2492. lack of memory are more likely to surface with AutoCAD R10 and R11 than with
  2493. R12.  If ALLY fails, always flip to the text screen to read the reported error
  2494. message.
  2495.  
  2496. "Unknown command" or "bad command or file name"   If one of these messages
  2497. occur after entering the ALLY command in AutoCAD,  either ALLY has been
  2498. incompletely installed or changes have been made to your system (such as
  2499. upgrading AutoCAD or adding another 3rd party application) which effected
  2500. ALLY's installation.  To correct this, just reinstall with ALLY's INSTALL
  2501. program.  Your existing ALLY setup options will be preserved.
  2502.  
  2503. "EXEC failure" or "Cannot execute ALLYWB.EXE"   When DOS reports one of these
  2504. messages under AutoCAD, there is not enough memory to get ALLY started, and you
  2505. must make more available.  See the following section, INCREASING CONVENTIONAL
  2506. DOS MEMORY.
  2507.  
  2508. "Insufficient memory..." or "Out of memory..."   ALLY may report one of these
  2509. messages when analyzing or browsing an unusually large or complex file.  You
  2510. can lessen ALLY's memory requirements in several ways; setting a reduced level
  2511. depth for the Function Call Hierarchy, disabling the X-ref Reserved option,
  2512. and/or reducing the Read Buffer size.  You will rarely need to cross-reference
  2513. reserved symbols, and a large Read Buffer can usually be made smaller.  The
  2514. only use for a buffer larger than 1K is to error check Kelvinated or "squeezed"
  2515. files, and their reports have limited usefulness.
  2516.  
  2517. If you do not wish to give up the above mentioned ALLY features, or if the
  2518. insufficient memory problem occurs with your user-installed editor, browser or
  2519. other external program, the solution is to increase the memory available to
  2520. ALLY.   One such solution is to run ALLY directly from DOS, where it can use
  2521. all available memory.  There are several solutions to increase the availability
  2522. of conventional memory.
  2523.  
  2524. If you are using a 386 version of AutoCAD, continue on to the next section,
  2525. INCREASING CONVENTIONAL DOS MEMORY.  If you are using a 286 version of AutoCAD
  2526. R10 or R11, you must first tell AutoCAD the amount of additional memory to
  2527. release to ALLY.  This is done by increasing the memory reserve figure in the
  2528. ALLY command line in your ACAD.PGP file.  Try raising the memory reserve 25000
  2529. bytes at a time, retesting after each change.
  2530.  
  2531.   ALLY3,C:\ALLY\ALLYWB,305000,,4
  2532.  
  2533. Since AutoCAD can not give any more than it receives, you may also need to use
  2534. the techniques described in the section INCREASING CONVENTIONAL DOS MEMORY,
  2535. below.
  2536.  
  2537.  
  2538. 9.2  INCREASING CONVENTIONAL DOS MEMORY
  2539. ---------------------------------------
  2540. A significant amount of conventional memory is often consumed by drivers and
  2541. TSR programs.  Use a memory manager such as EMM386, QEMM, 386^MAX, or NETROOM
  2542. to load them into upper memory blocks.  If you are using MS-DOS 5 or higher,
  2543. load DOS itself high for a significant gain.  If a TSR is not absolutely
  2544. necessary, consider either unloading it prior to starting AutoCAD or
  2545. eliminating it entirely.
  2546.  
  2547. If you are running AutoCAD 386 R11, you can use Autodesk's NEWDX utility to
  2548. update the R11 Phar Lap DOS Extender with a newer, smaller kernel version if
  2549. you have not already done so.  The NEWDX program and documentation file is
  2550. shipped with R11 revision c2, and is available from dealers and CompuServe's
  2551. ACAD forum.
  2552.  
  2553. Regardless of the version of AutoCAD being used, there are shell utilities
  2554. which can recover the memory AutoCAD holds back for itself when it shells out
  2555. to applications such as ALLY.  There are at least two commercial shell
  2556. utilities which will do the job, and one named SHROOM which Autodesk ships with
  2557. R11 and R12.  A shareware version of the SHROOM utility can be found in
  2558. CompuServe's ACAD forum.
  2559.  
  2560. If you use a 286 version of AutoCAD, be sure to increase ALLY's memory reserve
  2561. in your ACAD.PGP file as described in the previous section.
  2562.  
  2563. 9.3  USER-INSTALLED PROGRAM FAILS TO RUN
  2564. ----------------------------------------
  2565. If a user-installed program fails to execute from ALLY, first check the ALLY
  2566. setup options to see that the program is properly installed with the correct
  2567. path and name, and that all ALLY's special symbols and file aliases are
  2568. properly used.  If the installation is correct, the probable cause of the
  2569. failure is insufficient memory, and you will need to substitute a smaller
  2570. program or make more memory available to ALLY, as described in previous
  2571. sections.
  2572.  
  2573. 9.4  VIDEO PROBLEMS
  2574. -------------------
  2575. On AutoCAD 386 systems with certain video accelerators and/or third-party
  2576. protected-mode display-list drivers (ADI P386 drivers), problems may occur when
  2577. running ALLY in 43/50 line EGA/VGA or extended text modes.  Potential problems
  2578. ranging from random garbage displayed on AutoCAD's screen to system lockups are
  2579. due to the inability of the video system to handle video mode changes from
  2580. AutoCAD's shell.  To avoid this, try a different AutoCAD video driver or set
  2581. ALLY's "Allow from ACAD" video option to NO.  If you happened to select a user
  2582. video mode which locks up ALLY even when run from DOS, you can run ALLYSU.EXE
  2583. directly from DOS to change it.
  2584.  
  2585.  
  2586.  
  2587.  
  2588.  
  2589.  
  2590.  
  2591.  
  2592.  
  2593.  
  2594.  
  2595.  
  2596.  
  2597. A P P E N D I X    A    -    A S C I I    T A B L E
  2598. ===================================================
  2599. +----------------+-----------+-----------+-----------+
  2600. | DEC  CTRL NAME | DEC  CHAR | DEC  CHAR | DEC  CHAR |
  2601. |----------------|-----------|-----------|-----------|
  2602. |  0   ^@   NUL  |  32       |  64   @   |  96   `   |
  2603. |  1   ^A   SOH  |  33   !   |  65   A   |  97   a   |
  2604. |  2   ^B   STX  |  34   "   |  66   B   |  98   b   |
  2605. |  3   ^C   ETX  |  35   #   |  67   C   |  99   c   |
  2606. |  4   ^D   EOT  |  36   $   |  68   D   | 100   d   |
  2607. |  5   ^E   ENQ  |  37   %   |  69   E   | 101   e   |
  2608. |  6   ^F   ACK  |  38   &   |  70   F   | 102   f   |
  2609. |  7   ^G   BEL  |  39   '   |  71   G   | 103   g   |
  2610. |  8   ^H   BS   |  40   (   |  72   H   | 104   h   |
  2611. |  9   ^I   HT   |  41   )   |  73   I   | 105   i   |
  2612. | 10   ^J   LF   |  42   *   |  74   J   | 106   j   |
  2613. | 11   ^K   VT   |  43   +   |  75   K   | 107   k   |
  2614. | 12   ^L   FF   |  44   ,   |  76   L   | 108   l   |
  2615. | 13   ^M   CR   |  45   -   |  77   M   | 109   m   |
  2616. | 14   ^N   SO   |  46   .   |  78   N   | 110   n   |
  2617. | 15   ^O   SI   |  47   /   |  79   O   | 111   o   |
  2618. | 16   ^P   DLE  |  48   0   |  80   P   | 112   p   |
  2619. | 17   ^Q   DC1  |  49   1   |  81   Q   | 113   q   |
  2620. | 18   ^R   DC2  |  50   2   |  82   R   | 114   r   |
  2621. | 19   ^S   DC3  |  51   3   |  83   S   | 115   s   |
  2622. | 20   ^T   DC4  |  52   4   |  84   T   | 116   t   |
  2623. | 21   ^U   NAK  |  53   5   |  85   U   | 117   u   |
  2624. | 22   ^V   SYN  |  54   6   |  86   V   | 118   v   |
  2625. | 23   ^W   ETB  |  55   7   |  87   W   | 119   w   |
  2626. | 24   ^X   CAN  |  56   8   |  88   X   | 120   x   |
  2627. | 25   ^Y   EM   |  57   9   |  89   Y   | 121   y   |
  2628. | 26   ^Z   SUB  |  58   :   |  90   Z   | 122   z   |
  2629. | 27   ^[   ESC  |  59   ;   |  91   [   | 123   {   |
  2630. | 28   ^\   FS   |  60   <   |  92   \   | 124   |   |
  2631. | 29   ^]   GS   |  61   =   |  93   ]   | 125   }   |
  2632. | 30   ^^   RS   |  62   >   |  94   ^   | 126   ~   |
  2633. | 31   ^_   US   |  63   ?   |  95   _   | 127   DEL |
  2634. +----------------+-----------+-----------+-----------+
  2635.  
  2636. A P P E N D I X    B    -    P R I N T E R    C O M M A N D S
  2637. =============================================================
  2638. The following are tables of printer control codes and escape sequences for
  2639. dot-matrix and laser printers.  These are not full command listings, just a few
  2640. you may find useful to execute before or after printing ALLY's reports.  These
  2641. are provided only as a quick reference source, you should consult your printer
  2642. manual for details and commands specific to your hardware.
  2643.  
  2644. Use decimal ASCII codes for ALLY's printer setup and reset strings.  Letters in
  2645. the escape sequences are case sensitive, use ASCII codes for upper or lower
  2646. case as indicated.  The ASCII table in Appendix A will help you translate
  2647. commands into the decimal ASCII strings required by ALLY.  To send multiple
  2648. commands in the strings, simply chain them together, separating each ASCII code
  2649. with commas.  For example: 27,79,15,27,48
  2650.  
  2651. ALLY reports are formatted for mono-spaced fonts, thus will be much less
  2652. readable with proportional fonts.  If your printer defaults to a proportional
  2653. font, be sure to include a setup command to change to a fixed, mono-spaced
  2654. font.  If necessary, you can restore your default font in ALLY's reset string.
  2655.  
  2656. DOT-MATRIX PRINTERS
  2657. -------------------
  2658. The listed dot-matrix printer functions are valid for nine-wire IBM, Epson, and
  2659. compatibles such as Panasonic.  Where command functions differ for the three
  2660. brands mentioned, the brand identification is shown in square brackets: I=IBM,
  2661. E=Epson, P=Panasonic.
  2662.  
  2663. Some of the dot-matrix commands will function only when certain printer modes
  2664. or switches are set.  Although many character modes have both on and off
  2665. commands, others have no off command--they are turned off when another mode is
  2666. selected.  The following is an analysis of sample ALLY dot-matrix setup and
  2667. reset strings:
  2668.  
  2669.        compressed mode on
  2670.        |    set 1/8" line spacing
  2671.        |    |
  2672.        +-+  +----+
  2673. Setup: 15,  27, 48
  2674.  
  2675.        compressed mode off
  2676.        |    set 1/6" line spacing
  2677.        |    |
  2678.        +-+  +----+
  2679. Reset: 18,  27, 50
  2680.  
  2681. In the dot-matrix printer table,  n represents a decimal number (the actual
  2682. number itself, not its ASCII value) between 0 and 255, inclusive.
  2683.  
  2684. -------------------------------------------------------------------------------
  2685. Code or  Decimal     Dot-matrix Printer
  2686. Sequence ASCII       Function
  2687. -------------------------------------------------------------------------------
  2688. LF       10          Line feed
  2689. FF       12          Form feed (to next top of form)
  2690. CR       13          Carriage return
  2691. SI       15          Compressed mode on
  2692. DC2      18          Compressed mode off
  2693. Esc SI   27,15       Compressed mode on [E, P]
  2694. Esc 0    27,48       Set 1/8 inch line spacing
  2695. Esc 1    27,49       Set 7/72 inch line spacing
  2696. Esc 2    27,50       Set 1/6 inch line spacing (standard)
  2697. Esc 3 n  27,51, n    Set n/216 inch line spacing
  2698.                      (example: 27,51,21 sets 21/216"spacing)
  2699. Esc 4    27,52       Italic mode on [E, P]
  2700. Esc 5    27,53       Italic mode off [E, P]
  2701. Esc @    27,64       Initialize printer [E, P]
  2702. Esc E    27,69       Emphasized mode on
  2703. Esc F    27,70       Emphasized mode off
  2704. Esc G    27,71       Double-strike mode on
  2705. Esc H    27,72       Double-strike mode off
  2706. Esc M    27,77       Elite pitch on
  2707. Esc N n  27,78, n    Skip n lines over perforation
  2708.                      (example: 27,78,8 skips 8 lines)
  2709. Esc O    27,79       Skip-perforation off
  2710. Esc P    27,80       Pica pitch on [I, P]
  2711.                      Elite pitch off [E]
  2712. Esc n    27,110      Set letter quality print mode [P]
  2713. Esc z    27,122      Select letter quality/draft [E, I]
  2714.  
  2715. LASER PRINTERS
  2716. --------------
  2717. The following laser printer escape sequences are for HP laserjet compatible
  2718. printers supporting PCL commands.  When combining commands, if the first two
  2719. characters after Esc are the same in adjacent commands, the command string can
  2720. be shorted by changing the leading and any intermediate command's last
  2721. character to lower case and dropping the matching characters from following
  2722. commands.  The final character must remain upper case at the end of the
  2723. combined command--at the termination of the string or before a new escape
  2724. sequence is started.  Generally, commands must be issued in the same order they
  2725. are presented in the table.  For example,
  2726.  
  2727. Esc ( s 0 S    + Esc ( s 0 B    + Esc ( s 3 T    = Esc ( s 0 s 0 b 3 T
  2728. 27,40,115,48,83  27,40,115,48,66  27,40,115,51,84  27,40,115,48,115,48,98,51,84
  2729.  
  2730. The following is an analysis of a sample laser printer setup string:
  2731.  
  2732.        5.45/48" line spacing     PC-8 symbols    fixed spacing
  2733.        +----------------------+  +------------+  +--------------+
  2734. Setup: 27,38,108,53,46,52,53,67, 27,40,49,48,85, 27,40,115,48,112,
  2735.  
  2736.                                                   medium  line printer
  2737.        16.67 chars/inch    8.5 points    upright  weight  typeface
  2738.        +----------------+  +----------+  +----+   +---+   +---+
  2739.   ...  49,54,46,54,55,104, 56,46,53,118, 48,115,  48,98,  48,84
  2740.  
  2741. In the laser printer table, # and #...# represent the ASCII values for each
  2742. digit of the required number.  For example, 5.45 is represented as 53,46,52,53
  2743.  
  2744. -------------------------------------------------------------------------------
  2745. Code or  Decimal     Laser Printer
  2746. Sequence ASCII       Function
  2747. -------------------------------------------------------------------------------
  2748. LF       10          Line feed
  2749. FF       12          Form feed (to next top of form)
  2750. CR       13          Carriage return
  2751. Esc E    27,69       Reset printer
  2752. Esc & l # C          27,38,108,#...#,67 Set #/48 in. vertical line spacing
  2753.                      (example: 27,38,108,53,46,52,53,67 sets a 5.45/48"
  2754.                      spacing,  equaling 88 lines/page)
  2755. Esc & l # D          27,38,108,#...#,68 Set # lines/inch vertical spacing,
  2756.                      valid spacings are 1, 2, 3, 4, 6, 8, 12, 16, 24, 48
  2757.                      (example: 27,38,108,56,68 sets 8 lines/in)
  2758. Esc ( 10 U           27,40,49,48,85     Set PC-8 primary symbol set
  2759. Esc ( 11 U           27,40,49,49,85     Set PC-8 D/N primary symbol set
  2760. Esc ( s 0 P          27,40,115,48,80    Set fixed spacing (mono-spacing)
  2761. Esc ( s # H          27,40,115,#...#,72 Set # characters/inch horizontal pitch
  2762.                      (example: 27,40,115,49,54,54,46,54,55,72 sets 16.67
  2763.                      characters per inch)
  2764. Esc ( s # V          27,40,115,#...#,86 Set # point size character height
  2765.                      (example: 27,40,115,56,86 sets 8 point)
  2766. Esc ( s 0 S          27,40,115,48,83    Sets upright style
  2767. Esc ( s -3 B         27,40,115,45,51,66 Set light stroke weight
  2768. Esc ( s 0 B          27,40,115,48,66    Set medium stroke weight
  2769. Esc ( s 3 B          27,40,115,51,66    Set bold stroke weight
  2770. Esc ( s 3 T          27,40,115,51,84    Set courier typeface
  2771. Esc ( s 0 T          27,40,115,48,84    Set line-printer typeface
  2772. Esc ( # X            27,40,#...#,88     Select primary Font with ID # (varies)
  2773.  
  2774. A P P E N D I X    C    -    S T R I N G  -  E M B E D D E D    C O D E
  2775. =======================================================================
  2776. The ALLY Analyzer reads and analyzes AutoLISP code embedded in the
  2777. action-expression strings of action_tile and new_dialog function calls.  This
  2778. support, however, is limited to literal strings within the function calls,
  2779. action-expression strings referenced by variable or further masked in a nested
  2780. function such as strcat are not analyzed.  To ensure ALLY analyzes all AutoLISP
  2781. code, we recommend you avoid these practices if at all possible.
  2782.  
  2783. Although our driving philosophy is that programmers should not have to modify
  2784. their source code in order to use ALLY, we have provided for a special
  2785. function, named ally_cat.  The Analyzer treats all double-quoted ally_cat
  2786. string arguments as AutoLISP code.  This can be used when action-expression
  2787. string concatenation cannot be avoided or if the string must be referenced by
  2788. variable, and also for any custom routines you may have which embed AutoLISP
  2789. expressions into strings.
  2790.  
  2791. Ally_cat is not a user-defined function, but an alias you create for the
  2792. standard AutoLISP strcat function.  You must establish the alias early in your
  2793. program, prior to calling ally_cat.  This is done with the setq function as
  2794. shown below.
  2795.  
  2796.    (setq ally_cat strcat)
  2797.  
  2798. The ally_cat symbol can be either global or local, and will not prohibit strcat
  2799. from being used for normal string operations.  To break the established alias
  2800. and dispose of the symbol after use, simply set ally_cat to nil.
  2801.  
  2802. The syntax for ally_cat is the same as strcat (since it is strcat), taking one
  2803. or more string arguments.  Use ally_cat wherever you have string-embedded
  2804. AutoLISP code the Analyzer cannot reach, but do not use it for non-code strings
  2805. or nest ally_cat calls.  ALLY considers ally_cat itself to be a reserved subr
  2806. and reports instances of its use along with strcat and other built-in
  2807. functions.  The following examples show how ally_cat can be used effectively.
  2808.  
  2809. BEFORE                                   AFTER
  2810.  
  2811.                                          (setq ally_cat strcat)
  2812. (setq expr "(dosize)")                   (setq expr (ally_cat "(dosize)"))
  2813. (action_tile "pd"                        (action_tile "pd"
  2814.   (strcat "(mode_tile ptmode 4)"           (ally_cat "(mode_tile ptmode 4)"
  2815.           "(setq ptmode $key)"                       "(setq ptmode $key)"
  2816.           "(mode_tile ptmode 4)"                     "(mode_tile ptmode 4)"
  2817.   )                                        )
  2818. )                                        )
  2819. (action_tile "pdsize" expr)              (action_tile "pdsize" expr)
  2820. (action_tile "accept" "(p_set)")         (action_tile "accept" "(p_set)")
  2821.                                          (setq ally_cat nil)
  2822.