*****Listing 2*****

/**
***
*** CUG.C  
*** November 17, 1989 : C:\CUG\CUG , VEDTMNBT
***
*** (Calls functions defined in Vermont Views Interface Library)
***
**/

/* Author: Paul Combellick , The Computer Catalyst, (602) 280-2569 */


#include <string.h>
#include <vv_menu.h>                   /* Vermont Views Header File. */
#include <vv_str.h>                    /* Vermont Views Header File. */
#include <vv_bool.h>                   /* Vermont Views Header File. */
#include <vv_sys.h>                    /* Vermont Views Header File. */
#include <vv_date.h>                   /* Vermont Views Header File. */
#include <vv_time.h>                   /* Vermont Views Header File. */
#include <vv_long.h>                   /* Vermont Views Header File. */
#include <vv_form.h>                   /* Vermont Views Header File. */  
#include <vv_help.h>                   /* Vermont Views Header File. */  


/* declare external variables. */
/* BOX: extern does not exist */
extern char *name; 
extern char *address; 
extern char *city; 
extern char *state; 
extern char *zip; 
extern char *phone; 
extern char *fax; 


#ifdef LINT_ARGS
 extern int act_return(MFORMPTR);
 extern int act_bell( MFORMPTR );
 extern int act_SAMELEVEL( void );
 int CUG (void);
 int addCUG (void);
 extern int delCUG (void);
 int editCUG (void);
 extern int findCUG (void);
 extern int nextCUG (void);
 extern int prevCUG (void);
 int quitCUG (void);
 extern int gotopCUG (void);
 extern int insertCUG (void);
 extern int updateCUG (void);
 int blankCUG (void);
 extern int openCUG (void);
 extern int closeCUG (void);
 extern int readCUG (void);
 extern int unlockCUG (void);
#else
 extern int act_return();
 extern int act_bell();
 extern int act_SAMELEVEL();
 int CUG ();
 int addCUG ();
 extern int delCUG ();
 int editCUG ();
 extern int findCUG ();
 extern int nextCUG ();
 extern int prevCUG ();
 int quitCUG ();
 extern int gotopCUG ();
 extern int insertCUG ();
 extern int updateCUG ();
 int blankCUG ();
 extern int openCUG ();
 extern int closeCUG ();
 extern int readCUG ();
 extern int unlockCUG ();
#endif


/* declare form pointer variables */
DFORMPTR CUG_dfmp ;           /* pointer to the form        */

/* declare a pointers to each field */
DFIELDPTR CUG_fld1;
DFIELDPTR CUG_fld2;
DFIELDPTR CUG_fld3;
DFIELDPTR CUG_fld4;
DFIELDPTR CUG_fld5;
DFIELDPTR CUG_fld6;
DFIELDPTR CUG_fld7;



/* declare menu pointer variables */
MFORMPTR CUG_mfmp ;           /* pointer to the menu        */



/* declare a pointers to each menu option */
MFIELDPTR CUG_mn1;
MFIELDPTR CUG_mn2;
MFIELDPTR CUG_mn3;
MFIELDPTR CUG_mn4;
MFIELDPTR CUG_mn5;
MFIELDPTR CUG_mn6;
MFIELDPTR CUG_mn7;

/************************ BEGIN: CUG() ***********************
 * CUG: 
 */
