/* Copyright 1993 by gregg hanna */
#include <curses.h>
#include "patchlevel.h"
#include "rolo.h"
#include "roloP.h"

extern WINDOW *listWin;
extern int top_of_screen, linec, linew, active_line;

static void formatstr(r,s,n)
     RoloRec *r;
     char *s;
     int n;
{
  int i;
  sprintf(s,"%-30s %s, %s",
	  r->name   ?r->name:   "",
	  r->number ?r->number: "",
	  r->number2?r->number2:"");
  if ( strlen(s) < n )
    for ( i = strlen(s); i < n; i++ )
      s[i] = ' ';
  s[n] = '\0';
}

void PutLineOnScreen(ln)
     int ln;
{
  RoloRec *rr;
  char *buf, *s;
  int n;

  if ( top_of_screen < 0 ) top_of_screen = 0;
  buf = (char*)malloc(500+linew);
  wmove(listWin,ln-top_of_screen,0);
  for ( n = 0, rr = RoloList; rr != NULL; rr = rr->next ) {
    if ( rr->on ) {
      if ( n == ln ) {
#ifndef _STANDOUT
	formatstr(rr,buf,linew-1);
	waddch(listWin,((n==active_line)?'>':' '));
        waddstr(listWin,buf);
#else
	formatstr(rr,buf,linew);
	if ( n != active_line ) waddstr(listWin,buf);
	else for ( s = buf; *s != '\0'; s++ ) waddch(listWin,*s|_STANDOUT);
#endif
	break;
      }
      n++;
    }
  }
  if ( rr == NULL ) wclrtoeol(listWin);
  free(buf);
}

void PutListOnScreen()
{
  int i;
  for ( i = top_of_screen; i < top_of_screen + linec; i++ )
    PutLineOnScreen(i);
}
