ConstructiVision User Manual — v11 (TB11-01x32)

Note

This manual documents ConstructiVision v11 as it actually exists in the src/x32/TB11-01x32/ source tree. Every section is derived from the annotated .lsp and .dcl source file headers — not from the v7.0-era patent or the v10.x PDF manual.

For the original v7.0/patent-era manual, see v7.0/csv-manual-v7.

Key differences from v7.0:

  • Registration/SOTM credit system removed (no pcms.arx)

  • Error handler removed (no work recovery on crash)

  • progcont routing broken in source mode (Bug 18 — all menu items show same dialog)

  • Several DCL dialogs reconstructed March 2026 from VLX screenshots

  • Multiple bug fixes applied (Bugs 18, 31, 35, 47, 48, 49, 63, 73)

  • Weld Connections and Window/Door dialogs extended to multi-page

  • Batch Utilities rewritten in pure AutoLISP (no external cvplst.exe)


System Overview

Technology Stack

Component

Value

Platform

AutoCAD 2000 (32-bit)

Language

AutoLISP with DCL (Dialog Control Language)

Source mode

126 .lsp files + 44 .dcl files loaded by csv.lsp

Compiled mode

CSV.VLX (Visual LISP eXecutable)

Entry point

c:csv function via csv.lsp (source) or csv.vlx (compiled)

Menu

csv.mnu — 17 progcont-routed menu items

Per-document loader

acaddoc.lsp — loads VLX or falls back to source

Module count

93 modules in csvlst load list + framework helpers

Startup Chain

AutoCAD opens drawing
  → acaddoc.lsp runs (per-document, installed in ACAD2000\Support\)
    → Guard: (not c:csv) — safe to re-run, no-op if already loaded
    → sets csv_silent_load = T  [Bug 31 fix: suppresses csvmenu modal alert]
    → attempts (load "csv.vlx") [Bug 35 fix: uses load, not arxload; handles .vlx/.lsp/.fas]
    → if VLX missing: (load "csv.lsp")
      → csv.lsp loads csvmenu.lsp (menu installation)
      → csv.lsp loads 93 modules via csvlst foreach
      → csv.lsp defines c:csv command
      → csv.lsp sets lispinit=0 (preserves namespace across drawings)
    → sets csv_silent_load = nil  [Bug 31: re-enables alerts after load]

Bug 31 detail: When AutoCAD reopens a drawing, acaddoc.lsp runs again. Without csv_silent_load, reloading csvmenu.lsp raised a modal alert. The flag suppresses this alert during programmatic reload.

Bug 35 detail: arxload is for ObjectARX (compiled C++) modules, not AutoLISP. Using (load) instead correctly handles .vlx, .lsp, and .fas files without an error dialog.

Source: csv.lsp, acaddoc.lsp, csvmenu.lsp



A — Program Options

Dialog: progopts.dcl
Handler: progopts.lsp

Note

TB11-ONLYprogopts.lsp is the source replacement for the compiled VLX “Program Options” dialog. Not present in PB11.

Application-level settings dialog. 14 buttons in 7 rows:

Button key

Action

newdwg

Open new drawing

editdwg

Edit existing drawing

newproj

Create new project

batch

Batch utilities (btch_dlg)

viewall

View all panel layers

printlay

Print all panel layers

viewsel

View selected layers

printsel

Print selected layers

3dview

Change 3D viewpoint

matlist

Print materials list

searchpath

Configure support file search path

revhist

Print revision history

When no project drawing is loaded (olddwg is nil), 7 buttons are grayed: viewall, printlay, viewsel, printsel, 3dview, matlist, revhist. Help topic: "Program_Options" in csv.hlp.

Source: progopts.lsp, progopts.dcl


B — Create New Project

Dialog: project.dclnew.dclprojdet.dcl
Handlers: project.lsp, new.lsp, projdet.lsp

Project Selection (project.dcl)

Presents choice: Open Existing (“old”), Create New (“new”), or Cancel.

Note

TB11-ONLYproject.lsp does not exist in PB11. In VLX mode, project routine was compiled inside csv.vlx. Known issues: getfiled for “old” path requires typing a dummy filename with .tmp extension; dirchk loops only while curdir = acaddir (exits on other bad choices); dcl_id28 leaks to global.

New Project (new.dcl)

Prompts for project name and directory. Validates via chrchk (character filter) and dirchk (path validation). Creates project folder tree via shell command.

Project Details (projdet.dcl)

Comprehensive form: measurement system (Imperial/Metric), concrete specifications, contractor info. Stores values and calls new() to create project directory structure.

Golden reference: VM 102 test 04.

Source: project.lsp, new.lsp, projdet.lsp


C — Create New Drawing / D — Edit Existing Drawing

Dialogs: dwg.dcl (new), dwgold.lsp (edit existing)
Handlers: dwgnew.lsp, dwgold.lsp

Edit Existing (dwgold.lsp)

“Edit this drawing or select another?” dialog. Validation logic:

  • If user clicks “Edit This”: checks panel_list dictionary to verify CV format

  • If user clicks “Select Another”: getfiled picker (prevents acaddir selection)

  • panel_list dictsearch is the format validation gate

Source: dwgnew.lsp, dwgold.lsp


E — Batch Utilities

Dialog: btch_dlg.dcl
Handler: btch_dlg.lsp
progcont: 262177

Note

TB11 rewrite (March 2026). PB11/VLX called compiled cvplst.exe for file enumeration (never shipped with source). TB11 replaces this with pure AutoLISP: vl-directory-files + vl-file-systime. DCL reconstructed to match golden VLX layout (VM 102 test 07).

Layout: Operations checkboxes, Sort radios, Panel list_box, named layer toggles.

Operations

Operation

Description

Print Panel Book

Print to default AutoCAD printer (zoomed/centered to scale)

Print Materials List

Generate materials count (concrete, forms, anchors, chamfer, features, picks, braces, embeds)

Print Revision History

Output revision log per selected panel

Update Drawings

Regenerate panel drawings from stored data

Panel Selection

  • Multi-select list box of all panels in current project

  • Sort by: Name, Date Modified

  • Globals: flst (sorted panel number strings), dlst (unique date strings), pnl_dateinfo (panel → date alist), pnl_listdata (formatted display strings)

File Enumeration (TB11 rewrite detail)

PB11/VLX called external cvplst.exe binary (never shipped in source). TB11 replaces it with:

(vl-directory-files curdir (strcat pnlname "*.dwg") 1)  ; enumerate panels
(vl-file-systime (strcat curdir fname))                   ; get modification date

Date formatted as MM/DD/YYYY HH:MM from vl-file-systime list: (yr mo _ dy hr mn ...).

Batch Engine: btch.lsp

The batch engine drives sequential panel processing via a self-recursive script chain:

btch_dlg runs → calls (btch)
  → writes btch.scr:
      (command "open" next-panel "y")
      (setvar "cmdecho" 0)
      if not batch-plot: (panel)
      else: (plt)(btch)
  → executes btch.scr via AutoCAD SCRIPT command
  → AutoCAD opens next panel drawing
  → panel runs → finpan runs → calls (btch) again
  → next btch.scr opens the following panel
  → (repeat until pnllst exhausted)

Callers of btch: btch_dlg.lsp, finpan.lsp, engimp.lsp, drread.lsp, mbread.lsp, wsbread.lsp.

