#!/usr/local/bin/perl ## use ExtUtils::testlib; use Curses; eval { new_form() }; if ($@ =~ /not defined by your vendor/) { print STDERR "Curses was not compiled with form support.\n"; exit 1; } my $flist = [ [ 'L', 0, 0, 0, 8, "Form" ], [ 'L', 0, 0, 2, 0, "First Name" ], [ 'F', 1, 15, 2, 12, "F Name" ], [ 'L', 0, 0, 3, 0, "Last Name" ], [ 'F', 1, 15, 3, 12, "L Name" ], [ 'L', 0, 0, 5, 8, "Form (pt 2)" ], [ 'L', 0, 0, 7, 0, "# Tuits" ], [ 'F', 1, 5, 7, 12, "Tuits" ], [ 'L', 0, 0, 8, 0, "# Bleems" ], [ 'F', 1, 5, 8, 12, "Bleems" ] ]; initscr; noecho; my @fl; my @pack; foreach my $F (@$flist) { my $field; if ($F->[0] eq 'L') { $field = new_field(1, length($F->[5]), $F->[3], $F->[4], 0, 0); if ($field eq '') { fatal("new_field $F->[5] failed") } set_field_buffer($field, 0, $F->[5]); field_opts_off($field, O_ACTIVE); field_opts_off($field, O_EDIT); } elsif ($F->[0] eq 'F') { $field = new_field($F->[1], $F->[2], $F->[3], $F->[4], 0, 0); if ($field eq '') { fatal("new_field $F->[5] failed") } if ($F->[5] eq "Tuits") { set_field_buffer($field, 0, $F->[5]); } set_field_back($field, A_UNDERLINE); } push @fl, $field; push @pack, ${$field}; } push @pack, 0; my $form = new_form(pack "I*", @pack); if ($form eq '') { fatal("new_form failed") } my $rows; my $cols; scale_form($form, $rows, $cols); my $fwin = newwin($rows + 2, $cols + 4, 4, 0); my $fsub = derwin($fwin, $rows, $cols, 1, 2); set_form_win($form, $fwin); set_form_sub($form, $fsub); box($fwin, 0, 0); keypad($fwin, 1); post_form($form); addstr(0, 0, "Use KEY_UP/KEY_DOWN/KEY_PPAGE/KEY_NPAGE to navigate"); addstr(1, 0, "Press 'ENTER' to select item, or 'F1' to exit"); addstr(2, 0, "Other alphanumeric characters will enter data"); refresh(); while(1) { my $ch = getch($fwin); if ($ch == KEY_UP) { form_driver($form, REQ_PREV_FIELD); } elsif ($ch == KEY_DOWN or $ch eq "\t" or $ch eq "\r" or $ch eq "\n") { form_driver($form, REQ_NEXT_FIELD); } elsif ($ch == KEY_LEFT) { form_driver($form, REQ_LEFT_CHAR); } elsif ($ch == KEY_RIGHT) { form_driver($form, REQ_RIGHT_CHAR); } elsif ($ch == KEY_NPAGE) { form_driver($form, REQ_NEXT_PAGE); } elsif ($ch == KEY_PPAGE) { form_driver($form, REQ_PREV_PAGE); } elsif ($ch == KEY_DC or ord($ch) == 8 or ord($ch) == 127) { form_driver($form, REQ_DEL_PREV); } elsif ($ch == KEY_F(1)) { last; } elsif ($ch =~ /^\S$/) { form_driver($form, ord($ch)); } else { beep(); } } unpost_form($form); delwin($fwin); free_form($form); map { free_field($_) } @fl; endwin(); exit 0; sub fatal { clrtobot(0, 0); addstr(0, 0, "@_\n"); refresh(); sleep 2; exit 1; }