Can't Copy and Paste this?

Click here for a copy-and-paste friendly version of this code!

 

//**************************************

//     

//INCLUDE files for :Convert roman numer

//     als to long integers

//**************************************

//     

/* +++Date last modified: 05-Jul-1997 */

/*

** NUMCNVRT.H - Header file for SNIPPETS numerical <=> string conversions

*/

#ifndef NUMCNVRT__H

#define NUMCNVRT__H

#include /* for size_t*/

#include "sniptype.h"

#include "round.h"

#include "pi.h"

#define R_ERROR -2/* EVAL.C Range error */

/*

** Callable library functions begin here

*/

char * base_convert(const char *in, char *out,

size_t len, int rin, int rout); /* Bascnvrt.C*/

char * comma_float(double num, char *buf, int dec); /* Commaflt.C*/

size_t commafmt(char *buf, int bufsize, long N);/* Commafmt.C*/

char * eng(double value, int places);/* Eng.C */

intevaluate(char *line, double *val); /* Eval.C */

char * fmt_money(double amt);/* Fmtmoney.C*/

long hexorint(const char *string); /* Hexorint.C*/

char * ltostr(long num, char *string,

 size_t max_chars, unsigned base);/* Ltostr.C*/

char * ordinal_text(int number);/* Ord_Text.C*/

intscanfrac (const char buf[], double *f);/* Scanfrac.C*/

unsigned int hstr_i(char *cptr);/* Hstr_I.C*/

char *long2roman(long val, char *buf, size_t buflen); /* L2Roman.C*/

long roman2long(const char *str); /* Roman2L.C*/

#if defined(__ZTC__) && !defined(__SC__)

char * ltoa(long val, char *buf, int base); /* Ltoa.C */

#endif

/*

** File: STR27SEG.C

*/

    struct Seg7disp {

    unsigned seg_a : 1;

    unsigned seg_b : 1;

    unsigned seg_c : 1;

    unsigned seg_d : 1;

    unsigned seg_e : 1;

    unsigned seg_f : 1;

    unsigned seg_g : 1;

};

char *str27seg(char *string);

#endif /* NUMCNVRT__H */

 

code:

Can't Copy and Paste this?

Click here for a copy-and-paste friendly version of this code!

 

Terms of Agreement:   

By using this code, you agree to the following terms...   

1) You may use this code in your own programs (and may compile it into a program and distribute it in compiled format for langauges that allow it) freely and with no charge.   

2) You MAY NOT redistribute this code (for example to a web site) without written permission from the original author. Failure to do so is a violation of copyright laws.   

3) You may link to this code from another website, but ONLY if it is not wrapped in a frame. 

4) You will abide by any additional copyright restrictions which the author may have placed in the code or code's description.  

/* +++Date last modified: 05-Jul-1997 */

/*

** ROMAN2L.C Covert roman numerals to long integers.

**

** public domain by Bob Stout

*/

#include 

#include "sniptype.h"

    struct numeral {

    long val;

    int ch;

};

    static struct numeral numerals[] = {

        { 1L, 'I' },

            { 5L, 'V' },

                { 10L, 'X' },

                    { 50L, 'L' },

                        { 100L, 'C' },

                            { 500L, 'D' },

                                { 1000L, 'M' }

                            };

                            /*

                            ** roman2long() - Converts a roman numeral string into a long integer

                            **

                            ** Arguments: 1 - Roman numeral string

                            **

                            ** Returns: long value if valid, else -1L

                            */

                            long roman2long(const char *str)

                                {

                                int i, j, k;

                                long retval = 0L;

                                if (!str || NUL == *str)

                                return -1L;

                                for (i = 0, k = -1; str[i]; ++i)

                                    {

                                    for (j = 0; j < 7; ++j)

                                        {

                                        if (numerals[j].ch == toupper(str[i]))

                                        break;

                                    }

                                    if (7 == j)

                                    return -1L;

                                    if (k >= 0 && k < j)

                                        {

                                        retval -= numerals[k].val * 2;

                                        retval += numerals[j].val;

                                    }

                                    else retval += numerals[j].val;

                                    k = j;

                                }

                                return retval;

                            }

                            #ifdef TEST

                            #include 

                            int main(int argc, char *argv[])

                                {

                                while (--argc)

                                    {

                                    ++argv;

                                    printf("roman2long(%s) returned %ld\n", *argv, roman2long(*argv));

                                }

                            }

                            #endif /* TEST */