Subversion Repositories HomeAutomation

Rev

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 '\n':
  334.                 out += "\\n";
  335.                 break;
  336.  
  337.             default:
  338.                 out += in[n];
  339.                 break;
  340.         }
  341.     }
  342.  
  343.     return out;
  344. }
  345.  
  346. // FileTools
  347.  
  348. vector<string> FileTools::GetDirList(string path)
  349. {
  350.     DIR *dir = opendir(path.c_str());
  351.     vector<string> list;
  352.  
  353.     if (!dir)
  354.         return list;
  355.  
  356.     dirent *d;
  357.     while ((d = readdir(dir)))
  358.     {
  359.         if (d->d_name[0] == '.')
  360.             continue;
  361.  
  362.         list.push_back(d->d_name);
  363.     }
  364.     closedir(dir);
  365.  
  366.     return list;
  367. }
  368.  
  369. string FileTools::GetUniqeFilename(string path, string prefix, string postfix)
  370. {
  371.     time_t now;
  372.     time(&now);
  373.  
  374.     string filename = path + prefix + itos(now);
  375.  
  376.     int index = 0;
  377.     while (1)
  378.     {
  379.         string file = filename + itos(index) + postfix;
  380.         if (!Exist(file))
  381.             break;
  382.         index++;
  383.     }
  384.  
  385.     filename += itos(index) + postfix;
  386.  
  387.     return filename;
  388. }
  389.  
  390. bool FileTools::SaveFile(string filepath, string data)
  391. {
  392.     ofstream destfile(filepath.c_str());
  393.     if (!destfile.is_open())
  394.     {
  395.         destfile.close();
  396.         return false;
  397.     }
  398.  
  399.     destfile << data;
  400.  
  401.     destfile.close();
  402.     return true;
  403. }
  404.  
  405. string FileTools::Get(string src)
  406. {
  407.     ifstream srcfile(src.c_str());
  408.     if (!srcfile.is_open())
  409.     {
  410.         srcfile.close();
  411.         return "";
  412.     }
  413.  
  414.     string buffer = "";
  415.     string line;
  416.     while (!srcfile.eof())
  417.     {
  418.         getline(srcfile, line);
  419.         if (srcfile.eof())
  420.             break;
  421.         buffer += line + "\n";
  422.     };
  423.  
  424.     srcfile.close();
  425.  
  426.     return buffer;
  427. }
  428.  
  429. bool FileTools::Copy(string src, string dest)
  430. {
  431.     ifstream srcfile(src.c_str());
  432.     if (!srcfile.is_open())
  433.     {
  434.         srcfile.close();
  435.         return false;
  436.     }
  437.  
  438.     ofstream destfile(dest.c_str());
  439.     if (!destfile.is_open())
  440.     {
  441.         destfile.close();
  442.         srcfile.close();
  443.         return false;
  444.     }
  445.  
  446.     string line;
  447.     while (!srcfile.eof())
  448.     {
  449.         getline(srcfile, line);
  450.         if (srcfile.eof())
  451.             break;
  452.         destfile << line << endl;
  453.     };
  454.  
  455.     destfile.close();
  456.     srcfile.close();
  457.  
  458.     return true;
  459. }
  460.  
  461. bool FileTools::Exist(string filename)
  462. {
  463.     ifstream file(filename.c_str());
  464.     if (file.is_open())
  465.     {
  466.         file.close();
  467.         return true;
  468.     }
  469.  
  470.     return false;
  471. }
  472.  
  473.  
  474.  
  475.  
  476.  
  477. /*
  478. void bd()
  479. {
  480.          int n,b=0,a[6],i=0,t=0;
  481.          clrscr();
  482.          printf("Conversion from Binary to Decimal\n");
  483.          printf("Enter Binary Number\n");
  484.          scanf("%d",&n);
  485.          while(n!=0)
  486.          {
  487.           a[i]=n%10;
  488.           n=n/10;
  489.           if(a[i]!=1 && a[i]!=0)
  490.            t=1;
  491.           i++;
  492.          }
  493.          a[i]=2;
  494.          n=1;
  495.          for(i=0;a[i]!=2;i++)
  496.          {
  497.           b=b+a[i]*n;
  498.           n=n*2;
  499.          }
  500.          if(t==0)
  501.           printf("Decimal Equivalent=%d",B);
  502.          else if(t==1)
  503.           printf("Entered number is not binary.");
  504.  
  505. }
  506.  
  507. void db()
  508. {
  509.          int dec,bin,n,i=0,a[10];
  510.          clrscr();
  511.          printf("Conversion from Decimal to Binary\n");
  512.          printf("Input decimal no.");
  513.          scanf("%d",&dec);
  514.          do
  515.          {
  516.          a[i]=dec%2;
  517.          dec=dec/2;
  518.          i++;
  519.          }while(dec!=0);
  520.          for(n=i-1;n>=0;n--)
  521.          printf("%d",a[n]);
  522. }
  523.  
  524. void doc()
  525. {
  526.          int n,i,a[10];
  527.          clrscr();
  528.          printf("Conversion from Decimal to Octal\n");
  529.          printf("Enter a Decimal number\n");
  530.          scanf("%d",&n);
  531.          i=0;
  532.          printf("Octal equavalent of %d is ",n);
  533.          while(n!=0)
  534.          {
  535.           a[i]=n%8;
  536.           n=n/8;
  537.           i++;
  538.          }
  539.          i--;
  540.          for(;i>=0;i--)
  541.           printf("%d",a[i]);
  542. }
  543.  
  544. void dh(long n)
  545. {
  546.          long i;
  547.          if(n>0)
  548.          {
  549.           i=n%16;
  550.           n=n/16;
  551.           dh(n);
  552.           if(i>=10)
  553.           {
  554.            switch(i)
  555.            {
  556.             case 10:
  557.              printf("A");
  558.              break;
  559.             case 11:
  560.              printf("B");
  561.              break;
  562.             case 12:
  563.              printf("C");
  564.              break;
  565.             case 13:
  566.              printf("D");
  567.              break;
  568.             case 14:
  569.              printf("E");
  570.              break;
  571.             case 15:
  572.              printf("F");
  573.              break;
  574.            }
  575.           }
  576.           else
  577.            printf("%ld",i);
  578.          }
  579. }
  580.  
  581. void od()
  582. {
  583.          unsigned long n,i=0,a,p=1,t=0;
  584.          clrscr();
  585.          printf("Conversion from Octal to Decimal\n");
  586.          printf("Enter a Octal number\n");
  587.          scanf("%ld",&n);
  588.          i=0;
  589.          printf("Decimal equavalent of %ld",n);
  590.          while(n!=0)
  591.          {
  592.           a=n%10;
  593.           if(a>7)
  594.            t=1;
  595.           n=n/10;
  596.           i=i+a*p;
  597.           p=p*8;
  598.          }
  599.          if(t==0)
  600.           printf("= %ld",i);
  601.          else if(t==1)
  602.           printf(" can't be calculated because it is not an Octal Number.\n");
  603. }
  604.  
  605. void ob()
  606. {
  607.          int n,a[6],i=0,t=0;
  608.          clrscr();
  609.          printf("Convertion from Octal to Binary.\n");
  610.          printf("Enter an Octal Number.\n");
  611.          scanf("%d",&n);
  612.          while(n!=0)
  613.          {
  614.           a[i]=n%10;
  615.           n=n/10;
  616.           if(a[i]>7)
  617.            t=1;
  618.           i++;
  619.          }
  620.          i--;
  621.          if(t==0)
  622.           for(;i>=0;i--)
  623.           {
  624.            switch(a[i])
  625.            {
  626.             case 0:
  627.              printf("000");
  628.              break;
  629.             case 1:
  630.              printf("001");
  631.              break;
  632.             case 2:
  633.              printf("010");
  634.              break;
  635.             case 3:
  636.              printf("011");
  637.              break;
  638.             case 4:
  639.              printf("100");
  640.              break;
  641.             case 5:
  642.              printf("101");
  643.              break;
  644.             case 6:
  645.              printf("110");
  646.              break;
  647.             case 7:
  648.              printf("111");
  649.              break;
  650.            }
  651.           }
  652.          if(t==1)
  653.           printf("Not a Octal number\n");
  654. }
  655.  
  656. void bo()
  657. {
  658.          int i=0,a[5],t=0;
  659.          long int n;
  660.          clrscr();
  661.          printf("Convertion From Binary to Octal\n");
  662.          printf("Enter a Binary number\n");
  663.          scanf("%ld",&n);
  664.          while(n!=0)
  665.          {
  666.           a[i]=n%1000;
  667.           n=n/1000;
  668.           if(a[i]>111)
  669.            t=1;
  670.           i++;
  671.          }
  672.          i--;
  673.          if(t==0)
  674.           for(;i>=0;i--)
  675.           {
  676.            switch(a[i])
  677.            {
  678.             case 0:
  679.              printf("0");
  680.              break;
  681.             case 1:
  682.              printf("1");
  683.              break;
  684.             case 10:
  685.              printf("2");
  686.              break;
  687.             case 11:
  688.              printf("3");
  689.              break;
  690.             case 100:
  691.              printf("4");
  692.              break;
  693.             case 101:
  694.              printf("5");
  695.              break;
  696.             case 110:
  697.              printf("6");
  698.              break;
  699.             case 111:
  700.              printf("7");
  701.              break;
  702.             default:
  703.    printf("\nEntered number is not binary.\nPrinted value is not correct.\n");
  704.              break;
  705.            }
  706.           }
  707.          if(t==1)
  708.           printf("Number is not Binary\n");
  709. }
  710.  
  711. void bh()
  712. {
  713.          int i=0,a[5],t=0;
  714.          long int n;
  715.          clrscr();
  716.          printf("Convertion from Binary to Hexadecimal\n");
  717.          printf("Enter a Binary number\n");
  718.          scanf("%ld",&n);
  719.          while(n!=0)
  720.          {
  721.           a[i]=n%10000;
  722.           n=n/10000;
  723.           if(a[i]>1111)
  724.            t=1;
  725.           i++;
  726.          }
  727.          i--;
  728.          if(t==0)
  729.           for(;i>=0;i--)
  730.           {
  731.            switch(a[i])
  732.            {
  733.             case 0:
  734.              printf("0");
  735.              break;
  736.             case 1:
  737.              printf("1");
  738.              break;
  739.             case 10:
  740.              printf("2");
  741.              break;
  742.             case 11:
  743.              printf("3");
  744.              break;
  745.             case 100:
  746.              printf("4");
  747.              break;
  748.             case 101:
  749.              printf("5");
  750.              break;
  751.             case 110:
  752.              printf("6");
  753.              break;
  754.             case 111:
  755.              printf("7");
  756.              break;
  757.             case 1000:
  758.              printf("8");
  759.              break;
  760.             case 1001:
  761.              printf("9");
  762.              break;
  763.             case 1010:
  764.              printf("A");
  765.              break;
  766.             case 1011:
  767.              printf("B");
  768.              break;
  769.             case 1100:
  770.              printf("C");
  771.              break;
  772.             case 1101:
  773.              printf("D");
  774.              break;
  775.             case 1110:
  776.              printf("E");
  777.              break;
  778.             case 1111:
  779.              printf("F");
  780.              break;
  781.             default:
  782.      printf("\nEntered number is not binary.\nPrinted value is not correct.\n");
  783.              break;
  784.            }
  785.           }
  786.          if(t==1)
  787.           printf("Number is not Binary\n");
  788. }
  789.  
  790. void hb()
  791. {
  792.          int i;
  793.          char s[20];
  794.          clrscr();
  795.          printf("Convertion from Hexadecimal to Binary\n");
  796.          printf("Enter a Hexadecimal number\n");
  797.          scanf("%s",s);
  798.          //gets(s);
  799.          printf("Binary Equivalent=");
  800.          for(i=0;s[i]!=NULL;i++)
  801.          {
  802.           switch(s[i])
  803.            {
  804.             case '0':
  805.              printf("0000");
  806.              break;
  807.             case '1':
  808.              printf("0001");
  809.              break;
  810.             case '2':
  811.              printf("0010");
  812.              break;
  813.             case '3':
  814.              printf("0011");
  815.              break;
  816.             case '4':
  817.              printf("0100");
  818.              break;
  819.             case '5':
  820.              printf("0101");
  821.              break;
  822.             case '6':
  823.              printf("0110");
  824.              break;
  825.             case '7':
  826.              printf("0111");
  827.              break;
  828.             case '8':
  829.              printf("1000");
  830.              break;
  831.             case '9':
  832.              printf("1001");
  833.              break;
  834.             case 'a':
  835.             case 'A':
  836.              printf("1010");
  837.              break;
  838.             case 'b':
  839.             case 'B':
  840.              printf("1011");
  841.              break;
  842.             case 'c':
  843.             case 'C':
  844.              printf("1100");
  845.              break;
  846.             case 'd':
  847.             case 'D':
  848.              printf("1101");
  849.              break;
  850.             case 'e':
  851.             case 'E':
  852.              printf("1110");
  853.              break;
  854.             case 'f':
  855.             case 'F':
  856.              printf("1111");
  857.              break;
  858.             default:
  859.        printf("\nEntered number is not Hexadecimal.\nPrinted value is not correct.\n");
  860.              break;
  861.            }
  862.           }
  863. }
  864.  
  865. void hd()
  866. {
  867.          int i,a[20];
  868.          unsigned long int h=0,m=1;
  869.          char s[20];
  870.          clrscr();
  871.          printf("Convertion from Hexadecimal to Decimal\n");
  872.          printf("Enter a Hexadecimal number\n");
  873.          scanf("%s",s);
  874.          printf("Decimal Equivalent=");
  875.          for(i=0;s[i]!=NULL;i++)
  876.          {
  877.           switch(s[i])
  878.            {
  879.             case '0':
  880.              a[i]=0;
  881.              break;
  882.             case '1':
  883.              a[i]=1;
  884.              break;
  885.             case '2':
  886.              a[i]=2;
  887.              break;
  888.             case '3':
  889.              a[i]=3;
  890.              break;
  891.             case '4':
  892.              a[i]=4;
  893.              break;
  894.             case '5':
  895.              a[i]=5;
  896.              break;
  897.             case '6':
  898.              a[i]=6;
  899.              break;
  900.             case '7':
  901.              a[i]=7;
  902.              break;
  903.             case '8':
  904.              a[i]=8;
  905.              break;
  906.             case '9':
  907.              a[i]=9;
  908.              break;
  909.             case 'a':
  910.             case 'A':
  911.              a[i]=10;
  912.              break;
  913.             case 'b':
  914.             case 'B':
  915.              a[i]=11;
  916.              break;
  917.             case 'c':
  918.             case 'C':
  919.              a[i]=12;
  920.              break;
  921.             case 'd':
  922.             case 'D':
  923.              a[i]=13;
  924.              break;
  925.             case 'e':
  926.             case 'E':
  927.              a[i]=14;
  928.              break;
  929.             case 'f':
  930.             case 'F':
  931.              a[i]=15;
  932.              break;
  933.             default:
  934.     printf("\nEntered number is not Hexadecimal.\nPrinted value is not correct.\n");
  935.              break;
  936.            }
  937.          }
  938.          i--;
  939.          for(;i>=0;i--)
  940.          {
  941.           h=h+a[i]*m;
  942.           m=m*16;
  943.          }
  944.           printf("%ld ",h);
  945. }
  946.  
  947. void oh(long n)
  948. {
  949.          long i;
  950.          if(n>0)
  951.          {
  952.           i=n%16;
  953.           n=n/16;
  954.           oh(n);
  955.           if(i>=10)
  956.           {
  957.            switch(i)
  958.            {
  959.             case 10:
  960.              printf("A");
  961.              break;
  962.             case 11:
  963.              printf("B");
  964.              break;
  965.             case 12:
  966.              printf("C");
  967.              break;
  968.             case 13:
  969.              printf("D");
  970.              break;
  971.             case 14:
  972.              printf("E");
  973.              break;
  974.             case 15:
  975.              printf("F");
  976.              break;
  977.            }
  978.           }
  979.           else
  980.            printf("%ld",i);
  981.          }
  982. }
  983.  
  984. void ho()
  985. {
  986.          int i,a[20];
  987.          unsigned long int h=0,m=1;
  988.          char s[20];
  989.          clrscr();
  990.          printf("Convertion from Hexadecimal to Octal\n");
  991.          printf("Enter a Hexadecimal number\n");
  992.          scanf("%s",s);
  993.          // Converting hex to dec first
  994.          for(i=0;s[i]!=NULL;i++)
  995.          {
  996.           switch(s[i])
  997.            {
  998.             case '0':
  999.              a[i]=0;
  1000.              break;
  1001.             case '1':
  1002.              a[i]=1;
  1003.              break;
  1004.             case '2':
  1005.              a[i]=2;
  1006.              break;
  1007.             case '3':
  1008.              a[i]=3;
  1009.              break;
  1010.             case '4':
  1011.              a[i]=4;
  1012.              break;
  1013.             case '5':
  1014.              a[i]=5;
  1015.              break;
  1016.             case '6':
  1017.              a[i]=6;
  1018.              break;
  1019.             case '7':
  1020.              a[i]=7;
  1021.              break;
  1022.             case '8':
  1023.              a[i]=8;
  1024.              break;
  1025.             case '9':
  1026.              a[i]=9;
  1027.              break;
  1028.             case 'a':
  1029.             case 'A':
  1030.              a[i]=10;
  1031.              break;
  1032.             case 'b':
  1033.             case 'B':
  1034.              a[i]=11;
  1035.              break;
  1036.             case 'c':
  1037.             case 'C':
  1038.              a[i]=12;
  1039.              break;
  1040.             case 'd':
  1041.             case 'D':
  1042.              a[i]=13;
  1043.              break;
  1044.             case 'e':
  1045.             case 'E':
  1046.              a[i]=14;
  1047.              break;
  1048.             case 'f':
  1049.             case 'F':
  1050.              a[i]=15;
  1051.              break;
  1052.             default:
  1053.       printf("\nEntered number is not Hexadecimal.\nPrinted value is not correct.\n");
  1054.              break;
  1055.            }
  1056.          }
  1057.          i--;
  1058.          for(;i>=0;i--)
  1059.          {
  1060.           h=h+a[i]*m;
  1061.           m=m*16;
  1062.          }
  1063.          // Now convering from decimal to octal (h)
  1064.          i=0;
  1065.          printf("Octal equavalent=");
  1066.          while(h!=0)
  1067.          {
  1068.           a[i]=h%8;
  1069.           h=h/8;
  1070.           i++;
  1071.          }
  1072.          i--;
  1073.          for(;i>=0;i--)
  1074.           printf("%d",a[i]);
  1075. }*/
  1076.