Subversion Repositories HomeAutomation

Rev

Rev 981 | Rev 997 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
969 runge 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
 
981 runge 25
string niceTime()
26
{
27
    string result;
28
    struct tm tmStruct;
29
    time_t t = time(NULL);
990 runge 30
    localtime_r(&t, &tmStruct);
981 runge 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
 
969 runge 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
 
981 runge 202
string uint2hex(unsigned int num, int length)
203
{
204
    return bin2hex(uint2bin(num, length));
205
}
969 runge 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
 
981 runge 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
 
969 runge 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
        {
976 runge 368
            case '\r':
369
                break;
370
 
969 runge 371
            case '\n':
372
                out += "\\n";
373
                break;
374
 
976 runge 375
            case '\'':
376
                out += "\\'";
377
                break;
378
 
379
            case '"':
380
                out += "\\\"";
381
                break;
382
 
969 runge 383
            default:
384
                out += in[n];
385
                break;
386
        }
387
    }
388
 
389
    return out;
390
}
391
 
976 runge 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
 
969 runge 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
}*/