CSV.VLX - Visual LISP Compiled Binary Analysis

File: src/x86/v3_60/v3.60/Csv.VLX
Size: 1,103,600 bytes (1.05 MB)
Format: Visual LISP eXecutable (VLX)
Compiler: AutoCAD R15.0 (AutoCAD 2000) VLISP compiler

Note

VLX File Structure

VLX files are compiled Visual LISP applications. Unlike standard ZIP archives, this VLX uses a custom compression format (VRTLIB-1 header) with protected bytecode. The file contains compiled FAS (Fast-load AutoLISP) modules and cannot be directly decompiled without specialized tools.


File Header Analysis

Magic Bytes (first 16 bytes, hex):

5652544c49422d31 e0d61000a3070000

Header Signature: VRTLIB-1 (Visual Runtime Library, version 1)

Protection Mode: :protected . T (Protected/encrypted compilation)
ActiveX Support: :active-x . T (Uses ActiveX/COM features)
Namespace: :separate-namespace (Isolated from global AutoLISP)


Module Structure (from LOAD directive)

The VLX contains 109 compiled FAS modules organized by functionality:

Core Application Modules

(:fas "CSV")        ; Main application entry point
(:fas "ENABLE")     ; Feature enable/disable logic
(:fas "SETVARS")    ; System variable management
(:fas "UPDVAR")     ; Variable update routines
(:fas "ERR")        ; Error handling
(:fas "WARNING")    ; Warning messages

Project Management

(:fas "PROJECT")    ; Project file management
(:fas "PJ_NAME")    ; Project naming
(:fas "NEW")        ; New project creation
(:fas "DWGNEW")     ; New drawing setup
(:fas "DWGOLD")     ; Legacy drawing compatibility

Panel Drawing & Layout

(:fas "PANEL")      ; Panel definition
(:fas "DRAWPAN")    ; Panel drawing generation
(:fas "MAKEPAN")    ; Panel creation logic
(:fas "INSPANEL")   ; Insert panel into drawing
(:fas "FINPAN")     ; Finalize panel
(:fas "RENPAN")     ; Rename panel
(:fas "PANATT")     ; Panel attributes

Dialog Boxes (DCL/ActiveX)

The VLX includes 40+ dialog modules following the *_DLG naming pattern:

Base/Foundation Dialogs:

(:fas "BP_DLG")     ; Base plate dialog
(:fas "FH_DLG")     ; Foundation head dialog
(:fas "FS_DLG")     ; Foundation slab dialog
(:fas "FV_DLG")     ; Foundation void dialog

Panel Dialogs:

(:fas "PP_DLG")     ; Panel parameters dialog
(:fas "SLAB_DLG")   ; Slab panel dialog
(:fas "WALL_DLG")   ; Wall panel dialog
(:fas "RO_DLG")     ; Roof panel dialog

Feature Dialogs:

(:fas "CH_DLG")     ; Chamfer dialog
(:fas "DL_DLG")     ; Dowell/lift dialog
(:fas "DR_DLG")     ; Dowell/rebar dialog
(:fas "MP_DLG")     ; Mix profile dialog
(:fas "OPENING")    ; Opening (window/door) dialog

Material & Connection Dialogs:

(:fas "MATL_DLG")   ; Material properties dialog
(:fas "WC_DLG")     ; Weld connection dialog
(:fas "WC_EDIT")    ; Weld connection editor
(:fas "WD_DLG")     ; Weld detail dialog

Batch & Calculation Dialogs:

(:fas "BTCH_DLG")   ; Batch operations dialog
(:fas "CALC_DLG")   ; Calculations dialog
(:fas "GRID_DLG")   ; Grid layout dialog
(:fas "LYR_DLG")    ; Layer management dialog
(:fas "SDWG_DLG")   ; Setup drawing dialog

Drawing & Dimensioning

(:fas "DRAWDIM")    ; Dimension drawing
(:fas "drawdimlst") ; Dimension list (lowercase = helper)
(:fas "BASEDIM")    ; Base dimensioning
(:fas "DRWBAS")     ; Drawing base setup
(:fas "LAYOUT")     ; Layout management
(:fas "SLIDE")      ; Slide file generation
(:fas "PLT")        ; Plot/print

Feature Generation

(:fas "BOLT")       ; Bolt placement
(:fas "BRACE")      ; Bracing elements
(:fas "CHAMFER")    ; Chamfer edges
(:fas "COLUMN")     ; Column placement
(:fas "DOWELS")     ; Dowel placement
(:fas "FOOTING")    ; Footing generation
(:fas "MITER")      ; Miter joints
(:fas "OPENING")    ; Openings (windows/doors)
(:fas "WELD")       ; Weld symbols
(:fas "WELDCONN")   ; Weld connections

Engineering Calculations

(:fas "CENTGRAV")   ; Center of gravity
(:fas "FEATURE")    ; Feature calculations
(:fas "POINTS")     ; Point calculations
(:fas "THICK")      ; Thickness calculations

Data Import/Export

(:fas "dreng")      ; Drawing engineering data (lowercase = utility)
(:fas "drread")     ; Drawing read
(:fas "mbeng")      ; Main book engineering
(:fas "mbread")     ; Main book read
(:fas "wsbeng")      ; Work set book engineering
(:fas "wsbread")    ; Work set book read
(:fas "engexp")     ; Engineering export
(:fas "engimp")     ; Engineering import

Automation & Batch Operations

(:fas "BTCH")       ; Batch processing
(:fas "BPAUTO")     ; Base plate automation
(:fas "PPAUTO")     ; Panel placement automation
(:fas "PPCENT")     ; Panel placement center

