├── .gitignore ├── Code Files └── Number-System-Converter.c ├── Images ├── Number-System-Converter-1.png ├── Number-System-Converter-2.png ├── Number-System-Converter-3.png ├── Number-System-Converter-4.png └── Number-System-Converter-5.png ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | *.exe -------------------------------------------------------------------------------- /Code Files/Number-System-Converter.c: -------------------------------------------------------------------------------- 1 | /* 2 | Project Name: Number System Converter 3 | Created By: GANESH MOURYA 4 | 5 | Github: https://github.com/Alkaison/Number-System-Converter/ 6 | LinkedIn: https://linkedin.com/in/Alkaison 7 | Twitter: https://twitter.com/Alkaison 8 | */ 9 | #include // for: input & output 10 | #include // for: exit(0) function 11 | #include // for: getch() function 12 | #include // for: isdigit() function 13 | #include // for: pow(2,0) function 14 | #include // for: strlen() function 15 | 16 | // Define Constant KeyWords: for tracking user key press event (used in: HexaDecimal input validation) 17 | #define ENTER 13 18 | #define TAB 9 19 | #define BKSP 8 20 | 21 | void welcomeScreen(void); // Introduction Page & choice screen 22 | void exitScreen(void); // program end screen with credits 23 | void screenCleaner(void); // clears the output screen and input buffers 24 | void userInput(int); // takes the user input and validates for further opertaions 25 | int digitChecker(int, int); // validates each digit of input number 26 | void conversion_Title(void); // title for all conversion outputs 27 | void tryAgain(int); // try Again window 28 | 29 | // Binary Conversion functions 30 | void binary_decimal(long int); 31 | void binary_octal(long int); 32 | void binary_hexadecimal(long int); 33 | 34 | // Decimal Conversion functions 35 | void decimal_binary(long int); 36 | void decimal_octal(long int); 37 | void decimal_hexadecimal(long int); 38 | 39 | // Octal Conversion functions 40 | void octal_binary(long int); 41 | void octal_decimal(long int); 42 | void octal_hexadecimal(long int); 43 | 44 | // Hexadecimal Convesion functions 45 | void hexadecimal_binary(char []); 46 | void hexadecimal_octal(char []); 47 | void hexadecimal_decimal(char []); 48 | 49 | // C-Program main function 50 | void main() 51 | { 52 | welcomeScreen(); 53 | } 54 | 55 | // Intro screen 56 | void welcomeScreen() 57 | { 58 | int choice; 59 | 60 | label1: 61 | screenCleaner(); 62 | printf("-------------------------------------------\n"); 63 | printf(">>> Welcome to Number System Converter <<< \n"); 64 | printf("-------------------------------------------\n\n"); 65 | 66 | printf(">> Select Conversion Type: \n"); 67 | printf("> 1. Binary Conversion \n"); 68 | printf("> 2. Decimal Conversion \n"); 69 | printf("> 3. Octal Conversion \n"); 70 | printf("> 4. Hexadecimal Conversion \n"); 71 | printf("> 5. Exit the Program \n\n"); 72 | printf("Enter the number & Hit ENTER: "); 73 | scanf("%d", &choice); 74 | 75 | // passes the user input for conversion 76 | switch(choice) 77 | { 78 | case 1: 79 | userInput(1); 80 | break; 81 | case 2: 82 | userInput(2); 83 | break; 84 | case 3: 85 | userInput(3); 86 | break; 87 | case 4: 88 | userInput(4); 89 | break; 90 | case 5: 91 | exitScreen(); 92 | break; 93 | default: 94 | printf("\nError: the number must be between 1 to 5.\n"); 95 | printf("Press any key to continue... \n"); 96 | getch(); 97 | goto label1; 98 | } 99 | } 100 | 101 | // program exit screen (credit page) 102 | void exitScreen() 103 | { 104 | screenCleaner(); 105 | printf("-------------------------------------------\n"); 106 | printf(" >>> Creator: Ganesh Mourya (@Alkaison) <<< \n"); 107 | printf("-------------------------------------------\n\n"); 108 | 109 | printf("> GitHub: https://github.com/Alkaison \n"); 110 | printf("> Twitter: https://twitter.com/Alkaison \n"); 111 | printf("> LinkedIn: https://www.linkedin.com/in/Alkaison \n\n"); 112 | 113 | exit(0); // exit() function to close the program safely 114 | } 115 | 116 | void screenCleaner() 117 | { 118 | system("cls"); // clears the output screen 119 | fflush(stdin); // clears the input buffer 120 | } 121 | 122 | void userInput(int choice) 123 | { 124 | screenCleaner(); 125 | 126 | if(choice == 1) // Binary input validation code 127 | { 128 | long int bi; 129 | int flag = 0; 130 | 131 | printf("Enter the binary: "); 132 | scanf("%ld", &bi); 133 | 134 | flag = digitChecker(bi, choice); 135 | 136 | if(flag == 1) 137 | { 138 | printf("\nError: Binary can only have the digits 0, 1. \n"); 139 | printf("Press any key to continue... \n"); 140 | getch(); 141 | welcomeScreen(); 142 | } 143 | else 144 | { 145 | conversion_Title(); 146 | binary_decimal(bi); 147 | binary_octal(bi); 148 | binary_hexadecimal(bi); 149 | tryAgain(choice); 150 | } 151 | } 152 | else if(choice == 2) // Decimal input validation code 153 | { 154 | long int deci; 155 | int flag = 0; 156 | 157 | printf("Enter the decimal: "); 158 | scanf("%ld", &deci); 159 | 160 | if(deci > 0) 161 | flag = digitChecker(deci, choice); 162 | else 163 | flag = 1; 164 | 165 | if(flag == 1) 166 | { 167 | printf("\nError: Decimal number can't be negative. \n"); 168 | printf("Press any key to continue... \n"); 169 | getch(); 170 | welcomeScreen(); 171 | } 172 | else 173 | { 174 | conversion_Title(); 175 | decimal_binary(deci); 176 | decimal_octal(deci); 177 | decimal_hexadecimal(deci); 178 | tryAgain(choice); 179 | } 180 | } 181 | else if(choice == 3) // Octal input validation code 182 | { 183 | long int octal; 184 | int flag = 0; 185 | 186 | printf("Enter the octal: "); 187 | scanf("%ld", &octal); 188 | 189 | flag = digitChecker(octal, choice); 190 | 191 | if(flag == 1) 192 | { 193 | printf("\nError: Octal digits can only be between 0 to 7. \n"); 194 | printf("Press any key to continue... \n"); 195 | getch(); 196 | welcomeScreen(); 197 | } 198 | else 199 | { 200 | conversion_Title(); 201 | octal_binary(octal); 202 | octal_decimal(octal); 203 | octal_hexadecimal(octal); 204 | tryAgain(choice); 205 | } 206 | } 207 | else if(choice == 4) // HexaDecimal input validation code 208 | { 209 | char hexa[50]; 210 | char ch; 211 | int i=0, j=0, k=0, flag=0; 212 | 213 | printf("Enter the hexadecimal: "); 214 | 215 | while(1) 216 | { 217 | ch = getch(); 218 | if(ch == ENTER || ch == TAB) 219 | { 220 | hexa[i] = '\0'; 221 | break; 222 | } 223 | else if(ch == BKSP) 224 | { 225 | if(i > 0) 226 | { 227 | i--; 228 | printf("\b \b"); // for backspace 229 | } 230 | } 231 | else 232 | { 233 | hexa[i++] = ch; 234 | printf("%c", ch); 235 | } 236 | } 237 | 238 | for(j=0; j= 'A' && hexa[j] <= 'F') || (hexa[j] >= 'a' && hexa[j] <= 'f') || isdigit(hexa[j])) 241 | k++; 242 | else 243 | { 244 | flag = 1; 245 | break; 246 | } 247 | } 248 | 249 | if(flag == 1) 250 | { 251 | printf("\n\nError: Hexadecimal digits can only be between 0 to 9 & A to F. \n"); 252 | printf("Press any key to continue... \n"); 253 | getch(); 254 | welcomeScreen(); 255 | } 256 | else 257 | { 258 | printf("\n"); 259 | conversion_Title(); 260 | hexadecimal_binary(hexa); 261 | hexadecimal_octal(hexa); 262 | hexadecimal_decimal(hexa); 263 | tryAgain(choice); 264 | } 265 | } 266 | else // Very rare case message 267 | printf("\n>> Unexpected Error occured. Report to program Administrator << \n"); 268 | } 269 | 270 | // validation function for each single digit of a number according to conversion condition 271 | int digitChecker(int num, int choice) 272 | { 273 | long int rem, temp=0, flag=0; 274 | temp = num; 275 | 276 | while(temp != 0) 277 | { 278 | rem = temp % 10; 279 | 280 | if((rem == 0 || rem == 1) && choice == 1) // binary, choice = 1 281 | temp = temp / 10; 282 | else if(rem >= 0 && rem <= 9 && choice == 2) // decimal, choice = 2 283 | temp = temp / 10; 284 | else if(rem >= 0 && rem <=7 && choice == 3) // octal, choice = 3 285 | temp = temp / 10; 286 | else 287 | { 288 | flag = 1; 289 | break; 290 | } 291 | } 292 | return flag; 293 | } 294 | 295 | // title for all conversion outputs 296 | void conversion_Title() 297 | { 298 | printf("\n---------------------------\n"); 299 | printf(">>> Conversion Results <<< \n"); 300 | printf("---------------------------\n"); 301 | } 302 | 303 | // try Again window 304 | void tryAgain(int choice) 305 | { 306 | char ch; 307 | 308 | printf("\n\nDo you want to try again [y/N]: "); 309 | scanf(" %c", &ch); 310 | 311 | switch (ch) 312 | { 313 | case 'Y': 314 | case 'y': 315 | userInput(choice); 316 | break; 317 | case 'N': 318 | case 'n': 319 | welcomeScreen(); 320 | break; 321 | default: 322 | printf("\nError: invalid input. \n"); 323 | printf("Press any key to continue... \n"); 324 | getch(); 325 | welcomeScreen(); 326 | } 327 | } 328 | 329 | // Binary Conversion functions 330 | void binary_decimal(long int bi) 331 | { 332 | int rem,sum=0,i=0; 333 | 334 | while(bi!=0) 335 | { 336 | rem=bi%10; 337 | bi=bi/10; 338 | sum=sum+rem*pow(2,i); 339 | i++; 340 | } 341 | 342 | printf("\nDecimal Number: %d",sum); 343 | } 344 | 345 | void binary_octal(long int bi) 346 | { 347 | int i=0,rem,sum=0,remain[100],len=0; 348 | 349 | while(bi!=0) 350 | { 351 | rem=bi%10; 352 | bi=bi/10; 353 | sum=sum+rem*pow(2,i); 354 | i++; 355 | } 356 | i=0; 357 | while(sum!=0) 358 | { 359 | remain[i]=sum%8; 360 | sum=sum/8; 361 | i++; 362 | len++; 363 | } 364 | 365 | printf("\nOctal Number: "); 366 | for(i=len-1;i>=0;i--) 367 | { 368 | printf("%d",remain[i]); 369 | } 370 | } 371 | 372 | void binary_hexadecimal(long int bi) 373 | { 374 | int rem,i=0,sum=0,remain[100],len=0; 375 | 376 | while(bi!=0) 377 | { 378 | rem=bi%10; 379 | bi=bi/10; 380 | sum=sum+rem*pow(2,i); 381 | i++; 382 | } 383 | i=0; 384 | while(sum!=0) 385 | { 386 | remain[i]=sum%16; 387 | sum=sum/16; 388 | i++; 389 | len++; 390 | } 391 | 392 | printf("\nHexa-Decimal Number: "); 393 | for(i=len-1;i>=0;i--) 394 | { 395 | switch(remain[i]) 396 | { 397 | case 10: 398 | printf("A"); 399 | break; 400 | case 11: 401 | printf("B"); 402 | break; 403 | case 12: 404 | printf("C"); 405 | break; 406 | case 13: 407 | printf("D"); 408 | break; 409 | case 14: 410 | printf("E"); 411 | break; 412 | case 15: 413 | printf("F"); 414 | break; 415 | default: 416 | printf("%d",remain[i]); 417 | } 418 | } 419 | } 420 | 421 | // Decimal Conversion functions 422 | void decimal_binary(long int deci) 423 | { 424 | int rem[50],i,len=0; 425 | 426 | do 427 | { 428 | rem[i]=deci%2; 429 | deci=deci/2; 430 | i++; 431 | len++; 432 | } 433 | while(deci !=0); 434 | 435 | printf("\nBinary Number: "); 436 | for(i=len-1;i>=0;i--) 437 | { 438 | printf("%d",rem[i]); 439 | } 440 | } 441 | 442 | void decimal_octal(long int deci) 443 | { 444 | int rem[50],i,len=0; 445 | 446 | do 447 | { 448 | rem[i]=deci%8; 449 | deci=deci/8; 450 | i++; 451 | len++; 452 | } 453 | while(deci!=0); 454 | 455 | printf("\nOctal Number: "); 456 | for(i=len-1;i>=0;i--) 457 | { 458 | printf("%d",rem[i]); 459 | } 460 | } 461 | 462 | void decimal_hexadecimal(long int deci) 463 | { 464 | int rem[50],i,len=0; 465 | 466 | do 467 | { 468 | rem[i]=deci%16; 469 | deci=deci/16; 470 | i++; 471 | len++; 472 | } 473 | while(deci!=0); 474 | 475 | printf("\nHexa-Decimal Number: "); 476 | for(i=len-1;i>=0;i--) 477 | { 478 | switch(rem[i]) 479 | { 480 | case 10: 481 | printf("A"); 482 | break; 483 | case 11: 484 | printf("B"); 485 | break; 486 | case 12: 487 | printf("C"); 488 | break; 489 | case 13: 490 | printf("D"); 491 | break; 492 | case 14: 493 | printf("E"); 494 | break; 495 | case 15: 496 | printf("F"); 497 | break; 498 | default: 499 | printf("%d",rem[i]); 500 | } 501 | } 502 | } 503 | 504 | // Octal Conversion functions 505 | void octal_binary(long int oct) 506 | { 507 | int rem[50],len=0,decimal=0,i=0,num,ans; 508 | 509 | while(oct!=0) 510 | { 511 | ans=oct % 10; 512 | decimal = decimal + ans * pow(8,i); 513 | i++; 514 | oct = oct/10; 515 | } 516 | 517 | i=0; 518 | do 519 | { 520 | rem[i]=decimal%2; 521 | decimal=decimal/2; 522 | i++; 523 | len++; 524 | } 525 | while(decimal!=0); 526 | 527 | printf("\nBinary Number: "); 528 | for(i=len-1;i>=0;i--) 529 | { 530 | printf("%d",rem[i]); 531 | } 532 | } 533 | 534 | void octal_decimal(long int oct) 535 | { 536 | int decimal=0,i=0,num,ans; 537 | 538 | while(oct!=0) 539 | { 540 | ans=oct % 10; 541 | decimal = decimal + ans * pow(8,i); 542 | i++; 543 | oct = oct/10; 544 | } 545 | printf("\nDecimal Number: %d",decimal); 546 | } 547 | 548 | void octal_hexadecimal(long int oct) 549 | { 550 | int rem[50],len=0,decimal=0,i=0,num,ans=0; 551 | while(oct!=0) 552 | { 553 | ans=oct % 10; 554 | decimal = decimal + ans * pow(8,i); 555 | i++; 556 | oct = oct/10; 557 | } 558 | 559 | i=0; 560 | while(decimal!=0) 561 | { 562 | rem[i]=decimal%16; 563 | decimal=decimal/16; 564 | i++; 565 | len++; 566 | } 567 | 568 | printf("\nHexa-Decimal Number: "); 569 | 570 | for(i=len-1;i>=0;i--) 571 | { 572 | switch(rem[i]) 573 | { 574 | case 10: 575 | printf("A"); 576 | break; 577 | case 11: 578 | printf("B"); 579 | break; 580 | case 12: 581 | printf("C"); 582 | break; 583 | case 13: 584 | printf("D"); 585 | break; 586 | case 14: 587 | printf("E"); 588 | break; 589 | case 15: 590 | printf("F"); 591 | break; 592 | default: 593 | printf("%d",rem[i]); 594 | } 595 | } 596 | } 597 | 598 | // Hexadecimal Convesion functions 599 | void hexadecimal_binary(char hexa[]) 600 | { 601 | int i=0; 602 | 603 | printf("\nBinary Number: "); 604 | 605 | for(i=0;i=0;i--) 674 | { 675 | if(hexa[i]=='A'||hexa[i]=='a') 676 | num=10; 677 | else if(hexa[i]=='B'||hexa[i]=='b') 678 | num=11; 679 | else if(hexa[i]=='C'||hexa[i]=='c') 680 | num=12; 681 | else if(hexa[i]=='D'||hexa[i]=='d') 682 | num=13; 683 | else if(hexa[i]=='E'||hexa[i]=='e') 684 | num=14; 685 | else if(hexa[i]=='F'||hexa[i]=='f') 686 | num=15; 687 | else 688 | num=hexa[i]-48; 689 | 690 | decimal=decimal+num*pow(16,power); 691 | power++; 692 | } 693 | 694 | i=0,len=0; 695 | while(decimal!=0) 696 | { 697 | rem[i]=decimal%8; 698 | decimal=decimal/8; 699 | i++; 700 | len++; 701 | } 702 | 703 | printf("\nOctal Number: "); 704 | for(i=len-1;i>=0;i--) 705 | { 706 | printf("%d",rem[i]); 707 | } 708 | } 709 | 710 | void hexadecimal_decimal(char hexa[]) 711 | { 712 | int i,num=0,power=0,decimal=0; 713 | 714 | for(i=strlen(hexa)-1;i>=0;i--) 715 | { 716 | if(hexa[i]=='A'||hexa[i]=='a') 717 | num=10; 718 | else if(hexa[i]=='B'||hexa[i]=='b') 719 | num=11; 720 | else if(hexa[i]=='C'||hexa[i]=='c') 721 | num=12; 722 | else if(hexa[i]=='D'||hexa[i]=='d') 723 | num=13; 724 | else if(hexa[i]=='E'||hexa[i]=='e') 725 | num=14; 726 | else if(hexa[i]=='F'||hexa[i]=='f') 727 | num=15; 728 | else 729 | num=hexa[i]-48; 730 | 731 | decimal=decimal+num*pow(16,power); 732 | power++; 733 | } 734 | printf("\nDecimal Number: %d",decimal); 735 | } -------------------------------------------------------------------------------- /Images/Number-System-Converter-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alkaison/Number-System-Converter/d0bbb4c7ea654caa97ae64b9c444679951f77a2a/Images/Number-System-Converter-1.png -------------------------------------------------------------------------------- /Images/Number-System-Converter-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alkaison/Number-System-Converter/d0bbb4c7ea654caa97ae64b9c444679951f77a2a/Images/Number-System-Converter-2.png -------------------------------------------------------------------------------- /Images/Number-System-Converter-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alkaison/Number-System-Converter/d0bbb4c7ea654caa97ae64b9c444679951f77a2a/Images/Number-System-Converter-3.png -------------------------------------------------------------------------------- /Images/Number-System-Converter-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alkaison/Number-System-Converter/d0bbb4c7ea654caa97ae64b9c444679951f77a2a/Images/Number-System-Converter-4.png -------------------------------------------------------------------------------- /Images/Number-System-Converter-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alkaison/Number-System-Converter/d0bbb4c7ea654caa97ae64b9c444679951f77a2a/Images/Number-System-Converter-5.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Alkaison 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Number-System-Converter 2 | 3 | Convert any number system to other like Decimal, Binary, Octal, Hexadecimal. 4 | 5 | ## Description 6 | 7 | Number System Converter can do the complex conversion for you quickly. Made using **C** language by **Ganesh Mourya**. Access the code files [here](Code%20Files/Number-System-Converter.c "Number System Converter") 8 | 9 | > _This program can perform the following conversion:_ 10 | 11 | - Binary to Decimal 12 | - Binary to Octal 13 | - Binary to Hexa-Decimal 14 | - Decimal to Binary 15 | - Decimal to Octal 16 | - Decimal to Hexa-Decimal 17 | - Octal to Binary 18 | - Octal to Decimal 19 | - Octal to Hexa-Decimal 20 | - Hexa-Decimal to Binary 21 | - Hexa-Decimal to Decimal 22 | - Hexa-Decimal to Octal 23 | 24 | ### Requirements for using it 25 | 26 | - A software (IDE) for reviewing the code 27 | - C/C++ compiler (Recommended: GCC Compiler) 28 | - Command Prompt or Windows Powershell 29 | 30 | ## Screenshots 🖼️ 31 | 32 | ### 01. Welcome Screen 33 | 34 | ![Number-System-Converter-1](https://i.postimg.cc/HkF9Dmh7/Number-System-Converter-1.png) 35 | 36 | ### 02. Binary Conversion 37 | 38 | ![Number-System-Converter-1](https://i.postimg.cc/FR4bzZmr/Number-System-Converter-2.png) 39 | 40 | ### 03. Decimal Conversion 41 | 42 | ![Number-System-Converter-1](https://i.postimg.cc/yN9X7GMp/Number-System-Converter-3.png) 43 | 44 | ### 04. Octal Conversion 45 | 46 | ![Number-System-Converter-1](https://i.postimg.cc/cHBRnn4Q/Number-System-Converter-4.png) 47 | 48 | ### 05. Hexa-Decimal Conversion 49 | 50 | ![Number-System-Converter-1](https://i.postimg.cc/D0fqdw8R/Number-System-Converter-5.png) 51 | 52 | ## Support 🧩 53 | 54 | For personal project support, join our Discord Server [here](https://discord.gg/dF4PHpA "Byte Hub Discord") 55 | 56 | ## MIT LICENSE 📔 57 | 58 | ```LICENSE 59 | 60 | MIT License 61 | 62 | Copyright (c) 2022 Alkaison 63 | 64 | Permission is hereby granted, free of charge, to any person obtaining a copy 65 | of this software and associated documentation files (the "Software"), to deal 66 | in the Software without restriction, including without limitation the rights 67 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 68 | copies of the Software, and to permit persons to whom the Software is 69 | furnished to do so, subject to the following conditions: 70 | 71 | The above copyright notice and this permission notice shall be included in all 72 | copies or substantial portions of the Software. 73 | 74 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 75 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 76 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 77 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 78 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 79 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 80 | SOFTWARE. 81 | ``` 82 | --------------------------------------------------------------------------------