Advertisement
Mark2020H

Code for using terminal colors as with menus

Feb 25th, 2020
568
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <thread>
  4. #include <chrono>
  5. #include <fstream>
  6. #include <vector>
  7. #include <stdlib.h>
  8.  
  9.  
  10. // Name space resolutions
  11. using namespace std ;
  12.  
  13. //prototypes
  14. void Menu(int &);
  15.  
  16. // Forward declare the slow_print function
  17. void slow_print(string message , unsigned int);
  18.  
  19.  
  20. // Main function
  21. int main()
  22. {
  23.     int choice = 0;
  24.    
  25.     string filename ;
  26.     string mystring ;
  27.    
  28.    
  29.  
  30.    
  31.    
  32.     Menu(choice) ;
  33.    
  34.     do
  35.     {
  36.     switch(choice)
  37.             {
  38.             case 1:
  39.            
  40.                     // begin block statement
  41.                     {
  42.                         // Due to the way that cin works we have to clear the input first
  43.                         cin.clear();
  44.                         cin.ignore(numeric_limits<streamsize>::max(), '\n');
  45.                         // if we dont the above then prompt prints twice first time round
  46.                        
  47.                         do{
  48.                         cout <<"\nPlease enter name of file to read  or enter M to return to menu : " ;
  49.                         getline(cin, filename);
  50.                         }while (filename.length()==0) ;
  51.                        
  52.                         if (filename.compare("M")!=0)
  53.                         {
  54.                            
  55.                            
  56.                        
  57.                        
  58.                                 ifstream myfile(filename);
  59.                                 if(!myfile) //Always test the file open.
  60.                                 {
  61.                                 cout<<"Error opening file"<< endl;
  62.                                 return -1  ;
  63.                                 }
  64.                                
  65.                                 while (std::getline(myfile, mystring)) {
  66.                                 // output the line:
  67.                                
  68.                                
  69.                                 slow_print(mystring, 80);
  70.                                 }
  71.                        
  72.                         myfile.close() ;
  73.                        
  74.                         }
  75.                        
  76.                         // for unix / linux systems only
  77.                         system("clear");
  78.                
  79.                         break;
  80.                     } //end block statements
  81.                    
  82.                    
  83.             case 2:
  84.                                
  85.                                            
  86.                      break ;
  87.                  
  88.                        
  89.             default:
  90.            
  91.                 // for unix / linux systems only
  92.                 system("clear");
  93.                 cout << "\nInvalid input Please re enter " ;
  94.             }
  95.            
  96.             // call menu again
  97.            
  98.             Menu(choice) ;
  99.            
  100.            
  101.     }while(choice!=2)  ;
  102.    
  103.    
  104.     cout << "Exiting  menu thankyou for using this  " << endl ;
  105.    
  106.  
  107.     return (EXIT_SUCCESS) ;
  108. }
  109.  
  110. // Implement the slow_print function
  111. /**
  112.  * Function to print each character in a string with a delay (a "typewriter" effect)
  113.  * @param message         The string to print
  114.  * @param millis_per_char Milliseconds to take to print each character
  115.  */
  116.  
  117.  
  118. void slow_print(string message, unsigned int millis_per_char)
  119. {
  120.    
  121.     const std::string red("\033[0;31m");
  122.     const std::string green("\033[1;32m");
  123.     const std::string yellow("\033[1;33m");
  124.     const std::string cyan("\033[0;36m");
  125.     const std::string magenta("\033[0;35m");
  126.     const std::string reset("\033[0m");
  127.    
  128.    
  129.     // Range loops are "for each" constructs; here: for each character in the string
  130.     for (const char c: message)
  131.     {
  132.         // flush is used to make sure the buffer is emptied to the terminal immediately
  133.         cout << cyan << c << reset << flush;
  134.  
  135.         // Ask the thread to sleep for at least n millis.
  136.         this_thread::sleep_for(std::chrono::milliseconds(millis_per_char));
  137.     }
  138. }
  139.  
  140. void Menu(int &choice)
  141.     {
  142.          cout << "\n    Choose an option:";
  143.          cout << "\n...................................";
  144.          cout << "\n 1- Instructions ";
  145.          cout << "\n 2- Exit ";
  146.          
  147.          cout << "\n\nEnter your choice: ";
  148.          cin >> choice ;
  149.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement