home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / APPS / hl10osrc.lzh / Lib / LLScrollPrompt.cc < prev    next >
Text File  |  1994-04-23  |  2KB  |  85 lines

  1. /* -*- Mode: C -*- */
  2. /* LLScrollPrompt.cc - LineList version of Scroll w/prompt
  3.  * Created by Robert Heller on Tue Mar 24 19:36:10 1992
  4.  *
  5.  * ------------------------------------------------------------------
  6.  * Home Libarian by Deepwoods Software
  7.  * Common Class library implementation code
  8.  * ------------------------------------------------------------------
  9.  * Modification History:
  10.  * ------------------------------------------------------------------
  11.  * Contents:
  12.  * ------------------------------------------------------------------
  13.  * 
  14.  * 
  15.  * Copyright (c) 1991,1992 by Robert heller (D/B/A Deepwoods Software)
  16.  *        All Rights Reserved
  17.  * 
  18.  */
  19.  
  20. #ifdef MESSYDOS
  21. #include <llscrpmt.h>
  22. #else
  23. #include <LLScrollPrompt.h>
  24. #endif
  25.  
  26. struct scrollstack {
  27.     LineList* next;
  28.     LineList* prev;
  29. };
  30.  
  31. const int stacksize = 20;
  32.  
  33. static scrollstack stack[stacksize];
  34.  
  35. int LLScrollPrompt::Scroll(const LineList* scrolltext,const char* prompt,char* answer,int answersize)
  36. {
  37.     int c = (Terminal::term->colms - strlen(Title)) >> 1;
  38.     Terminal::term->Clear();
  39.     Terminal::term->RevsPen();
  40.     Terminal::term->PutStrAt(1,c,Title);
  41.     Terminal::term->PlainPen();
  42.     LineList* n = (LineList*) scrolltext;
  43.     LineList* p = (LineList*) 0;
  44.     int stackpointer = 0;
  45.     int nchars = 0;
  46.     while (n != 0) {
  47.         stack[stackpointer].next = n;
  48.         stack[stackpointer].prev = p;
  49.         for (int crow = 0; crow < ScrollHeight; crow++) {
  50.             if (n == 0) break;
  51.             Terminal::term->PutStrInBox(ScrollRow+crow,ScrollCol,
  52.                         ScrollWidth,1,n->thisline);
  53.             p = n;
  54.             n = n->nextline;
  55.         }
  56.         if (crow < ScrollHeight) 
  57.             Terminal::term->PutStrInBox(ScrollRow+crow,ScrollCol,
  58.                             ScrollWidth,
  59.                             ScrollHeight-crow," ");
  60.         nchars = Terminal::term->PromptLine(PromptRow,0,prompt,answer,answersize);
  61.         if (nchars == 1) {
  62.             switch (answer[0]) {
  63.                 case '+': nchars = 0; break;
  64.                 case '-':
  65.                     if (stackpointer > 0) {
  66.                         stackpointer--;
  67.                         n = stack[stackpointer].next;
  68.                         p = stack[stackpointer].prev;
  69.                         stackpointer--;
  70.                     }
  71.                     nchars = 0;
  72.                     break;
  73.                 case 'q':
  74.                 case 'Q': return(0);
  75.             }
  76.         }
  77.         if (nchars != 0) return(nchars);
  78.         stackpointer++;
  79.     }
  80.     //return(Terminal::term->PromptLine(PromptRow,0,prompt,answer,answersize));
  81.     return(nchars);
  82. }
  83.  
  84.  
  85.