Known issues:

  • Self-recursive via script file — hard to debug or interrupt mid-batch

  • btch# incremented after script execution — context may be stale

  • No error handling if findfile fails for next panel drawing

  • Contains commented-out btchcan_dlg with 2-second CDATE busy-wait timer (dead code)

Source: btch_dlg.lsp, btch_dlg.dcl, btch.lsp


Panel Options (md_dlg)

Dialog: md_dlg.dcl
Handler: md_dlg.lsp

Hub dialog for panel workflow. Presents view/print/create/edit actions for current panel drawing. Routes user to drawpan (draw), oldpan (edit), or validation paths.

Warning

Bug 18: In VLX mode, md_dlg.dcl is “Program Options” with numeric button keys (powers of 2) that map to progcont bitmasks. In source mode, md_dlg.dcl is “Panel Options” with string keys ("new", "old", "val", etc.) — a completely different dialog. These are NOT the same dialog.

Key button routing:

  • "su" button → calls site_dlg workflow

  • "pbt" button → calls btch_dlg

  • "new"drawpan (create new panel geometry)

  • "old"oldpan (edit existing panel)

License check: The license validation in md_dlg.lsp is stubbed — ok is hardcoded to "t". No SOTM/pcms.arx check occurs.

Layer patterns for view/print paths are hard-coded in cond branches, not driven by layer dialog.

Source: md_dlg.lsp, md_dlg.dcl


Main Panel Details (mp_dlg)

Dialog: mp_dlg.dcl
Handler: mp_dlg.lsp

Primary panel configuration dialog. This is the central hub for all panel feature details — 21 feature categories accessed via sub-dialog buttons.

Note

Bug 73 — DCL reconstruction (March 2026). The VLX version had features the old source lacked: casting face radios, distances-from radios, printing layouts, shaded view mode, building name field, Z offset, expansion gap. TB11 mp_dlg.dcl was rebuilt to match the VLX golden screenshots.

Data Storage: panelvar

All panel data is stored in panelvar, an association list with 21 sections:

Section

Feature

Dialog

mpvar

Main panel dimensions

mp_dlg

bpvar

Brace points

bp_dlg

ppvar

Pick points

pp_dlg

chvar

Chamfer

ch_dlg

dlvar

Dock leveler

dl_dlg

drvar

Man door

dr_dlg

fhvar

Horizontal feature strip

fh_dlg

fvvar

Vertical feature strip

fv_dlg

fsvar

Footing step

fs_dlg

tsvar

Top step

ts_dlg

llvar

Lintel

ll_dlg

lbvar

Ledger bar

lb_dlg

plvar

Pilaster

pl_dlg

rovar

Rough opening

ro_dlg

rbvar

Round blockout

rb_dlg

sbvar

Square blockout

sb_dlg

sdvar

Slab dowels

sd_dlg

ssvar

Spandrel seat

ss_dlg

tpvar

Top plate

tp_dlg

wdvar

Window/door opening

wd_dlg

wcvar

Weld connections

wc_dlg

Dictionary Persistence

Panel data is written to the drawing’s Named Object Dictionary as an XRecord under "panel_list". DXF group codes: 1 (section name), 2 (variable name), 3 (value). Read back by panatt.lsp to populate runtime globals.

Master Toggle Convention

Each sub-dialog has a master toggle in mp_dlg (e.g., mpro, mpsb, mpdr, mpdl, mppl, mpll, etc.). When the sub-dialog’s feature count is 0, the master toggle is cleared. The master toggle controls whether that feature category is drawn.

Source: mp_dlg.lsp, mp_dlg.dcl, panatt.lsp, convert.lsp, updvar.lsp


Standard Opening (ro_dlg)

Dialog: ro_dlg.dcl
Handler: ro_dlg.lsp
panelvar section: rovar

Configures rough openings within the panel. Each opening has: toggle, elevation, height, distance, width. Dimensions are clamped to panel bounds (p1–p4) via rangchck.

Key behaviors

  • Iterates rovar section

  • Counts enabled openings → updates mpro master toggle

  • + syntax for adjacent placement, c for centering

  • Snap-to-Edge: useful for Footing Steps, Top Steps, Rough Openings, Loading Docks, Spandrel Seats

Source: ro_dlg.lsp, ro_dlg.dcl


Recess / Blockout — Square (sb_dlg)

Dialog: sb_dlg.dcl
Handler: sb_dlg.lsp
panelvar section: sbvar

Square/rectangular blockout openings. Iterates sbvar section, counts enabled, updates mpsb master toggle. Uses sbenable (special enable logic) rather than the standard enable function.

Source: sb_dlg.lsp, sb_dlg.dcl, sbenable.lsp


Recess / Blockout — Round (rb_dlg)

Dialog: rb_dlg.dcl
Handler: rb_dlg.lsp
panelvar section: rbvar (inferred from naming convention)

Circular blockout openings. Type codes: t=toggle, q=quadrant (L/R), d=distance from edge, e=elevation, w=width. Spinner tiles (_s suffix) wired to slide().

Source: rb_dlg.lsp, rb_dlg.dcl


Named Blockout (nb_dlg)

Dialog: nb_dlg.dcl
Handler: nb_dlg.lsp
panelvar section: nbvar

Up to 2 named blockout instances (nbvar, up to 2 rows). Uses nbenable for special enable logic.

Tile Key Types (nb_dlg)

Type char (3rd)

Meaning

Notes

t

Toggle (enable/disable)

Wires enable

b

Type (C/A/T)

Circular / Arched / Trapezoidal

m

Mode (L/E)

Linear / Elevation-based

q

Side (L/R)

f radio = Left, g radio = Right

d

Distance from edge

l

Lower elevation

r

Upper elevation

w

Width

h

Height

c

Chamfer

x

Extension 1

z

Extension 2

p

Direction

u radio = up, d radio = down

Tile prefix: nb. DCL dialog ID: dcl_id14.

Source: nb_dlg.lsp, nb_dlg.dcl, nbenable.lsp


Man Door (dr_dlg)

Dialog: dr_dlg.dcl
Handler: dr_dlg.lsp
panelvar section: drvar

Personnel door configurations. Iterates drvar section, updates mpdr master toggle.

Tile Key Types (dr_dlg)

Type char (3rd)

Meaning

Notes

t

Toggle (enable/disable)

Wires enable

q

Quadrant (L/R)

"L"f radio, "R"g radio

d

Distance from edge

Clamped to p1–p4 bounds; focus chain to next field

e

Elevation

Bounds checked; focus → w

w

Width

Bounds; focus → h

h

Height

Bounds; focus → x

s

Swing side (L/R)

Enables/disables based on x mode toggle

x

Mode toggle

Enables/disables s tile (mode_tile via atoi($value))

Focus chain: d → e → w → h → x → s → next toggle (t)

Source: dr_dlg.lsp, dr_dlg.dcl


Dock Leveler (dl_dlg)

Dialog: dl_dlg.dcl
Handler: dl_dlg.lsp
panelvar section: dlvar

Dock leveler openings with extra blockout at bottom for hydraulic leveler pit. Iterates dlvar section, counts enabled, updates mpdl master toggle.

Tile Key Types (dl_dlg)

Type char (3rd)

Meaning

Notes

t

Toggle (enable/disable)

Wires enable

q

Quadrant (L/R)

"L"f radio, "R"g radio

d

Distance from edge

Clamped: d + w < panel width; focus chain

e

Elevation

Bounds checked; focus → w

w

Width

Focus → h

h

Height

Focus → x

x

X-offset (recess depth)

Clamped: x w - 1; focus → y

y

Y-offset

Focus → p (next toggle)

p

Advance focus

Moves focus to next item’s toggle tile

Focus chain: d → e → w → h → x → y → p → next t

Source: dl_dlg.lsp, dl_dlg.dcl


Pilaster (pl_dlg)

Dialog: pl_dlg.dcl
Handler: pl_dlg.lsp
panelvar section: plvar

Warning

Naming collision: pl_dlg = Pilaster, NOT Print Layout. The print/plot dialog is plt_dlg. Bug 47 (fixed March 2026): progcont 262657 incorrectly called pl_dlg when it should have called the layer preset + plt for the site “psl” path.

Vertical column extending from the “UP” face. Iterates plvar section, counts enabled, updates mppl master toggle.

Source: pl_dlg.lsp, pl_dlg.dcl


Lintel (ll_dlg)

Dialog: ll_dlg.dcl
Handler: ll_dlg.lsp
panelvar section: llvar

Lintel (Corbel) — horizontally oriented projection from the “UP” face, typically above/below openings. Iterates llvar section, counts enabled, updates mpll master toggle.

Source: ll_dlg.lsp, ll_dlg.dcl


Ledger Bar (lb_dlg)

Dialog: lb_dlg.dcl
Handler: lb_dlg.lsp
panelvar section: lbvar

Up to 4 ledger bar rows. Per row: elevations, depth, width, brace/lumber size, bolt diameter/length, orientation, spacing, offset, inset. Nested defun lbmode() enables/disables row controls. “Calc” button invokes calc_dlg.

Source: lb_dlg.lsp, lb_dlg.dcl, calc_dlg.lsp


Top Plate (tp_dlg)

Dialog: tp_dlg.dcl
Handler: tp_dlg.lsp
panelvar section: tpvar

Up to 4 top plate features. Per plate: bolt size combo, bolt spacing (NxM format), thread length, direction, height, offset, overhang, inset. Nested defun tpmode(). “Calc” button invokes calc_dlg.

Source: tp_dlg.lsp, tp_dlg.dcl, calc_dlg.lsp


Chamfer (ch_dlg)

Dialog: ch_dlg.dcl
Handler: ch_dlg.lsp
panelvar section: chvar

Edge chamfer settings. Iterates chvar section, sets/clears master chamfer flag mpch post-dialog. Applied to either/both surfaces of main panel and/or selected features.

Tile Key Types (ch_dlg)

Type char (3rd)

Tile pattern

Meaning

t

cht1cht4

Toggle (enable/disable)

d

chd1chd4

Direction: "up"u radio, "down"d radio, "both"b radio

s

chs1chs4

Size: "1/2\"" → tile "2", "3/4\"" → tile "4", "1\"" → tile "1"

Note: Size radio key mapping is non-obvious: "1/2" uses tile "2", "3/4" uses "4", "1" uses "1". No spinner/numeric tiles — chamfer uses radio selection only. Master flag mpch set via post-dialog toggle scan.

Source: ch_dlg.lsp, ch_dlg.dcl, chamfer.lsp


Feature Strip — Horizontal (fh_dlg)

Dialog: fh_dlg.dcl
Handler: fh_dlg.lsp
panelvar section: fhvar

Horizontal cosmetic feature strips on panel surface. Loads via fpage (page navigation helper). Sets mpfh master flag.

fh_dlg/fv_dlg tile key types (via fpage.lsp):

Type char (3rd)

Meaning

t

Toggle — wires enable + fenable

q

Quadrant (L/R) — f/g radio tiles

d

Distance from edge — clamped to panel width

e

Elevation — clamped to panel bottom

h

Height — clamp to panel top; slide + y focus

l

Left offset — clamp to bounds

r

Right offset — clamp to bounds

w

Width — clamped vs (panel - distance)

a

Angle — wired to slide only

y

Y-position — slide + x focus on change

x

Catalog combo — populated from fxl list

z

Feature select combo — filtered from fsl list; wires fenable

c

Checkbox — wires fenable

o

Orientation (U/D) — up/down radio tiles

s

Side (L/R) — left/right radio tiles

i

Installed (Y/N) — yes/no radio tiles

Known issue: foreach rebinds n to (car n) — shadows loop variable (same PB11-style pattern).

Source: fh_dlg.lsp, fh_dlg.dcl, fpage.lsp, fenable.lsp


Feature Strip — Vertical (fv_dlg)

Dialog: fv_dlg.dcl
Handler: fv_dlg.lsp
panelvar section: fvvar

Vertical cosmetic feature strips. Sibling of fh_dlg (identical pattern — same fpage initializer, same tile key convention). Sets mpfv master flag.

Source: fv_dlg.lsp, fv_dlg.dcl, fpage.lsp, fenable.lsp


Footing Step (fs_dlg)

Dialog: fs_dlg.dcl
Handler: fs_dlg.lsp
panelvar section: fsvar

Footing step details. Nearly identical to ts_dlg (top step). Type codes: t=toggle, s=side (L/R), h=height, w=width.

Tile Key Types (fs_dlg / ts_dlg)

Type char (3rd)

Meaning

Notes

t

Toggle (enable/disable)

Wires enable

s

Side (L/R)

"L"l radio, "R"r radio; focus → h

h

Height from floor

h p1.y (panel base); focus → w

w

Width

w < panel width; focus → next item’s t

Difference from ts_dlg: fs_dlg focus-after-enter uses (= $reason 1) without distof check. ts_dlg uses (and (distof $value) (= $reason 1)). Also ts_dlg has radio cross-link: l1↔r2, r1↔l2 (mirror sides) — selecting step 1 left auto-selects step 2 right.

Source: fs_dlg.lsp, fs_dlg.dcl


Top Step (ts_dlg)

Dialog: ts_dlg.dcl
Handler: ts_dlg.lsp
panelvar section: tsvar

Parapet step details. Radio cross-link: l1↔r2, r1↔l2 (mirror sides) — selecting left side on step 1 automatically selects right side on step 2.

Source: ts_dlg.lsp, ts_dlg.dcl


Spandrel Seat (ss_dlg)

Dialog: ss_dlg.dcl
Handler: ss_dlg.lsp
panelvar section: ssvar

Up to 2 spandrel seats. Per seat: toggle, L/R side, elevation, width, height fields with linked edit+slider pairs.

Source: ss_dlg.lsp, ss_dlg.dcl


Slab Dowels (sd_dlg)

Dialog: sd_dlg.dcl
Handler: sd_dlg.lsp
panelvar section: sdvar

J-shaped rebar connections to slab. Type codes: t=toggle, e=elevation, a=angle, o=offset, i=inset.

Source: sd_dlg.lsp, sd_dlg.dcl


Window/Door Opening (wd_dlg)

Dialog: wd_dlg.dcl
Handler: wd_dlg.lsp
panelvar section: wdvar

Note

TB11 vs PB11: TB11 adds multi-page navigation (pg2), local och variable, and no exit-on-fail logic. PB11 was single-dialog.

Scans wdvar toggles post-dialog, sets/clears mpwd master toggle. Uses wdenable for special enable logic, wdpage for page navigation.

Source: wd_dlg.lsp, wd_dlg.dcl, wdenable.lsp, wdpage.lsp


Weld Connections (wc_dlg)

Dialog: wc_dlg.dcl
Handler: wc_dlg.lsp
panelvar section: wcvar

Note

TB11 vs PB11: TB11 has 5-page navigation (pg1–pg5) with updvar saves between pages. PB11 was single-dialog.

