Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * CRM LOGIN
- *
- * Main login page for a generic CRM.
- */
- #include <assert.h>
- #include <string.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <ncurses.h>
- #include <form.h>
- #include "common_util.h"
- #include "date_time_util.h"
- enum {
- FORM_LOGIN_USER,
- FORM_LOGIN_PASS,
- FORM_LOGIN_PROG,
- FORM_LOGIN_DATE,
- FORM_LOGIN_TIME,
- FORM_LOGIN_FMSG,
- FORM_LOGIN_LINE,
- FORM_LOGIN_FIELD_COUNT
- };
- static void driver(FORM *form, int ch)
- {
- FIELD **fields, **field;
- char *buffer;
- char *text;
- fields = form->field;
- field = NULL;
- switch (ch) {
- case KEY_F(2):
- case KEY_ENTER:
- case '\n':
- /* Force a form buffer refresh with some key movement: */
- form_driver(form, REQ_NEXT_FIELD);
- form_driver(form, REQ_PREV_FIELD);
- if (
- strcmp(trim_whitespace(field_buffer(fields[FORM_LOGIN_USER], 0)), "u/green_boy") == 0 &&
- strcmp(trim_whitespace(field_buffer(fields[FORM_LOGIN_PASS], 0)), "pass") == 0
- ) {
- set_field_buffer(fields[FORM_LOGIN_FMSG], 0, "Login succeeded");
- }
- else {
- set_field_buffer(fields[FORM_LOGIN_FMSG], 0, "Login failed");
- }
- switch(field_just(fields[FORM_LOGIN_FMSG])) {
- case JUSTIFY_RIGHT:
- text = "DEBUG: Right justified requested for form message";
- break;
- case JUSTIFY_LEFT:
- text = "DEBUG: Left justified requested for form message";
- break;
- case JUSTIFY_CENTER:
- text = "DEBUG: Centered requested for form message";
- break;
- case NO_JUSTIFICATION:
- text = "DEBUG: Floating requested for form message";
- break;
- default:
- text = "DEBUG: Not set requested for form message";
- break;
- }
- set_field_buffer(fields[FORM_LOGIN_LINE], 0, text);
- /* Reload field values, clearing blanking fields */
- for (field = fields; *field != NULL; field++) {
- buffer = trim_whitespace(field_buffer(*field, 0));
- if (field_opts(*field) & O_BLANK) {
- set_field_buffer(*field, 0, "");
- }
- else if (field_opts(*field) & O_EDIT) {
- set_field_buffer(*field, 0, buffer);
- }
- }
- refresh();
- pos_form_cursor(form);
- break;
- case KEY_DOWN:
- case '\t':
- form_driver(form, REQ_NEXT_FIELD);
- form_driver(form, REQ_END_LINE);
- break;
- case KEY_UP:
- case KEY_BTAB:
- form_driver(form, REQ_PREV_FIELD);
- form_driver(form, REQ_END_LINE);
- break;
- case KEY_LEFT:
- form_driver(form, REQ_PREV_CHAR);
- break;
- case KEY_RIGHT:
- form_driver(form, REQ_NEXT_CHAR);
- break;
- /* Perform a backspace-delete: */
- case KEY_BACKSPACE:
- case 127:
- form_driver(form, REQ_DEL_PREV);
- break;
- /* Perform a forward-delete: */
- case KEY_DC:
- form_driver(form, REQ_DEL_CHAR);
- break;
- default:
- form_driver(form, ch);
- break;
- }
- wrefresh(form->sub);
- }
- void login_form(void)
- {
- static FIELD *fields[FORM_LOGIN_FIELD_COUNT];
- char date[CUR_DATE_MAX_SZ];
- char time[CUR_TIME_MAX_SZ];
- WINDOW *win_body, *win_form;
- FORM *form;
- int ch, i;
- ch = '\0';
- initscr();
- noecho();
- cbreak();
- keypad(stdscr, TRUE);
- /* Establish the needed fields with a null terminator: */
- assert_not_null(fields[FORM_LOGIN_USER] = new_field(1, 18, 10, 39, 0, 0));
- assert_not_null(fields[FORM_LOGIN_PASS] = new_field(1, 18, 12, 39, 0, 0));
- assert_not_null(fields[FORM_LOGIN_PROG] = new_field(1, 18, 14, 39, 0, 0));
- assert_not_null(fields[FORM_LOGIN_DATE] = new_field(1, 12, 23, 3, 0, 0));
- assert_not_null(fields[FORM_LOGIN_TIME] = new_field(1, 5, 23, 74, 0, 0));
- assert_not_null(fields[FORM_LOGIN_FMSG] = new_field(1, 32, 16, 25, 0, 0));
- assert_not_null(fields[FORM_LOGIN_LINE] = new_field(1, 76, 22, 3, 0, 0));
- fields[FORM_LOGIN_FIELD_COUNT] = NULL;
- /* Set up form field options and formatting: */
- set_field_opts(fields[FORM_LOGIN_USER], O_VISIBLE | O_EDIT | O_ACTIVE | O_PUBLIC);
- set_field_opts(fields[FORM_LOGIN_PASS], O_VISIBLE | O_EDIT | O_ACTIVE | O_BLANK);
- set_field_opts(fields[FORM_LOGIN_PROG], O_VISIBLE | O_EDIT | O_ACTIVE | O_PUBLIC);
- set_field_opts(fields[FORM_LOGIN_DATE], O_VISIBLE | O_PUBLIC);
- set_field_opts(fields[FORM_LOGIN_TIME], O_VISIBLE | O_PUBLIC);
- set_field_opts(fields[FORM_LOGIN_FMSG], O_VISIBLE | O_PUBLIC);
- set_field_opts(fields[FORM_LOGIN_LINE], O_VISIBLE | O_PUBLIC);
- set_field_back(fields[FORM_LOGIN_USER], A_UNDERLINE);
- set_field_back(fields[FORM_LOGIN_PASS], A_UNDERLINE);
- set_field_back(fields[FORM_LOGIN_PROG], A_UNDERLINE);
- set_field_back(fields[FORM_LOGIN_LINE], A_UNDERLINE);
- set_field_back(fields[FORM_LOGIN_FMSG], A_UNDERLINE);
- set_field_just(fields[FORM_LOGIN_FMSG], JUSTIFY_CENTER);
- set_field_just(fields[FORM_LOGIN_DATE], JUSTIFY_LEFT);
- set_field_just(fields[FORM_LOGIN_TIME], JUSTIFY_RIGHT);
- set_field_just(fields[FORM_LOGIN_LINE], JUSTIFY_CENTER);
- /* Set a default application: */
- /* TODO: this is hokey, parameterise field initialisation! */
- set_field_buffer(fields[FORM_LOGIN_PROG], 0, "CRMMAIN");
- /*
- * Wire up a form with two windows:
- * - Main window is for labels.
- * - Form window is for the form itself and its fields.
- */
- assert_not_null(form = new_form(fields));
- assert_not_null(win_body = newwin(24, 80, 0, 0));
- assert_not_null(win_form = derwin(win_body, 24, 80, 0, 0));
- set_form_win(form, win_body);
- set_form_sub(form, win_form);
- pos_form_cursor(form);
- post_form(form);
- /* Draw out the labels: */
- mvwprintw(win_body, 3, 33, "COMPANY NAME HERE");
- mvwprintw(win_body, 5, 34, "SYSTEM SIGN ON");
- mvwprintw(win_body, 10, 28, "Username :");
- mvwprintw(win_body, 12, 28, "Password :");
- mvwprintw(win_body, 14, 25, "Application :");
- get_cur_date(date, sizeof(date));
- get_cur_time(time, sizeof(time));
- set_field_buffer(fields[FORM_LOGIN_DATE], 0, date);
- set_field_buffer(fields[FORM_LOGIN_TIME], 0, time);
- wrefresh(form->sub);
- /* Refresh and display: */
- refresh();
- wrefresh(win_body);
- wrefresh(win_form);
- while ((ch = getch()) != KEY_F(1))
- driver(form, ch);
- unpost_form(form);
- for (i = 0; i < FORM_LOGIN_FIELD_COUNT; i++) {
- free_field(fields[i]);
- }
- free_form(form);
- delwin(win_form);
- delwin(win_body);
- endwin();
- }
Advertisement
Add Comment
Please, Sign In to add comment