Subversion Repositories HomeAutomation

Rev

Rev 976 | Go to most recent revision | Blame | Last modification | View Log | SVN | RSS feed

  1.  
  2. #include <string>
  3.  
  4. /***************************************************************************
  5.  *   Copyright (C) 2004 by Mattias Runge                                   *
  6.  *   mattias@mrunge.se                                                     *
  7.  *                                                                         *
  8.  *   This program is free software; you can redistribute it and/or modify  *
  9.  *   it under the terms of the GNU General Public License as published by  *
  10.  *   the Free Software Foundation; either version 2 of the License, or     *
  11.  *   (at your option) any later version.                                   *
  12.  *                                                                         *
  13.  *   This program is distributed in the hope that it will be useful,       *
  14.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
  15.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
  16.  *   GNU General Public License for more details.                          *
  17.  *                                                                         *
  18.  *   You should have received a copy of the GNU General Public License     *
  19.  *   along with this program; if not, write to the                         *
  20.  *   Free Software Foundation, Inc.,                                       *
  21.  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  22.  ***************************************************************************/
  23. #include "tools.h"
  24.  
  25. string niceTime()
  26. {
  27.     string result;
  28.     struct tm tmStruct;
  29.     time_t t = time(NULL);
  30.     gmtime_r(&t, &tmStruct);
  31.  
  32.     result += lpad(itos(tmStruct.tm_hour), 2, '0');
  33.     result += ":";
  34.     result += lpad(itos(tmStruct.tm_min), 2, '0');
  35.     result += ":";
  36.     result += lpad(itos(tmStruct.tm_sec), 2, '0');
  37.  
  38.     return result;
  39. }
  40.  
  41. unsigned int bin2uint(string bin)
  42. {
  43.     unsigned int num = 0;
  44.  
  45.     for (int n = bin.length()-1; n >= 0; n--)
  46.     {
  47.         if (bin[n] == '1')
  48.             num += (unsigned int)pow(2.0f, (int)(bin.length()-1-n));
  49.     }
  50.  
  51.     return num;
  52. }
  53.  
  54. string invert(string bin)
  55. {
  56.     string inverted;
  57.  
  58.     for (int n = 0; n < bin.length(); n++)
  59.         inverted += (bin[n] == '1' ? '0' : '1');
  60.  
  61.     return inverted;
  62. }
  63.  
  64. float bin2float(string bin)
  65. {
  66.     float num = 0;
  67.  
  68.     if (bin.length() == 0)
  69.         return 0.0f;
  70.  
  71.     bool isNegative = false;;
  72.  
  73.     if (bin[0] == '1')
  74.     {
  75.         bin = invert(bin);
  76.         isNegative = true;
  77.     }
  78.  
  79.     for (int n = bin.length()-1; n > 0; n--)
  80.     {
  81.         if (bin[n] == '1')
  82.             num += pow(2.0f, (int)(bin.length()-1-n));
  83.     }
  84.  
  85.     num /= 64.0f;
  86.  
  87.     if (isNegative)
  88.         num = -num;
  89.  
  90.     return num;
  91. }
  92.  
  93. string bin2hex(string bin)
  94. {
  95.     string hex;
  96.  
  97.     while (bin.size() > 0)
  98.     {
  99.         string part = bin.substr(0, 4);
  100.         bin.erase(0, part.size());
  101.  
  102.         while (part.size() < 4)
  103.             part = "0" + part;
  104.  
  105.         if (part == "0000")
  106.             hex += '0';
  107.         else if (part == "0001")
  108.             hex += '1';
  109.         else if (part == "0010")
  110.             hex += '2';
  111.         else if (part == "0011")
  112.             hex += '3';
  113.         else if (part == "0100")
  114.             hex += '4';
  115.         else if (part == "0101")
  116.             hex += '5';
  117.         else if (part == "0110")
  118.             hex += '6';
  119.         else if (part == "0111")
  120.             hex += '7';
  121.         else if (part == "1000")
  122.             hex += '8';
  123.         else if (part == "1001")
  124.             hex += '9';
  125.         else if (part == "1010")
  126.             hex += 'a';
  127.         else if (part == "1011")
  128.             hex += 'b';
  129.         else if (part == "1100")
  130.             hex += 'c';
  131.         else if (part == "1101")
  132.             hex += 'd';
  133.         else if (part == "1110")
  134.             hex += 'e';
  135.         else if (part == "1111")
  136.             hex += 'f';
  137.     }
  138.  
  139.     return hex;
  140. }
  141.  
  142. string float2bin(float num, int length)
  143. {
  144.     string bin;
  145.  
  146.     ///FIXME
  147.  
  148.     while (bin.size() < length)
  149.         bin = "0" + bin;
  150.  
  151.     return bin;
  152. }
  153.  
  154. string hex2bin(string hex)
  155. {
  156.     hex = strtolower(hex);
  157.  
  158.     string bin;
  159.  
  160.     for (int n = 0; n < hex.length(); n++)
  161.     {
  162.         switch (hex[n])
  163.         {
  164.             case '0': bin += "0000"; break;
  165.             case '1': bin += "0001"; break;
  166.             case '2': bin += "0010"; break;
  167.             case '3': bin += "0011"; break;
  168.             case '4': bin += "0100"; break;
  169.             case '5': bin += "0101"; break;
  170.             case '6': bin += "0110"; break;
  171.             case '7': bin += "0111"; break;
  172.             case '8': bin += "1000"; break;
  173.             case '9': bin += "1001"; break;
  174.             case 'a': bin += "1010"; break;
  175.             case 'b': bin += "1011"; break;
  176.             case 'c': bin += "1100"; break;
  177.             case 'd': bin += "1101"; break;
  178.             case 'e': bin += "1110"; break;
  179.             case 'f': bin += "1111"; break;
  180.         }
  181.     }
  182.  
  183.     return bin;
  184. }
  185.  
  186. string uint2bin(unsigned int num, int length)
  187. {
  188.     string bin;
  189.  
  190.     while (num)
  191.     {
  192.         bin = char((num&1)+'0') + bin;
  193.         num >>= 1;
  194.     }
  195.  
  196.     while (bin.size() < length)
  197.         bin = "0" + bin;
  198.  
  199.     return bin;
  200. }
  201.  
  202. string uint2hex(unsigned int num, int length)
  203. {
  204.     return bin2hex(uint2bin(num, length));
  205. }
  206.  
  207. vector<string> explode(string delimiter, string str)
  208. {
  209.     vector<string> parts;
  210.     string::size_type startPos = 0;
  211.     string::size_type endPos = 0;
  212.  
  213.     while ((endPos = str.find(delimiter, startPos)) != string::npos)
  214.     {
  215.         parts.push_back(str.substr(startPos, endPos-startPos));
  216.         startPos = endPos+delimiter.length();
  217.     }
  218.  
  219.     if (startPos < str.length())
  220.     {
  221.         parts.push_back(str.substr(startPos, str.length()-startPos));
  222.     }
  223.  
  224.     return parts;
  225. }
  226.  
  227. string strtoupper(string s)
  228. {
  229.     for (unsigned int n = 0; n < s.size(); n++)
  230.         s[n] = (char)toupper(s[n]);
  231.  
  232.     return s;
  233. }
  234.  
  235. string strtolower(string s)
  236. {
  237.     for (unsigned int n = 0; n < s.size(); n++)
  238.         s[n] = (char)tolower(s[n]);
  239.  
  240.     return s;
  241. }
  242.  
  243. string trim(string s)
  244. {
  245.     return trim(s, ' ');
  246. }
  247.  
  248. string trim(string s, char c)
  249. {
  250.     while (s[0] == c)
  251.         s.erase(0, 1);
  252.  
  253.     while (s[s.length()-1] == c)
  254.         s.erase(s.length()-1, 1);
  255.  
  256.     return s;
  257. }
  258.  
  259. int stoi(const string s)
  260. {
  261.     istringstream in(s);
  262.     int i;
  263.     in >> i;
  264.     return i;
  265. }
  266.  
  267. string itos(int i)
  268. {
  269.     ostringstream out;
  270.     out << i;
  271.     return out.str();
  272. }
  273.  
  274. unsigned int stou(const string s)
  275. {
  276.     istringstream in(s);
  277.     unsigned int i;
  278.     in >> i;
  279.     return i;
  280. }
  281.  
  282. string utos(unsigned int i)
  283. {
  284.     ostringstream out;
  285.     out << i;
  286.     return out.str();
  287. }
  288.  
  289. float stof(const string s)
  290. {
  291.     istringstream in(s);
  292.     float f;
  293.     in >> f;
  294.     return f;
  295. }
  296.  
  297. string ftos(float f)
  298. {
  299.     ostringstream out;
  300.     out << f;
  301.     return out.str();
  302. }
  303.  
  304. string str_replace(string search, string replace, string str)
  305. {
  306.     vector<string> parts = explode(search, str);
  307.  
  308.     string result;
  309.     for (int n = 0; n < parts.size(); n++)
  310.     {
  311.         result += parts[n];
  312.  
  313.         if (n < parts.size()-1)
  314.             result += replace;
  315.     }
  316.  
  317.     return result;
  318. }
  319.  
  320. string file_get_contents(string filename)
  321. {
  322.     ifstream srcfile(filename.c_str());
  323.  
  324.     if (!srcfile.is_open())
  325.     {
  326.         srcfile.close();
  327.         return "";
  328.     }
  329.  
  330.     string buffer = "";
  331.     string line;
  332.  
  333.     while (!srcfile.eof())
  334.     {
  335.         getline(srcfile, line);
  336.  
  337.         if (srcfile.eof())
  338.             break;
  339.        
  340.         buffer += line + "\n";
  341.     };
  342.  
  343.     srcfile.close();
  344.  
  345.     return buffer;
  346. }
  347.  
  348. bool file_exists(string filename)
  349. {
  350.     ifstream file(filename.c_str());
  351.     if (file.is_open())
  352.     {
  353.         file.close();
  354.         return true;
  355.     }
  356.  
  357.     return false;
  358. }
  359.  
  360. string escape(string in)
  361. {
  362.     string out;
  363.  
  364.     for (int n = 0; n < in.length(); n++)
  365.     {
  366.         switch (in[n])
  367.         {
  368.             case '\r':
  369.                 break;
  370.  
  371.             case '\n':
  372.                 out += "\\n";
  373.                 break;
  374.  
  375.             case '\'':
  376.                 out += "\\'";
  377.                 break;
  378.  
  379.             case '"':
  380.                 out += "\\\"";
  381.                 break;
  382.  
  383.             default:
  384.                 out += in[n];
  385.                 break;
  386.         }
  387.     }
  388.  
  389.     return out;
  390. }
  391.  
  392. string rpad(string in, int length, char c)
  393. {
  394.     while (in.length() < length)
  395.     {
  396.         in += c;
  397.     }
  398.  
  399.     return in;
  400. }
  401.  
  402. string lpad(string in, int length, char c)
  403. {
  404.     while (in.length() < length)
  405.     {
  406.         in = c + in;
  407.     }
  408.  
  409.     return in;
  410. }
  411.  
  412.  
  413. // FileTools
  414.  
  415. vector<string> FileTools::GetDirList(string path)
  416. {
  417.     DIR *dir = opendir(path.c_str());
  418.     vector<string> list;
  419.  
  420.     if (!dir)
  421.         return list;
  422.  
  423.     dirent *d;
  424.     while ((d = readdir(dir)))
  425.     {
  426.         if (d->d_name[0] == '.')
  427.             continue;
  428.  
  429.         list.push_back(d->d_name);
  430.     }
  431.     closedir(dir);
  432.  
  433.     return list;
  434. }
  435.  
  436. string FileTools::GetUniqeFilename(string path, string prefix, string postfix)
  437. {
  438.     time_t now;
  439.     time(&now);
  440.  
  441.     string filename = path + prefix + itos(now);
  442.  
  443.     int index = 0;
  444.     while (1)
  445.     {
  446.         string file = filename + itos(index) + postfix;
  447.         if (!Exist(file))
  448.             break;
  449.         index++;
  450.     }
  451.  
  452.     filename += itos(index) + postfix;
  453.  
  454.     return filename;
  455. }
  456.  
  457. bool FileTools::SaveFile(string filepath, string data)
  458. {
  459.     ofstream destfile(filepath.c_str());
  460.     if (!destfile.is_open())
  461.     {
  462.         destfile.close();
  463.         return false;
  464.     }
  465.  
  466.     destfile << data;
  467.  
  468.     destfile.close();
  469.     return true;
  470. }
  471.  
  472. string FileTools::Get(string src)
  473. {
  474.     ifstream srcfile(src.c_str());
  475.     if (!srcfile.is_open())
  476.     {
  477.         srcfile.close();
  478.         return "";
  479.     }
  480.  
  481.     string buffer = "";
  482.     string line;
  483.     while (!srcfile.eof())
  484.     {
  485.         getline(srcfile, line);
  486.         if (srcfile.eof())
  487.             break;
  488.         buffer += line + "\n";
  489.     };
  490.  
  491.     srcfile.close();
  492.  
  493.     return buffer;
  494. }
  495.  
  496. bool FileTools::Copy(string src, string dest)
  497. {
  498.     ifstream srcfile(src.c_str());
  499.     if (!srcfile.is_open())
  500.     {
  501.         srcfile.close();
  502.         return false;
  503.     }
  504.  
  505.     ofstream destfile(dest.c_str());
  506.     if (!destfile.is_open())
  507.     {
  508.         destfile.close();
  509.         srcfile.close();
  510.         return false;
  511.     }
  512.  
  513.     string line;
  514.     while (!srcfile.eof())
  515.     {
  516.         getline(srcfile, line);
  517.         if (srcfile.eof())
  518.             break;
  519.         destfile << line << endl;
  520.     };
  521.  
  522.     destfile.close();
  523.     srcfile.close();
  524.  
  525.     return true;
  526. }
  527.  
  528. bool FileTools::Exist(string filename)
  529. {
  530.     ifstream file(filename.c_str());
  531.     if (file.is_open())
  532.     {
  533.         file.close();
  534.         return true;
  535.     }
  536.  
  537.     return false;
  538. }
  539.  
  540.  
  541.  
  542.  
  543.  
  544. /*
  545. void bd()
  546. {
  547.          int n,b=0,a[6],i=0,t=0;
  548.          clrscr();
  549.          printf("Conversion from Binary to Decimal\n");
  550.          printf("Enter Binary Number\n");
  551.          scanf("%d",&n);
  552.          while(n!=0)
  553.          {
  554.           a[i]=n%10;
  555.           n=n/10;
  556.           if(a[i]!=1 && a[i]!=0)
  557.            t=1;
  558.           i++;
  559.          }
  560.          a[i]=2;
  561.          n=1;
  562.          for(i=0;a[i]!=2;i++)
  563.          {
  564.           b=b+a[i]*n;
  565.           n=n*2;
  566.          }
  567.          if(t==0)
  568.           printf("Decimal Equivalent=%d",B);
  569.          else if(t==1)
  570.           printf("Entered number is not binary.");
  571.  
  572. }
  573.  
  574. void db()
  575. {
  576.          int dec,bin,n,i=0,a[10];
  577.          clrscr();
  578.          printf("Conversion from Decimal to Binary\n");
  579.          printf("Input decimal no.");
  580.          scanf("%d",&dec);
  581.          do
  582.          {
  583.          a[i]=dec%2;
  584.          dec=dec/2;
  585.          i++;
  586.          }while(dec!=0);
  587.          for(n=i-1;n>=0;n--)
  588.          printf("%d",a[n]);
  589. }
  590.  
  591. void doc()
  592. {
  593.          int n,i,a[10];
  594.          clrscr();
  595.          printf("Conversion from Decimal to Octal\n");
  596.          printf("Enter a Decimal number\n");
  597.          scanf("%d",&n);
  598.          i=0;
  599.          printf("Octal equavalent of %d is ",n);
  600.          while(n!=0)
  601.          {
  602.           a[i]=n%8;
  603.           n=n/8;
  604.           i++;
  605.          }
  606.          i--;
  607.          for(;i>=0;i--)
  608.           printf("%d",a[i]);
  609. }
  610.  
  611. void dh(long n)
  612. {
  613.          long i;
  614.          if(n>0)
  615.          {
  616.           i=n%16;
  617.           n=n/16;
  618.           dh(n);
  619.           if(i>=10)
  620.           {
  621.            switch(i)
  622.            {
  623.             case 10:
  624.              printf("A");
  625.              break;
  626.             case 11:
  627.              printf("B");
  628.              break;
  629.             case 12:
  630.              printf("C");
  631.              break;
  632.             case 13:
  633.              printf("D");
  634.              break;
  635.             case 14:
  636.              printf("E");
  637.              break;
  638.             case 15:
  639.              printf("F");
  640.              break;
  641.            }
  642.           }
  643.           else
  644.            printf("%ld",i);
  645.          }
  646. }
  647.  
  648. void od()
  649. {
  650.          unsigned long n,i=0,a,p=1,t=0;
  651.          clrscr();
  652.          printf("Conversion from Octal to Decimal\n");
  653.          printf("Enter a Octal number\n");
  654.          scanf("%ld",&n);
  655.          i=0;
  656.          printf("Decimal equavalent of %ld",n);
  657.          while(n!=0)
  658.          {
  659.           a=n%10;
  660.           if(a>7)
  661.            t=1;
  662.           n=n/10;
  663.           i=i+a*p;
  664.           p=p*8;
  665.          }
  666.          if(t==0)
  667.           printf("= %ld",i);
  668.          else if(t==1)
  669.           printf(" can't be calculated because it is not an Octal Number.\n");
  670. }
  671.  
  672. void ob()
  673. {
  674.          int n,a[6],i=0,t=0;
  675.          clrscr();
  676.          printf("Convertion from Octal to Binary.\n");
  677.          printf("Enter an Octal Number.\n");
  678.          scanf("%d",&n);
  679.          while(n!=0)
  680.          {
  681.           a[i]=n%10;
  682.           n=n/10;
  683.           if(a[i]>7)
  684.            t=1;
  685.           i++;
  686.          }
  687.          i--;
  688.          if(t==0)
  689.           for(;i>=0;i--)
  690.           {
  691.            switch(a[i])
  692.            {
  693.             case 0:
  694.              printf("000");
  695.              break;
  696.             case 1:
  697.              printf("001");
  698.              break;
  699.             case 2:
  700.              printf("010");
  701.              break;
  702.             case 3:
  703.              printf("011");
  704.              break;
  705.             case 4:
  706.              printf("100");
  707.              break;
  708.             case 5:
  709.              printf("101");
  710.              break;
  711.             case 6:
  712.              printf("110");
  713.              break;
  714.             case 7:
  715.              printf("111");
  716.              break;
  717.            }
  718.           }
  719.          if(t==1)
  720.           printf("Not a Octal number\n");
  721. }
  722.  
  723. void bo()
  724. {
  725.          int i=0,a[5],t=0;
  726.          long int n;
  727.          clrscr();
  728.          printf("Convertion From Binary to Octal\n");
  729.          printf("Enter a Binary number\n");
  730.          scanf("%ld",&n);
  731.          while(n!=0)
  732.          {
  733.           a[i]=n%1000;
  734.           n=n/1000;
  735.           if(a[i]>111)
  736.            t=1;
  737.           i++;
  738.          }
  739.          i--;
  740.          if(t==0)
  741.           for(;i>=0;i--)
  742.           {
  743.            switch(a[i])
  744.            {
  745.             case 0:
  746.              printf("0");
  747.              break;
  748.             case 1:
  749.              printf("1");
  750.              break;
  751.             case 10:
  752.              printf("2");
  753.              break;
  754.             case 11:
  755.              printf("3");
  756.              break;
  757.             case 100:
  758.              printf("4");
  759.              break;
  760.             case 101:
  761.              printf("5");
  762.              break;
  763.             case 110:
  764.              printf("6");
  765.              break;
  766.             case 111:
  767.              printf("7");
  768.              break;
  769.             default:
  770.    printf("\nEntered number is not binary.\nPrinted value is not correct.\n");
  771.              break;
  772.            }
  773.           }
  774.          if(t==1)
  775.           printf("Number is not Binary\n");
  776. }
  777.  
  778. void bh()
  779. {
  780.          int i=0,a[5],t=0;
  781.          long int n;
  782.          clrscr();
  783.          printf("Convertion from Binary to Hexadecimal\n");
  784.          printf("Enter a Binary number\n");
  785.          scanf("%ld",&n);
  786.          while(n!=0)
  787.          {
  788.           a[i]=n%10000;
  789.           n=n/10000;
  790.           if(a[i]>1111)
  791.            t=1;
  792.           i++;
  793.          }
  794.          i--;
  795.          if(t==0)
  796.           for(;i>=0;i--)
  797.           {
  798.            switch(a[i])
  799.            {
  800.             case 0:
  801.              printf("0");
  802.              break;
  803.             case 1:
  804.              printf("1");
  805.              break;
  806.             case 10:
  807.              printf("2");
  808.              break;
  809.             case 11:
  810.              printf("3");
  811.              break;
  812.             case 100:
  813.              printf("4");
  814.              break;
  815.             case 101:
  816.              printf("5");
  817.              break;
  818.             case 110:
  819.              printf("6");
  820.              break;
  821.             case 111:
  822.              printf("7");
  823.              break;
  824.             case 1000:
  825.              printf("8");
  826.              break;
  827.             case 1001:
  828.              printf("9");
  829.              break;
  830.             case 1010:
  831.              printf("A");
  832.              break;
  833.             case 1011:
  834.              printf("B");
  835.              break;
  836.             case 1100:
  837.              printf("C");
  838.              break;
  839.             case 1101:
  840.              printf("D");
  841.              break;
  842.             case 1110:
  843.              printf("E");
  844.              break;
  845.             case 1111:
  846.              printf("F");
  847.              break;
  848.             default:
  849.      printf("\nEntered number is not binary.\nPrinted value is not correct.\n");
  850.              break;
  851.            }
  852.           }
  853.          if(t==1)
  854.           printf("Number is not Binary\n");
  855. }
  856.  
  857. void hb()
  858. {
  859.          int i;
  860.          char s[20];
  861.          clrscr();
  862.          printf("Convertion from Hexadecimal to Binary\n");
  863.          printf("Enter a Hexadecimal number\n");
  864.          scanf("%s",s);
  865.          //gets(s);
  866.          printf("Binary Equivalent=");
  867.          for(i=0;s[i]!=NULL;i++)
  868.          {
  869.           switch(s[i])
  870.            {
  871.             case '0':
  872.              printf("0000");
  873.              break;
  874.             case '1':
  875.              printf("0001");
  876.              break;
  877.             case '2':
  878.              printf("0010");
  879.              break;
  880.             case '3':
  881.              printf("0011");
  882.              break;
  883.             case '4':
  884.              printf("0100");
  885.              break;
  886.             case '5':
  887.              printf("0101");
  888.              break;
  889.             case '6':
  890.              printf("0110");
  891.              break;
  892.             case '7':
  893.              printf("0111");
  894.              break;
  895.             case '8':
  896.              printf("1000");
  897.              break;
  898.             case '9':
  899.              printf("1001");
  900.              break;
  901.             case 'a':
  902.             case 'A':
  903.              printf("1010");
  904.              break;
  905.             case 'b':
  906.             case 'B':
  907.              printf("1011");
  908.              break;
  909.             case 'c':
  910.             case 'C':
  911.              printf("1100");
  912.              break;
  913.             case 'd':
  914.             case 'D':
  915.              printf("1101");
  916.              break;
  917.             case 'e':
  918.             case 'E':
  919.              printf("1110");
  920.              break;
  921.             case 'f':
  922.             case 'F':
  923.              printf("1111");
  924.              break;
  925.             default:
  926.        printf("\nEntered number is not Hexadecimal.\nPrinted value is not correct.\n");
  927.              break;
  928.            }
  929.           }
  930. }
  931.  
  932. void hd()
  933. {
  934.          int i,a[20];
  935.          unsigned long int h=0,m=1;
  936.          char s[20];
  937.          clrscr();
  938.          printf("Convertion from Hexadecimal to Decimal\n");
  939.          printf("Enter a Hexadecimal number\n");
  940.          scanf("%s",s);
  941.          printf("Decimal Equivalent=");
  942.          for(i=0;s[i]!=NULL;i++)
  943.          {
  944.           switch(s[i])
  945.            {
  946.             case '0':
  947.              a[i]=0;
  948.              break;
  949.             case '1':
  950.              a[i]=1;
  951.              break;
  952.             case '2':
  953.              a[i]=2;
  954.              break;
  955.             case '3':
  956.              a[i]=3;
  957.              break;
  958.             case '4':
  959.              a[i]=4;
  960.              break;
  961.             case '5':
  962.              a[i]=5;
  963.              break;
  964.             case '6':
  965.              a[i]=6;
  966.              break;
  967.             case '7':
  968.              a[i]=7;
  969.              break;
  970.             case '8':
  971.              a[i]=8;
  972.              break;
  973.             case '9':
  974.              a[i]=9;
  975.              break;
  976.             case 'a':
  977.             case 'A':
  978.              a[i]=10;
  979.              break;
  980.             case 'b':
  981.             case 'B':
  982.              a[i]=11;
  983.              break;
  984.             case 'c':
  985.             case 'C':
  986.              a[i]=12;
  987.              break;
  988.             case 'd':
  989.             case 'D':
  990.              a[i]=13;
  991.              break;
  992.             case 'e':
  993.             case 'E':
  994.              a[i]=14;
  995.              break;
  996.             case 'f':
  997.             case 'F':
  998.              a[i]=15;
  999.              break;
  1000.             default:
  1001.     printf("\nEntered number is not Hexadecimal.\nPrinted value is not correct.\n");
  1002.              break;
  1003.            }
  1004.          }
  1005.          i--;
  1006.          for(;i>=0;i--)
  1007.          {
  1008.           h=h+a[i]*m;
  1009.           m=m*16;
  1010.          }
  1011.           printf("%ld ",h);
  1012. }
  1013.  
  1014. void oh(long n)
  1015. {
  1016.          long i;
  1017.          if(n>0)
  1018.          {
  1019.           i=n%16;
  1020.           n=n/16;
  1021.           oh(n);
  1022.           if(i>=10)
  1023.           {
  1024.            switch(i)
  1025.            {
  1026.             case 10:
  1027.              printf("A");
  1028.              break;
  1029.             case 11:
  1030.              printf("B");
  1031.              break;
  1032.             case 12:
  1033.              printf("C");
  1034.              break;
  1035.             case 13:
  1036.              printf("D");
  1037.              break;
  1038.             case 14:
  1039.              printf("E");
  1040.              break;
  1041.             case 15:
  1042.              printf("F");
  1043.              break;
  1044.            }
  1045.           }
  1046.           else
  1047.            printf("%ld",i);
  1048.          }
  1049. }
  1050.  
  1051. void ho()
  1052. {
  1053.          int i,a[20];
  1054.          unsigned long int h=0,m=1;
  1055.          char s[20];
  1056.          clrscr();
  1057.          printf("Convertion from Hexadecimal to Octal\n");
  1058.          printf("Enter a Hexadecimal number\n");
  1059.          scanf("%s",s);
  1060.          // Converting hex to dec first
  1061.          for(i=0;s[i]!=NULL;i++)
  1062.          {
  1063.           switch(s[i])
  1064.            {
  1065.             case '0':
  1066.              a[i]=0;
  1067.              break;
  1068.             case '1':
  1069.              a[i]=1;
  1070.              break;
  1071.             case '2':
  1072.              a[i]=2;
  1073.              break;
  1074.             case '3':
  1075.              a[i]=3;
  1076.              break;
  1077.             case '4':
  1078.              a[i]=4;
  1079.              break;
  1080.             case '5':
  1081.              a[i]=5;
  1082.              break;
  1083.             case '6':
  1084.              a[i]=6;
  1085.              break;
  1086.             case '7':
  1087.              a[i]=7;
  1088.              break;
  1089.             case '8':
  1090.              a[i]=8;
  1091.              break;
  1092.             case '9':
  1093.              a[i]=9;
  1094.              break;
  1095.             case 'a':
  1096.             case 'A':
  1097.              a[i]=10;
  1098.              break;
  1099.             case 'b':
  1100.             case 'B':
  1101.              a[i]=11;
  1102.              break;
  1103.             case 'c':
  1104.             case 'C':
  1105.              a[i]=12;
  1106.              break;
  1107.             case 'd':
  1108.             case 'D':
  1109.              a[i]=13;
  1110.              break;
  1111.             case 'e':
  1112.             case 'E':
  1113.              a[i]=14;
  1114.              break;
  1115.             case 'f':
  1116.             case 'F':
  1117.              a[i]=15;
  1118.              break;
  1119.             default:
  1120.       printf("\nEntered number is not Hexadecimal.\nPrinted value is not correct.\n");
  1121.              break;
  1122.            }
  1123.          }
  1124.          i--;
  1125.          for(;i>=0;i--)
  1126.          {
  1127.           h=h+a[i]*m;
  1128.           m=m*16;
  1129.          }
  1130.          // Now convering from decimal to octal (h)
  1131.          i=0;
  1132.          printf("Octal equavalent=");
  1133.          while(h!=0)
  1134.          {
  1135.           a[i]=h%8;
  1136.           h=h/8;
  1137.           i++;
  1138.          }
  1139.          i--;
  1140.          for(;i>=0;i--)
  1141.           printf("%d",a[i]);
  1142. }*/
  1143.