[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Passing FIELD Object To Function
From: |
TW |
Subject: |
Passing FIELD Object To Function |
Date: |
Tue, 17 Mar 2009 18:48:09 -0600 |
I have a function (populate_edit_form) declared in a header as such:
/* recmanip.h */
#ifndef RECMANIP_H
#define RECMANIP_H
#include <ncurses.h>
#include <form.h>
#include <string.h>
#include "winmanip.h"
#include "dhandler.h"
#include "sqlite.h"
#define NFIELDS 31
#define FORM_WIDTH 30
#define FORM_STARTY 2
#define FORM_STARTX 1
#define CAPTION_WIDTH 15
struct form {
const char title[15];
char value[30];
};
int add_record(void);
int populate_edit_form(FIELD *field[NFIELDS], FORM *, WINDOW *);
int print_in_middle(WINDOW *, int, int, int, char *, chtype);
#endif /* RECMANIP_H */
In one of my files, I call this function like this:
/* recmanip.c */
#include "recmanip.h"
int add_record(void)
{
FIELD *field[NFIELDS];
FORM *myform;
WINDOW *form_win;
int ch, i=0, j=0;
struct form form_data[] = {
{"id", "" }, {"title", "" }, {"artist", "" }, {"hd", "" },
{"bank", "" }, {"bookmark", "" }, {"active", "" }, {"digitalinput",
"" },
{"genre", "" }, {"price", "" }, {"year", "" }, {"remixer", "" },
{"labelid", "" }, {"class", "" }, {"classnumber", "" }
};
===> populate_edit_form(field, myform, form_win);
<snip>
}
int populate_edit_form(FIELD *field[NFIELDS], FORM *myform, WINDOW
*form_win)
{
int i=0, j = 0, rows = 0, cols =0;
int maxy, maxx;
int form_win_height, form_win_width;
int form_win_starty, form_win_startx;
char *hd_choices[] = { "A", "B", NULL };
char *active_choices[] = { "Y", "N", NULL };
char *digital_choices[] = { "Yes", "No", NULL };
char *field_names[] = {
"ID", "Title", "Artist", "HD", "Bank", "Bookmark", "Active",
"Digital Input", "Genre", "Price", "Year", "Remixer", "Label",
"Class Type", "Class Number"
};
/* Initialize the fields */
/* num rows, num cols, start row, start col, off-screen rows, num
buffers */
for(i=0; i<NFIELDS-1; i=i+2, j++) {
field[i] = new_field(1, CAPTION_WIDTH, FORM_STARTY+j, FORM_STARTX,
0, 0);
field[i+1] = new_field(1, FORM_WIDTH, FORM_STARTY+j,
CAPTION_WIDTH+3, 0, 0);
}
field[NFIELDS-1] = NULL;
/* Set field options */
for(i=0, j=0; i<NFIELDS-1; i++) {
if(i == 0 || i%2 == 0) {
field_opts_off(field[i], O_ACTIVE);
set_field_buffer(field[i], 0, field_names[j]);
j++;
}
else if (i%2 != 0) {
set_field_back(field[i], A_UNDERLINE);
field_opts_off(field[i], O_AUTOSKIP);
if(i == 1) {
field_opts_off(field[i], O_ACTIVE);
set_field_buffer(field[i], 0, "ID auto-generated");
}
else if(i==3 || i==5 || i==7 || i==15 || i==23) {
set_field_buffer(field[i], 0, "Unknown");
}
else if(i==9 || i==11 || i==25 || i==29) {
set_field_buffer(field[i], 0, "0");
}
else if(i==13) {
set_field_buffer(field[i], 0, "Inactive");
}
else if(i==17 || i==27) {
set_field_buffer(field[i], 0, "Unclassified");
}
else if(i==19) {
set_field_buffer(field[i], 0, "9.99");
}
else if(i==21) {
set_field_buffer(field[i], 0, "1900");
}
if(i == 7) /* HD */
set_field_type(field[i], TYPE_ENUM, hd_choices, 0, 0);
if(i == 9) /* Bank */
set_field_type(field[i], TYPE_INTEGER, 0, 0, 25);
if(i == 11) /* Bookmark */
set_field_type(field[i], TYPE_INTEGER, 0, 0, 11);
if(i == 13) /* Active */
set_field_type(field[i], TYPE_ENUM, active_choices, 0, 0);
if(i == 15) /* Digital Input */
set_field_type(field[i], TYPE_ENUM, digital_choices, 0, 0);
if(i == 19) /* Price */
set_field_type(field[i], TYPE_NUMERIC, 2, 0, 0);
if(i == 21) /* Year */
set_field_type(field[i], TYPE_INTEGER, 0, 1900, 2100);
if(i == 29) /* Class Number */
set_field_type(field[i], TYPE_INTEGER, 0, 1, 24);
}
}
/* Create the form */
myform = new_form(field);
/* Calculate the smallest area required for the form */
scale_form(myform, &rows, &cols);
/* Create form window */
getmaxyx(stdscr, maxy, maxx);
form_win_height = rows+5;
form_win_width = cols+5;
form_win_starty = (maxy - form_win_height)/2;
form_win_startx = (maxx - form_win_width)/2;
form_win = create_newwin(form_win_height, form_win_width,
form_win_starty, form_win_startx);
keypad(form_win, TRUE);
/* Set main & sub window */
set_form_win(myform, form_win);
set_form_sub(myform, derwin(form_win, rows, cols, 2, 1)); /* x, y
relative to form_win */
print_in_middle(form_win, 1, 0, form_win_width, "Add Record (F1
to exit)", COLOR_PAIR(1));
/* Post form */
post_form(myform);
refresh();
curs_set(1);
}
I'm getting a blank form. I could put all of this in one block, but,
when I want to delete a record,
I don't want to write duplicate code, hence, passing the FIELD, FORM, & WINDOW
objects. The address for the form
is being passed to the function, but, I'm not sure if I'm declaring it right.
I'm still getting used to pointers
and array-pointers. Thanks.
--
VR~
TW
Email: address@hidden
- Passing FIELD Object To Function,
TW <=