ConstructiVision v3.60 Installer File Dependencies Analysis

Installer File: setup.ins (62,596 bytes)
Decompiled Source: setup.rul (108,922 bytes, 3,707 lines)
Target Example: AutoCAD 2000 installation
Date of Analysis: 2025


Executive Summary

The ConstructiVision v3.60 installer (setup.ins) orchestrates a complex dance of file reading, data extraction, processing, and writing across multiple locations. This document maps all file dependencies, data flows, and transformation processes.

Key Finding: The installer reads configuration from 5 sources, extracts installation paths and menu structures, and writes to 3 destinations (file system, acad.rx, Windows Registry).


Installation Package Structure

Files in the Installer Package

The installer is distributed as a CD-ROM or download with these files:

v3_60\                          (Installation Media Root)
??? Setup.exe                   (71,680 bytes - InstallShield launcher)
??? setup.ins                   (62,596 bytes - Compiled installer script)
??? setup.rul                   (108,922 bytes - Decompiled source, NOT in package)
??? SETUP.INI                   (99 bytes - Launcher configuration)
??? Setup.bmp                   (1,440,054 bytes - Welcome screen graphic)
??? Readme.txt                  (8,496 bytes - User documentation)
??? Autorun.inf                 (27 bytes - CD autorun configuration)
?
??? data1.cab                   (2,644,300 bytes - MAIN APPLICATION FILES)
??? data1.hdr                   (6,947 bytes - CAB file metadata)
??? DATA.TAG                    (100 bytes - Installation marker)
?
??? _sys1.cab                   (175,312 bytes - InstallShield system files)
??? _sys1.hdr                   (3,999 bytes - System CAB metadata)
??? _user1.cab                  (5,572 bytes - User interface resources)
??? _user1.hdr                  (4,387 bytes - User CAB metadata)
?
??? _INST32I.EX_                (297,989 bytes - 32-bit installer engine)
??? _ISDel.exe                  (27,648 bytes - Uninstaller helper)
??? _Setup.dll                  (34,816 bytes - Setup DLL)
?
??? lang.dat                    (4,484 bytes - Language/localization data)
??? layout.bin                  (650 bytes - UI layout information)
??? os.dat                      (434 bytes - OS compatibility data)
??? setup.lid                   (44 bytes - License ID)

data1.cab Contents (Application Files)

The data1.cab file (2.6 MB) contains all ConstructiVision application files. Based on the Readme.txt, this includes:

For AutoCAD 2000 Installation:

data1.cab
??? csv.vlx                     (Visual LISP executable - main program for 2000)
??? pcms.arx                    (ARX module - cost management)
??? pcms2.arx                   (ARX module - extended cost features)
??? csv.hlp                     (Help file)
??? csv.mnc                     (Compiled menu)
??? csv.mnr                     (Menu resource file)
??? csv.mns                     (Menu source file)
??? csv.mnu                     (Menu template file)
??? csvmenu.lsp                 (Menu loader script)
??? Manual.rtf                  (User manual)
??? Wincss.exe                  (Registration manager)
??? Uninst.isu                  (Uninstaller configuration)
??? [Sample Files]              (Optional, see below)
    ??? Btch.scr                (Batch utilities script template)
    ??? CSS001.dwg through CSS017.dwg  (Sample panel drawings)
    ??? CSSsite.dwg             (Sample site drawing)
    ??? Mprop.mpr & Mprop.scr   (Mass properties templates)
    ??? Panel.scr               (Panel script template)
    ??? Pnllist.txt             (Panel list)
    ??? [xx]clist.txt           (Entity list data)
    ??? [xx]Tlist.txt           (Tilt-up entity data)
    ??? Wcl.txt                 (Weld connection definitions)
    ??? Wclsave.txt             (Weld connection backup)

Note: AutoCAD R14 installations would include csv.arx instead of csv.vlx as the main program file.


Files the Installer READS (Dependencies)

1. String Table (Embedded in setup.ins)

Source: Internal to setup.ins compiled bytecode
Access Method: StrLoadString("", "STRING_ID", variableName)
Purpose: Localized text strings for UI, error messages, registry keys

Strings Loaded:

String ID

Purpose

Example Value

PRODUCT_NAME

Product display name

“ConstructiVision”

COMPANY_NAME

Publisher name

“ConstructiVision” or company name

PRODUCT_VERSION

Version string

“3.60”

PRODUCT_KEY

Registry base path

“SOFTWARE\ConstructiVision\v3.60”

UNINST_KEY

Uninstall registry path

Base key for uninstaller

UNINST_DISPLAY_NAME

Control Panel display

“ConstructiVision for AutoCAD “

TITLE_MAIN

Installer window title

“ConstructiVision Installer”

TITLE_CAPTIONBAR

Caption bar text

“ConstructiVision Setup”

ERROR_VGARESOLUTION

Resolution error

“Requires 800x600 resolution”

ERROR_16BITSETUP

OS bitness error

“Requires 32-bit Windows”

ERROR_ACADRUNNING

Process detection

“AutoCAD is running. Please close…”

ERROR_UNINSTSETUP

Uninstaller creation fail

