#!/usr/bin/perl

$file="$ENV{HOME}/.pbook";           # Set Default Data File

use Xforms;

fl_initialize('Phone Book');    #Required before any forms subroutines are 
				#called
create_form();                  #function generated by fdesign
load_data();                    #my function to load data
update_browser();               #my function to setup the browser so that there 
				#is data 
				#there when run
fl_show_form($list,FL_PLACE_FREE,FL_FULLBORDER,"Phone Book"); #show the program

while (1) {
        fl_do_forms();
}



#############################################
#  Subroutines Go here....
#############################################
sub create_form
{
  $list = fl_bgn_form(FL_NO_BOX, 460, 490);
  $obj = fl_add_box(FL_UP_BOX,0,0,460,490,"");
  $obj = fl_add_text(FL_NORMAL_TEXT,310,10,140,30,"PhoneBook");
    fl_set_object_lcol($obj,FL_CYAN);
    fl_set_object_lsize($obj,FL_HUGE_SIZE);
    fl_set_object_lalign($obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
    fl_set_object_lstyle($obj,FL_NORMAL_STYLE+FL_SHADOW_STYLE);
  $browser = $obj = fl_add_browser(FL_HOLD_BROWSER,10,50,210,430,"");
    fl_set_object_callback($obj,browser_clicked,0);

  $name_field = $obj = fl_add_input(FL_NORMAL_INPUT,240,90,200,30,"Name");
    fl_set_object_lsize($obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign($obj,FL_ALIGN_TOP_LEFT);
  $phone_field = $obj = fl_add_input(FL_NORMAL_INPUT,240,140,200,30,"Phone 
Number");
    fl_set_object_lsize($obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign($obj,FL_ALIGN_TOP_LEFT);
  $address1_field = $obj = fl_add_input(FL_NORMAL_INPUT,240,210,200,30,"Address
");
    fl_set_object_lsize($obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign($obj,FL_ALIGN_TOP_LEFT);
  $address2_field = $obj = fl_add_input(FL_NORMAL_INPUT,240,260,200,30,"Address
");
    fl_set_object_lsize($obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign($obj,FL_ALIGN_TOP_LEFT);
  $obj = fl_add_clock(FL_DIGITAL_CLOCK,370,40,80,30,"");
    fl_set_object_boxtype($obj,FL_RFLAT_BOX);
    fl_set_object_color($obj,FL_COL1,FL_RIGHT_BCOL);
    fl_set_object_lcol($obj,FL_TOP_BCOL);
  $email_field = $obj = fl_add_input(FL_NORMAL_INPUT,240,340,200,30,"E-Mail");
    fl_set_object_lsize($obj,FL_MEDIUM_SIZE);
    fl_set_object_lalign($obj,FL_ALIGN_TOP_LEFT);
  $obj = fl_add_button(FL_NORMAL_BUTTON,320,400,120,50,"Update");
    fl_set_object_lsize($obj,FL_HUGE_SIZE);
    fl_set_object_lstyle($obj,FL_NORMAL_STYLE+FL_SHADOW_STYLE);
    fl_set_object_callback($obj,update_data,0);
  $obj = fl_add_button(FL_NORMAL_BUTTON,10,10,70,30,"Quit!");
    fl_set_object_lsize($obj,FL_LARGE_SIZE);
    fl_set_object_lstyle($obj,FL_BOLDITALIC_STYLE);
    fl_set_object_callback($obj,quit,0);
  $obj = fl_add_button(FL_NORMAL_BUTTON,240,400,80,50,"Clear");
    fl_set_object_lsize($obj,FL_HUGE_SIZE);
    fl_set_object_lstyle($obj,FL_NORMAL_STYLE+FL_SHADOW_STYLE);
    fl_set_object_callback($obj,clear_data,0);
  $obj = fl_add_button(FL_NORMAL_BUTTON,240,450,200,30,"Delete Entry");
    fl_set_object_lsize($obj,FL_LARGE_SIZE);
    fl_set_object_lstyle($obj,FL_NORMAL_STYLE+FL_SHADOW_STYLE);
    fl_set_object_callback($obj,delete_entry,0);
  fl_end_form();

}

sub load_data                   #READ IN DATA FILE, AND PARSE IT
{
        open(IN,"$file");
        while(<IN>) {
                if (/(.*):(.*):(.*):(.*):(.*)/) {
                        $name=$1;
                        $pnumber{$name}=$2;
                        $add1{$name}=$3;
                        $add2{$name}=$4;
                        $email{$name}=$5;
                }
        }
        close IN;
}

sub save_data                   #SAVE DATA, USE A BACKUP FILE JUST IN CASE...
{
        system ("mv -f $file $file.bak\n") ;
        open OUT, ">$file";
        foreach $name (sort keys %pnumber) {
                print OUT 
"$name:$pnumber{$name}:$add1{$name}:$add2{$name}:$email{$name}\n";
        }
        close OUT;
}
sub update_browser              #PUT DATA INTO BROWSER LIST, ALPHABETICALLY
{
        fl_clear_browser($browser);
        foreach $name (sort keys %pnumber) {
                fl_add_browser_line($browser, $name);
        }
}

sub update_data                 #UPDATE THE DATA FROM THE ENTRY LINES
{
        $name = fl_get_input($name_field);
        unless ($pnumber{$name}) 
        {
                $pnumber{$name} =  fl_get_input($phone_field);
                update_browser();
        }
        else 
        {
                $pnumber{$name} =  fl_get_input($phone_field);
        }
        $add1{$name}    =  fl_get_input($address1_field);
        $add2{$name}    =  fl_get_input($address2_field);
        $email{$name}   =  fl_get_input($email_field);
        save_data();
}

        
sub browser_clicked             #UPDATE THE ENTRY LINES FROM THE BROWSER 
				#SELECTION
{
        $name=fl_get_browser_line($browser,fl_get_browser($browser));
        fl_set_input($name_field,$name);
        fl_set_input($phone_field,$pnumber{$name});
        fl_set_input($address1_field,$add1{$name});
	fl_set_input($address2_field,$add2{$name});
        fl_set_input($email_field,$email{$name});
}

sub clear_data                  #CLEAR ALL THE ENTRY FIELDS
{
        fl_set_input($name_field,"");
        fl_set_input($phone_field,"");
        fl_set_input($address1_field,"");
        fl_set_input($address2_field,"");
        fl_set_input($email_field,"");
}

sub delete_entry                #REMOVE AN ENTRY, UPDATE THE BROWSER TO REFLECT 
				#IT, THEN SAVE DATA
{
        $name=fl_get_browser_line($browser,fl_get_browser($browser));
        delete $pnumber{$name};
        update_browser();
        save_data();
}

sub quit                        #QUIT
{
        exit(0);
}