Scans wcvar toggles, sets/clears mpwc master toggle. Uses wcenable for enable logic. Manages wcl (window cutout list) file persistence via updvar.

Site-level weld: weld.lsp is a stub — shows “not available” alert. This feature was never implemented in source mode.

Source: wc_dlg.lsp, wc_dlg.dcl, wcenable.lsp, wc_edit.dcl, weld.lsp


Pick Points (pp_dlg)

Dialog: pp_dlg.dcl
Handler: pp_dlg.lsp
panelvar section: ppvar

Up to 8 auto-placed pick points. 23-item ppvar section: ppa (auto-place toggle), ppc (columns radio “0”–“4”), ppr (rows radio “0”–“8”), then per column/row tiles.

Tile Keys

Columns (1–4): ppt1ppt4 (toggle), ppq1ppq4 (direction L/R), ppd1ppd4 (distance).
Rows (5–8): ppt5ppt8 (toggle), ppe5ppe8 (elevation).

Slider scaling: slider_value = distance_inches × 8 (range 0–4800 = 0–50 ft).
Tab-advance: d1→d2→d3→d4 (end); e5→e6→e7→e8 (end).

Note

Bug 76 (open): VLX-era imported panels may have 44-item ppvar (ppt9–ppt16). Those tiles don’t exist in pp_dlg.dcl — silently ignored. Source ppvar is 23 items; divergence documented in makepan.LSP.

Auto-placement via ppauto.lsp (obstruction avoidance, points.lsp engine).
Centroid-based placement via ppcent.lsp.

Source: pp_dlg.lsp, pp_dlg.dcl, ppauto.lsp, ppcent.lsp, points.lsp, pdisable.lsp


Brace Points (bp_dlg)

Dialog: bp_dlg.dcl
Handler: bp_dlg.lsp
panelvar section: bpvar

Up to 4 manual brace points (distance + elevation) or auto-placement via bpa toggle. Depends on: pdisable, enable, slide, updvar, calc_dlg. “Calc” button invokes calculation popup.

Source: bp_dlg.lsp, bp_dlg.dcl, bpauto.lsp, brace.lsp, pdisable.lsp, calc_dlg.lsp


Revision History

Dialog: revision.dcl
Handler: revision.lsp
progcont: 264193

Note

Bug 49 fix: revision.lsp crashed when rev/revdate were nil (e.g., when opened via au3 raw (command "open") without drawpan running). Guard clause added: first empty row pre-filled with rev+1 and current date. csv.lsp now reads UPDATE block attributes inline for progcont 264193.

10 revision slots. Per row: revision # (r1r10), date (d1d10), description (t1t10). Reads from UPDATE block attributes (REV, REVDATE, R1–R10, D1–D10, T1–T10). Calls donerev on OK → updates title block revision table.

donerev.lsp — Accept Handler

  • Scans rows r11r1 downward to find highest non-empty slot

  • Increments rev counter; formats revdate from (getvar "CDATE")

  • Copies tile text t1t10 into globals rt1rt10

  • Auto-stamps rr (rev number) and rd (date) for rows with text but no prior stamp

  • Date format: M/D/YYYY HH:MM (no zero-padding, from CDATE)

Source: revision.lsp, revision.dcl, donerev.lsp, drawpan.lsp


Site Drawing Options (site_dlg)

Dialog: site_dlg.dcl
Handler: site_dlg.lsp

Hub for site workflow. 14 button routes:

Button pnl value

Action

"new"

New site drawing (getfiled template or blank)

"old"

Edit existing site (getfiled or dwgold if already open)

"dp"

Detach Panels (xref detach)

"ip"

Insert Panels → inspanel

"tu"

Tilt-Up → tiltup

"lp"

Layout Panels → layout

"ml"

Materials List → matl_dlg

"sl"

Save Layout → savelay

"val"

View All Layers (on/regen)

"pal"

Print All Layers (on/regen/plt)

"vsl"

View Select Layers (readtile filter helper)

"psl"

Print Select Layouts (layer preset/regen/plt)

"vp"

Set Viewpoint (viewpt sub-dialog)

"rn"

Rename — displays “not available” alert

All buttons except "new" / "old" are disabled via mode_tile when drawing name does not contain *site*.

Note

Bug 63 fix: VLX writes "site" dictionary key; source writes "site_list". All reads now check both via (or). dictadd writes remain "site_list" for source-mode.

Print Select Layouts ("psl") layer preset: Turns ON: solid, footing, slab dims, connection layers.
Turns OFF: *_dim, *perimeter, *hardware, dimensions, xy, walline, slabline.
Then calls (plt) for plotter.

Source: site_dlg.lsp, site_dlg.dcl


Site Drawing (sdwg_dlg)

Dialog: sdwg_dlg.dcl
Handler: sdwg_dlg.lsp

Hub for all site editing sub-dialogs. Rebuilds sitevar from "site_list" XRecord if present (same DXF group 1/2/3 parsing pattern as panel_list). Calls (convert "site") if site data version ≠ "V2.25". Routes to:

Button key

Calls

Status

"gl"

grid_dlg

Functional

"wl"

wall_dlg

Functional

"sg"

slab_dlg

Functional

"fg"

footing

UI disabled at startup (mode_tile = 1)

"cp"

column

UI disabled at startup

"wc"

weld

UI disabled at startup

Note

Footing, Column, and Weld buttons are silently disabled in the DCL — they do not call stub functions; they simply cannot be clicked. The footing/column/weld stubs (which show “not available” alerts) are invoked from site_dlg, not here.

walline (defined in wall_dlg.lsp): helper called after wall edits and by inspanel during recovery. Erases all WALLINE entities then regenerates LINE entities from sitevar wlvar data. Each LINE carries XData application "CSV" with a space-delimited panel number string (1000 . " 1 2 3 ..."). Axis direction globals yx/xx are derived from gdv3/gdh3 site variables.

Source: sdwg_dlg.lsp, sdwg_dlg.dcl


Materials List (matl_dlg)

Dialog: matl_dlg.dcl
Handler: matl_dlg.lsp
progcont: 263169

Reads wcl.txt from project directory, searches for panel blocks (ssget "x" INSERT on layer 0), counts materials: concrete yardage, form material, anchor bolts, chamfer, feature strips, pick points, brace points, braces, extensions, embeds. Counts reveals by type (F1/F2/F3), blockouts, named materials.

wcl.txt format: LISP lists with integer index, e.g. (0 "name" 0.0 0.0 ...). wcxn = highest index. Loaded from curdir via load call.

Note

Bug 48 fix: matl_dlg failed when called via progcont without prior panel workflow (panelvar nil). csv.lsp now calls panatt before matl_dlg when panelvar is nil.

Source: matl_dlg.lsp, matl_dlg.dcl, panatt.lsp


Layer Options (lyr_dlg)

Dialog: lyr_dlg.dcl
Handler: lyr_dlg.lsp

Note

TB11-ONLY — not present in PB11. Layer visibility toggle dialog with two modes.

Two independent modes, both showing toggle checkboxes per layer:

Panel mode (plyr_dlg) — 14 panel layers:

Key

Layer

cn

connections

cnd

connections_dim

po

points

pod

points_dim

fhv

feature

fhvd

feature_dim

gp

greenplate

gpd

greenplate_dim

cu

custom

cud

custom_dim

sod

solid_dim

ppd

perimeter_dim

hd

hardware

pp

perimeter