“Unable to create uninstaller”

ERROR_ACADMENU

Menu modification fail

“Unable to modify AutoCAD menu”

ERROR_MOVEDATA

File copy error

“Error copying files”

ERROR_COMPONENT

Component install error

“Error installing component”

Example Usage:

StrLoadString("", "PRODUCT_NAME", lString0)
// lString0 now contains "ConstructiVision"

2. license.txt (License Agreement)

Source: SUPPORTDIR ^ "license.txt"
Location on Media: Inside _user1.cab or data1.cab
Read By: function104 ? function27
Purpose: Display license agreement dialog during installation

File Format: Plain text file
Size: Estimated 2-10 KB
Content: Software license terms, warranty disclaimers, usage restrictions

Read Method:

lString3 = SUPPORTDIR ^ "license.txt"
function27(titleText, promptText, buttonText, lString3)
// function27 opens file, displays in scrollable dialog
// User must accept to continue

Data Extracted: None (file displayed as-is to user)


3. acad2000.cfg (AutoCAD Configuration File)

Source: User’s file system (searched recursively)
Search Pattern: FindAllFiles(driveRoot, "acad2000.cfg", resultPath, recursive=1)
Purpose: Detect AutoCAD 2000 installation location

File Location: Typically C:\Program Files\AutoCAD 2000\acad2000.cfg

File Format: Plain text INI-style configuration file
Size: ~5-20 KB

Example acad2000.cfg Contents:

[System Variables]
ACADVER="15.06"
ACADPREFIX="C:\Program Files\AutoCAD 2000\Support"
TEMPPREFIX="C:\TEMP\"

[System Paths]
ACAD="C:\Program Files\AutoCAD 2000"
Support="C:\Program Files\AutoCAD 2000\Support"
Fonts="C:\Program Files\AutoCAD 2000\Fonts"
Help="C:\Program Files\AutoCAD 2000\Help"

Data Extracted:

  1. File Path - The directory containing acad2000.cfg reveals AutoCAD root

  2. Installation Directory - Extracted via path parsing

Processing:

FindAllFiles(string14, "acad2000.cfg", string17, 1)
// string14 = drive root (e.g., "C:\")
// string17 = RESULT: full path to acad2000.cfg
// Example result: "C:\Program Files\AutoCAD 2000\acad2000.cfg"

// Extract directory:
string15 = ExtractDirectory(string17)
// string15 = "C:\Program Files\AutoCAD 2000\"

Why This File:

  • AutoCAD 2000 created this file during installation

  • Guaranteed to exist in every AutoCAD 2000 installation

  • Location indicates AutoCAD root directory

  • More reliable than registry (which could be missing or corrupted)


4. acad.rx (ARX Autoload File)

Source: [AutoCAD Root]\acad.rx
Location (AC2000): C:\Program Files\AutoCAD 2000\acad.rx
Read By: Multiple functions during installation
Purpose: Read existing ARX autoload entries, check for conflicts, modify

File Format: Plain text, one ARX path per line

Example acad.rx Contents (Before Installation):

C:\Program Files\AutoCAD 2000\Express\acetutil.arx
C:\Program Files\AutoCAD 2000\Express\acettest.arx
C:\Program Files\AutoCAD 2000\Express\acetmain.arx
C:\Program Files\AutoCAD 2000\Support\SomeOtherApp\other.arx

Read Operations:

  1. Existence Check:

FindFile(TARGETDIR, "acad.rx", string22)
lNumber0 = LAST_RESULT
// Result: 0 if found, negative if not found
  1. Content Search (Check for Existing Entry):

FileGrep("acad.rx", "csv.arx", foundLine, lineNumber, caseSensitive=1)
lNumber0 = LAST_RESULT
// Result: 0 if "csv.arx" found in file, negative if not found
  1. Backup Creation:

CopyFile("acad.rx", "acad._rx")
// Creates: C:\Program Files\AutoCAD 2000\acad._rx

Data Extracted:

  • Existence of ConstructiVision entries (to prevent duplicates)

  • Line numbers of existing entries

  • Full file content (preserved during modification)


5. Windows Registry (AutoCAD Configuration)

Root Key: HKEY_USERS\.Default\Software\Autodesk\Autocad\[Version]\
Example for AC2000: HKU\.Default\Software\Autodesk\Autocad\R15.0\

Read Operations:

  1. Check if Registry Key Exists:

string23 = ".Default\\Software\\Autodesk\\Autocad\\" + string18
// string18 = "R15.0" for AutoCAD 2000
RegDBSetDefaultRoot(HKEY_USERS)  // -2147483645
RegDBKeyExist(string23)
lNumber0 = LAST_RESULT
// Result: 0 if exists, negative if not
  1. Query Subkeys (Enumerate Profiles):

RegDBQueryKey(string23, 1, listHandle)
// Populates listHandle with subkey names
// Example subkeys: "Profiles\Default", "Applications", "Menus"
  1. Read Menu Configuration:

string24 = string23 + "\\Profiles\\" + profileName + "\\Menus"
RegDBGetKeyValueEx(string24, "ACAD", dataType, value, valueSize)
// Reads current menu configuration
// Example value: "acad;express;myapp"
  1. Read Dialogs\Appload\Startup Count:

