A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 289 lines 7.8 kB view raw
1/*************************************************************************** 2 * __________ __ ___. 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7 * \/ \/ \/ \/ \/ 8 * $Id$ 9 * 10 * Copyright (C) 2007-2009 Joshua Simmons <mud at majidejima dot com> 11 * 12 * This program is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU General Public License 14 * as published by the Free Software Foundation; either version 2 15 * of the License, or (at your option) any later version. 16 * 17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 18 * KIND, either express or implied. 19 * 20 ****************************************************************************/ 21 22#ifndef GOBAN_TYPES_H 23#define GOBAN_TYPES_H 24 25#include "plugin.h" 26 27/* A generic stack sp is the stack pointer (0 for an empty stack) */ 28struct stack_t 29{ 30 size_t size; 31 size_t sp; 32 char *buffer; 33}; 34 35/* All of the types of SGF properties that we understand. Not all of these 36 are handled, even if we understand them, unhandled properties are 37 handled differently (basically they are copied to a secondary location 38 and copied back if we output the tree) The ones at the end aren't real 39 SGF properties, they are only to help us in parsing/outputting/keeping 40 track of variations/etc. IMPORTANT: if you edit this, you must be 41 careful to keep it in line with prop_names, PROP_NAMES_SIZE, and 42 PROP_NAME_LEN otherwise really bad things will happen. There is too much 43 information on each of these to list here, please see 44 http://www.red-bean.com/sgf/ */ 45enum prop_type_t 46{ 47 PROP_BLACK_MOVE, 48 PROP_WHITE_MOVE, 49 50 PROP_ADD_BLACK, 51 PROP_ADD_WHITE, 52 PROP_ADD_EMPTY, 53 54 PROP_PLAYER_TO_PLAY, 55 PROP_COMMENT, 56 57 /* information about the position reached by the current node */ 58 PROP_EVEN, 59 PROP_BLACK_GOOD, 60 PROP_WHITE_GOOD, 61 PROP_HOTSPOT, 62 PROP_UNCLEAR, 63 PROP_VALUE, 64 65 /* information about the current move */ 66 PROP_BAD, 67 PROP_DOUBTFUL, 68 PROP_INTERESTING, 69 PROP_TESUJI, 70 71 /* marks on the board */ 72 PROP_CIRCLE, 73 PROP_SQUARE, 74 PROP_TRIANGLE, 75 PROP_DIM, 76 PROP_MARK, 77 PROP_SELECTED, 78 79 /* labels go on points, names name the node */ 80 PROP_LABEL, 81 PROP_NODE_NAME, 82 83 /* root props */ 84 PROP_APPLICATION, 85 PROP_CHARSET, 86 PROP_FILE_FORMAT, 87 PROP_GAME, 88 PROP_VARIATION_TYPE, 89 PROP_SIZE, 90 91 /* game info props */ 92 PROP_ANNOTATOR, 93 PROP_BLACK_NAME, 94 PROP_WHITE_NAME, 95 PROP_HANDICAP, 96 PROP_KOMI, 97 PROP_BLACK_TERRITORY, 98 PROP_WHITE_TERRITORY, 99 PROP_BLACK_RANK, 100 PROP_WHITE_RANK, 101 PROP_BLACK_TEAM, 102 PROP_WHITE_TEAM, 103 PROP_COPYRIGHT, 104 PROP_DATE, 105 PROP_EVENT, 106 PROP_ROUND, 107 PROP_GAME_NAME, 108 PROP_GAME_COMMENT, 109 PROP_OPENING_NAME, 110 PROP_OVERTIME, 111 PROP_PLACE, 112 PROP_RESULT, 113 PROP_RULESET, 114 PROP_SOURCE, 115 PROP_TIME_LIMIT, 116 PROP_USER, 117 118 /* these are all the <whatever> left /after/ the current move */ 119 PROP_BLACK_TIME_LEFT, 120 PROP_WHITE_TIME_LEFT, 121 PROP_BLACK_STONES_LEFT, /* the number of stones left in a canadian 122 style overtime period */ 123 PROP_WHITE_STONES_LEFT, /* same for white */ 124 125 126 /* these are mostly used for printing, we don't handle these */ 127 PROP_FIGURE, 128 PROP_PRINT_MOVE_MODE, 129 130 /* view only part of the board. probably don't handle this */ 131 PROP_VIEW, 132 133 134 135 /* psuedo PROP types, used for variations and parsing and such */ 136 137 PROP_VARIATION, /* used for branches */ 138 PROP_INVALID, 139 PROP_GENERIC_UNHANDLED, /* used to mark the place where an 140 unhandled property was copied to 141 secondary storage (so we can output it 142 again when we output the game tree) */ 143 PROP_ANY, /* Used as a parameter when any property 144 type is supposed to match */ 145 PROP_VARIATION_TO_PROCESS, /* Used in parsing/outputting */ 146 PROP_VARIATION_CHOICE, /* Used to store which variation we should 147 follow when we get to a branch */ 148 PROP_ROOT_PROPS /* Marks the place where we should output 149 the information from struct header_t 150 header */ 151}; 152 153extern char *prop_names[]; 154/* IMPORTANT: keep this array full of all properties that we want to be 155 able to parse out of an SGF file. This next part assumes that they go 156 before unparseable (psuedo) props in the above enum, or else we need to 157 insert placeholders in the array for unparseables */ 158 159#define PROP_NAMES_SIZE (63) 160 161/* The only one character property names are the moves, everything else is 162 two characters */ 163#define PROP_NAME_LEN(type) ((type == PROP_BLACK_MOVE || \ 164 type == PROP_WHITE_MOVE) ? 1 : 2) 165 166/* Data for a property. Can be a number, a node handle (for variations), 167 or a position and either a short or a character (the extras are for 168 label characters, and stone undo data (moves and added/removed)) */ 169union prop_data_t 170{ 171 unsigned int number; 172 int node; 173 struct 174 { 175 unsigned short position; 176 union 177 { 178 unsigned short stone_extra; 179 unsigned char label_extra; 180 }; 181 }; 182}; 183 184/* What should happen when the user "plays" a move */ 185enum play_mode_t 186{ 187 MODE_PLAY, 188 MODE_FORCE_PLAY, 189 MODE_ADD_BLACK, 190 MODE_ADD_WHITE, 191 MODE_REMOVE, 192 MODE_MARK, 193 MODE_CIRCLE, 194 MODE_SQUARE, 195 MODE_TRIANGLE, 196 MODE_LABEL 197}; 198 199/* Different types of board marks */ 200enum mark_t 201{ 202 MARK_VARIATION, 203 MARK_SQUARE, 204 MARK_CIRCLE, 205 MARK_TRIANGLE, 206 MARK_LAST_MOVE, 207 MARK_LABEL 208}; 209 210/* An SGF property next is the handle to the next property in the node, or 211 less than zero if there isn't another */ 212struct prop_t 213{ 214 union prop_data_t data; 215 enum prop_type_t type; 216 int next; 217}; 218 219 220/* The names of the rulesets, ex. "AGA", "Japanese", etc. */ 221extern const char *ruleset_names[]; 222 223/* IMPORTANT! keep in sync with ruleset_names!!! */ 224enum ruleset_t 225{ 226 RULESET_AGA = 0, 227 RULESET_JAPANESE, 228 RULESET_CHINESE, 229 RULESET_NEW_ZEALAND, 230 RULESET_ING, 231 __RULESETS_SIZE /* make sure i am last! */ 232}; 233 234#define NUM_RULESETS ((int) __RULESETS_SIZE) 235 236 237/* One SGF node which can contain an indefinite number of SGF properties 238 Less than zero for any of these means that there is nothing in that 239 direction. */ 240struct node_t 241{ 242 int props; 243 int next; 244 int prev; 245}; 246 247 248/* convenience union for keeping a mixed array of props and nodes */ 249union storage_t 250{ 251 struct prop_t prop; 252 struct node_t node; 253}; 254 255 256/* The game metadata which can be stored in the SGF file */ 257 258#define MAX_NAME 59 259#define MAX_EVENT 100 260#define MAX_RESULT 16 261#define MAX_RANK 10 262#define MAX_TEAM 32 263#define MAX_DATE 32 264#define MAX_ROUND 8 265#define MAX_PLACE 100 266#define MAX_OVERTIME 32 267#define MAX_RULESET 32 268 269struct header_t 270{ 271 char white[MAX_NAME]; 272 char black[MAX_NAME]; 273 char white_rank[MAX_RANK]; 274 char black_rank[MAX_RANK]; 275 char white_team[MAX_TEAM]; 276 char black_team[MAX_TEAM]; 277 char date[MAX_DATE]; 278 char round[MAX_ROUND]; 279 char event[MAX_EVENT]; 280 char place[MAX_PLACE]; 281 char result[MAX_RESULT]; 282 char overtime[MAX_OVERTIME]; 283 char ruleset[MAX_RULESET]; 284 int time_limit; 285 int komi; 286 uint8_t handicap; 287}; 288 289#endif