I used normally an INI file, that can be portable between stations.... also on some of my old ODCL routines, I did the following:
;;; (dtt-write-dialog-data "Iwin" "Window Width" iwin_window_width)
(defun dtt-write-dialog-data (cmd_name key value)
;; salvar el dato solo si esta presente y sea string
(if (and value (eq (type value) 'str))
(vl-registry-write
(strcat
"HKEY_CURRENT_USER\\Software\\AxisCADD Software\\Draftteam\\Data\\"
cmd_name)
key
value)))
;;;---------------------------------------------------------
(defun dtt-read-dialog-data (cmd_name key)
(vl-registry-read
(strcat
"HKEY_CURRENT_USER\\Software\\AxisCADD Software\\Draftteam\\Data\\"
cmd_name)
key))
Then inside of one of the routine command:
(defun idoor-read-dialog-data
(/ door_types frame_values wall_position)
(setq idoor_door_width (dtt-read-dialog-data "Idoor" "Door Width"))
(setq idoor_doorname (dtt-read-dialog-data "Idoor" "Door Name"))
(setq idoor_pos_scrollbar1
(atoi (dtt-read-dialog-data
"Idoor"
"Door Image")))
(if (eq (dtt-read-dialog-data "Idoor" "Door Opening") "0")
(setq idoor_opening nil)
(setq idoor_opening t))
(setq door_types
(mapcar 'read
(rcmd-string-to-list
(dtt-read-dialog-data "Idoor" "Door Types")
",")))
(setq idoor_new_Value (car door_types))
(setq idoor_demo_Value (cadr door_types))
(setq idoor_exist_Value (caddr door_types))
(setq frame_values
(mapcar 'read
(rcmd-string-to-list
(dtt-read-dialog-data "Idoor" "Door Frame")
",")))
(setq idoor_none_value (car frame_values))
(setq idoor_2_value (cadr frame_values))
(setq idoor_4_value (caddr frame_values))
(setq wall_position
(mapcar
'read
(rcmd-string-to-list
(dtt-read-dialog-data "Idoor" "Wall Position")
",")))
(setq idoor_centered_value (car wall_position))
(setq idoor_pointx_value (cadr wall_position))
(setq idoor_corner_ref
(dtt-read-dialog-data "Idoor" "Corner Reference")))
(defun idoor-write-dialog-data ()
;; salvar el dato del ancho de la puerta
(dtt-write-dialog-data
"Idoor"
"Door Width"
idoor_door_width)
;; door name
(dtt-write-dialog-data "Idoor" "Door Name" idoor_doorname)
;; numero de posicion de la imagen
(dtt-write-dialog-data
"Idoor"
"Door Image"
(itoa idoor_pos_scrollbar1))
;; ya que "idoor_opening" es T o nil usar "1" "0"
;; despues cambiarlo al leerlo por T o nil
(dtt-write-dialog-data
"Idoor"
"Door Opening"
(if idoor_opening
"1"
"0"))
;; opciones NEW-DEMO-EXIST
(cond
;; new
((eq idoor_new_Value 0)
(dtt-write-dialog-data "Idoor" "Door Types" "0,-1,-1"))
;; demo
((eq idoor_demo_Value 0)
(dtt-write-dialog-data "Idoor" "Door Types" "-1,0,-1"))
;; exist
((eq idoor_exist_Value 0)
(dtt-write-dialog-data "Idoor" "Door Types" "-1,-1,0")))
;; opciones NONE-2-4
(cond
;; none
((eq idoor_none_value 0)
(dtt-write-dialog-data "Idoor" "Door Frame" "0,-1,-1"))
;; 2"
((eq idoor_2_value 0)
(dtt-write-dialog-data "Idoor" "Door Frame" "-1,0,-1"))
;; 4"
((eq idoor_4_value 0)
(dtt-write-dialog-data "Idoor" "Door Frame" "-1,-1,0")))
;; opciones CENTERED-POINTX
(cond
;; centered
((eq idoor_centered_value 0)
(dtt-write-dialog-data "Idoor" "Wall Position" "0,-1"))
;; point-x
((eq idoor_pointx_value 0)
(dtt-write-dialog-data "Idoor" "Wall Position" "-1,0")))
;; distancia a la esquina de un muro
(dtt-write-dialog-data
"Idoor"
"Corner Reference"
idoor_corner_ref))
And on the exit button or apply or as part of reactor just do something:
;;; boton exit
(defun c:idoorForm_TextButton1_OnClicked ()
(Setq idoor_door_width
(Odcl_Control_GetText
(vl-doc-ref 'draftteam_idoorForm_ComboBox2)))
;;;=========================================================
(Setq idoor_doorname
(Odcl_Control_GetText
(vl-doc-ref 'draftteam_idoorForm_ComboBox1)))
;;;=========================================================
;;; type
(setq idoor_new_Value
(Odcl_OptionList_getCurSel
(vl-doc-ref 'draftteam_idoorForm_OptionList1)))
(setq idoor_demo_Value
(Odcl_OptionList_getCurSel
(vl-doc-ref 'draftteam_idoorForm_OptionList2)))
(setq idoor_exist_Value
(Odcl_OptionList_getCurSel
(vl-doc-ref 'draftteam_idoorForm_OptionList3)))
;; generar la variable global para saber que tipo de puerta
;; se va instalar
(setq idoor_door_type
(cond
(idoor_new_value "NEW-")
(idoor_demo_value "DEMO-")
(idoor_exist_value "EXIST-")))
. . .
(idoor-write-dialog-data)
)