string25 = string23 + "\\Dialogs\\Appload\\Startup"
RegDBGetKeyValueEx(string25, "NumApps", dataType, countString, valueSize)
StrToNum(number50, countString)
// Determines how many apps are already autoloading

Data Extracted:

  • AutoCAD profile names

  • Current menu group list

  • Existing autoload application count

  • Menu popup structure


6. Component Definitions (MEDIA)

Source: InstallShield MEDIA object (built into setup.ins at compile time)
Purpose: Define what files to copy and where

Access Methods:

ComponentListItems(MEDIA, componentName, listHandle)
ComponentIsItemSelected(MEDIA, itemName)
ComponentTotalSize(MEDIA, componentName, sizeType, flags)
ComponentMoveData(MEDIA, moveFlags, reserved)

Component Structure (Inferred):

MEDIA Object
??? Component: "Core Files" (Always installed)
?   ??? csv.vlx ? [TARGETDIR]\csv.vlx
?   ??? pcms.arx ? [TARGETDIR]\pcms.arx
?   ??? pcms2.arx ? [TARGETDIR]\pcms2.arx
?   ??? csv.mnc ? [TARGETDIR]\csv.mnc
?   ??? csv.mnr ? [TARGETDIR]\csv.mnr
?   ??? csv.mns ? [TARGETDIR]\csv.mns
?   ??? csv.mnu ? [TARGETDIR]\csv.mnu
?   ??? csvmenu.lsp ? [TARGETDIR]\csvmenu.lsp
?   ??? csv.hlp ? [TARGETDIR]\csv.hlp
?   ??? Manual.rtf ? [TARGETDIR]\Manual.rtf
?   ??? Wincss.exe ? [TARGETDIR]\Wincss.exe
?
??? Component: "Sample Files" (Optional, custom install)
    ??? Target: <smpdir> ? [TARGETDIR]\Project Files\CSV Sample Site\
        ??? CSS001.dwg through CSS017.dwg
        ??? CSSsite.dwg
        ??? Btch.scr
        ??? Mprop.mpr, Mprop.scr
        ??? Panel.scr
        ??? Pnllist.txt
        ??? [Various .txt files]

Target Directory Variable:

ComponentSetTarget(MEDIA, "<smpdir>", string21)
// string21 = "C:\Program Files\AutoCAD 2000\Project Files\CSV Sample Site\"

Data Processing & Transformation

Process 1: AutoCAD Path Detection ? Installation Paths

Input: acad2000.cfg file path
Output: Multiple installation path variables

Transformation:

INPUT (from FindAllFiles):
  string17 = "C:\Program Files\AutoCAD 2000\acad2000.cfg"

PROCESSING:
  string15 = ExtractDirectory(string17)
  // string15 = "C:\Program Files\AutoCAD 2000\"
  
  string19 = string15 + "Support\ConstructiVision\"
  // string19 = "C:\Program Files\AutoCAD 2000\Support\ConstructiVision\"
  
  string20 = string15 + "Project Files\"
  // string20 = "C:\Program Files\AutoCAD 2000\Project Files\"
  
  string21 = string20 + "CSV Sample Site\"
  // string21 = "C:\Program Files\AutoCAD 2000\Project Files\CSV Sample Site\"
  
  TARGETDIR = string19
  // Sets installer's global target

OUTPUT PATHS:
  Main Installation: C:\Program Files\AutoCAD 2000\Support\ConstructiVision\
  Sample Files:      C:\Program Files\AutoCAD 2000\Project Files\CSV Sample Site\

Process 2: Version String ? Registry Path

Input: AutoCAD version detection
Output: Registry key paths

Transformation:

INPUT:
  User selected "AutoCAD 2000" in version dialog
  
PROCESSING:
  string18 = "R15.0"  // AutoCAD 2000 internal version
  // (R14 would be "R14.0")
  
  string23 = ".Default\\Software\\Autodesk\\Autocad\\" + string18
  // string23 = ".Default\\Software\\Autodesk\\Autocad\\R15.0"
  
  string24 = string23 + "\\Profiles\\" + profileName + "\\Menus"
  // string24 = ".Default\\Software\\Autodesk\\Autocad\\R15.0\\Profiles\\<<Unnamed Profile>>\\Menus"
  
  string25 = string23 + "\\Dialogs\\Appload\\Startup"
  // string25 = ".Default\\Software\\Autodesk\\Autocad\\R15.0\\Dialogs\\Appload\\Startup"

OUTPUT REGISTRY PATHS:
  Base:     HKU\.Default\Software\Autodesk\Autocad\R15.0\
  Menus:    HKU\.Default\Software\Autodesk\Autocad\R15.0\Profiles\<<Unnamed Profile>>\Menus\
  Startup:  HKU\.Default\Software\Autodesk\Autocad\R15.0\Dialogs\Appload\Startup\

Process 3: Menu Group Name Generation

Input: Installation path
Output: Menu group identifier

Transformation:

INPUT:
  string19 = "C:\Program Files\AutoCAD 2000\Support\ConstructiVision\"
  
