docs: def list(self,header,choices):
          "Display list of choices.  As many as we can get in a page."
  
          if not self.__list_window:
              (y,x)=self.__main.getmaxyx()
              self.__list_window = self.__main.subwin(35,x,0,0)
              
          _lw=self.__list_window
  
  
          _lw.keypad(1)
          (y_max,x_max)=_lw.getmaxyx()
          (y_0, x_0)=_lw.getbegyx()
          x_start=1+x_0
          _lw.box()
          ## Number of list items allowed.
          ### first entry in the list appears at page_top
          page_top=y_0+2
          ### the last entry display will be at page_bottom
          page_bottom = y_max-2
  
          ### break the list into chunks.
          max_items_per_page = page_bottom-page_top
  
          ### start at the top of the list
          top_item=0
          f=open('log.msg','w')
          first_item=page_top
          current_item=0
          item_list=[]
          while 1:
              _lw.erase()
              _lw.box()
              _lw.addstr(page_top-1,x_start,header)
              if top_item > len(choices):
                  top_item=0
              for i in range(max_items_per_page):
                  item=i+top_item
                  if not item in range(len(choices)):
                      break
                  _lw.addstr(i+page_top,x_start,choices[item])
              ### provide a hint that there is more info in the list
              ### setup where we are in the list
              last_item=item
              if top_item > 0 :
                  _lw.addstr(page_bottom,x_start,"P(revious)")
              if last_item < len(choices):
                  _lw.addstr(page_bottom,x_max-8,"N(ext)")
              while 1:
                  c=_lw.getch(current_item-top_item+page_top,x_start)
                  if c==curses.KEY_UP:
                      current_item=current_item-1
                  elif c==curses.KEY_DOWN:
                      current_item=current_item+1
                  elif c==ord(' '):
                      if current_item in item_list:
                          _lw.addstr(choices[current_item])
                          item_list.remove(current_item)
                      else:
                          _lw.addstr(choices[current_item],curses.A_REVERSE)
                          item_list.append(current_item)
                  elif c==ord('P'):
                      top_item=top_item-max_items_per_page
                      current_item=top_item
                      break
                  elif c==ord('N'):
                      top_item=top_item + max_items_per_page
                      current_item=top_item
                      break
                  elif c==10:
                      return(item_list)
                  elif c==ord('q'):
                      _lw.erase()
                      return(None)
  		elif c==ord('x'):
  		    choices[current_item]=choices[current_item][:4]+" "+choices[current_item][5:]
                      _lw.addstr(choices[current_item])
  		else:
  		    choices[current_item]=choices[current_item][:7]+chr(c).capitalize()+choices[current_item][8:]
                      _lw.addstr(choices[current_item])
  
                  if current_item > last_item-1:
                      if last_item < len(choices):
                          top_item = top_item+1
                          break
                      else:
                          current_item=current_item-1
                  if current_item < top_item :
                      if top_item > 0:
                          top_item = top_item-1
                          break
                      else:
                          current_item=current_item+1