diff src/Input/sid/xs_support.c @ 0:13389e613d67 trunk

[svn] - initial import of audacious-plugins tree (lots to do)
author nenolod
date Mon, 18 Sep 2006 01:11:49 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Input/sid/xs_support.c	Mon Sep 18 01:11:49 2006 -0700
@@ -0,0 +1,217 @@
+/*  
+   XMMS-SID - SIDPlay input plugin for X MultiMedia System (XMMS)
+
+   Miscellaneous support functions
+   
+   Programmed and designed by Matti 'ccr' Hamalainen <ccr@tnsp.org>
+   (C) Copyright 1999-2005 Tecnic Software productions (TNSP)
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+#include "xmms-sid.h"
+#include "xs_support.h"
+#include <ctype.h>
+
+
+/* Bigendian file reading functions
+ */
+guint16 xs_rd_be16(FILE * f)
+{
+	return (((guint16) fgetc(f)) << 8) | ((guint16) fgetc(f));
+}
+
+
+guint32 xs_rd_be32(FILE * f)
+{
+	return (((guint32) fgetc(f)) << 24) |
+	    (((guint32) fgetc(f)) << 16) | (((guint32) fgetc(f)) << 8) | ((guint32) fgetc(f));
+}
+
+
+size_t xs_rd_str(FILE * f, gchar * s, size_t l)
+{
+	return fread(s, sizeof(gchar), l, f);
+}
+
+
+/* Copy a string
+ */
+gchar *xs_strncpy(gchar * pDest, gchar * pSource, size_t n)
+{
+	gchar *s, *d;
+	size_t i;
+
+	/* Check the string pointers */
+	if (!pSource || !pDest)
+		return pDest;
+
+	/* Copy to the destination */
+	i = n;
+	s = pSource;
+	d = pDest;
+	while (*s && (i > 0)) {
+		*(d++) = *(s++);
+		i--;
+	}
+
+	/* Fill rest of space with zeros */
+	while (i > 0) {
+		*(d++) = 0;
+		i--;
+	}
+
+	/* Ensure that last is always zero */
+	pDest[n - 1] = 0;
+
+	return pDest;
+}
+
+
+/* Copy a given string over in *ppResult.
+ */
+gint xs_pstrcpy(gchar ** ppResult, const gchar * pStr)
+{
+	/* Check the string pointers */
+	if (!ppResult || !pStr)
+		return -1;
+
+	/* Allocate memory for destination */
+	if (*ppResult)
+		g_free(*ppResult);
+	*ppResult = (gchar *) g_malloc(strlen(pStr) + 1);
+	if (!*ppResult)
+		return -2;
+
+	/* Copy to the destination */
+	strcpy(*ppResult, pStr);
+
+	return 0;
+}
+
+
+/* Concatenates a given string into string pointed by *ppResult.
+ */
+gint xs_pstrcat(gchar ** ppResult, const gchar * pStr)
+{
+	/* Check the string pointers */
+	if (!ppResult || !pStr)
+		return -1;
+
+	if (*ppResult != NULL) {
+		*ppResult = (gchar *) g_realloc(*ppResult, strlen(*ppResult) + strlen(pStr) + 1);
+		if (*ppResult == NULL)
+			return -1;
+		strcat(*ppResult, pStr);
+	} else {
+		*ppResult = (gchar *) g_malloc(strlen(pStr) + 1);
+		if (*ppResult == NULL)
+			return -1;
+		strcpy(*ppResult, pStr);
+	}
+
+	return 0;
+}
+
+
+/* Concatenate a given string up to given dest size or \n.
+ * If size max is reached, change the end to "..."
+ */
+void xs_pnstrcat(gchar * pDest, size_t iSize, gchar * pStr)
+{
+	size_t i, n;
+	gchar *s, *d;
+
+	d = pDest;
+	i = 0;
+	while (*d && (i < iSize)) {
+		i++;
+		d++;
+	}
+
+	s = pStr;
+	while (*s && (*s != '\n') && (i < iSize)) {
+		*d = *s;
+		d++;
+		s++;
+		i++;
+	}
+
+	*d = 0;
+
+	if (i >= iSize) {
+		i--;
+		d--;
+		n = 3;
+		while ((i > 0) && (n > 0)) {
+			*d = '.';
+			d--;
+			i--;
+			n--;
+		}
+	}
+}
+
+
+/* Locate character in string
+ */
+gchar *xs_strrchr(gchar * pcStr, gchar ch)
+{
+	gchar *lastPos = NULL;
+
+	while (*pcStr) {
+		if (*pcStr == ch)
+			lastPos = pcStr;
+		pcStr++;
+	}
+
+	return lastPos;
+}
+
+
+void xs_findnext(gchar * pcStr, guint * piPos)
+{
+	while (pcStr[*piPos] && isspace(pcStr[*piPos]))
+		(*piPos)++;
+}
+
+
+void xs_findeol(gchar * pcStr, guint * piPos)
+{
+	while (pcStr[*piPos] && (pcStr[*piPos] != '\n') && (pcStr[*piPos] != '\r'))
+		(*piPos)++;
+}
+
+
+void xs_findnum(gchar * pcStr, guint * piPos)
+{
+	while (pcStr[*piPos] && isdigit(pcStr[*piPos]))
+		(*piPos)++;
+}
+
+
+#ifndef HAVE_MEMSET
+void *xs_memset(void *p, int c, size_t n)
+{
+	gchar *dp;
+
+	dp = (gchar *) p;
+	while (n--) {
+		*dp = (gchar) c;
+		n--;
+	}
+
+	return p;
+}
+#endif