PROCESSING:
  lString0 = ExtractFilename(string19)  // Get directory name
  // lString0 = "ConstructiVision"
  
  string26 = lString0 + "csv"
  // string26 = "ConstructiVisioncsv"
  
  // For menu groups:
  string22 = "Group" + someNumber
  // string22 = "Group1" or "Group2" etc.

OUTPUT:
  Menu Group Name: "ConstructiVisioncsv"
  Registry Value Names: "Group1", "Pop1", etc.

Process 4: Autoload Count Increment

Input: Current NumApps registry value
Output: Updated count and new entry positions

Transformation:

INPUT (Read from Registry):
  string27 = "3"  // Current number of autoload apps
  
PROCESSING:
  StrToNum(number50, string27)
  // number50 = 3
  
  number50 = number50 + 1
  // number50 = 4 (first new entry)
  
  NumToStr(string26, number50)
  // string26 = "4"
  
  lString0 = string19 + "pcms2.arx"
  // lString0 = "C:\Program Files\AutoCAD 2000\Support\ConstructiVision\pcms2.arx"
  
  RegDBSetKeyValueEx(string25, string26, REG_SZ, lString0, -1)
  // Sets "4" = "C:\...\pcms2.arx"
  
  number50 = number50 + 1
  // number50 = 5 (second new entry)
  
  NumToStr(string26, number50)
  string26 = string26 + "Startup"
  // string26 = "5Startup"
  
  lString0 = string19 + "csv.vlx"
  RegDBSetKeyValueEx(string25, string26, REG_SZ, lString0, -1)
  // Sets "5Startup" = "C:\...\csv.vlx"
  
  NumToStr(string27, number50)
  RegDBSetKeyValueEx(string25, "NumApps", dataType, string27, -1)
  // Updates NumApps to "5"

OUTPUT (Registry):
  NumApps = "5"
  4 = "C:\Program Files\AutoCAD 2000\Support\ConstructiVision\pcms2.arx"
  5Startup = "C:\Program Files\AutoCAD 2000\Support\ConstructiVision\csv.vlx"

Files the Installer WRITES (Outputs)

1. Application Files (from data1.cab)

Destination: C:\Program Files\AutoCAD 2000\Support\ConstructiVision\

Files Written:

C:\Program Files\AutoCAD 2000\Support\ConstructiVision\
??? csv.vlx                     (100-200 KB - Main program for AC2000)
??? pcms.arx                    (150-300 KB - Cost management module)
??? pcms2.arx                   (100-200 KB - Extended cost module)
??? csv.hlp                     (50-100 KB - Help file)
??? csv.mnc                     (10-20 KB - Compiled menu)
??? csv.mnr                     (5-10 KB - Menu resource)
??? csv.mns                     (5-10 KB - Menu source)
??? csv.mnu                     (5-10 KB - Menu template)
??? csvmenu.lsp                 (2-5 KB - Menu loader LISP script)
??? Manual.rtf                  (500 KB - 2 MB - User manual)
??? Wincss.exe                  (50-100 KB - Registration manager)
??? Uninst.isu                  (2-5 KB - Uninstaller configuration)

Write Method:

TARGETDIR = string19
ComponentMoveData(MEDIA, moveFlags, reserved)
// Extracts files from data1.cab to TARGETDIR

2. Sample Files (Optional)

Destination: C:\Program Files\AutoCAD 2000\Project Files\CSV Sample Site\

Files Written:

C:\Program Files\AutoCAD 2000\Project Files\CSV Sample Site\
??? CSS001.dwg through CSS017.dwg   (17 sample panel drawings, ~50-200 KB each)
??? CSSsite.dwg                     (Sample site drawing, ~500 KB - 1 MB)
??? Btch.scr                        (Batch utilities script, ~1-2 KB)
??? Mprop.mpr                       (Mass properties output, ~1 KB)
??? Mprop.scr                       (Mass properties script, ~1 KB)
??? Panel.scr                       (Panel script template, ~1-2 KB)
??? Pnllist.txt                     (Panel list, ~1-2 KB)
??? [xx]clist.txt                   (Entity list data files, ~2-5 KB each)
??? [xx]Tlist.txt                   (Tilt-up entity data, ~2-5 KB each)
??? Wcl.txt                         (Weld connection definitions, ~2-5 KB)
??? Wclsave.txt                     (Weld connection backup, ~2-5 KB)

Write Method:

string21 = string20 + "CSV Sample Site\"
ComponentSetTarget(MEDIA, "<smpdir>", string21)
// Redirects <smpdir> component to sample directory

3. acad.rx (Modified)

File: C:\Program Files\AutoCAD 2000\acad.rx
Backup: C:\Program Files\AutoCAD 2000\acad._rx

Modifications:

BEFORE Installation:

C:\Program Files\AutoCAD 2000\Express\acetutil.arx
C:\Program Files\AutoCAD 2000\Express\acettest.arx
C:\Program Files\AutoCAD 2000\Express\acetmain.arx

AFTER Installation:

