aboutsummaryrefslogtreecommitdiffstats
path: root/keyboards/ergodox/keymaps/supercoder/keymap.c
diff options
context:
space:
mode:
authorWojciech Siewierski <wojciech.siewierski@onet.pl>2016-04-03 11:14:08 +0200
committerWojciech Siewierski <wojciech.siewierski@onet.pl>2016-04-03 11:23:00 +0200
commit47dd29513eeec7b7f639bef6df441a905ce8bacb (patch)
tree29170847273e786384bd3d7c7781e67dc4335bbb /keyboards/ergodox/keymaps/supercoder/keymap.c
parent8ef14d09b8451b3f2a77e6f019922eae0ac43642 (diff)
parent8d39263d2444f0273327902684c802b218efb7b6 (diff)
downloadfirmware-47dd29513eeec7b7f639bef6df441a905ce8bacb.tar.gz
firmware-47dd29513eeec7b7f639bef6df441a905ce8bacb.tar.bz2
firmware-47dd29513eeec7b7f639bef6df441a905ce8bacb.zip
Merge branch 'master' of https://github.com/jackhumbert/qmk_firmware into modifier-release-fix
Diffstat (limited to 'keyboards/ergodox/keymaps/supercoder/keymap.c')
0 files changed, 0 insertions, 0 deletions
ffffc0; padding: 0 5px 0 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; } .highlight .hll { background-color: #ffffcc } .highlight { background: #ffffff; } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
/*
 * Copyright (C) 2001 - 2004 Mike Wray <mike.wray@hp.com>
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or
 * (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#ifdef __KERNEL__
#  include <linux/config.h>
#  include <linux/module.h>
#  include <linux/kernel.h>
#  include <linux/errno.h>
#else
#  include <errno.h>
#endif

#include "allocate.h"
#include "sys_string.h"

/** Set the base to use for converting a string to a number.  Base is
 * hex if starts with 0x, otherwise decimal.
 *
 * @param s input string
 * @param base where to put the base
 * @return rest of s to parse as a number
 */
inline static const char * convert_set_base(const char *s, int *base){
    *base = 10;
    if(s){
        if(*s=='0'){
            s++;
            if(*s=='x' || *s=='X'){
                *base = 16;
                s++;
            }
        }
    }
    return s;
}

/** Get the numerical value of a digit in the given base.
 *
 * @param c digit character
 * @param base to use
 * @return numerical value of digit in range 0..base-1 or
 * -1 if not in range for the base
 */
inline static int convert_get_digit(char c, int base){
    int d;

    if('0'<=c  && c<='9'){
        d = c - '0';
    } else if('a'<=c && c<='f'){
        d = c - 'a' + 10;
    } else if('A'<=c && c<='F'){
        d = c - 'A' + 10;
    } else {
        d = -1;
    }
    return (d < base ? d : -1);
}

/** Convert a string to an unsigned long by parsing it as a number.
 * Will accept hex or decimal in usual C syntax.
 *
 * @param str input string
 * @param val where to put the result
 * @return 0 if converted OK, negative otherwise
 */
int convert_atoul(const char *str, unsigned long *val){
    int err = 0;
    unsigned long v = 0;
    int base;
    const char *s = str;

    if(!s) {
        err = -EINVAL;
        goto exit;
    }
    s = convert_set_base(s, &base);
    for( ; !err && *s; s++){
        int digit = convert_get_digit(*s, base);
        if(digit<0){
            err = -EINVAL;
            goto exit;
        }
        v *= base;
        v += digit;
    } 
  exit:
    *val = (err ? 0 : v);
    return err;
}

/** Combine a directory path with a relative path to produce
 * a new path.
 *
 * @param s directory path
 * @param t relative path
 * @return new combined path s/t
 */
int path_concat(char *s, char *t, char **val){
    int err = 0;
    int sn, tn, vn;
    char *v;
    sn = strlen(s);
    if(sn > 0 && s[sn-1] == '/'){
        sn--;
    }
    tn = strlen(t);
    if(tn > 0 && t[0] == '/'){
        tn--;
    }
    vn = sn+tn+1;
    v = (char*)allocate(vn+1);
    if(!v){
        err = -ENOMEM;
        goto exit;
    }
    strncpy(v, s, sn);
    v[sn] = '/';
    strncpy(v+sn+1, t, tn);
    v[vn] = '\0';
  exit:
    *val = (err ? NULL : v);
    return err;    
}