view dmutil.h @ 80:98e077d9d361

List the keyboard controls in --help.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 07 Mar 2020 14:37:59 +0200
parents 9ee0edff3940
children
line wrap: on
line source

//
// GLDragon - OpenGL PLY model viewer / simple benchmark
// -- Miscellaneous utility functions
// Programmed and designed by Matti 'ccr' Hämäläinen <ccr@tnsp.org>
// (C) Copyright 2019-2020 Tecnic Software productions (TNSP)
//
// See file "COPYING" for license information.
//
#ifndef DMUTIL_H
#define DMUTIL_H 1

#include <string>
#include <vector>
#include <cstdio>
#include <iostream>
#include <cstdarg>
#include <fstream>


#define DMUTIL_WHITESPACE "\t\n\v\f\r "


/* Functions
 */
void dmMsg_V(const char *fmt, va_list ap);
void dmMsg(const char *fmt, ...);
void dmError_V(const char *fmt, va_list ap);
void dmError(const char *fmt, ...);


std::string dmStrLTrim(const std::string& str, const std::string& delim = DMUTIL_WHITESPACE);
std::string dmStrRTrim(const std::string& str, const std::string& delim = DMUTIL_WHITESPACE);
std::string dmStrTrim(const std::string& str, const std::string& delim = DMUTIL_WHITESPACE);

std::vector<std::string> dmStrSplit(const std::string& str, const std::string& delim = DMUTIL_WHITESPACE);
std::string dmStrJoin(const std::vector<std::string> &list, const std::string &delim);

std::string dmGetPath(const std::string &path);

bool dmReadText(const std::string &filename, std::string &buf, const int maxSize);
bool dmFileExists(const std::string &filename, std::ios_base::openmode mode = std::ios_base::in);


/* Structures and classes
 */
struct DMTextFileInfo
{
    int nline, state;
    std::string filename;
    std::string line;
    std::ifstream file;
    std::string *key;

    virtual bool syntaxError(const std::string &msg)
    {
        dmError("Syntax error on line #%d: %s\n",
            nline, msg.c_str());
        return false;
    }

    virtual bool textError(const std::string &msg)
    {
        dmError("%s on line #%d: %s\n",
            msg.c_str(), nline, line.c_str());
        return false;
    }

    virtual bool readLine(void)
    {
        if (!std::getline(file, line))
            return false;

        nline++;
        line = dmStrTrim(line);
        return true;
    }
};


#endif