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

tablet

~2014

Digitizing tablet support removed. Calibration calls accepted but affect nothing.

grtext (positive slot indices)

2006

Screen menu tile areas removed with CUI migration. Positive slot writes silently no-op. Slot -1 (status bar) behavior varies by version — test before using.

slide_image

~2000s

.sld slide files are a pre-R14 format. MSLIDE still exists but no current tooling produces slides. Function works if you have a .sld file; you never will.

graphscr

~R14

Switched to graphics screen in dual-screen pre-R14 mode. Unified single-window UI since R14 — no-op.

textscr

~R14

Switched to text screen — same.

textpage

~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

vl-vbaload

AutoCAD 2025

Loaded a .dvb VBA project. VBA was optionally installable from 2014; fully removed in 2025. Throws on 2025+.

vl-vbarun

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

vla-get-ActiveDocument

COM property access — crashes

vlax-get-acad-object

Entry point for COM object model — crashes

vlax-get-property

COM property dispatch — crashes

vlax-put-property

COM property write — crashes

vlax-invoke-method

COM method call — crashes

vlax-create-object

Creates COM object instance — crashes

vla-* (any property/method)

All COM property and method calls — crashes

Safe on All Versions

Function

Notes

vl-load-com

Loads the VLISP COM runtime module — safe. The objects it enables are unsafe, not this loader.

vlax-product-key

VLISP built-in returning a registry path string — not a COM call.

vlax-curve-*

Geometric utility functions — not COM dispatch.

vlax-safearray-*

Safearray data structure helpers — not COM dispatch.

vlax-tmatrix

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

alloc

Pre-allocate LISP node segments

No-op

expand

Expand node pool by N segments

No-op

mem

Report node/string pool statistics

Returns data; values are meaningless on dynamic heap

gc

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

ver

Returns human-readable string "AutoCAD VLISP 16.1" — format is not stable

(getvar "ACADVER") — returns parseable string like "25.0"

setcfg

Writes to acad.cfg — file location moved in 2014+; writes may be ignored

NOD XRecords (dictadd/dictsearch) for drawing data; vl-registry-write for profile data

getcfg

Reads from acad.cfg — values may not be present on modern profiles

Same replacements as setcfg

initdia

Forced next (command ...) call to show file dialog regardless of FILEDIA

(setvar "FILEDIA" 1) before the call, or design to the default dialog-on behavior



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

DIMFIT (0–5)

DIMATFIT (0–3) + DIMTMOVE (0–2)

The 6-state fit scale was split into two orthogonal controls. Mapping is not 1:1. Old code writing (setvar "DIMFIT" 3) is accepted without error but the actual behavior is controlled by DIMATFIT/DIMTMOVE, not DIMFIT.

DIMUNIT (1–5)

DIMLUNIT (1–6)

Stacked fractions added as format 4, shifting all values above it by one slot. DIMUNIT 4 (architectural) ≠ DIMLUNIT 4 (fractional). Old code reads back wrong format.

DIMASO (0/1)

DIMASSOC (0/1/2)

DIMASSOC gained a third state (1 = exploded but retaining definition points). Old (setvar "DIMASO" 1) maps to DIMASSOC 2, not DIMASSOC 1. Code testing for associativity with (= (getvar "DIMASO") 1) reads a deprecated var and may get a wrong answer.

Added in AutoCAD 2002 — Did Not Exist in R2000

Sysvar

Notes

DIMTDEC

Controls tolerance decimal places independently of DIMDEC. R2000 code that used DIMDEC to control tolerance decimal display is now only controlling dimension text decimals — tolerance display precision is governed separately.

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

IMAGEFRAME

0/1

0/1/2

~2007

XCLIPFRAME

0/1

0/1/2

~2007

WIPEOUTFRAME

0/1

0/1/2

~2009

PDFFRAME

0/1/2

2010 (new)

DGNFRAME

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

BLIPMODE

~2006

Blip marks feature removed.

MENUECHO

~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 a csv_is-dotnet-core guard

  • Any vlax-get-acad-object / vlax-create-object call without guard

  • vl-vbaload or vl-vbarun

  • (setvar "BLIPMODE" ...) or (setvar "MENUECHO" ...) outside a vl-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

  • tablet call — confirm intentional or remove

  • grtext with positive slot index — confirm or remove

  • setcfg / getcfg — replace with NOD XRecord or registry call

  • alloc / 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 arxload-based utilities

❌ Not applicable to current CV build (no .arx dependencies)

DXF group code changes are tracked as a prerequisite in XData Refactor Plan — Eliminate Text File Serialization.


Last Updated: May 5, 2026