mirror of
https://github.com/michaeldv/pit.git
synced 2025-12-09 16:05:35 +00:00
Iteration macros now create automatic iteration pointer variable
This commit is contained in:
@@ -5,7 +5,6 @@
|
||||
|
||||
static void action_list()
|
||||
{
|
||||
PAction pa;
|
||||
PPager ppager;
|
||||
|
||||
pit_db_load();
|
||||
|
||||
@@ -30,10 +30,10 @@ typedef int bool;
|
||||
#define max(a,b) ((a) > (b) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#define for_each_project(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_note(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_project(ptr) PProject ptr; for (ptr = (PProject)projects->slots; (ptr - (PProject)projects->slots) < projects->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) PNote ptr; for (ptr = (PNote)notes->slots; (ptr - (PNote)notes->slots) < notes->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. */
|
||||
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)
|
||||
{
|
||||
PProject pp;
|
||||
PPager ppager;
|
||||
PPager ppager;
|
||||
|
||||
pit_db_load();
|
||||
if (projects->number_of_records > 0) {
|
||||
@@ -81,8 +80,6 @@ static void project_show(ulong id)
|
||||
printf("%lu: %s (%s, %lu task%s)\n",
|
||||
pp->id, pp->name, pp->status, pp->number_of_tasks, (pp->number_of_tasks != 1 ? "s" : ""));
|
||||
if (pp->number_of_tasks > 0) {
|
||||
PTask pt = (PTask)tasks->slots;
|
||||
|
||||
puts("Tasks:");
|
||||
for_each_task(pt) {
|
||||
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)
|
||||
{
|
||||
PProject pp;
|
||||
PTask pt;
|
||||
char *deleted_name;
|
||||
ulong deleted_number_of_tasks;
|
||||
|
||||
pit_db_load();
|
||||
project_find_current(&pp, &id);
|
||||
|
||||
/*
|
||||
** Delete project tasks.
|
||||
*/
|
||||
@@ -135,8 +128,9 @@ static void project_delete(ulong id)
|
||||
** Ready to delete the project itself. But first preserve the
|
||||
** name and number of tasks since we need these bits for logging.
|
||||
*/
|
||||
deleted_name = str2str(pp->name);
|
||||
deleted_number_of_tasks = pp->number_of_tasks;
|
||||
char *deleted_name = str2str(pp->name);
|
||||
ulong deleted_number_of_tasks = pp->number_of_tasks;
|
||||
|
||||
pp = (PProject)pit_table_delete(projects, id);
|
||||
if (pp) {
|
||||
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)
|
||||
{
|
||||
PProject pp;
|
||||
|
||||
pit_db_load();
|
||||
for_each_project(pp) {
|
||||
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)
|
||||
{
|
||||
PProject pp;
|
||||
PTask pt;
|
||||
PPager ppager;
|
||||
|
||||
pit_db_load();
|
||||
if (tasks->number_of_records > 0) {
|
||||
pp = (PProject)pit_table_current(projects);
|
||||
ppager = pit_pager_initialize(PAGER_TASK, tasks->number_of_records);
|
||||
PProject pp = (PProject)pit_table_current(projects);
|
||||
PPager ppager = pit_pager_initialize(PAGER_TASK, tasks->number_of_records);
|
||||
|
||||
for_each_task(pt) {
|
||||
if (pp && pt->project_id != pp->id) {
|
||||
continue;
|
||||
@@ -114,18 +111,15 @@ void pit_task_delete(ulong id, PProject pp)
|
||||
PTask pt;
|
||||
bool standalone = (pp == NULL);
|
||||
|
||||
if (standalone) {
|
||||
pit_db_load();
|
||||
pp = (PProject)pit_table_find(projects, pt->project_id);
|
||||
}
|
||||
if (standalone) pit_db_load();
|
||||
task_find_current(&pt, &id);
|
||||
if (standalone) pp = (PProject)pit_table_find(projects, pt->project_id);
|
||||
|
||||
if (pp) {
|
||||
/*
|
||||
** First delete task notes if any.
|
||||
*/
|
||||
if (pt->number_of_notes > 0) {
|
||||
PNote pn;
|
||||
for_each_note(pn) {
|
||||
if (pn->task_id == id) {
|
||||
pit_note_delete(pn->id, pt);
|
||||
|
||||
Reference in New Issue
Block a user