CUG()
{

  blankCUG();                   /* blank all data field vars */
  if(  openCUG() != 0 )         /* open btrieve file (s). */
  {
    return;
  }

  gotopCUG();                   /* get first key in file */

  /*********************** define the form ***************************/

  /* define a form */
  CUG_dfmp = fm_def( 0, 0, 21,80, LNORMAL, BDR_NULLP );

  /* define boxes around form items ****/
  bg_boxdef( 0,0,21,80,LNORMAL,BDR_SPACEP,CUG_dfmp);
  bg_boxdef( 5,14,11,52,LNORMAL,BDR_DLNP,CUG_dfmp);

  /*********** define background text  */
  bg_txtdef( 1, 28, "C USER'S GROUP UI2 DEMO", LNORMAL, CUG_dfmp);
  bg_txtdef( 2, 28, "", LNORMAL, CUG_dfmp);
  bg_boxdef( 5,14,11,52,LNORMAL,BDR_DLNP, CUG_dfmp);
  bg_txtdef( 7, 19, "Name     :   [                         ]", LNORMAL,
             CUG_dfmp);
  bg_txtdef( 8, 19, "Address  :   [                         ]", LNORMAL,
             CUG_dfmp);
  bg_txtdef( 9, 19, "City     :   [                         ]", LNORMAL,
             CUG_dfmp);
  bg_txtdef( 10, 19, "State    :   [  ]    Zip :  [     -    ]", LNORMAL,
             CUG_dfmp);
  bg_txtdef( 12, 19, "Phone    :   [             ]", LNORMAL, CUG_dfmp);
  bg_txtdef( 13, 19, "Fax      :   [             ]", LNORMAL, CUG_dfmp);

  sfm_help( "*DATA HELP" , CUG_dfmp );  /* define form help keyword */


  /******* define form data fields *********/
  CUG_fld1 = fld_def( 7,33, NULLP , FADJACENT , "!!!!!!!!!!!!!!!!!!!!!!!!!", 
       F_STRING , (PTR) name, CUG_dfmp );
  CUG_fld2 = fld_def( 8,33, NULLP , FADJACENT , "XXXXXXXXXXXXXXXXXXXXXXXXX" ,
       F_STRING , (PTR) address, CUG_dfmp );
  CUG_fld3 = fld_def( 9,33, NULLP , FADJACENT , "XXXXXXXXXXXXXXXXXXXXXXXXX" ,
       F_STRING , (PTR) city, CUG_dfmp );
  CUG_fld4 = fld_def( 10,33, NULLP , FADJACENT , "!!", F_STRING , 
       (PTR) state, CUG_dfmp );
  CUG_fld5 = fld_def( 10,48, NULLP , FADJACENT , "UUUUU-UUUU", F_STRING , 
       (PTR) zip, CUG_dfmp );
  CUG_fld6 = fld_def( 12,33, NULLP , FADJACENT , "(UUU)UUU-UUUU", F_STRING , 
       (PTR) phone, CUG_dfmp );
  CUG_fld7 = fld_def( 13,33, NULLP , FADJACENT , "(UUU)UUU-UUUU", F_STRING , 
       (PTR) fax, CUG_dfmp );

  /******* set all the field options  ***/
  sf_opt( PICSKIP , ON , CUG_fld5 ); 

  /*** set all the field ranges ***/

  /* Define field help keywords */

  /* Define field begin & end functions. */


  /*********************** define the menu ***************************/
  /* define a menu */

  CUG_mfmp = mn_def( MNSTANDARD ,  AUTOPLACE,AUTOPLACE,AUTOSIZE,AUTOSIZE,
                     LMNINACT, BDR_NULLP );



  /******* define menu fields *********/
  CUG_mn1 = mnf_def( 23,15," ADD  ", NULLP, 
   NULLP,  addCUG, CUG_mfmp );
  CUG_mn2 = mnf_def( 23,22," DELETE ", NULLP, 
   NULLP,  delCUG, CUG_mfmp );
  CUG_mn3 = mnf_def( 23,31," EDIT ", NULLP, 
   NULLP,  editCUG, CUG_mfmp );
  CUG_mn4 = mnf_def( 23,38," FIND ", NULLP, 
   NULLP,  findCUG, CUG_mfmp );
  CUG_mn5 = mnf_def( 23,45," NEXT ", NULLP, 
   NULLP,  nextCUG, CUG_mfmp );
  CUG_mn6 = mnf_def( 23,52," PREV ", NULLP, 
   NULLP,  prevCUG, CUG_mfmp );
  CUG_mn7 = mnf_def( 23,59," QUIT ", NULLP, 
   NULLP,  quitCUG, CUG_mfmp );


  /*********** define background text  */
  bg_txtdef( 1, 28, "C USER'S GROUP UI2 DEMO", LNORMAL, CUG_mfmp);
  bg_txtdef( 2, 28, "", LNORMAL, CUG_mfmp);
  bg_boxdef( 5,14,11,52,LNORMAL,BDR_DLNP, CUG_mfmp);
  bg_txtdef( 7, 19, "Name     :   [                         ]", LNORMAL, CUG_mfmp);
  bg_txtdef( 8, 19, "Address  :   [                         ]", LNORMAL, CUG_mfmp);
  bg_txtdef( 9, 19, "City     :   [                         ]", LNORMAL, CUG_mfmp);
  bg_txtdef( 10, 19, "State    :   [  ]    Zip :  [     -    ]", LNORMAL, CUG_mfmp);
  bg_txtdef( 12, 19, "Phone    :   [             ]", LNORMAL, CUG_mfmp);
  bg_txtdef( 13, 19, "Fax      :   [             ]", LNORMAL, CUG_mfmp);


  /**************** display variables **/


  /* define boxes around menu items ****/
  bg_boxdef( 22,14,3,8,LNORMAL,BDR_DLNP,CUG_mfmp);
  bg_boxdef( 22,21,3,10,LNORMAL,BDR_DLNP,CUG_mfmp);
  bg_boxdef( 22,30,3,8,LNORMAL,BDR_DLNP,CUG_mfmp);
  bg_boxdef( 22,37,3,8,LNORMAL,BDR_DLNP,CUG_mfmp);
  bg_boxdef( 22,44,3,8,LNORMAL,BDR_DLNP,CUG_mfmp);
  bg_boxdef( 22,51,3,8,LNORMAL,BDR_DLNP,CUG_mfmp);
  bg_boxdef( 22,58,3,8,LNORMAL,BDR_DLNP,CUG_mfmp);


  /**** define trigger keys **********/
  smnf_selectch( 1 , LMNSELCH, CUG_mn1 );
  smnf_selectch( 1 , LMNSELCH, CUG_mn2 );
  smnf_selectch( 1 , LMNSELCH, CUG_mn3 );
  smnf_selectch( 1 , LMNSELCH, CUG_mn4 );
  smnf_selectch( 1 , LMNSELCH, CUG_mn5 );
  smnf_selectch( 1 , LMNSELCH, CUG_mn6 );
  smnf_selectch( 1 , LMNSELCH, CUG_mn7 );

  mn_up( CUG_mfmp );            /* display menu */
  fm_up( CUG_dfmp );            /* display form */

  mn_rd( 0, CUG_mfmp );         /* begin processing the menu */

  fm_dn( CUG_dfmp );            /* remove form */
  fm_free( CUG_dfmp );          /* Free memory allocate for form */

  mn_dn( CUG_mfmp );            /* remove menu */
  mn_free( CUG_mfmp );          /* free memory allocated for menu */

  closeCUG();                   /* close btrieve file (s) */
  return 0;
}
/****************************** END: CUG() *******************/
addCUG()
{
  blankCUG();
  fm_dn( CUG_dfmp );            /* remove form */
  mn_dn( CUG_mfmp );            /* remove menu */
  fm_up( CUG_dfmp );            /* display form */
  if ( fm_rd( 0, CUG_dfmp ) != AC_QUIT ) /* process the form */
  {
    insertCUG();
  }
  fm_dn( CUG_dfmp );            /* remove form */
  mn_up( CUG_mfmp );            /* display menu */
  mn_upd( CUG_mfmp );           /* update the menu background */
  fm_up( CUG_dfmp );            /* display form */
}
/****************************** END: addCUG() **************/
editCUG()
{
   fm_dn( CUG_dfmp );            /* remove the form */
   mn_dn( CUG_mfmp );            /* remove the menu */
   fm_up( CUG_dfmp );            /* display the form */

   switch ( readCUG() )          /* read & lock record */
   {
     case 0:                            /* no btrv error      */
       if ( fm_rd( 0, CUG_dfmp ) != AC_QUIT )  /* process the form */
       {
         if ( updateCUG() != 0 )
         {
            blankCUG();
         }
       }
       unlockCUG();
       break;

     case 4:                           /* key not found */
       addCUG();
       break;
   }
   fm_dn( CUG_dfmp );            /* remove the form */
   mn_up( CUG_mfmp );            /* display the menu */
   mn_upd( CUG_mfmp );           /* update the menu background */
   fm_up( CUG_dfmp );            /* display the form */
}
/****************************** END: editCUG() **************/
blankCUG()
{
  /* reset all input & display variables to their initial value. */
  strnset( name , ' ' , 25 ); 
  strnset( address , ' ' , 25 ); 
  strnset( city , ' ' , 25 ); 
  strnset( state , ' ' , 2 ); 
  strnset( zip , ' ' , 10 ); 
  strnset( phone , ' ' , 13 ); 
  strnset( fax , ' ' , 13 ); 
}
/****************************** END: blankCUG() **************/
quitCUG()
{
  act_return( CUG_mfmp );
}
/****************************** END: quitCUG() **************/



/****************************** EOF: CUG.C *************************/


                                 Figure 3.
