File: arg_utils.cpp

package info (click to toggle)
opensubdiv 3.6.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 75,132 kB
  • sloc: cpp: 137,820; python: 1,069; objc: 412; javascript: 361; lisp: 216; ansic: 170; makefile: 24
file content (126 lines) | stat: -rw-r--r-- 3,907 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
//
//   Copyright 2019 Pixar
//
//   Licensed under the Apache License, Version 2.0 (the "Apache License")
//   with the following modification; you may not use this file except in
//   compliance with the Apache License and the following modification to it:
//   Section 6. Trademarks. is deleted and replaced with:
//
//   6. Trademarks. This License does not grant permission to use the trade
//      names, trademarks, service marks, or product names of the Licensor
//      and its affiliates, except as required to comply with Section 4(c) of
//      the License and to reproduce the content of the NOTICE file.
//
//   You may obtain a copy of the Apache License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the Apache License with the above modification is
//   distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//   KIND, either express or implied. See the Apache License for the specific
//   language governing permissions and limitations under the Apache License.
//

#include "arg_utils.h"

#include <fstream>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int
parseIntArg(const char* argString, int dfltValue = 0) {
    char *argEndptr;
    int argValue = (int) strtol(argString, &argEndptr, 10);
    if (*argEndptr != 0) {
        printf("Warning: non-integer option parameter '%s' ignored\n", 
			   argString);
        argValue = dfltValue;
    }
    return argValue;
}


ArgOptions::ArgOptions() 
    : _adaptive(true)
    , _fullscreen(false)
    , _level(2)
    , _objsAreAnim(false)
    , _yup(false)
    , _repeatCount(0)
    , _defaultScheme(kCatmark)
{
}

void
ArgOptions::Parse(int argc, char **argv)
{
    for (int i = 1; i < argc; ++i) {

        if (strstr(argv[i], ".obj")) {
            _objFiles.push_back(argv[i]);
        } else if (!strcmp(argv[i], "-a")) {
            _adaptive = true;
        } else if (!strcmp(argv[i], "-u")) {
            _adaptive = false;
        } else if (!strcmp(argv[i], "-l")) {
            if (++i < argc) _level = parseIntArg(argv[i], 2);
        } else if (!strcmp(argv[i], "-c")) {
            if (++i < argc) _repeatCount = parseIntArg(argv[i], 0);
        } else if (!strcmp(argv[i], "-f")) {
            _fullscreen = true;
        } else if (!strcmp(argv[i], "-yup")) {
            _yup = true;
        } else if (!strcmp(argv[i], "-anim")) {
            _objsAreAnim = true;
        } else if (!strcmp(argv[i], "-bilinear")) {
            _defaultScheme = kBilinear;
        } else if (!strcmp(argv[i], "-catmark")) {
            _defaultScheme = kCatmark;
        } else if (!strcmp(argv[i], "-loop")) {
            _defaultScheme = kLoop;
        } else {
            _remainingArgs.push_back(argv[i]);
        }

    }
}

void 
ArgOptions::PrintUnrecognizedArgWarning(const char *arg) const
{
    printf("Warning: unrecognized argument '%s' ignored\n", arg);
}

void 
ArgOptions::PrintUnrecognizedArgsWarnings() const
{
    for(size_t i = 0; i < _remainingArgs.size(); ++i) {
        PrintUnrecognizedArgWarning(_remainingArgs[i]);
    }
}

size_t
ArgOptions::AppendObjShapes(std::vector<ShapeDesc>& shapes, bool warn) const
{
    size_t originalShapesSize = shapes.size();

    for (size_t i = 0; i < GetObjFiles().size(); ++i) {
        std::ifstream ifs(GetObjFiles()[i]);
        if (ifs) {
            std::stringstream ss;
            ss << ifs.rdbuf();
            ifs.close();
            std::string str = ss.str();
            shapes.push_back(ShapeDesc(
                        GetObjFiles()[i], str.c_str(),
                        GetDefaultScheme()));
        } else if (warn) {
            printf("Warning: cannot open shape file '%s'\n",
                   GetObjFiles()[i]);
        }
    }
    return shapes.size() - originalShapesSize;
}