Site mode (slyr_dlg) — 17 site layers (s0, sd, sp, sf, sg, sh, sl, sc, scd, su, sud, sx, sxd, ss, ssd, st, std).

Base layers 0, Defpoints, Ashade, solid are always visible (never toggled).
While-loop re-shows dialog until Cancel. lyrpos global records result.

Source: lyr_dlg.lsp, lyr_dlg.dcl



Slope Calculator

progcont: 8193
Handler: slope_dlg.lsp
Dialog: slope_dlg.dcl

Slope calculation utility accessed from the L menu item.

Source: slope_dlg.lsp, slope_dlg.dcl


Registration Manager

progcont: (compiled)
Handler: csvreg (compiled into VLX — no source)

Warning

Non-functional in source mode. The csvreg function exists only inside the compiled VLX. In TB11 source mode, calling Registration Manager does nothing. The SOTM credit system (Patent 1) was removed in v7.0 and remains absent in v11.

Source: none (compiled-only)


Framework Modules

These shared modules provide the infrastructure that all dialogs depend on.

Universal Dialog Helpers

Module

Purpose

okcanhlp.lsp

Central OK/Cancel/Help handler for 42+ dialogs. Maps 2-char codes (mp, ch, rv, wc…) to help topics. TB11-ONLY — VLX had this routing compiled in.

enable.lsp

Universal tile enable/disable for row-based dialogs. Two modes: list (bulk init entire var section) and string (single action_tile callback via $key). Toggles companion tiles based on 3rd-char "t" convention using “shotgun” pattern — tries all 14 single-letter-prefix suffix keys, non-existent tiles silently ignored.

slide.lsp

Universal edit_box ↔ slider sync. Two branches: key ending "s" (slider→edit, ÷8) and no-"s" (edit→slider, ×8). Angle scale = ×4. Special shortcuts: "+" relative, "C" center, "D" double. "mp" prefix = live mp_dlg geometry update. Called by 17+ dialogs.

rangchck.lsp

DCL edit_box range validation. Handles tapered panels via linear height interpolation. Reads globals v, ke, k set by caller. 203 lines, identical to PB11.

err.lsp

Range check error display. Restores previous value (v2), refocuses tile (mode_tile ke 3), recalculates companion metric tile (ks). Shows centered alert unless tile key ends in "s". "mpm" prefix → multiply by 4 (metric), default → multiply by 8 (half-inch → metric).

updvar.lsp

Universal dialog-to-variable writeback. ok="0" → full restore (wcl backup, panelvar restore, pnl=nil). ok=2-char ID → read tiles → set globals. Complex radio translation. 20 calling dialogs.

editbx.lsp

Edit box feet-and-inches validator. Called by wall_dlg.lsp for wl* tiles. Sets v2=1 on valid, restores prior value + shows “INVALID ENTRY” alert on fail. TB11-ONLY (not in PB11).

chrchk.lsp

Input validator for panel numbers and folder paths. Mode 1 (mpp#): accepts 1–3 digits + optional alpha suffix, advances focus to mpx1 on pass. Mode 2 (pjname/curdir): rejects Windows-illegal filename chars (`\ / : * ? “ < >

dbchk.lsp

Checks DBMOD sysvar; if drawing modified and is not “Drawing.dwg”, shows warning.dcl prompt and calls qsave unless user cancels. Only triggers for dbmod values 1, 5, 9, 17, 21 (specific dirty-bit combinations).

dirchk.lsp

Directory safety check — prevents saving project files into AutoCAD system directories. Checks: exact match on acaddir, acaddir\Project Files\ root, or direct subdirectories of acaddir (SUPPORT, FONTS, HELP, etc.). TB11 rewrite (v11.01, 2025-02-24): old v3.60 used broad wildcards that falsely blocked valid project names. Sets x = "t" if blocked, nil if allowed.

warning.lsp

Save-changes dialog (called by dbchk). Tiles: msg1, msg2a, msg2b, msg3. Counterintuitive: "yes" button → ok="no" (save); "no" button → ok="ok" (discard). X-button = discard.

setvars.lsp

Configures ~55 AutoCAD sysvars to deterministic state. Called by 4 importers (wsbread, engimp, drread, mbread). Byte-identical to v3.60. No restore function — CV owns sysvar state.

scr.lsp

Opens drawing via vla-open (ActiveX COM) + S::STARTUP hook for post-open continuation. v11.01 rewrite from v3.60’s .scr file approach. vla-activate kills calling LISP thread; S::STARTUP fires in the new document. scr_fx/scr_curdir globals survive the switch (lispinit=0).

strlsort.lsp

Descending O(n²) selection sort + dedup. Clobbers global xlst (collision risk with newlist.lsp). Called by btch_dlg, matl_dlg, wclist.

invar.lsp

Simple single-value input dialog. Prompt label msg1 + edit box var. Returns result in global var. Called by inspanel.lsp (3×) and layout.lsp for gap prompt.

Panel Feature Sub-Dialog Pages

All panel feature detail dialogs share a standard page-initialization + enable/disable pattern.

Page initializers — load dialog tiles from panelvar, set och, wire action_tile callbacks, and call start_dialog:

Module

panelvar section

Type codes (3rd char of variable name)

Enable helper

TB11 = PB11

wdpage.lsp

wdvar

t/q/d/e/w/h/a/i/p/x/o

wdenable

Different — Bug: double action_tile on "x" key (second overwrites first; d-focus dead)

wcpage.lsp

wcvar

t/s/q/i/d/e/x/z/o/p

wcenable

Different — TB11 adds wc_edit integration for "x" (catalog) + "s" (store) + "z" (quick-select) buttons

Enable/disable helpers — called on init (k="ok") and from action_tile callbacks during live editing:

Module

Target dialog

Key cascade rules

TB11 = PB11

wdenable.lsp

wd_dlg

Toggle "t" enables all 10 sub-tiles. "i"=1 (inside) → disables o/p/x/a (sets o="1"). "x"=1 (extend) → disables o/p. TB11 init: enables all fields first then applies cascade; PB11 only applies cascade.

Different

wcenable.lsp

wc_dlg

16-tile enable block per weld item. L/R side flag → disable f/g/d/ds. T/B side flag → disable e/es. T flag absent → disable y/n (inset). Mode calc: (- 1 (atoi v))"1"=enable, "0"=disable.

Identical

nbenable.lsp

nb_dlg

Circle → disable r/w/c. Arc → compute min radius `h_min = w / (2 *

cos(angle)

sbenable.lsp

sb_dlg

T/B active → enable sbe* (elevation). L/R active → enable f/g radios + sbd* (distance). Top (T) specifically → also enable y/n radios (inset).

Identical

Weld connection item editor (wc_edit.lsp): Three entry modes keyed by 3rd char of tile key k:

Mode char

Behavior

"x"

Catalog list selection — loads full wc_edit.dcl (New/Modify/Delete via wcedlst)

"s"

Store from parent tiles — reads current tile values directly (no sub-dialog)

"z"

Quick-select — auto-populates parent tiles from catalog defaults without opening sub-dialog

After editing, if ok="1": calls wcmod to write changes to wcl catalog, then refreshes page (wcpage or combo tiles). TB11 = PB11 (byte-identical).

Construction Calculator (calc_dlg.lsp)

A standalone 3-input construction calculator dialog:

Input Set

Computations

A alone

1/A, A²/12 (square), √A

A + B

sum, difference, A×B/144 (sq.ft.), A/B, √(A²+B²) (hypotenuse), √(A²−B²)

A + B + C

board feet, A×B×C/46656 (cu.yds.), weight in tons

Constants: 46656 = 36³ (in³/yd³), 3.922 = concrete density (tons/yd³), 144 = in²/ft², 1200 = in/100ft (granularity for spinner very-large-dimension units).

Each dimension has an architectural string field + 3 spinners (100-ft units, inches, sixteenths). Contains 3 nested defuns (settile, cvscalc, clear) — these become global functions (not localized).

Called by: okcanhlp.lsp (when och="ca"). Persistent globals: ca, cb, cc.

Data Management

Module

Purpose

panatt.lsp

Reads panel data from Named Object Dictionary → populates panelvar and individual globals. Creates 16-layer structure with fixed colors: connections (blue), connections_dim (magenta), feature (yellow), feature_dim (magenta), points (red), points_dim (magenta), greenplate (green), greenplate_dim (magenta), perimeter (white), perimeter_dim (magenta), solid (white), solid_dim (magenta), custom (white), custom_dim (magenta), hardware (blue). Sets UCS world, viewres 500, osnap off, pickbox 0. Calls (convert "panel") if version string ≠ "V2.25".

convert.lsp

Master default value initialization. Single source of truth for all dialog variable defaults. Called when no stored dictionary exists, or when version mismatch detected. Builds 21 panel feature categories + 5 site categories with hard-coded defaults; loop expansion for multi-instance features (sb 1–6, wd 1–12, fh/fv/wc 1–18); merges with existing panelvar so stored values win. Callers: panatt.lsp, site_dlg.lsp, native.lsp, sdwg_dlg.lsp, engexp.lsp. Bug 81: Static defaults cannot auto-discover keys added in newer CV versions — VLX-compiled additions would be silently absent in TB11.

pj_name.lsp

Extracts project name from directory path (pjname for display, pnlname for block name prefix).

Drawing & Geometry

Module

Purpose

drawpan.lsp

Draw panel geometry: calculates corner points p1p7 from panelvar dimensions (width, heights, arch, taper, pilaster/ledge extensions); reads UPDATE block attributes (REV, REVDATE, R1–R10, D1–D10, T1–T10); draws outline, pilasters, connections, features, title block.

layout.lsp

Panel layout on site plan. Two code paths: (1) first-time — rotates panel inserts +1.5708 rad (OCS→WCS), prompts for gap via invar utility dialog, calls savelay; (2) re-layout — reads saved entity data from conslist.txt and re-applies via entmod. Bug 16 (open): ENAMEs serialized by savelay are session-only pointers; invalid after reload. Bug 17 (fixed): index mismatch xn vs nn. ~100 lines of commented-out unfinished wall-layout algorithm.

miter.lsp

Miter cut wedge drawing. Called by drawpan.lsp line 334: (miter (distof mpx1)). Strips degree symbol from mpm1/mpm2 via (substr str 1 (1- (strlen str))). Wedge height = panel height + 12. Positive angle → depth=12; negative angle → depth=mpx. Sets globals x16 (left tangent) and x17 (right tangent) via sin/cos. Copies to “greenplate” layer. Calls (drawdim (list "mivar")).

opening.lsp

3D rectangular void generator for 8 section types: rovar, tsvar, fsvar, ssvar, wdvar, drvar, dlvar, sbvar. Pipeline: compute corners → draw PLINE on solid layer → TRIM perimeter → EXTRUDE → optional COPY to greenplate. Special casing: sbvar = tapered logic + collision detection; dlvar = 8-point polygon; ssvar = label string. Called by drawpan.lsp iterating plst.

rndblock.lsp

Circular blockout geometry. Draws two semicircular 180° arc plines, moves to blockout center, extrudes to width mpx1, adds to sub selection set. Magic number: 0.312 × diameter (≈ π/4 arc factor). Draws straight pline for positioning then erases it. Called by drawpan.lsp(rndblock "rbvar").

thick.lsp

Thickened panel sections (plates/lintels). Two branches: "pl" (plates from top, p5 reference, height=0 means full panel height) and non-"pl" (lintels, elevation-based from base). Extrudes closed pline by mpx1 + extra depth. Optionally chamfers. Called by drawpan.lsp(thick "plvar") and (thick "llvar").

weldconn.lsp

Weld connection 3D block creation and placement. Nested placecon() creates block WC{type#} from 3 solid-hatch faces. Handles collision avoidance against shelves/pilasters/lintels. Miter compensation using x16/x17 tangents from miter.lsp. Called by drawpan.lsp (wcvar), bolt.lsp (lbvar, tpvar). miscon accumulator reports missing catalog entries.

pick.lsp

Pick point block placement. Builds solid-hatched triangle pline, defines block "PP_<depth>" (depth = mpx1). "Top_Pick" block name for points at p5.y. Places at each column×row intersection. Pre-calls ppauto if ppa="1". Called by finpan.lsp. Dead parameter a (never read).

tiltup.lsp

Tilt-up panel transformation. Reads tiltlist.txt from project folder (written by inspanel.lsp). Applies saved entity modifications to rotate panels into tilt-up position. Shows alert if tiltlist.txt not found (must run Attach Panels first). Called by site_dlg pnl="tu".

walline (in wall_dlg.lsp)

Regenerates WALLINE layer LINE entities from sitevar wlvar data. Erases all existing WALLINE entities first, then redraws. Each LINE gets XData application "CSV" with space-delimited panel numbers (1000 . " 1 2 3 ..."). Axis direction: yx (±1 from gdv3) and xx (±1 from gdh3). Called by wall_dlg (after wall edits) and inspanel (recovery when WALLINE entities missing).

finpan.lsp

Post-processing after drawpan: computes pick/brace points via centgrav/pick/ppcent/brace; draws 6 dimension layer groups; inserts “title” block (27 attributes) and “border” and “update” (31 attributes); handles revision stamps; orients drawing (landscape at 1.2× ratio); saves/plots. Batch mode: chains to pltqsavebtch. Brace type lookup uses hardcoded elevation thresholds (151/229/281/333/442 in.).

panel.lsp

Saves panelvar to Named Object Dictionary, invokes drawpan.

centgrav.lsp

Panel center of gravity, area, volume, weight, perimeter. Parses mprop.mpr (AutoCAD MASSPROP output) to extract volume and centroid. Constants: 46656 (in³/yd³), 3.922 (concrete density tons/yd³). Outputs: pv (volume), pa (face area = pv/mpx1), pc (bounding box center), pcg (true centroid), kips (weight).

drawdim.lsp

Master dimension annotation engine (1800+ lines, 3 nested defuns). Multi-item mode: collects X/Y coordinates from 18 feature types into accumulator tiers x0lst–x8lst and y1lst/y2lst, then calls elevmrkr() + basedim(). Single-item mode: draws detailed dimensions for one feature type. X-coord accumulator tiers: x0lst (fhvar/fvvar), x1lst (fsvar/rovar left edges), x2lst (right edges), x3lst (drvar/wdvar low-elev left), x4lst (right), x5lst (high-elev), x7lst (bpvar plate), x8lst (ppvar pin), wclst (wcvar window cutouts).

drawdimlst.lsp

Global-variable wrapper around drawdim’s multi-item routing. Reads from dmlst instead of parameter. TB11-ONLY and ORPHANED — zero callers. Not in PB11. Tech debt candidate for deletion.

drwbas.lsp

Standalone drwbas(z) — draws a horizontal dimension chain. TB11-ONLY standalone extracted from the nested drwbas defun inside drawdim.lsp. basedim.lsp calls this. Gap stagger: alternates * 6 scf vs * 20 scf to avoid text overlap.

basedim.lsp

Standalone basedim() — horizontal dimension row engine (464 lines). TB11-ONLY, extracted from nested defun inside drawdim.lsp. IDENTICAL logic to its drawdim twin — bug fixes must be applied to both copies. Called by drawdimlst.lsp and loaded by j.lsp.

chamfer.lsp

Panel corner chamfer engine. Applies AutoCAD CHAMFER to panel corners and feature corners. Routing: "mp" (main panel, ch1), list (feature types, ch2/ch3/ch4), "pl"/"ll" (special case). Accumulates edge perimeter into c2/c3/c4 by size. Calls drawdim for annotation.

feature.lsp

3D feature (opening) geometry generator. Draws hollow rectangular or cylindrical openings via extrusion and Boolean subtraction. "fhvar" = horizontal/roof-slope-aware, "fvvar" = vertical/wall-slab openings. Accumulates material counts in f1f4.

green.lsp

3D greenplate and J-bolt geometry. Creates greenplate surfaces and bolt arrays for top plate (tpvar) and ledger (lbvar) features. Procedural bolt block: pentagon pline extrude cylinder×2 sphere → named block J_bolt_<diam>_X_<len>. Adjusts boundaries against adjacent features (tsvar, fsvar, ssvar, sbvar, wcvar, plvar, llvar).

dowels.lsp

Slab dowel cylinder placement. Places 0.3125”-radius cylinders at gap-aware positions around openings. Intersects sdvar rows with openings from fsvar/wdvar/drvar/rovar/dlvar for gap-aware placement lists.

bolt.lsp

J-bolt insertion engine. TB11-ONLY (not in PB11). Inserts J-bolt and weld connection blocks along greenplate surfaces. Two code paths: lbvar (lumber ledger bolts) vs tpvar (top plate bolts 3 geometry cases: no arch/no split, split at p5, arch polar array). 518 lines.

inspanel.lsp

Attaches panel drawings as xrefs to site. Reads WALLINE layer, sorts panels by proximity, computes spacing from H/W/E attributes. Writes tiltlist.txt for tilt-up workflow.

points.lsp

Auto-placement engine for brace/pick points with obstruction avoidance.

Tile Key Convention

All dialog tile keys follow a consistent naming pattern:

[2-char prefix][field type][index]

Char 3 (field type)

Meaning

t

toggle (enable/disable)

d

distance from edge

e

elevation

w

width

h

height

s

side (L/R radio) or slider

q

quadrant

a

angle

o

offset

i

inset

Example: bpd1 = brace point distance 1, rot3 = rough opening toggle 3.

Engineering Integration

Import / Export

Module

Purpose

engexp.lsp

Engineering data export dispatcher. Extracts panel geometry from panelvar/NOD into standardised engineering primitives (P/R/F/T/A/G/M/C/W/B/L) and dispatches by outdata selector: "1" → Dayton/Richmond (dreng → .pdx), "2" → Meadow-Burke (mbeng → .txt), "3" → White Cap (wceng), "4" → WSB (wsbeng). Phase flag btche: "1" = extract geometry, "2" = write file. Rebuilds panelvar from XRecord if version ≠ "V3.60".

engimp.lsp

.pan file importer (external engineering tool format). Parses RECT/PLNKBRC/STEEL/STRNGBCK records into bpvar/ppvar alists. Hardcoded TCA DEMO approval bypass — real decryption was never implemented in source. Calls btch for batch creation.

drread.lsp

Dayton-Richmond .pdx file importer. Parses fixed-field .pdx lines: "Project Name:*", "Project Prefix:*", comma-delimited panel name list, *PANEL*, *BRACE*, *LIFT*, *STEEL*, *STRNGBCK*. Same hardcoded TCA DEMO approval bypass. Calls btch.

dreng.lsp

Dayton/Richmond .pdx exporter. TB11-ONLY (not in PB11). Primitive encoding: "P" → panel perimeter, "R" → rectangular opening, "C" → circular, "A" → arched, "T" → triangle, "M" → miter, "E" → weld embed, "L" → lift point, "B" → brace. U/D/C elevation classification (U=top, D=bottom, C=custom) via nested trtos function.

mbeng.lsp

TB11-ONLY (compiled into csv.vlx in PB11). Meadow-Burke .txt engineering exporter. Entity type map: "P"→PANEL, "R"→RECT (3 depth variants + exposed/insulated), "C"→CIRCULAR, "A"→ARCHED, "T"→TRI, "L"→LEDG, unhandled→error string. Nested trtos(oldstr): inches÷12 → feet decimal, trailing-zero stripped. Dead global: stupidvar3 initialized but never used. Debug line (set 'j engvar) never removed.

mbread.lsp

TB11-ONLY (compiled into csv.vlx in PB11). Meadow-Burke .txt material book importer. Structural twin of wsbread/engimp/drread. Parses fixed-width fields: "Project Name:*" (substr 24), "Project Prefix:*" (substr 24), comma-delimited panel name list, "*PANEL*", "*BRACE*", "*LIFT*", "*STEEL*", "*STRNGBCK*"; blank lines flush to wsblst. Same hardcoded TCA DEMO approval bypass. Calls btch.

wsbeng.lsp

TB11-ONLY (compiled into csv.vlx in PB11). WSB Engineering pipe-delimited .pan exporter (address: 118-3855 Henning Drive, Burnaby BC). trtos variant: raw inches, 9-char right-padded pipe-delimited fields (no ft conversion). Known issues: j=engvar debug not removed; dead M/G cond branches (excluded by earlier filter); wsbeng_dlg.dcl exists but never loaded — contact globals may be unset; hardcoded Lift="SL3", Brace="SUPERBRAC", Anchor="SUPERBOLT", Elevation=0 marked “CURRENTLY UNKNOWN”.

wsbread.lsp

WSB .pan importer. Structural twin of engimp/mbread/drread. Same TCA DEMO approval bypass. Calls btch.

Approval Bypass Pattern

All four importers (engimp, drread, mbread, wsbread) contain the same hardcoded approval bypass:

;; Insert decryption algorithym here...
(set 'xxxapprv "TCA DEMO")
(set 'xxxdt "...")
(set 'xxxby "...")

Real licence key decryption was never implemented in any importer’s source code.


TB11-Only Files

The following files are present in TB11-01x32 but do NOT exist in PB11-00x32:

File

Purpose

Notes

basedim.lsp

Standalone horizontal dimension row engine

464-line body IDENTICAL to nested basedim defun inside drawdim.lsp — bug fixes must go in both

bolt.lsp

J-bolt block insertion engine

518 lines; 2 code paths (lbvar vs tpvar); known fragile UCS manipulation

dreng.lsp

Dayton/Richmond .pdx exporter

TB11 adds this exporter format

drwbas.lsp

Standalone drwbas(z) dim string helper

Extracted from nested defun in drawdim.lsp

drawdimlst.lsp

Global-variable dim routing via dmlst

ORPHANED — zero callers; tech debt

editbx.lsp

Edit box feet-and-inches validator

Used only by wall_dlg.lsp

csv_diag.lsp

Diagnostic dump command CSVDIAG

Created Mar 11 2026 for Bug 63 investigation

csv_help.lsp

Platform-safe help wrapper

Win10 compatibility (hh.exe for CHM); created 2026/03/06

csvcompat.lsp

AutoCAD version detection functions

csv_acad-version, csv_is-cui-era, csv_is-ribbon-era; v11.01 modernization addition

csvtech.lsp

Tech Support issue submission

Opens GitHub issue form via startapp; TB11 modernization addition; URL-encodes system info

j.lsp

Development source loader (c:j)

Unloads ARX, loads full csvlst, auto-invokes c:csv. Bug: "bolt" entry missing .lsp extension. Not in any production load path.

lyr_dlg.lsp

Layer visibility toggle dialog

Two modes: plyr_dlg (14 panel layers), slyr_dlg (17 site layers). While-loop until Cancel.

makepan.LSP

.pnl data importer (Caesar cipher decryption)

Bugs 75 (fixed), 76 (open: variable list divergence), 77 (open: V3.60 version check rejects TB11 panels)

okcanhlp.lsp

Universal OK/Cancel/Help callback router

Routes 42+ dialogs via 2-char codes; TB11 externalises VLX-compiled routing

project.lsp

Project Selection dialog

TB11 source replacement for VLX-compiled project routing. Known issues: getfiled dummy-filename workaround, dcl_id28 global leak.

progopts.lsp

Program Options dialog (14 buttons)

TB11 source replacement for VLX md_dlg “Program Options”. Context-sensitive: 7 buttons grayed when no project open.

pointmap.lsp

Debug hatch script for jlst obstruction boxes

TB11-ONLY. Not a defun — executes on load. No callers found. Debug artifact.

test.lsp

Panel Credit System (pcms.arx) test harness

TB11-ONLY. Loads pcms.arx/pcms2.arx, loops DecrementPanelCredit. Not in any production path.

wcedlst.lsp

Weld connection editor list validation

TB11-ONLY. Part of wc_edit subsystem. Validates new/mod/del, duplicate check, confirms delete via warning dialog.

wcmod.lsp

Weld connection modify/commit

TB11-ONLY. Commits del/mod/sto/new operations to wcl catalog. Calls wclist to rebuild display lists.

mbeng.lsp

Meadow-Burke .txt engineering exporter

TB11-ONLY (compiled into csv.vlx in PB11). Entity type map P/R/C/A/T/L. Nested trtos (inches→feet). Dead stupidvar3, debug j=engvar.

mbread.lsp

Meadow-Burke .txt material book importer

TB11-ONLY (compiled into csv.vlx in PB11). Fixed-width field parser, same TCA DEMO approval bypass as engimp/drread.

wsbeng.lsp

WSB Engineering .pan engineering exporter

TB11-ONLY (compiled into csv.vlx in PB11). Pipe-delimited raw inches. Dead M/G cond branches, wsbeng_dlg.dcl orphaned, hardcoded unknowns.

csvcompat.lsp — Version Detection API

Function

Threshold

Purpose

csv_acad-version

Returns (atof (getvar "ACADVER")) — e.g. 15.0, 24.0

csv_is-cui-era

≥ 16.2

AC2006+ (CUI replaced MNU menus)

csv_is-ribbon-era

≥ 18.0

AC2010+ (Ribbon UI, need MENUBAR=1)

ACADVER reference table (15.x = 2000/2000i/2002 … 25.x = 2025-2026).


Known Issues & Gaps (v11 vs v7)

Bugs Fixed in TB11

Bug

Summary

Fix

16

layout.lsp serializes ENAMEs (session-only) in conslist.txt

Open — re-layout after file reload fails

17

layout.lsp index mismatch xn vs nn

Fixed in TB11

18

progcont routing broken in source mode

Documented; requires md_dlg rewrite

31

Modal alert on VLX reload

csv_silent_load suppresses alerts during reload

35

VLX loading via wrong function

acaddoc.lsp uses (load) not (arxload)

47

pl_dlg routing error

csv.lsp progcont 262657 fixed

48

matl_dlg fails without panelvar

csv.lsp calls panatt first

49

revision.lsp crashes on nil rev

Guard clause + inline UPDATE block read

63

Site dictionary key mismatch

All reads check both “site” and “site_list”

73

mp_dlg.dcl missing VLX features

DCL reconstructed March 2026

75

makepan.LSP mpnbmprb variable name

Fixed in TB11

76

makepan.LSP hardcoded variable lists diverge from convert.lsp

Open — nbvar/rbvar + bpvar/ppvar divergence

77

makepan.LSP V3.60 version check rejects TB11-created panels

Open — TB11 stamps V2.25, check expects V3.60

81

convert.lsp static defaults miss VLX-added keys

Known tech debt — no fix yet

Stubs (Not Implemented)

Feature

File

Status

Footings (site)

footing.lsp

“Not available in this release” alert; clears pnl flag

Column Pads (site)

column.lsp

“Not available in this release” alert; clears pnl flag

Weld (site)

weld.lsp

“Not available” alert; TB11 difference vs PB11: TB11 returns (princ) leaving pnl intact; PB11 cleared pnl=nil

Registration

csvreg

Compiled-only, non-functional in source mode

Features Present in v7 VLX but Not in TB11 Source

  • progcont-based routing — VLX md_dlg reads progcont bitmask; source md_dlg ignores it

  • Registration/SOTM credit system — removed since v7.0

  • Error handler with work recovery — removed since v7.0

  • System variable preservation — 40+ sysvars hardcoded, no restore on exit

Known Code Quality Issues

  • Duplicate code: basedim.lsp body is identical to nested defun in drawdim.lsp — bug fixes must be applied to both

  • Dead code: drawdimlst.lsp (zero callers), commented-out btchcan_dlg in btch.lsp, dead parameter a in brace.lsp and pick.lsp

  • Global pollution: virtually all local variables in all dialogs use (set 'var ...) instead of (/ var) locals — massive global namespace pollution

  • Hardcoded TCA DEMO approval: all 4 engineering importers bypass licence decryption

  • Orphaned drawdimlst.lsp: not in PB11, zero callers in TB11 — candidate for deletion


File Inventory Summary

Category

Count

.lsp files (root)

126

.dcl files (root)

49

Panel feature dialogs

21 (bp, pp, ch, dl, dr, fh, fv, fs, ts, lb, ll, pl, ro, rb, sb, sd, ss, tp, nb, wd, wc)

Site feature dialogs

4 (grid, wall, slab, slope)

Core routing dialogs

4 (md, mp, site, sdwg)

Framework helpers

15+ (enable, slide, rangchck, err, updvar, okcanhlp, panatt, convert, pj_name, editbx, chrchk, dbchk, dirchk…)

Drawing/geometry

15+ (drawpan, finpan, panel, inspanel, points, brace, feature, chamfer, green, bolt, dowels, centgrav, drawdim, basedim, drwbas…)

Engineering I/O

8 (engexp, engimp, dreng, drread, mbeng, mbread, wsbeng, wsbread)

Stubs

3 (footing, column, weld)

TB11-only additions

23 (basedim, bolt, dreng, drwbas, drawdimlst, editbx, csv_diag, csv_help, csvcompat, csvtech, j, lyr_dlg, makepan, mbeng, mbread, okcanhlp, project, progopts, pointmap, test, wcedlst, wcmod, wsbeng)

Dev-only (TB11)

2 (j.lsp, test.lsp)


About ConstructiVision

Version: 11.nn (TB11-01x32)
Source: src/x32/TB11-01x32/

ConstructiVision, Inc.
17010 9th Avenue SE
Mill Creek, WA 98012
USA