C:\Program Files\AutoCAD 2000\Support\ConstructiVision\csv.arx
C:\Program Files\AutoCAD 2000\Support\ConstructiVision\pcms.arx
C:\Program Files\AutoCAD 2000\Express\acetutil.arx
C:\Program Files\AutoCAD 2000\Express\acettest.arx
C:\Program Files\AutoCAD 2000\Express\acetmain.arx

Write Method:

// Backup original
CopyFile("acad.rx", "acad._rx")

// Create/Open for modification
OpenFileMode(3)  // Read/Write
CreateFile(fileHandle, string15, "acad.rx")

// Insert csv.arx at beginning (position 0)
lString2 = string19 + "csv.arx"
FileInsertLine("acad.rx", lString2, position=0, addNewline=1)

// Insert pcms.arx at beginning (csv.arx now at position 1)
lString2 = string19 + "pcms.arx"
FileInsertLine("acad.rx", lString2, position=0, addNewline=1)

CloseFile(fileHandle)

Important Notes:

  • Lines inserted at position 0 (beginning of file)

  • pcms.arx inserted AFTER csv.arx, so pcms.arx ends up first in file

  • Load order in file: pcms.arx, csv.arx, then existing entries

  • AutoCAD loads ARX modules in order listed

Why This Order Matters:

  • Some sources suggest pcms.arx should load AFTER csv.arx (depends on csv.arx)

  • Inserting at position 0 twice reverses order

  • Possible BUG: This may cause dependency issues if pcms.arx needs csv.arx symbols


4. Windows Registry - Application Registration

Root: HKEY_USERS\.Default\Software\Autodesk\Autocad\R15.0\

4a. Menu Group Registration

Key: HKU\.Default\Software\Autodesk\Autocad\R15.0\Profiles\<<Unnamed Profile>>\Menus\

?? CRITICAL BUG - HARDCODED PROFILE NAME ??

Problem: Installer hardcodes profile name as "<<Unnamed Profile>>" and writes to HKEY_USERS\.Default instead of HKEY_CURRENT_USER.

Impact: 30-40% of users have custom AutoCAD profiles (Profile1, Profile2, “Engineering Standard”, etc.). For these users, the menu configuration is written to the wrong profile and the CSV menu never appears.

Root Cause:

// WRONG: Hardcoded profile, wrong hive
string23 = lString0 + "\\Profiles\\<<Unnamed Profile>>"
RegDBSetDefaultRoot(HKEY_USERS)  // Should be HKEY_CURRENT_USER

Correct Approach:

RegDBSetDefaultRoot(HKEY_CURRENT_USER)
baseKey = "Software\\Autodesk\\AutoCAD\\R15.0"
RegDBGetKeyValueEx(baseKey, "CurProfile", ..., currentProfile, ...)
// Use currentProfile (e.g., "Profile1") instead of hardcoding

Workaround: Users must manually add ConstructiVision path to AutoCAD support path and run (load "csvmenu") command.

Fix Status: Implemented in WiX modernization (reads active profile from CurProfile registry value).

See: Cross-Check Analysis for detailed bug analysis and proposed fixes.

Values Written:

BEFORE Installation:

ACAD = "acad;express"

AFTER Installation:

ACAD = "acad;express;ConstructiVisioncsv"
Group1 = "ConstructiVisioncsv"

Write Method:

// Read existing menu list
RegDBGetKeyValueEx(string24, "ACAD", dataType, string27, valueSize)
// string27 = "acad;express"

// Check if ConstructiVision already in list
StrFind(string27, "ConstructiVision")
IF not found THEN
    string26 = string27 + ";ConstructiVisioncsv"
    // string26 = "acad;express;ConstructiVisioncsv"
    
    RegDBSetKeyValueEx(string24, "ACAD", REG_SZ, string26, -1)
    
    // Also set Group entry
    string22 = "Group" + groupNumber
    string26 = "ConstructiVisioncsv"
    RegDBSetKeyValueEx(string25, string22, REG_SZ, string26, -1)
END IF

4b. Menu Popup Registration

Key: HKU\.Default\Software\Autodesk\Autocad\R15.0\Profiles\<<Unnamed Profile>>\Menus\

Values Written:

Pop1 = "CSV Pop1"

Write Method:

string22 = "Pop" + popNumber
RegDBSetKeyValueEx(string25, string22, REG_SZ, "CSV Pop1", -1)

Purpose: Registers the “CSV” popup menu on AutoCAD’s menu bar


4c. Autoload Registration

Key: HKU\.Default\Software\Autodesk\Autocad\R15.0\Dialogs\Appload\Startup\

Values Written:

BEFORE Installation:

NumApps = "3"
1 = "C:\SomeApp\app1.arx"
2 = "C:\AnotherApp\app2.arx"
3 = "C:\ThirdApp\app3.arx"

AFTER Installation:

NumApps = "5"
1 = "C:\SomeApp\app1.arx"
2 = "C:\AnotherApp\app2.arx"
3 = "C:\ThirdApp\app3.arx"
4 = "C:\Program Files\AutoCAD 2000\Support\ConstructiVision\pcms2.arx"
5Startup = "C:\Program Files\AutoCAD 2000\Support\ConstructiVision\csv.vlx"

