home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume17 / e2 / part02 / ask_hist.c next >
C/C++ Source or Header  |  1989-02-08  |  3KB  |  108 lines

  1. #include "e.h"
  2.  
  3.  
  4. /*
  5.  * Question the user about which file from the history is wanted.
  6.  *
  7.  */
  8. void
  9. ask_hist()
  10. {
  11.     register int i;
  12.     register int option;
  13.  
  14.     /* Print the history. */
  15.     for (i = 0; i < hist_count; i++){
  16.         ok_fprintf(stderr, "\t[%d]: %s\n", hist_count-i-1, hist[i]);
  17.     }
  18.  
  19.     option = char_in("select -> ");
  20.  
  21.     /* 
  22.      * Process the option and put the appropriate file name into the 
  23.      * arg variable.
  24.      *
  25.      */
  26.  
  27.     if (option == '\n'){
  28.         /* 
  29.          * They want the last file of the list. 
  30.          * There's no need to reconstruct, the history is already correct.
  31.          *
  32.          */
  33.         ok_fprintf(stderr, "%s\n", hist[hist_count - 1]);
  34.         ok_sprintf(arg, "%s", hist[hist_count - 1]);
  35.         abandon();
  36.         return;
  37.     }
  38.     else if (option == (int)erase){
  39.         /* 
  40.          * They want to leave. 
  41.          *
  42.          */
  43.         ok_fprintf(stderr, "\n");
  44.         abandon();
  45.         exit(1);
  46.     }
  47.     else if (option >= '0' && option <= '0' + hist_count - 1){
  48.         /* 
  49.          * They have requested a file by its history number. 
  50.          *
  51.          */
  52.         register int want = hist_count - (option - '0') - 1;
  53.         ok_fprintf(stderr, "%s\n", hist[want]);
  54.         ok_sprintf(arg, "%s", hist[want]);
  55.         reconstruct(want);
  56.         return;
  57.     }
  58.     else{
  59.         /* 
  60.          * Looks like they want to name a specific file. Echo the 
  61.          * character back to the screen. Then get the rest of the filename.
  62.          *
  63.          */
  64.         ok_fprintf(stderr, "%c", option);
  65.         arg[0] = (char)option;
  66.         i = 1;
  67.         while ((arg[i] = (char)getc(stdin)) != '\n'){
  68.             i++;
  69.         }
  70.         arg[i] = '\0';
  71.  
  72.         /* 
  73.          * Seeing as they typed in the name, try and help with spelling. 
  74.          * If you can't help with spelling, see if there is a file in a
  75.          * directory mentioned in the VIPATH list that might have been the
  76.          * file that was meant.
  77.          *
  78.          */
  79.         if (!spell_help(0)){
  80.             dir_find();
  81.         }
  82.  
  83.         /* 
  84.          * If it is in the history then reconstruct and return. 
  85.          *
  86.          */
  87.         for (i = 0; i < hist_count; i++){
  88.             if (!strcmp(hist[i], arg)){
  89.                 reconstruct(i);
  90.                 return;
  91.             }
  92.         }
  93.  
  94.         /* 
  95.          * Otherwise reconstruct, leaving out the oldest name if needed.
  96.          * reconstruct(-1) will exclude nothing - the history is not full.
  97.          *
  98.          */
  99.         if (hist_count == HIST_LINES){
  100.             reconstruct(0);
  101.         }
  102.         else{
  103.             reconstruct(-1);
  104.         }
  105.     }
  106.     return;
  107. }
  108.