Subversion Repositories HomeAutomation

Rev

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