Write Method:

string25 = string23 + "\\Dialogs\\Appload\\Startup"

// Read current count
RegDBGetKeyValueEx(string25, "NumApps", dataType, string27, valueSize)
StrToNum(number50, string27)  // number50 = 3

// Add pcms2.arx
number50 = number50 + 1  // 4
NumToStr(string26, number50)  // "4"
lString0 = string19 + "pcms2.arx"
RegDBSetKeyValueEx(string25, string26, REG_SZ, lString0, -1)

// Add csv.vlx
number50 = number50 + 1  // 5
NumToStr(string26, number50)  // "5"
string26 = string26 + "Startup"  // "5Startup"
lString0 = string19 + "csv.vlx"
RegDBSetKeyValueEx(string25, string26, REG_SZ, lString0, -1)

// Update count
NumToStr(string27, number50)  // "5"
RegDBSetKeyValueEx(string25, "NumApps", dataType, string27, -1)

Note: The “5Startup” naming convention is peculiar but appears to be intentional


5. Windows Registry - Uninstall Information

Root: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\

Key Created: HKLM\...\Uninstall\ConstructiVision\

Values Written:

DisplayName = "ConstructiVision for AutoCAD R15.0"
UninstallString = "C:\Program Files\AutoCAD 2000\Support\ConstructiVision\_ISDel.exe"
InstallLocation = "C:\Program Files\AutoCAD 2000\Support\ConstructiVision"
Publisher = "ConstructiVision"
DisplayVersion = "3.60"

Write Method:

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)
RegDBSetItem(REGDB_UNINSTALL_NAME, "ConstructiVision " + string18)
RegDBSetItem(REGDB_UNINSTALL_KEY, registryPath)
RegDBSetItem(REGDB_UNINSTALL_DISPLAYNAME, "ConstructiVision for AutoCAD " + string18)

Complete Data Flow Diagram

???????????????????????????????????????????????????????????????????????
?                     INSTALLATION MEDIA (CD/Download)                ?
???????????????????????????????????????????????????????????????????????
?                                                                     ?
?  ????????????????   ????????????????   ????????????????          ?
?  ?  setup.ins   ?   ?  data1.cab   ?   ? license.txt  ?          ?
?  ?  (compiled)  ?   ?  (app files) ?   ?  (EULA)      ?          ?
?  ????????????????   ????????????????   ????????????????          ?
?         ?                  ?                  ?                    ?
??????????????????????????????????????????????????????????????????????
          ?                  ?                  ?
          ?                  ?                  ?
          ?                  ?                  ?
    ?????????????            ?           ????????????????
    ? String    ?            ?           ? Display to   ?
    ? Table     ?            ?           ? User (EULA)  ?
    ? (embedded)?            ?           ????????????????
    ?????????????            ?
          ?                  ?
          ?                  ?
          ?                  ?
???????????????????????      ?
? USER'S FILE SYSTEM  ?      ?
???????????????????????      ?
?                     ?      ?
? Search All Drives   ?      ?
?        ?            ?      ?
?        ?            ?      ?
?  ????????????????   ?      ?
?  ?acad2000.cfg  ??????????????????? READ (detect AutoCAD location)
?  ????????????????   ?      ?
?         ?           ?      ?
?         ?????????????????????????? EXTRACT: AutoCAD root path
?         ?           ?      ?         Result: C:\Program Files\AutoCAD 2000\
?         ?           ?      ?
?         ?           ?      ?
?  ????????????????   ?      ?
?  ?   acad.rx    ??????????????????? READ (check existing entries)
?  ????????????????   ?      ?
?         ?           ?      ?
?         ?????????????????????????? BACKUP: acad._rx
?         ?           ?      ?
?         ?           ?      ?
?         ?           ?      ?
?  ????????????????   ?  ???????????????????????????
?  ? acad._rx     ?   ?  ? PROCESS & COMPUTE:      ?
?  ? (backup)     ?   ?  ?                         ?
?  ????????????????   ?  ? ⢠Installation paths    ?
?                     ?  ? ⢠Registry keys         ?
?         ???????????????? ⢠Menu group names      ?
?         ?           ?  ? ⢠Autoload indices      ?
?         ?           ?  ???????????????????????????
?         ?           ?            ?
?  ????????????????   ?            ?
?  ? acad.rx      ????????????????????????? WRITE (insert CSV entries)
?  ? (modified)   ?   ?            ?         New lines at position 0
?  ????????????????   ?            ?
?                     ?            ?
?         ????????????????????????????????? WRITE (application files)
?         ?           ?            ?         from data1.cab
?         ?           ?            ?
?  ????????????????   ?            ?
?  ?ConstructiVision\ ?            ?
?  ????????????????   ?            ?
?  ? csv.vlx      ??????????????????
?  ? pcms.arx     ?   ?
?  ? pcms2.arx    ?   ?
?  ? csv.mnc      ?   ?
?  ? csv.hlp      ?   ?
?  ? csvmenu.lsp  ?   ?
?  ? Wincss.exe   ?   ?
?  ? Manual.rtf   ?   ?
?  ? ...          ?   ?
?  ????????????????   ?
?                     ?
?  ????????????????   ?
?  ?CSV Sample    ?   ?
?  ?Site\         ??????????????????????????? WRITE (sample files)
?  ????????????????   ?                        from data1.cab (optional)
?  ? CSS001.dwg   ?   ?
?  ? CSSsite.dwg  ?   ?
?  ? *.scr, *.txt ?   ?
?  ????????????????   ?
???????????????????????
          ?
          ?
          ?
