source: trunk/src/fortran/RpFortranCommon.c @ 77

Last change on this file since 77 was 77, checked in by dkearney, 15 years ago
  1. initial checkin of RpLibrary? code, includes c++/c/fortran bindings
  2. minor modifications to makefiles to accommodate new code
  3. updated README in src to tell how to compile code in src and test
File size: 1.9 KB
Line 
1#include "RpFortranCommon.h"
2
3char* null_terminate(char* inStr, int len) {
4    int retVal = 0;
5    char* newStr = NULL;
6    char* current = NULL;
7
8    if (inStr && (len > 0) ) {
9
10        current = inStr+len-1;
11
12        while ((len > 0) && (isspace(*(current)))) {
13            // dont strip off newlines
14
15            if ( (*(current) == '\f')
16              || (*(current) == '\n')
17              || (*(current) == '\r')
18              || (*(current) == '\t')
19              || (*(current) == '\v') )
20            {
21                break;
22            }
23
24            if (--len) {
25                current--;
26            }
27        }
28
29        newStr = (char*) calloc(len+1,(sizeof(char)));
30        strncpy(newStr,inStr,len);
31        *(newStr+len) = '\0';
32
33        retVal++;
34    }
35
36    return newStr;
37}
38
39std::string null_terminate_str(const char* inStr, int len)
40{
41    int retVal = 0;
42    std::string newStr = "";
43    const char* current = NULL;
44
45    if (inStr) {
46
47        current = inStr+len-1;
48
49        while ((len > 0) && (isspace(*(current)))) {
50            // dont strip off newlines
51
52            if ( (*(current) == '\f')
53              || (*(current) == '\n')
54              || (*(current) == '\r')
55              || (*(current) == '\t')
56              || (*(current) == '\v') )
57            {
58                break;
59            }
60
61            if (--len) {
62                current--;
63            }
64        }
65
66        newStr = std::string(inStr,len);
67
68        retVal++;
69    }
70
71    // return retVal;
72
73    return newStr;
74}             
75
76
77void fortranify(const char* inBuff, char* retText, int retTextLen) {
78
79    int inBuffLen = 0;
80    int i = 0;
81
82    if (inBuff && retText && (retTextLen > 0)) {
83        inBuffLen = strlen(inBuff);
84
85        strncpy(retText, inBuff, retTextLen);
86
87        // fortran-ify the string
88        if (inBuffLen < retTextLen) {
89            for (i = inBuffLen; i < retTextLen; i++) {
90                retText[i] = ' ';
91            }
92        }
93    }
94}
Note: See TracBrowser for help on using the repository browser.