aboutsummaryrefslogtreecommitdiff
path: root/src/pj_list.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pj_list.c')
-rw-r--r--src/pj_list.c49
1 files changed, 47 insertions, 2 deletions
diff --git a/src/pj_list.c b/src/pj_list.c
index bb56ade9..a8f171ab 100644
--- a/src/pj_list.c
+++ b/src/pj_list.c
@@ -1,11 +1,56 @@
/* Projection System: default list of projections
** Use local definition of PJ_LIST_H for subset.
*/
+
#define USE_PJ_LIST_H 1
#include "projects.h"
-struct PJ_LIST *pj_get_list_ref()
-{
+
+#define PASTE(a,b) a##b
+
+/* Generate prototypes for projection functions */
+#define PROJ_HEAD(id, name) struct PJconsts *pj_##id(struct PJconsts*);
+#include "pj_list.h"
+#undef PROJ_HEAD
+
+/* Generate prototypes for projection selftest functions */
+#define PROJ_HEAD(id, name) int PASTE(pj_##id, _selftest) (void);
+#include "pj_list.h"
+#undef PROJ_HEAD
+
+
+/* Generate extern declarations for description strings */
+#define PROJ_HEAD(id, name) extern char * const pj_s_##id;
+#include "pj_list.h"
+#undef PROJ_HEAD
+
+
+/* Generate the null-terminated list of projection functions with associated mnemonics and descriptions */
+#define PROJ_HEAD(id, name) {#id, pj_##id, &pj_s_##id},
+struct PJ_LIST pj_list[] = {
+#include "pj_list.h"
+ {0, 0, 0},
+ };
+#undef PROJ_HEAD
+
+
+/* Generate the null-terminated list of projection selftest functions with associated mnemonics */
+#define PROJ_HEAD(id, name) {#id, PASTE(pj_##id, _selftest)},
+struct PJ_SELFTEST_LIST pj_selftest_list[] = {
+#include "pj_list.h"
+ {0, 0},
+ };
+#undef PROJ_HEAD
+#undef PASTE
+
+
+struct PJ_LIST *pj_get_list_ref (void) {
return pj_list;
}
+
+
+struct PJ_SELFTEST_LIST *pj_get_selftest_list_ref (void) {
+ return pj_selftest_list;
+}
+