Advertisement
Guest User

Untitled

a guest
Aug 20th, 2014
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.23 KB | None | 0 0
  1. /** header */
  2. #include <stdio.h>
  3. #include <iostream>
  4. #include <Windows.h>
  5. #include <ctime>
  6. #include <string>
  7. #include <array>
  8.  
  9. #ifndef hotel
  10. #define hotel
  11. enum level {
  12.     stupid,
  13.     disgusting,
  14.     horrible,
  15.     awful,
  16.     meh,
  17.     decent,
  18.     good,
  19.     better,
  20.     best,
  21.     fine,
  22.     hot
  23. };
  24. class Logger {
  25. public:
  26.     Logger();
  27.     void sout(std::string s);
  28. private:
  29.     const std::array<WORD, 5> colours{ {
  30.         0x04,
  31.         0x0E,
  32.         0x02,
  33.         0x0A,
  34.         0x07
  35.             } };
  36.     std::string getLevel(int lvl);
  37.     const HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
  38.     void consolas(WORD colour);
  39.     std::string sin();
  40.     void shout(hotel::level lvl, std::string s);
  41.     hotel::level getLevelFromSize(std::string s);
  42. public:
  43.     void log(hotel::level lvl, std::string message);
  44. };
  45. #endif
  46.  
  47. /** main */
  48. #include <iostream>
  49. #include <string>
  50. #include <array>
  51. #include <mutex>
  52. #include <thread>
  53. #include <Windows.h>
  54. #include "hotel.h"
  55.  
  56. COORD setCursor(HANDLE hstdout, int x, int y) {
  57.     COORD c;
  58.     c.X = x;
  59.     c.Y = y;
  60.     SetConsoleCursorPosition(hstdout, c);
  61.     return c;
  62. }
  63. COORD setCursor(HANDLE hstdout, COORD pos) {
  64.     SetConsoleCursorPosition(hstdout, pos);
  65.     return pos;
  66. }
  67. void writeToPos(HANDLE hstdout, hotel::Logger logger, std::string message, COORD pos) {
  68.     setCursor(hstdout, pos);
  69.     logger.sout(message);
  70. }
  71. void printAndUnderline(HANDLE hstdout, hotel::Logger logger, std::string text, COORD currentCursorPos) {
  72.     logger.sout(text);
  73.     setCursor(hstdout, currentCursorPos.X, currentCursorPos.Y + 1);
  74.     std::string underline = "^";
  75.     for (int i = 0; i < text.length() - 1; i++) {
  76.         underline += "^";
  77.     }
  78.     logger.sout(underline);
  79. }
  80. void initScreen(HANDLE hstdout, hotel::Logger logger, SMALL_RECT size) {
  81.     //area
  82.     COORD c = setCursor(hstdout, (int)(size.Left + 1), (int)(size.Top));
  83.     printAndUnderline(hstdout, logger, "AREA TITLE", c);
  84.  
  85.     //inv
  86.     c = setCursor(hstdout, (int)(size.Right - 73), (int)(size.Top));
  87.     printAndUnderline(hstdout, logger, "INVENTORY", c);
  88.  
  89.     //right border
  90.     int x = (int)(size.Right - 75);
  91.     for (int y = 0; y < size.Bottom; y++) {
  92.         setCursor(hstdout, x, y);
  93.         logger.sout("X"); //std::cout << "X" << endl;
  94.     }
  95.  
  96.     //divider
  97.     int y = (int)(size.Bottom / 3);
  98.     for (x; x < size.Right; x++){
  99.         setCursor(hstdout, x, y);
  100.         logger.sout("X");
  101.     }
  102.  
  103.     //chat
  104.     c = setCursor(hstdout, (int)(size.Right - 73), (int)((size.Bottom / 3) + 1));
  105.     printAndUnderline(hstdout, logger, "CHAT", c);
  106.  
  107.     //bottom border
  108.     y = (int)size.Bottom - 3;
  109.     for (x = 0; x < size.Right - 75; x++) {
  110.         setCursor(hstdout, x, y);
  111.         logger.sout("X");
  112.     }
  113. }
  114. /// <see cref="http://support.microsoft.com/default.aspx?scid=kb;en-us;124103"></see>
  115. HWND getConsoleHwnd() {
  116. #define MY_BUFSIZE 1024 // Buffer size for console window titles.
  117.     HWND hwndFound;         // This is what is returned to the caller.
  118.     char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
  119.     // WindowTitle.
  120.     char pszOldWindowTitle[MY_BUFSIZE]; // Contains original
  121.     // WindowTitle.
  122.  
  123.     // Fetch current window title.
  124.  
  125.     GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
  126.  
  127.     // Format a "unique" NewWindowTitle.
  128.  
  129.     wsprintf(pszNewWindowTitle, "%d/%d",
  130.         GetTickCount(),
  131.         GetCurrentProcessId());
  132.  
  133.     // Change current window title.
  134.  
  135.     SetConsoleTitle(pszNewWindowTitle);
  136.  
  137.     // Ensure window title has been updated.
  138.  
  139.     Sleep(40);
  140.  
  141.     // Look for NewWindowTitle.
  142.  
  143.     hwndFound = FindWindow(NULL, pszNewWindowTitle);
  144.  
  145.     // Restore original window title.
  146.  
  147.     SetConsoleTitle(pszOldWindowTitle);
  148.  
  149.     return(hwndFound);
  150. }
  151. int main(int argc, char *argv[]) {
  152.     AllocConsole();
  153.     HWND hwnd = getConsoleHwnd();
  154.     MoveWindow(hwnd, 0, 0, 1, 1, false);
  155.     const HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
  156.     COORD bufSize = GetLargestConsoleWindowSize(hstdout);
  157.     bufSize.X -= 2;
  158.     bufSize.Y -= 1;
  159.     SetConsoleScreenBufferSize(hstdout, bufSize);
  160.  
  161.     SMALL_RECT size;
  162.     size.Top = 0;
  163.     size.Left = 0;
  164.     size.Bottom = bufSize.Y - 1;
  165.     size.Right = bufSize.X - 1;
  166.     SetConsoleWindowInfo(hstdout, true, &size);
  167.  
  168.     hotel::Logger logger = Logger();
  169.     std::string s;
  170.  
  171.     initScreen(hstdout, logger, size);
  172.  
  173.     /*std::thread t1;
  174.     COORD tmp;
  175.     tmp.X = 10;
  176.     tmp.Y = 10;
  177.     t1 = std::thread(writeToPos, hstdout, logger, "thread 1 test", tmp);
  178.  
  179.     std::thread t2;
  180.     tmp.X = 30;
  181.     tmp.Y = 30;
  182.     t2 = std::thread(writeToPos, hstdout, logger, "thread 2 test", tmp);*/
  183.  
  184.     //where da typin' goes
  185.     logger.log(hotel::level::horrible, "type something you dumb bitch");
  186.     setCursor(hstdout, 35, size.Bottom + 100);
  187.     std::getline(std::cin, s);
  188.     //t1.join();
  189.     //t2.join();
  190.     return 0;
  191. }
  192.  
  193. /** Logger class */
  194. #include <stdio.h>
  195. #include <iostream>
  196. #include <Windows.h>
  197. #include <ctime>
  198. #include <string>
  199. #include <array>
  200. #include "hotel.h"
  201. class Logger {
  202. public:
  203.     Logger() {
  204.     }
  205.     void sout(std::string s) {
  206.         std::cout << s << std::endl;
  207.     }
  208. private:
  209.     const std::array<WORD, 5> colours{ {
  210.         0x04,
  211.         0x0E,
  212.         0x02,
  213.         0x0A,
  214.         0x07
  215.             } };
  216.     std::string getLevel(int lvl) {
  217.         switch (lvl) {
  218.         case hotel::level::stupid:
  219.             return "stupid";
  220.         case hotel::level::disgusting:
  221.             return "disgusting";
  222.         case hotel::level::horrible:
  223.             return "horrible";
  224.         case hotel::level::awful:
  225.             return "awful";
  226.         case hotel::level::meh:
  227.             return "meh";
  228.         case hotel::level::decent:
  229.             return "decent";
  230.         case hotel::level::good:
  231.             return "good";
  232.         case hotel::level::better:
  233.             return "better";
  234.         case hotel::level::best:
  235.             return "best";
  236.         case hotel::level::fine:
  237.             return "fine";
  238.         case hotel::level::hot:
  239.             return "hot";
  240.         default:
  241.             return "unknown";
  242.         }
  243.     }
  244.  
  245.     const HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
  246.     void consolas(WORD colour) {
  247.         SetConsoleTextAttribute(hstdout, colour);
  248.     }
  249.  
  250.     std::string sin() {
  251.         std::string s;
  252.         std::getline(std::cin, s);
  253.         return s;
  254.     }
  255.  
  256.     void shout(hotel::level lvl, std::string s) {
  257.         //set console text colour
  258.         switch (lvl) {
  259.         case hotel::level::stupid:
  260.         case hotel::level::disgusting:
  261.         case hotel::level::horrible:
  262.         case hotel::level::awful:
  263.             consolas(colours[0]);
  264.             break;
  265.         case hotel::level::meh:
  266.         case hotel::level::decent:
  267.             consolas(colours[1]);
  268.             break;
  269.         case hotel::level::good:
  270.         case hotel::level::better:
  271.             consolas(colours[2]);
  272.             break;
  273.         case hotel::level::best:
  274.         case hotel::level::hot:
  275.             consolas(colours[3]);
  276.             break;
  277.         }
  278.  
  279.         char buf[12];
  280.         time_t globtime = time(0);
  281.         struct tm* loctime = new tm();
  282.         localtime_s(loctime, &globtime);
  283.         std::strftime(buf, 12, "[%H:%M:%S]", loctime);
  284.         delete loctime;
  285.         std::string t = "THREAD:";
  286.         std::string i = std::to_string(GetCurrentThreadId());
  287.         sout(buf + t + i + "/" + getLevel(lvl) + ": " + s);
  288.         consolas(colours[4]);
  289.     }
  290.  
  291.     hotel::level getLevelFromSize(std::string s) {
  292.         if (s.length() < 10) return hot;
  293.         else if (s.length() < 20) return hotel::level::best;
  294.         else if (s.length() < 30) return hotel::level::better;
  295.         else if (s.length() < 40) return hotel::level::good;
  296.         else if (s.length() < 50) return hotel::level::decent;
  297.         else if (s.length() < 60) return hotel::level::meh;
  298.         else if (s.length() < 70) return hotel::level::awful;
  299.         else if (s.length() < 80) return hotel::level::horrible;
  300.         else if (s.length() < 90) return hotel::level::disgusting;
  301.         else if (s.length() > 90) return hotel::level::stupid;
  302.     }
  303. public:
  304.     void log(hotel::level lvl, std::string message) {
  305.         shout(lvl, message);
  306.     }
  307. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement