46 — AutoLISP API Deprecation & Breakage Risk Reference¶
Note
This document catalogs every deprecated, removed, or silently-changed AutoLISP function, sysvar, and API surface since AutoCAD 2000 (R15). Use this as a pre-commit risk checklist when writing or reviewing AutoLISP code. Cross-reference against 30 — AutoCAD Evolution Analysis: Version-by-Version Impact on ConstructiVision for version-sequenced context and Bug Tracker — Validation Campaign for known ConstructiVision bugs rooted in these changes.
1. Dead Functions — Hardware Feature Removed¶
These functions still parse and may return nil without error, but target hardware or UI infrastructure that no longer exists.
Function |
Lost Since |
Why |
|---|---|---|
|
~2014 |
Digitizing tablet support removed. Calibration calls accepted but affect nothing. |
|
2006 |
Screen menu tile areas removed with CUI migration. Positive slot writes silently no-op. Slot |
|
~2000s |
|
|
~R14 |
Switched to graphics screen in dual-screen pre-R14 mode. Unified single-window UI since R14 — no-op. |
|
~R14 |
Switched to text screen — same. |
|
~R14 |
Cleared and displayed the text screen — same. |
Risk for ConstructiVision: Low. None of these appear in TB11 source. Old startup code in
customer customizations may still call grtext — document as a known no-op if raised.
2. VBA Removal — Broken on 2025+¶
Function |
Broken Since |
Notes |
|---|---|---|
|
AutoCAD 2025 |
Loaded a |
|
AutoCAD 2025 |
Ran a named VBA macro. Same — calls into a runtime that no longer exists. |
Risk for ConstructiVision: Low. CV does not use VBA. Risk exists only in customer environments where CV coexists with VBA-dependent customizations.
3. ActiveX / COM — Crashes .NET Core Runtime (2025+)¶
Warning
This is the highest-severity breakage in the entire deprecation surface. These functions are
NOT removed from the AutoLISP reference — they are silently broken at runtime. Code that worked
correctly on AutoCAD 2000–2024 throws ACCESS_VIOLATION (0xC0000005) in coreclr.dll on
AutoCAD 2025+. See Bug 93, DFMEA-035.
Unsafe — Crash on 2025+¶
Function / Pattern |
Notes |
|---|---|
|
COM property access — crashes |
|
Entry point for COM object model — crashes |
|
COM property dispatch — crashes |
|
COM property write — crashes |
|
COM method call — crashes |
|
Creates COM object instance — crashes |
|
All COM property and method calls — crashes |
Safe on All Versions¶
Function |
Notes |
|---|---|
|
Loads the VLISP COM runtime module — safe. The objects it enables are unsafe, not this loader. |
|
VLISP built-in returning a registry path string — not a COM call. |
|
Geometric utility functions — not COM dispatch. |
|
Safearray data structure helpers — not COM dispatch. |
|
Transformation matrix helpers — not COM dispatch. |
Mandatory Guard Pattern¶
Defined in csvcompat.lsp. Use before any vla-* or COM-chain call:
;; csv_is-dotnet-core returns T when ACADVER >= 25.0
(if (not (csv_is-dotnet-core))
(progn
(vl-load-com)
(vla-some-method ...)
)
;; .NET Core safe fallback — use (command ...) instead
(command "_.COMMANDNAME" ...)
)
Preferred alternative for ALL versions: (command "_.CMD" ...) with filedia=0.
Works universally from AutoCAD 2000 through 2027+. No VLA fallback needed.
4. Memory Management — No-Ops Since ~R15¶
These were performance tuning knobs for the fixed node-pool LISP heap used in R10–R14. AutoCAD 2000 (R15) introduced dynamic heap management — these functions are accepted but have no effect. They are a maintenance hazard because they signal intent that is never honored.
Function |
Old Purpose |
Current Behavior |
|---|---|---|
|
Pre-allocate LISP node segments |
No-op |
|
Expand node pool by N segments |
No-op |
|
Report node/string pool statistics |
Returns data; values are meaningless on dynamic heap |
|
Force garbage collection |
Runtime GCs automatically; calling this never hurts but never helps either |
Risk for ConstructiVision: Low. Remove any instances on sight — they signal a cargo-cult copy from pre-R15 startup code and may confuse future maintainers.
5. Superseded Functions — Valid But Wrong for New Code¶
Still functional, but there is a better option that should be used in all new code.
Old Function |
Problem |
Use Instead |
|---|---|---|
|
Returns human-readable string |
|
|
Writes to |
NOD XRecords ( |
|
Reads from |
Same replacements as |
|
Forced next |
|
7. Sysvar Breakages — Dimension Variables¶
These are the most dangerous category for ConstructiVision because the product generates dimensions. Silent data corruption risk: old code writing the old sysvar writes to a live but ignored variable; the controlling sysvar holds a stale or default value.
Superseded in AutoCAD 2002¶
Old Sysvar |
Replaced By |
Breaking Detail |
|---|---|---|
|
|
The 6-state fit scale was split into two orthogonal controls. Mapping is not 1:1. Old code writing |
|
|
Stacked fractions added as format 4, shifting all values above it by one slot. |
|
|
|
Added in AutoCAD 2002 — Did Not Exist in R2000¶
Sysvar |
Notes |
|---|---|
|
Controls tolerance decimal places independently of |
Behavior Changed — DIMSCALE = 0 (AutoCAD 2008)¶
In AutoCAD 2000–2007: DIMSCALE = 0 was effectively undefined — no documented behavior,
should never be set intentionally.
In AutoCAD 2008+: DIMSCALE = 0 became the annotative dimension flag. Setting it
enables annotative scaling for the current dimension style.
Breaking pattern:
;; R2000-era guard treating 0 as "bad input":
(if (= (getvar "DIMSCALE") 0)
(setvar "DIMSCALE" 1) ; "fix" corrupted value
)
;; On 2008+, this guard destroys a legitimately set annotative style
;; by resetting it to non-annotative.
8. Sysvar Breakages — Frame Variables (Silent Ternary Expansion)¶
These changed from binary (0/1) to ternary (0/1/2) to support “display but do not plot”
as a third state. Old code testing (= (getvar "IMAGEFRAME") 1) misses state 2 and
treats a visible-but-not-plotted frame as if frames are off.
Sysvar |
Old Range |
New Range |
Since |
|---|---|---|---|
|
0/1 |
0/1/2 |
~2007 |
|
0/1 |
0/1/2 |
~2007 |
|
0/1 |
0/1/2 |
~2009 |
|
— |
0/1/2 |
2010 (new) |
|
— |
0/1/2 |
2010 (new) |
Risk for ConstructiVision: Moderate. CV uses image entities (site photos, panel diagrams).
Any code that sets or tests IMAGEFRAME must use > 0 rather than = 1 to correctly
detect “frames visible.”
9. Sysvar Removals — Throws on Modern AutoCAD¶
These sysvars no longer exist. Calling (setvar "BLIPMODE" 0) on a modern AutoCAD
throws error: unknown variable name. This pattern is common in old startup code
that tries to clean up drawing state.
Sysvar |
Removed |
Notes |
|---|---|---|
|
~2006 |
Blip marks feature removed. |
|
~2010 |
Suppressed menu macro echo to command line. Menu architecture gone. |
Safe pattern for old startup code that may run on multiple versions:
(vl-catch-all-apply 'setvar '("BLIPMODE" 0))
(vl-catch-all-apply 'setvar '("MENUECHO" 0))
10. Quick Risk Triage Checklist¶
Use this checklist on any .lsp file before committing.
Instant FAIL — remove or guard immediately¶
Any
vla-*method call without acsv_is-dotnet-coreguardAny
vlax-get-acad-object/vlax-create-objectcall without guardvl-vbaloadorvl-vbarun(setvar "BLIPMODE" ...)or(setvar "MENUECHO" ...)outside avl-catch-all-apply(setvar "DIMFIT" ...)— writes a superseded sysvar(setvar "DIMUNIT" ...)— writes a superseded sysvar(= (getvar "IMAGEFRAME") 1)— misses ternary state 2
Needs review before committing¶
tabletcall — confirm intentional or removegrtextwith positive slot index — confirm or removesetcfg/getcfg— replace with NOD XRecord or registry callalloc/expand/mem— remove (cargo-cult no-ops)ver— replace with(getvar "ACADVER")(setvar "DIMSCALE" ...)— verify value is never 0 unless annotative style is intended(= (getvar "DIMASO") ...)— replace with(getvar "DIMASSOC")
11. Coverage Gaps¶
This document covers three of four API surfaces. The fourth requires separate research:
Surface |
Coverage |
|---|---|
AutoLISP functions |
✅ Covered (Sections 1–6) |
System variables |
✅ Covered (Sections 7–9) |
DXF group code changes per entity type |
❌ Not yet documented — required before entmake/entmod refactor |
ARX/ObjectARX behavior affecting |
❌ Not applicable to current CV build (no |
DXF group code changes are tracked as a prerequisite in XData Refactor Plan — Eliminate Text File Serialization.
Last Updated: May 5, 2026