Hey Gary --
IF you preprocessed a dcl definition a slight mod to prinh might work for you.
Example, a standard AutoCAD dcl definition (from tblname.dcl) --
tblname : dialog
{
label = "";
key="dlgTitle";
: column
{
: spacer {}
: text_part
{
key="msg";
label="";
}
: boxed_column {
fixed_width=true;
width=50;
: list_box {
key="name_list";
}
: row {
: button {
fixed_width=true;
width=5;
key="pickit";
label= "&Pick<";
alignment=left;
}
: edit_box {
key="name";
is_default=true;
edit_limit=256;
alignment=left;
fixed_width=true;
width=41;
}
} //row
: spacer {}
} // boxed column
: row
{
: spacer {}
: button {
fixed_width=true;
width=11;
key="accept";
label= "OK";
}
: button {
fixed_width=true;
width=11;
is_cancel=true;
key="cancel";
label= "Cancel";
}
: button {
fixed_width=true;
width=11;
key="help";
label= "&Help";
is_help=true;
}
: spacer {}
} // row
: text_part
{
key="error";
label="";
}
} // column
}
Step 1:• trim leading/trailing space
• force statements / braces to their own line
• delete comments
• replace quotes (") with backslash quote (\")
tblname : dialog
{
label = \"\";
key=\"dlgTitle\";
: column
{
: spacer
{
}
: text_part
{
key=\"msg\";
label=\"\";
}
: boxed_column
{
fixed_width=true;
width=50;
: list_box
{
key=\"name_list\";
}
: row
{
: button
{
fixed_width=true;
width=5;
key=\"pickit\";
label= \"&Pick<\";
alignment=left;
}
: edit_box
{
key=\"name\";
is_default=true;
edit_limit=256;
alignment=left;
fixed_width=true;
width=41;
}
}
: spacer
{
}
}
: row
{
: spacer
{
}
: button
{
fixed_width=true;
width=11;
key=\"accept\";
label= \"OK\";
}
: button
{
fixed_width=true;
width=11;
is_cancel=true;
key=\"cancel\";
label= \"Cancel\";
}
: button
{
fixed_width=true;
width=11;
key=\"help\";
label= \"&Help\";
is_help=true;
}
: spacer
{
}
}
: text_part
{
key=\"error\";
label=\"\";
}
}
}
Step 2:• enclose all lines in quotes except brace lines
• convert braces { } to parenthesis ( )
"tblname : dialog"
(
"label = \"\";"
"key=\"dlgTitle\";"
": column"
(
": spacer"
(
)
": text_part"
(
"key=\"msg\";"
"label=\"\";"
)
": boxed_column"
(
"fixed_width=true;"
"width=50;"
": list_box"
(
"key=\"name_list\";"
)
": row"
(
": button"
(
"fixed_width=true;"
"width=5;"
"key=\"pickit\";"
"label= \"&Pick<\";"
"alignment=left;"
)
": edit_box"
(
"key=\"name\";"
"is_default=true;"
"edit_limit=256;"
"alignment=left;"
"fixed_width=true;"
"width=41;"
)
)
": spacer"
(
)
)
": row"
(
": spacer"
(
)
": button"
(
"fixed_width=true;"
"width=11;"
"key=\"accept\";"
"label= \"OK\";"
)
": button"
(
"fixed_width=true;"
"width=11;"
"is_cancel=true;"
"key=\"cancel\";"
"label= \"Cancel\";"
)
": button"
(
"fixed_width=true;"
"width=11;"
"key=\"help\";"
"label= \"&Help\";"
"is_help=true;"
)
": spacer"
(
)
)
": text_part"
(
"key=\"error\";"
"label=\"\";"
)
)
)
Step 3• enclose the whole mess in quoted list '( ... )
• assign to a variable
(setq dcldef
'(
"tblname : dialog"
(
"label = \"\";"
"key=\"dlgTitle\";"
": column"
(
": spacer"
(
)
": text_part"
(
"key=\"msg\";"
"label=\"\";"
)
": boxed_column"
(
"fixed_width=true;"
"width=50;"
": list_box"
(
"key=\"name_list\";"
)
": row"
(
": button"
(
"fixed_width=true;"
"width=5;"
"key=\"pickit\";"
"label= \"&Pick<\";"
"alignment=left;"
)
": edit_box"
(
"key=\"name\";"
"is_default=true;"
"edit_limit=256;"
"alignment=left;"
"fixed_width=true;"
"width=41;"
)
)
": spacer"
(
)
)
": row"
(
": spacer"
(
)
": button"
(
"fixed_width=true;"
"width=11;"
"key=\"accept\";"
"label= \"OK\";"
)
": button"
(
"fixed_width=true;"
"width=11;"
"is_cancel=true;"
"key=\"cancel\";"
"label= \"Cancel\";"
)
": button"
(
"fixed_width=true;"
"width=11;"
"key=\"help\";"
"label= \"&Help\";"
"is_help=true;"
)
": spacer"
(
)
)
": text_part"
(
"key=\"error\";"
"label=\"\";"
)
)
)
)
)
Step 4• message the prinh function to suit (a very fast stab)
(defun _PrinDcl ( x / _PrintItem _PrintList _Main )
(defun _PrintItem ( _PrintMethod item indents )
(cond
( item
(princ "\n")
(repeat indents (princ " "))
(_PrintMethod item)
)
( (princ " { }") )
)
(princ)
)
(defun _PrintList ( _PrintMethod lst indents )
(if (< -1 indents) (_PrintItem _PrintMethod "{" indents))
((lambda (i) (foreach x lst (_Main x i))) (1+ indents))
(if (< -1 indents) (_PrintItem _PrintMethod "}" indents) (princ))
)
(defun _Main ( x indents )
(if (vl-consp x)
(if ((lambda (x) (and x (atom x))) (cdr x))
(_PrintItem princ x indents) ;; formerly prin1
(_PrintList princ x indents)
)
(_PrintItem princ x indents) ;; formerly prin1
)
)
(_Main x -1)
)
Step 5• Run it
(PrinDCL dcldef)
Resulttblname : dialog
{
label = "";
key="dlgTitle";
: column
{
: spacer ()
: text_part
{
key="msg";
label="";
}
: boxed_column
{
fixed_width=true;
width=50;
: list_box
{
key="name_list";
}
: row
{
: button
{
fixed_width=true;
width=5;
key="pickit";
label= "&Pick<";
alignment=left;
}
: edit_box
{
key="name";
is_default=true;
edit_limit=256;
alignment=left;
fixed_width=true;
width=41;
}
}
: spacer { }
}
: row
{
: spacer { }
: button
{
fixed_width=true;
width=11;
key="accept";
label= "OK";
}
: button
{
fixed_width=true;
width=11;
is_cancel=true;
key="cancel";
label= "Cancel";
}
: button
{
fixed_width=true;
width=11;
key="help";
label= "&Help";
is_help=true;
}
: spacer { }
}
: text_part
{
key="error";
label="";
}
}
}
All you have to do is code up functions to achieve steps 1 - 3.
