mirror of
git://projects.qi-hardware.com/eda-tools.git
synced 2024-11-25 21:55:20 +02:00
eeshow/kicad/ext.c: identify and classify files by their extension
This commit is contained in:
parent
9094de177d
commit
e6a4224d81
@ -16,7 +16,7 @@ NAME = eeshow
|
||||
OBJS = main.o version.o \
|
||||
kicad/sch-parse.o kicad/sch-render.o kicad/lib-parse.o \
|
||||
kicad/lib-render.o kicad/dwg.o kicad/delta.o kicad/sexpr.o \
|
||||
kicad/pl-parse.o kicad/pl-render.o \
|
||||
kicad/pl-parse.o kicad/pl-render.o kicad/ext.o \
|
||||
gui/gui.o gui/over.o gui/style.o gui/aoi.o gui/fmt-pango.o gui/input.o \
|
||||
gui/progress.o gui/glabel.o gui/sheet.o gui/history.o gui/render.o \
|
||||
gui/help.o gui/icons.o \
|
||||
|
87
eeshow/kicad/ext.c
Normal file
87
eeshow/kicad/ext.c
Normal file
@ -0,0 +1,87 @@
|
||||
/*
|
||||
* kicad/ext.c - Identify file by their extension
|
||||
*
|
||||
* Written 2016 by Werner Almesberger
|
||||
* Copyright 2016 by Werner Almesberger
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "misc/diag.h"
|
||||
#include "kicad/ext.h"
|
||||
|
||||
|
||||
enum ext identify(const char *path)
|
||||
{
|
||||
const char *dot, *slash;
|
||||
|
||||
dot = strrchr(path, '.');
|
||||
if (!dot)
|
||||
return ext_unknown;
|
||||
slash = strchr(dot + 1, '/');
|
||||
if (slash)
|
||||
return ext_unknown;
|
||||
|
||||
if (!strcmp(dot, ".pro"))
|
||||
return ext_project;
|
||||
if (!strcmp(dot, ".sch"))
|
||||
return ext_sch;
|
||||
if (!strcmp(dot, ".lib"))
|
||||
return ext_lib;
|
||||
if (!strcmp(dot, ".kicad_wks"))
|
||||
return ext_pl;
|
||||
|
||||
return ext_unknown;
|
||||
}
|
||||
|
||||
|
||||
void classify_files(struct file_names *fn, char *const *args,
|
||||
unsigned n_args)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
fn->pro = fn->sch = fn->pl = NULL;
|
||||
fn->libs = NULL;
|
||||
fn->n_libs = 0;
|
||||
|
||||
for (i = 0; i != n_args; i++) {
|
||||
switch (identify(args[i])) {
|
||||
case ext_unknown:
|
||||
fatal("%s: unknown file type", args[i]);
|
||||
case ext_project:
|
||||
if (fn->pro)
|
||||
fatal("%s: there can only be one project",
|
||||
args[i]);
|
||||
fn->pro = args[i];
|
||||
break;
|
||||
case ext_sch:
|
||||
if (fn->sch)
|
||||
fatal("%s: there can only be one top sheet",
|
||||
args[i]);
|
||||
fn->sch = args[i];
|
||||
break;
|
||||
case ext_lib:
|
||||
fn->n_libs++;
|
||||
fn->libs = realloc(fn->libs,
|
||||
fn->n_libs * sizeof(const char *));
|
||||
if (!fn->libs)
|
||||
diag_pfatal("realloc");
|
||||
fn->libs[fn->n_libs - 1] = args[i];
|
||||
break;
|
||||
case ext_pl:
|
||||
if (fn->pl)
|
||||
fatal("%s: there can only be one page layout",
|
||||
args[i]);
|
||||
fn->pl = args[i];
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
}
|
||||
}
|
39
eeshow/kicad/ext.h
Normal file
39
eeshow/kicad/ext.h
Normal file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* kicad/ext.h - Identify files by their extension
|
||||
*
|
||||
* Written 2016 by Werner Almesberger
|
||||
* Copyright 2016 by Werner Almesberger
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef KICAD_EXT_H
|
||||
#define KICAD_EXT_H
|
||||
|
||||
enum ext {
|
||||
ext_unknown,
|
||||
ext_project,
|
||||
ext_sch,
|
||||
ext_lib,
|
||||
ext_pl, /* .kicad_wks, work sheet */
|
||||
};
|
||||
|
||||
|
||||
struct file_names {
|
||||
const char *pro; /* just one allowed, may be NULL */
|
||||
const char *sch; /* just one allowed, may be NULL */
|
||||
const char *pl; /* just one allowed, may be NULL */
|
||||
const char **libs;
|
||||
unsigned n_libs;
|
||||
};
|
||||
|
||||
|
||||
enum ext identify(const char *path);
|
||||
void classify_files(struct file_names *fn, char *const *args,
|
||||
unsigned n_args);
|
||||
|
||||
#endif /* !KICAD_EXT_H */
|
Loading…
Reference in New Issue
Block a user