mirror of
https://github.com/michaeldv/pit.git
synced 2025-12-08 23:53:25 +00:00
Iteration macros now create automatic iteration pointer variable
This commit is contained in:
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
static void action_list()
|
static void action_list()
|
||||||
{
|
{
|
||||||
PAction pa;
|
|
||||||
PPager ppager;
|
PPager ppager;
|
||||||
|
|
||||||
pit_db_load();
|
pit_db_load();
|
||||||
|
|||||||
@@ -30,10 +30,10 @@ typedef int bool;
|
|||||||
#define max(a,b) ((a) > (b) ? (a) : (b))
|
#define max(a,b) ((a) > (b) ? (a) : (b))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define for_each_project(ptr) for (ptr = (PProject)projects->slots; (ptr - (PProject)projects->slots) < projects->number_of_records; ptr++)
|
#define for_each_project(ptr) PProject ptr; for (ptr = (PProject)projects->slots; (ptr - (PProject)projects->slots) < projects->number_of_records; ptr++)
|
||||||
#define for_each_task(ptr) for (ptr = (PTask)tasks->slots; (ptr - (PTask)tasks->slots) < tasks->number_of_records; ptr++)
|
#define for_each_task(ptr) PTask ptr; for (ptr = (PTask)tasks->slots; (ptr - (PTask)tasks->slots) < tasks->number_of_records; ptr++)
|
||||||
#define for_each_note(ptr) for (ptr = (PNote)notes->slots; (ptr - (PNote)notes->slots) < notes->number_of_records; ptr++)
|
#define for_each_note(ptr) PNote ptr; for (ptr = (PNote)notes->slots; (ptr - (PNote)notes->slots) < notes->number_of_records; ptr++)
|
||||||
#define for_each_action(ptr) for (ptr = (PAction)actions->slots; (ptr - (PAction)actions->slots) < actions->number_of_records; ptr++)
|
#define for_each_action(ptr) PAction ptr; for (ptr = (PAction)actions->slots; (ptr - (PAction)actions->slots) < actions->number_of_records; ptr++)
|
||||||
|
|
||||||
/* Externals. */
|
/* Externals. */
|
||||||
extern PTable actions;
|
extern PTable actions;
|
||||||
|
|||||||
@@ -34,8 +34,7 @@ static void project_parse_options(char **arg, char **name, char **status);
|
|||||||
|
|
||||||
static void project_list(char *name, char *status)
|
static void project_list(char *name, char *status)
|
||||||
{
|
{
|
||||||
PProject pp;
|
PPager ppager;
|
||||||
PPager ppager;
|
|
||||||
|
|
||||||
pit_db_load();
|
pit_db_load();
|
||||||
if (projects->number_of_records > 0) {
|
if (projects->number_of_records > 0) {
|
||||||
@@ -81,8 +80,6 @@ static void project_show(ulong id)
|
|||||||
printf("%lu: %s (%s, %lu task%s)\n",
|
printf("%lu: %s (%s, %lu task%s)\n",
|
||||||
pp->id, pp->name, pp->status, pp->number_of_tasks, (pp->number_of_tasks != 1 ? "s" : ""));
|
pp->id, pp->name, pp->status, pp->number_of_tasks, (pp->number_of_tasks != 1 ? "s" : ""));
|
||||||
if (pp->number_of_tasks > 0) {
|
if (pp->number_of_tasks > 0) {
|
||||||
PTask pt = (PTask)tasks->slots;
|
|
||||||
|
|
||||||
puts("Tasks:");
|
puts("Tasks:");
|
||||||
for_each_task(pt) {
|
for_each_task(pt) {
|
||||||
printf(" %c %lu: %s (%lu notes)\n", (pt->id == tasks->current ? '*' : ' '), pt->id, pt->name, pt->number_of_notes);
|
printf(" %c %lu: %s (%lu notes)\n", (pt->id == tasks->current ? '*' : ' '), pt->id, pt->name, pt->number_of_notes);
|
||||||
@@ -113,13 +110,9 @@ static void project_update(ulong id, char *name, char *status)
|
|||||||
static void project_delete(ulong id)
|
static void project_delete(ulong id)
|
||||||
{
|
{
|
||||||
PProject pp;
|
PProject pp;
|
||||||
PTask pt;
|
|
||||||
char *deleted_name;
|
|
||||||
ulong deleted_number_of_tasks;
|
|
||||||
|
|
||||||
pit_db_load();
|
pit_db_load();
|
||||||
project_find_current(&pp, &id);
|
project_find_current(&pp, &id);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Delete project tasks.
|
** Delete project tasks.
|
||||||
*/
|
*/
|
||||||
@@ -135,8 +128,9 @@ static void project_delete(ulong id)
|
|||||||
** Ready to delete the project itself. But first preserve the
|
** Ready to delete the project itself. But first preserve the
|
||||||
** name and number of tasks since we need these bits for logging.
|
** name and number of tasks since we need these bits for logging.
|
||||||
*/
|
*/
|
||||||
deleted_name = str2str(pp->name);
|
char *deleted_name = str2str(pp->name);
|
||||||
deleted_number_of_tasks = pp->number_of_tasks;
|
ulong deleted_number_of_tasks = pp->number_of_tasks;
|
||||||
|
|
||||||
pp = (PProject)pit_table_delete(projects, id);
|
pp = (PProject)pit_table_delete(projects, id);
|
||||||
if (pp) {
|
if (pp) {
|
||||||
pit_table_mark(projects, 0); /* TODO: find better current project candidate. */
|
pit_table_mark(projects, 0); /* TODO: find better current project candidate. */
|
||||||
@@ -149,8 +143,6 @@ static void project_delete(ulong id)
|
|||||||
|
|
||||||
static bool project_already_exist(char *name)
|
static bool project_already_exist(char *name)
|
||||||
{
|
{
|
||||||
PProject pp;
|
|
||||||
|
|
||||||
pit_db_load();
|
pit_db_load();
|
||||||
for_each_project(pp) {
|
for_each_project(pp) {
|
||||||
if (!strcmp(pp->name, name)) {
|
if (!strcmp(pp->name, name)) {
|
||||||
|
|||||||
16
src/task.c
16
src/task.c
@@ -32,14 +32,11 @@ static void task_parse_options(char **arg, char **name, char **status, char **pr
|
|||||||
|
|
||||||
static void task_list(char *name, char *status, char *priority, time_t date, time_t time)
|
static void task_list(char *name, char *status, char *priority, time_t date, time_t time)
|
||||||
{
|
{
|
||||||
PProject pp;
|
|
||||||
PTask pt;
|
|
||||||
PPager ppager;
|
|
||||||
|
|
||||||
pit_db_load();
|
pit_db_load();
|
||||||
if (tasks->number_of_records > 0) {
|
if (tasks->number_of_records > 0) {
|
||||||
pp = (PProject)pit_table_current(projects);
|
PProject pp = (PProject)pit_table_current(projects);
|
||||||
ppager = pit_pager_initialize(PAGER_TASK, tasks->number_of_records);
|
PPager ppager = pit_pager_initialize(PAGER_TASK, tasks->number_of_records);
|
||||||
|
|
||||||
for_each_task(pt) {
|
for_each_task(pt) {
|
||||||
if (pp && pt->project_id != pp->id) {
|
if (pp && pt->project_id != pp->id) {
|
||||||
continue;
|
continue;
|
||||||
@@ -114,18 +111,15 @@ void pit_task_delete(ulong id, PProject pp)
|
|||||||
PTask pt;
|
PTask pt;
|
||||||
bool standalone = (pp == NULL);
|
bool standalone = (pp == NULL);
|
||||||
|
|
||||||
if (standalone) {
|
if (standalone) pit_db_load();
|
||||||
pit_db_load();
|
|
||||||
pp = (PProject)pit_table_find(projects, pt->project_id);
|
|
||||||
}
|
|
||||||
task_find_current(&pt, &id);
|
task_find_current(&pt, &id);
|
||||||
|
if (standalone) pp = (PProject)pit_table_find(projects, pt->project_id);
|
||||||
|
|
||||||
if (pp) {
|
if (pp) {
|
||||||
/*
|
/*
|
||||||
** First delete task notes if any.
|
** First delete task notes if any.
|
||||||
*/
|
*/
|
||||||
if (pt->number_of_notes > 0) {
|
if (pt->number_of_notes > 0) {
|
||||||
PNote pn;
|
|
||||||
for_each_note(pn) {
|
for_each_note(pn) {
|
||||||
if (pn->task_id == id) {
|
if (pn->task_id == id) {
|
||||||
pit_note_delete(pn->id, pt);
|
pit_note_delete(pn->id, pt);
|
||||||
|
|||||||
Reference in New Issue
Block a user