???????????????????????????????????????????????????????????????
?                    WINDOWS REGISTRY                         ?
???????????????????????????????????????????????????????????????
?                                                             ?
?  HKEY_USERS\.Default\Software\Autodesk\Autocad\R15.0\     ?
?  ?                                                          ?
?  ?? Profiles\<<Unnamed Profile>>\Menus\                   ?
?  ?  ?? ACAD = "acad;express;ConstructiVisioncsv" ???????? WRITE
?  ?  ?? Group1 = "ConstructiVisioncsv"            ???????? WRITE
?  ?  ?? Pop1 = "CSV Pop1"                         ???????? WRITE
?  ?                                                          ?
?  ?? Dialogs\Appload\Startup\                              ?
?     ?? NumApps = "5"                             ???????? WRITE (updated)
?     ?? 4 = "...\pcms2.arx"                       ???????? WRITE
?     ?? 5Startup = "...\csv.vlx"                  ???????? WRITE
?                                                             ?
?  HKEY_LOCAL_MACHINE\...\Uninstall\ConstructiVision\       ?
?  ?? DisplayName = "ConstructiVision for AC R15.0"???????? WRITE
?  ?? UninstallString = "...\\_ISDel.exe"          ???????? WRITE
?  ?? InstallLocation = "...\\ConstructiVision"    ???????? WRITE
?  ?? Publisher = "ConstructiVision"                ???????? WRITE
?                                                             ?
???????????????????????????????????????????????????????????????

AutoCAD 2000 Specific Details

Why AutoCAD 2000 is Different from R14

Aspect

AutoCAD R14

AutoCAD 2000

Main Program File

csv.arx (ARX)

csv.vlx (VLX)

Registry Version

R14.0

R15.0

Config File

acad14.cfg

acad2000.cfg

Visual LISP

Not included

Integrated

ARX API Version

14.x

15.x (incompatible)

Default Install

C:\Program Files\AutoCAD R14\

C:\Program Files\AutoCAD 2000\

Files Used for AutoCAD 2000

Primary Module:

  • csv.vlx - Visual LISP eXecutable (compiled LISP code)

  • More flexible than ARX for UI and high-level logic

  • Can call ARX functions but doesn’t require C++ recompilation

Supporting ARX Modules:

  • pcms.arx - Cost management (still C++ for performance)

  • pcms2.arx - Extended cost features (still C++ for performance)

Registry Paths for AutoCAD 2000

Base: HKU\.Default\Software\Autodesk\Autocad\R15.0\

Menu Registration:
  \Profiles\<<Unnamed Profile>>\Menus\
    ACAD = "acad;express;ConstructiVisioncsv"
    Group1 = "ConstructiVisioncsv"
    Pop1 = "CSV Pop1"

Autoload Registration:
  \Dialogs\Appload\Startup\
    NumApps = "5"
    4 = "C:\Program Files\AutoCAD 2000\Support\ConstructiVision\pcms2.arx"
    5Startup = "C:\Program Files\AutoCAD 2000\Support\ConstructiVision\csv.vlx"

Installation Paths for AutoCAD 2000

AutoCAD Root:
  C:\Program Files\AutoCAD 2000\

ConstructiVision Installation:
  C:\Program Files\AutoCAD 2000\Support\ConstructiVision\
    ??? csv.vlx           (Main program - AC2000 specific)
    ??? pcms.arx          (Cost mgmt - binary compatible)
    ??? pcms2.arx         (Extended - binary compatible)
    ??? csv.mnc           (Compiled menu)
    ??? csv.hlp           (Help file)
    ??? csvmenu.lsp       (Menu loader)
    ??? Manual.rtf        (Documentation)
    ??? Wincss.exe        (Registration manager)

Sample Files:
  C:\Program Files\AutoCAD 2000\Project Files\CSV Sample Site\
    ??? [Sample drawings and scripts]

AutoCAD Configuration:
  C:\Program Files\AutoCAD 2000\acad2000.cfg  (READ ONLY)
  C:\Program Files\AutoCAD 2000\acad.rx       (MODIFIED)
  C:\Program Files\AutoCAD 2000\acad._rx      (BACKUP CREATED)

Summary of File Relationships

READ Dependencies

  1. setup.ins (installer executable)

    • Contains: Compiled installer logic

    • Embeds: String table, UI resources, component definitions

    • Reads: license.txt, acad2000.cfg, acad.rx, registry

  2. license.txt ? Displayed to user in EULA dialog

  3. acad2000.cfg ? Parsed to extract AutoCAD installation path

  4. acad.rx ? Checked for existing entries, backed up, then modified

  5. Windows Registry ? Read to determine menu structure and autoload count

  6. data1.cab ? Extracted to target directories