Validation & Checking

(:fas "CHRCHK")     ; Character check
(:fas "DBCHK")      ; Database check
(:fas "DIRCHK")     ; Directory check
(:fas "RANGCHCK")   ; Range check (note: typo in original)

List Management & Sorting

(:fas "NEWLIST")    ; New list creation
(:fas "WCLIST")     ; Weld connection list
(:fas "WCEDLST")    ; Weld connection edit list
(:fas "STRLSORT")   ; String list sort

Block & Attribute Management

(:fas "MKBLK")      ; Make block
(:fas "nbblock")    ; Note block (lowercase = utility)
(:fas "nb_dlg")     ; Note block dialog
(:fas "nbenable")   ; Note block enable

Revision & Markup

(:fas "REVISION")   ; Revision control
(:fas "DONEREV")    ; Done revision
(:fas "ELEVMRKR")   ; Elevation marker

Page & Layout Management

(:fas "FPAGE")      ; Foundation page
(:fas "WCPAGE")     ; Weld connection page
(:fas "WDPAGE")     ; Weld detail page

Helper Modules

(:fas "editbx")     ; Edit box utility (lowercase = helper)
(:fas "native")     ; Native code interface
(:fas "OKCANHLP")   ; OK/Cancel/Help button helper
(:fas "PICK")       ; Entity picking
(:fas "SAVELAY")    ; Save layer state
(:fas "GREEN")      ; Green mode (?)
(:fas "INVAR")      ; Input variable
(:fas "SCR")        ; Script generation
(:fas "CONVERT")    ; Data conversion
(:fas "TILTUP")     ; Tilt-up specific features

Naming Convention Notes:

  • UPPERCASE .fas names = Main modules

  • lowercase .fas names = Helper/utility modules

  • *_DLG suffix = Dialog box modules

  • *_EDIT suffix = Editor modules

  • *enable suffix = Enable/disable feature modules

  • *read / *eng = Data I/O modules


Technical Observations

1. Protection & Security

  • Protected Compilation: :protected . T means source code is encrypted

  • Cannot be decompiled without AutoCAD’s internal VLISP tools

  • FAS bytecode is proprietary to AutoCAD’s Visual LISP interpreter

2. ActiveX/COM Integration

  • ActiveX Enabled: :active-x . T indicates use of COM objects

  • Likely used for:

    • AutoCAD object model access

    • Dialog box creation (Visual LISP DCL vs ActiveX forms)

    • External application integration (Excel, Access, etc.)

3. Namespace Isolation

  • Separate Namespace: :separate-namespace prevents global pollution

  • Functions defined in VLX don’t conflict with user’s AutoLISP code

  • Must be explicitly loaded/unloaded

4. Module Count

  • 109 FAS files compiled into single VLX

  • Organized by feature domain (dialogs, drawing, calculations, etc.)

  • Modular architecture allows selective loading

5. File Size Distribution

  • Total VLX: 1,103,600 bytes (1.05 MB)

  • Average per FAS: ~10 KB

  • Suggests most FAS files are small to medium dialog/utility modules

  • Larger modules likely: CSV.FAS (main), PANEL.FAS, DRAWPAN.FAS


Comparison with v7.0 VLX

v3.60 VLX:

  • Size: 1,103,600 bytes (1.05 MB)

  • Modules: 109 FAS files

  • Format: VRTLIB-1

v7.0 VLX (for comparison):

  • Size: 813,096 bytes (794 KB)

  • Modules: Unknown (requires separate analysis)

  • 26% smaller than v3.60

Hypothesis: v7.0 may have:

  • Removed obsolete modules

  • Optimized/compressed FAS files

  • Removed sample/demo code

  • Consolidated duplicate functions


Decompilation Possibilities

Option 1: Official AutoCAD VLISP

If you have AutoCAD 2000 with Visual LISP:

; In AutoCAD command line
(vl-load-vlx "Csv.vlx")  ; Load the VLX
(vlax-dump-object (vlax-get-acad-object))  ; Inspect loaded functions

Option 2: Extract Individual FAS Files

VLX is compressed with a custom algorithm. Possible approaches:

  1. Custom VLX Extractor - Reverse engineer VRTLIB-1 format

  2. AutoLISP VLX-UNPROT - Third-party tools (risky, may not work on protected VLX)

  3. Binary Analysis - Locate FAS boundaries in hex editor

Option 3: Runtime Inspection

Since we have source code for v3.60 LISP files in src/x86/v3_60/v3.60/, we can:

  • Compare function names in source vs VLX string table

  • Validate that VLX contains compiled versions of known modules

  • Identify any modules NOT in the source tree (proprietary/lost?)


Analysis Tools

Created: scripts/analyze-vlx.ps1 - PowerShell VLX analyzer
Usage: .\scripts\analyze-vlx.ps1 -VlxPath "path\to\file.vlx"

Features:

  • Attempts VLX extraction (if unprotected)

  • Lists FAS modules from LOAD directive

  • Extracts readable strings (function names, messages)

  • Identifies file format and protection level



Document Metadata

Created: 2025
Analysis Method: Binary string extraction + VLX header parsing using analyze-vlx.ps1
Limitations: Cannot decompile protected FAS bytecode without specialized tools
Completeness: Module list complete (109 modules identified); internal logic remains opaque

Next Steps:

  1. Map FAS modules to LSP source files in src/x86/v3_60/v3.60/

  2. Identify missing source code for modules without LSP files

  3. Test VLX loading on AutoCAD 2020/2024/2026

  4. Plan recompilation or migration strategy for P3


End of Document