/*
DiskImageTool - Tool for manipulating disk images - CPC DSK images
Copyright (C) 2019 Ian Cowburn (ianc@noddybox.co.uk)
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 3 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, see .
-------------------------------------------------------------------------
Various utilities
*/
#include
#include
#include
#include
#include "util.h"
/* ---------------------------------------- PRIVATE ROUTINES
*/
static void Chomp(char *p)
{
size_t l = strlen(p);
while(l > 0 && p[l-1] == '\n')
{
p[--l] = 0;
}
}
/* ---------------------------------------- PUBLIC INTERFACES
*/
void *Malloc(size_t size)
{
void *p;
p = malloc(size);
if (!p)
{
perror("malloc");
exit(EXIT_FAILURE);
}
return p;
}
void *Realloc(void *p, size_t size)
{
void *new;
new = realloc(p, size);
if (!new)
{
perror("realloc");
exit(EXIT_FAILURE);
}
return new;
}
int GetLine(const char *prompt, char *buff, size_t buffsize)
{
buff[0] = 0;
while(!buff[0])
{
printf("%s> ", prompt);
fflush(stdout);
if (!fgets(buff, buffsize, stdin))
{
return 0;
}
Chomp(buff);
}
return 1;
}
void *Load(const char *path, size_t *size)
{
FILE *fp;
void *mem = NULL;
*size = 0;
if ((fp = fopen(path, "rb")))
{
fseek(fp, 0, SEEK_END);
*size = ftell(fp);
fseek(fp, 0, SEEK_SET);
mem = Malloc(*size);
fread(mem, 1, *size, fp);
fclose(fp);
}
return mem;
}
int Save(const char *path, const void *buff, size_t buffsize)
{
FILE *fp;
if ((fp = fopen(path, "wb")))
{
fwrite(buff, 1, buffsize, fp);
fclose(fp);
}
else
{
return 0;
}
return 1;
}
int CompareMem(const void *mem, const char *str)
{
return memcmp(mem, str, strlen(str));
}
char GetOption(const char *prompt, const char *allowed, char default_val)
{
char buff[80];
printf("%s> ", prompt);
fflush(stdout);
while(fgets(buff, sizeof buff, stdin))
{
Chomp(buff);
if (buff[0])
{
if (strchr(allowed, buff[0]))
{
return buff[0];
}
}
else
{
if (default_val)
{
return default_val;
}
}
}
return 0;
}
/*
vim: ai sw=4 ts=8 expandtab
*/