int insert_part(Parts db, Part p) { /* invalid record? */ if (!p) return -3; Node *cur, *prev; for (cur = db->head, prev = NULL; cur != NULL && get_part_number(p) > get_part_number(cur->part); prev = cur, cur = cur->next) ; /* duplicate part number? */ if (cur != NULL && get_part_number(p) == get_part_number(cur->part)) return -2; Node *n = create_node(p); n->next = cur; if (prev == NULL) db->head = n; else prev->next = n; db->count++; return 0; }
int print_cpuinfo(void) { u16 cpu = get_part_number(); u8 rev = cpu_revision(); puts("CPU: "); switch (cpu) { case CPU_66AK2Hx: puts("66AK2Hx SR"); break; case CPU_66AK2Lx: puts("66AK2Lx SR"); break; case CPU_66AK2Ex: puts("66AK2Ex SR"); break; case CPU_66AK2Gx: puts("66AK2Gx SR"); break; default: puts("Unknown\n"); } if (rev == 2) puts("2.0\n"); else if (rev == 1) puts("1.1\n"); else if (rev == 0) puts("1.0\n"); return 0; }
Part find_part(Parts db, PartNumber part_number) { for (Node *n = db->head; n != NULL; n = n->next) if (get_part_number(n->part) == part_number) return n->part; return NULL; }
static Node *approximate_node(Parts db, PartNumber part_number) { PartNumber pn; Node *previous, *current; if (db->count == 0) return NULL; /* return first if the target is smaller than all */ if (get_part_number(db->head->part) > part_number) return db->head; /* find whichever the exact part or the next greatest */ current = db->head; while ( current && (pn = get_part_number(current->part)) < part_number) { previous = current; current = current->next; } /* return the exact part or the next smallest */ if (pn == part_number) return current; else return previous; }
int delete_part(Parts db, PartNumber number) { Node *cur, *prev; for (cur = db->head, prev = NULL; cur != NULL && number != get_part_number(cur->part); prev = cur, cur = cur->next) ; if (cur == NULL) /* not found */ return -1; if (prev == NULL) /* first */ db->head = db->head->next; else prev->next = cur->next; destroy_node(cur); db->count--; return 0; }