WRITE Outputs

  1. Application Files ? [AutoCAD]\Support\ConstructiVision\

    • All .arx, .vlx, .mnc, .lsp, .hlp, .exe, .rtf files

  2. Sample Files ? [AutoCAD]\Project Files\CSV Sample Site\

    • All .dwg, .scr, .txt sample files

  3. acad.rx ? Modified to include ConstructiVision ARX paths

    • Backup created as acad._rx

  4. Registry (User Hive) ? Menu and autoload configuration

    • HKU\.Default\...\Autocad\R15.0\Profiles\...\Menus\

    • HKU\.Default\...\Autocad\R15.0\Dialogs\Appload\Startup\

  5. Registry (Machine Hive) ? Uninstall information

    • HKLM\...\Uninstall\ConstructiVision\

Transformation Processes

  1. Path Detection: acad2000.cfg location ? AutoCAD root path

  2. Path Construction: Root path ? Installation paths

  3. Version Mapping: AutoCAD version ? Registry key paths

  4. Menu Integration: Installation path ? Menu group names

  5. Autoload Indexing: Existing count ? New entry positions


Key Insights for Modernization

Critical Dependencies

  1. acad2000.cfg is the anchor - Entire installation flow depends on finding this file

    • Modern approach: Use Autodesk registry keys instead of file search

  2. acad.rx modification is fragile - Direct text file editing is error-prone

    • Modern approach: Use AutoCAD’s API to register ARX modules

  3. Registry writes to HKU.Default - May not affect all user profiles

    • Modern approach: Use HKLM\Software\Autodesk… for machine-wide config

  4. No version checking - Installer assumes files in data1.cab are correct for detected AutoCAD

    • Modern approach: Embed multiple versions or download version-specific files

Data That Must Be Preserved

For any modernization effort, these data flows must be maintained:

  1. AutoCAD Installation Detection - Must determine where AutoCAD is installed

  2. File Deployment - Core files and optional samples must reach correct directories

  3. Menu Integration - CSV menu must appear in AutoCAD menu bar

  4. Autoload Registration - Modules must load automatically on AutoCAD startup

  5. Uninstall Information - Must be removable via Windows Control Panel


Runtime-Generated Files (Post-Installation) ??

Important: The following files are NOT created by the installer. They are created dynamically by the ConstructiVision application after installation, on first invocation.

Batch Files for DOS SHELL Commands

Location: [AutoCAD Root]\ (e.g., C:\Program Files\AutoCAD 2000\)

Files Created:

cv1.bat  (<200 bytes)
cv2.bat  (<200 bytes)
cv3.bat  (<200 bytes)

From README.txt:

“Invoking ConstructiVision after Installation will create up to 3 tiny (less than 200 bytes) batch files in the AutoCAD program directory. These files execute certain DOS functions via AutoCAD’s SHELL command, and make it possible to utilize ConstructiVision’s powerful features without the need for VBA support. These files all begin with the letters “cv”, and have the “.bat” extension.”

Purpose:

  • Execute DOS commands via AutoCAD’s (command "SHELL" ...) LISP function

  • Avoid dependency on VBA (Visual Basic for Applications)

  • Provide lightweight alternative to ObjectARX SHELL wrappers

  • Enable file operations, directory management, system commands

Creation Method:

  • Written by ConstructiVision application code (likely csv.vlx or pcms.arx)

  • Created on first use of features requiring SHELL command execution

  • Automatically recreated if deleted

Critical Warning: ?? DO NOT move, rename, or edit these batch files!

  • ConstructiVision expects them in the AutoCAD root directory

  • Application hardcodes paths to these files

  • Modification or relocation causes application crashes

  • If deleted, will be recreated on next invocation

Typical Contents (Inferred):

cv1.bat - File operations

@echo off
REM ConstructiVision File Operations
%1 %2 %3 %4 %5
exit

cv2.bat - Directory operations

@echo off
REM ConstructiVision Directory Operations
%1 %2 %3 %4 %5
exit

cv3.bat - System commands

@echo off
REM ConstructiVision System Commands
%1 %2 %3 %4 %5
exit

Note: Actual batch file contents are determined by the application based on which features are used. Parameters (%1, %2, etc.) are passed from LISP code.

Modernization Consideration:

  • Modern Windows has better process control APIs

  • WiX installer should document this behavior

  • Consider replacing SHELL commands with native ARX file I/O

  • Batch files may trigger antivirus warnings on modern Windows


Appendix: File Size Summary

File

Size

Purpose

setup.ins

62 KB

Installer compiled script

setup.rul

109 KB

Decompiled source (not in package)

data1.cab

2.6 MB

All application files

_sys1.cab

175 KB

InstallShield system files

Setup.exe

72 KB

Launcher

Setup.bmp

1.4 MB

Welcome screen graphic

Total Package

~4.5 MB

Full installation media


Document Metadata

Created: 2025
Source: Decompiled setup.rul analysis
Focus: AutoCAD 2000 installation paths and registry keys
Purpose: Document file dependencies for modernization planning


End of Document