I probably should have tried something simpler for my first module, but...
I'm working from the node_example.module code, and so far, along with all the other standard stuff, I have a form:
/**
* Implementation of hook_form().
*/
function mmcontrib_form(&$node) {
$form['title'] = array('#type' => 'textfield', '#title' => t('Title'),
'#size' => 60, '#maxlength' => 128, '#required' => TRUE,
'#default_value' => $node->title);
$form['body'] = array('#type' => 'textarea', '#title' => t('Body'),
'#default_value' => $node->body, '#required' => FALSE );
// Now we define the form elements specific to our node type.
$form['path'] = array('#type' => 'textfield', '#title' => t('Import Path'),
'#default_value' => $node->path, '#size' => 60, '#maxlength' => 256,
'#weight' => 0);
$form['subpath'] = array('#type' => 'textfield', '#title' => t('Substitution Path'),
'#default_value' => $node->subpath, '#size' => 60, '#maxlength' => 256,
'#weight' => 1);
$form['startdelim'] = array('#type' => 'textfield', '#title' => t('Start import at:'),
'#default_value' => $node->startdelim, '#size' => 60, '#maxlength' => 256,
'#weight' => 2);
$form['enddelim'] = array('#type' => 'textfield', '#title' => t('End import at:'),
'#default_value' => $node->enddelim, '#size' => 60, '#maxlength' => 256,
'#weight' => 3);