
#include <cstdlib>
#include <cstdio>

#define  recordtype1  1 //not important here
#define  recordtype2  2 //not important here

#define edittype_bool 0
#define edittype_number 1
typedef struct typedescriptor
  {
  char TDrecordtype;
  char TDfieldscount;
  const char* TDfieldstypes;
  const void *TDmsgORptrtomsg;
  } TD;

//-------- user input submenu 2  description
     const char msg_TWO_a[]="How many beers per day  You drink?-";
     const char msg_TWO_b[]="How many coffee per day  You drink?-";
  const void *editmessages_td_two[]= //array of pointers
     { msg_TWO_a, //pointer to string
       msg_TWO_b  //pointer to string
     };
  const char fieldstype_td_two[]={edittype_number,edittype_number};
const TD TD_two=
 { recordtype2 ,//not important now
  2 , // 2 fields to input/change
  fieldstype_td_two,
  editmessages_td_two
 };
//-------- user input submenu 1  description


     const char msg_ONE_aA[]="Marriage status?-";
     const char msg_ONE_aB[]="Married.";
     const char msg_ONE_aC[]="Non married.";
    const void *msg_ONE_a_tab[]=
      { msg_ONE_aA,
        msg_ONE_aB,
        msg_ONE_aC
      };

    const char msg_ONE_b[]="How many pets You have?-";
    const char msg_ONE_c[]="How many friends You have?-";


 const void *editmessages_td_one[]=
   { msg_ONE_a_tab,//pointer to array of pointers
     msg_ONE_b,    //pointer to string
     msg_ONE_c     //pointer to string
   };

 const char fieldstype_td_one[]={edittype_bool,edittype_number,edittype_number};
const TD TD_one=
 { recordtype1 ,//not important now
  3 , // 3 fields to input/change
  fieldstype_td_one,
  editmessages_td_one
 };



//---- user input menu description
#define SUBMENUScount 2
const TD *EditMenu[SUBMENUScount]=
  {&TD_one,
   &TD_two
  };


//---- test routine for accessing strings
void testaccess(void)
 {char submenu,fieldnum,fieldscount,fieldtype;
  const char* fieldonestring;

  void **ptr1;
  //void **ptr2;
  void *ptr3;



 for (submenu=0;submenu<SUBMENUScount;submenu++)
  {printf("Submenu %d ---------n",submenu);
   fieldscount=EditMenu[submenu]->TDfieldscount;

   for (fieldnum=0;fieldnum<fieldscount;fieldnum++)
      {fieldtype=EditMenu[submenu]->TDfieldstypes[fieldnum];
       ptr1=(void**)EditMenu[submenu]->TDmsgORptrtomsg;

       if (fieldtype!=edittype_bool)
         {
          fieldonestring=(const char*)ptr1[fieldnum];
          printf("field %d ,prompt message= %s n",fieldnum,fieldonestring);
         } //edittype!=bool
         else
         {//B-BLOCK start
           ptr3=ptr1[fieldnum];
           ptr1=(void**)ptr3;

           fieldonestring=(const char*)ptr1[0];
           printf("field %d ,prompt message= %s n",fieldnum,  fieldonestring);

           fieldonestring=(const char*)ptr1[1];
           printf("--when 0,show as= %s n",  fieldonestring);

           fieldonestring=(const char*)ptr1[2];
           printf("--when 1,show as= %s n",  fieldonestring);
        //B-BLOCK end      
         };// edittype==bool
      };// end for(fieldnum)
  };//end for( submenu)
 } //end void testaccess()
//----------------------
int main(int argc, char *argv[])
{
  testaccess();
    system("PAUSE");
    return 0;//EXIT_SUCCESS;
}

