Advertisement
bitwise_gamgee

Untitled

May 20th, 2023
135
0
Never
2
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.94 KB | Fixit | 0 0
  1. #include<stdio.h>
  2. #include<ctype.h>
  3. #include<conio.h>
  4.  
  5. #define CLS system("cls")
  6.  
  7. struct Sprinkler {
  8.     int state;
  9.     int temperatureEffect;
  10.     int humidityEffect;
  11. };
  12.  
  13. struct Radiator {
  14.     int state;
  15.     int temperatureEffect;
  16. };
  17.  
  18. struct Vent {
  19.     int state;
  20.     int temperatureEffect;
  21.     int humidityEffect;
  22.     int draughtEffect;
  23. };
  24.  
  25. void initialize(void);
  26. void screen(void);
  27. void input(void);
  28. void OpenScreen(void);
  29.  
  30. int get_opt(int, int, char *, int, int);
  31. int inv_opt(char *, int, int);
  32. int get_cur(int, int, char *);
  33. int inv_cur(char *);
  34.  
  35. int hilimit(int);
  36. int lolimit(int);
  37.  
  38. void tmpcontrol(void);
  39. void humcontrol(void);
  40. void wincontrol(void);
  41.  
  42. void toohot(void);
  43. void toocold(void);
  44. void toohum(void);
  45. void toodry(void);
  46. void toowin(void);
  47. void alarm(char);
  48.  
  49. int resetflag = 0, quitflag = 0;
  50. int optmp = 0, ophum = 0, opwin = 0;
  51. int cutmp = 0, cuhum = 0, cuwin = 0;
  52.  
  53. struct Sprinkler sprinklers[2];
  54. struct Radiator radiators[4];
  55. struct Vent vents[5];
  56.  
  57. int main()
  58. {
  59.     while (quitflag == 0)
  60.     {
  61.         initialize();
  62.         screen();
  63.         input();
  64.  
  65.         while ((resetflag == 0) && (quitflag == 0))
  66.         {
  67.             screen();
  68.  
  69.             // Temperature Control
  70.             do
  71.             {
  72.                 cutmp = get_cur(20, 9, "Temperature");
  73.             } while (cutmp == -1);
  74.             tmpcontrol();
  75.  
  76.             // Humidity Control
  77.             if ((quitflag == 0) && (resetflag == 0))
  78.             {
  79.                 screen();
  80.                 do
  81.                 {
  82.                     cuhum = get_cur(20, 9, "Humidity");
  83.                 } while (cuhum == -1);
  84.                 humcontrol();
  85.             }
  86.  
  87.             // Draught Control
  88.             if ((quitflag == 0) && (resetflag == 0))
  89.             {
  90.                 screen();
  91.                 do
  92.                 {
  93.                     cuwin = get_cur(20, 9, "Draught");
  94.                 } while (cuwin == -1);
  95.                 wincontrol();
  96.             }
  97.         }
  98.     }
  99.     return 0;
  100. }
  101.  
  102. void OpenScreen(void)
  103. {
  104.     CLS;
  105.     fflush(stdin);
  106. }
  107.  
  108. void screen(void)
  109. {
  110.     OpenScreen();
  111.     putchar(26);
  112.     gotoxy(23, 1);
  113.     printf("***** Green House Status *****");
  114.     gotoxy(9, 3);
  115.     printf("Sprinklers              Radiators                Vents");
  116.     gotoxy(9, 5);
  117.     printf("SP1   SP2             R1  R2  R3  R4       V1  V2  V3  V4  V5");
  118.     gotoxy(9, 6);
  119.     printf("---   ---             --  --  --  --       --  --  --  --  --");
  120.     gotoxy(9, 7);
  121.     printf(" %d     %d               %d   %d   %d   %d        %d   %d   %d   %d   %d",
  122.            sprinklers[0].state, sprinklers[1].state, radiators[0].state, radiators[1].state, radiators[2].state, radiators[3].state,
  123.            vents[0].state, vents[1].state, vents[2].state, vents[3].state, vents[4].state);
  124.  
  125.     gotoxy(9, 11);
  126.     printf("  Optimum                Optimum                 Optimum");
  127.     gotoxy(9, 12);
  128.     printf("Temperature              Humidity                Draught");
  129.     gotoxy(9, 13);
  130.     printf("     %2d                    %2d                      %2d",
  131.            optmp, ophum, opwin);
  132.     gotoxy(9, 16);
  133.     printf("  Current                Current                 Current");
  134.     gotoxy(9, 17);
  135.     printf("Temperature              Humidity                Draught");
  136.     gotoxy(9, 18);
  137.     printf("     %2d                    %2d                      %2d",
  138.            cutmp, cuhum, cuwin);
  139.     gotoxy(9, 22);
  140.     printf("Key: Rads/Sprnk 0=Off,1=On. Vents 0=Shut,1/2=Half/Full Open.");
  141. }
  142.  
  143. int get_opt(int x, int y, char *strng, int min, int max)
  144. {
  145.     char ip[10];
  146.     int op;
  147.     gotoxy(x, y);
  148.     printf("                                                  ");
  149.     gotoxy(x, y);
  150.     printf("Enter Optimum %s  (%d-%d)  : ", strng, min, max);
  151.     fflush(stdin);
  152.     gets(ip);
  153.     op = inv_opt(ip, min, max);
  154.     return op;
  155. }
  156.  
  157. int inv_opt(char *strng, int min, int max)
  158. {
  159.     int op;
  160.     char *p;
  161.     p = strng;
  162.     while (*p != NULL)
  163.     {
  164.         if (!(isdigit(*p)))
  165.             return 0;
  166.         p++;
  167.     }
  168.     op = atoi(strng);
  169.     if ((op < min) || (op > max))
  170.     {
  171.         return 0;
  172.     }
  173.     else
  174.     {
  175.         return op;
  176.     }
  177. }
  178.  
  179. int get_cur(int x, int y, char *strng)
  180. {
  181.     char ip[10];
  182.     int op;
  183.     gotoxy(x, y);
  184.     printf("                                                    ");
  185.     gotoxy(x, y);
  186.     printf("Enter Current %s (Q)uit or (R)eset : ", strng);
  187.     fflush(stdin);
  188.     gets(ip);
  189.     op = inv_cur(ip);
  190.     return op;
  191. }
  192.  
  193. int inv_cur(char *strng)
  194. {
  195.     int op;
  196.     char *p;
  197.     p = strng;
  198.     while (*p != NULL)
  199.     {
  200.         if ((*p == 'q') || (*p == 'Q'))
  201.         {
  202.             quitflag = 1;
  203.             exit();
  204.         }
  205.         else if ((*p == 'r') || (*p == 'R'))
  206.         {
  207.             resetflag = 1;
  208.         }
  209.         else if (!(isdigit(*p)))
  210.         {
  211.             return -1;
  212.         }
  213.         p++;
  214.     }
  215.     op = atoi(strng);
  216.     return op;
  217. }
  218.  
  219. void initialize(void)
  220. {
  221.     resetflag = quitflag = 0;
  222.     optmp = ophum = opwin = 0;
  223.     cutmp = cuhum = cuwin = 0;
  224.  
  225.     // Initialize sprinklers
  226.     sprinklers[0].state = 0;
  227.     sprinklers[0].temperatureEffect = -2;
  228.     sprinklers[0].humidityEffect = 2;
  229.     sprinklers[1].state = 0;
  230.     sprinklers[1].temperatureEffect = -2;
  231.     sprinklers[1].humidityEffect = 2;
  232.  
  233.     // Initialize radiators
  234.     radiators[0].state = 0;
  235.     radiators[0].temperatureEffect = 2;
  236.     radiators[1].state = 0;
  237.     radiators[1].temperatureEffect = 2;
  238.     radiators[2].state = 0;
  239.     radiators[2].temperatureEffect = 2;
  240.     radiators[3].state = 0;
  241.     radiators[3].temperatureEffect = 2;
  242.  
  243.     // Initialize vents
  244.     vents[0].state = 0;
  245.     vents[0].temperatureEffect = 1;
  246.     vents[0].humidityEffect = 1;
  247.     vents[0].draughtEffect = -1;
  248.     vents[1].state = 0;
  249.     vents[1].temperatureEffect = 1;
  250.     vents[1].humidityEffect = 1;
  251.     vents[1].draughtEffect = -1;
  252.     vents[2].state = 0;
  253.     vents[2].temperatureEffect = 1;
  254.     vents[2].humidityEffect = 1;
  255.     vents[2].draughtEffect = -1;
  256.     vents[3].state = 0;
  257.     vents[3].temperatureEffect = 1;
  258.     vents[3].humidityEffect = 1;
  259.     vents[3].draughtEffect = -1;
  260.     vents[4].state = 0;
  261.     vents[4].temperatureEffect = 1;
  262.     vents[4].humidityEffect = 1;
  263.     vents[4].draughtEffect = -1;
  264. }
  265.  
  266. void input(void)
  267. {
  268.     do
  269.     {
  270.         optmp = get_opt(20, 9, "Temperature", 5, 99);
  271.     } while (optmp == 0);
  272.  
  273.     do
  274.     {
  275.         ophum = get_opt(20, 9, "Humidity", 5, 99);
  276.     } while (ophum == 0);
  277.  
  278.     do
  279.     {
  280.         opwin = get_opt(20, 9, "Draught", 5, 20);
  281.     } while (opwin == 0);
  282. }
  283.  
  284. int hilimit(int opt)
  285. {
  286.     if (opt < 10)
  287.     {
  288.         return opt + 2;
  289.     }
  290.     else if (opt >= 10)
  291.     {
  292.         return opt + (opt * 0.1) + 1;
  293.     }
  294.     return 0;
  295. }
  296.  
  297. int lolimit(int opt)
  298. {
  299.     if (opt < 10)
  300.     {
  301.         return opt - 2;
  302.     }
  303.     else if (opt >= 10)
  304.     {
  305.         return opt - (opt * 0.1);
  306.     }
  307.     return 0;
  308. }
  309.  
  310. void tmpcontrol(void)
  311. {
  312.     if (cutmp >= max)
  313.     {
  314.         toohot();
  315.     }
  316.     else if (cutmp <= min)
  317.     {
  318.         toocold();
  319.     }
  320. }
  321.  
  322. void humcontrol(void)
  323. {
  324.     if (cuhum >= max)
  325.     {
  326.         toohum();
  327.     }
  328.     else if (cuhum <= min)
  329.     {
  330.         toodry();
  331.     }
  332. }
  333.  
  334. void wincontrol(void)
  335. {
  336.     if (cuwin >= max)
  337.     {
  338.         toowin();
  339.     }
  340. }
  341.  
  342. void toohot(void)
  343. {
  344.     while ((cutmp >= max) && (resetflag == 0))
  345.     {
  346.         switch (radoff())
  347.         {
  348.             case 0:
  349.                 switch (venthopen('t'))
  350.                 {
  351.                     case 0:
  352.                         switch (ventfopen('t'))
  353.                         {
  354.                             case 0:
  355.                                 switch (sprnkon('t'))
  356.                                 {
  357.                                     case 0:
  358.                                         alarm('t');
  359.                                         break;
  360.                                 }
  361.                                 break;
  362.                         }
  363.                         break;
  364.                 }
  365.                 break;
  366.         }
  367.     }
  368. }
  369.  
  370. void toocold(void)
  371. {
  372.     while ((cutmp <= min) && (resetflag == 0))
  373.     {
  374.         switch (venthclos('t'))
  375.         {
  376.             case 0:
  377.                 switch (ventfclos('t'))
  378.                 {
  379.                     case 0:
  380.                         switch (sprnkoff('t'))
  381.                         {
  382.                             case 0:
  383.                                 switch (radon())
  384.                                 {
  385.                                     case 0:
  386.                                         alarm('c');
  387.                                         break;
  388.                                 }
  389.                                 break;
  390.                         }
  391.                         break;
  392.                 }
  393.                 break;
  394.         }
  395.     }
  396. }
  397.  
  398. void toohum(void)
  399. {
  400.     while ((cuhum >= max) && (resetflag == 0))
  401.     {
  402.         switch (sprnkoff('h'))
  403.         {
  404.             case 0:
  405.                 switch (venthopen('h'))
  406.                 {
  407.                     case 0:
  408.                         switch (ventfopen('h'))
  409.                         {
  410.                             case 0:
  411.                                 alarm('h');
  412.                                 break;
  413.                         }
  414.                         break;
  415.                 }
  416.                 break;
  417.         }
  418.     }
  419. }
  420.  
  421. void toodry(void)
  422. {
  423.     while ((cuhum <= min) && (resetflag == 0))
  424.     {
  425.         switch (sprnkon('h'))
  426.         {
  427.             case 0:
  428.                 switch (venthclos('h'))
  429.                 {
  430.                     case 0:
  431.                         switch (ventfclos('h'))
  432.                         {
  433.                             case 0:
  434.                                 alarm('d');
  435.                                 break;
  436.                         }
  437.                         break;
  438.                 }
  439.                 break;
  440.         }
  441.     }
  442. }
  443.  
  444. void toowin(void)
  445. {
  446.     while ((cuwin >= max) && (resetflag == 0))
  447.     {
  448.         switch (venthclos('d'))
  449.         {
  450.             case 0:
  451.                 switch (ventfclos('d'))
  452.                 {
  453.                     case 0:
  454.                         alarm('w');
  455.                         break;
  456.                 }
  457.                 break;
  458.         }
  459.     }
  460. }
  461.  
  462. void alarm(char mode)
  463. {
  464.     putchar(26);
  465.     gotoxy(30, 11);
  466.     printf("*** Warning ! ***");
  467.     gotoxy(34, 13);
  468.     switch (mode)
  469.     {
  470.         case 't':
  471.             printf("Too Hot !");
  472.             break;
  473.         case 'd':
  474.             printf("Too Dry !");
  475.             break;
  476.         case 'c':
  477.             printf("Too Cold !");
  478.             break;
  479.         case 'h':
  480.             printf("Too Humid !");
  481.             break;
  482.         case 'w':
  483.             printf("Too Draughty !");
  484.             break;
  485.     }
  486.     gotoxy(25, 15);
  487.     printf("Environment Limits Exceeded !");
  488.     gotoxy(28, 17);
  489.     printf("Attend Fault and Reset !");
  490.     resetflag = 1;
  491.     getch();
  492. }
  493.  
Advertisement
Comments
  • custompc
    1 year (edited)
    # text 0.10 KB | 0 0
    1. Fails with 10 errors (undef symbols) Also you can't use // comments on TC DOS has to be K&R style /*---*/
  • # text 0.19 KB | 0 0
    1. Honestly, why are you even using the extremely depreciated conio? I want to rewrite this using C99, but I have bigger fish to fry at the moment. Do you have a github or gitlab we can collab on?
Add Comment
Please, Sign In to add comment
Advertisement