int main(void) { int day, month, year, date; printf("Enter a day: "); scanf("%d", &day); printf("Enter a month: "); scanf("%d", &month); printf("Enter a year (yy): "); scanf("%d", &year); date = pack_date(day, month, year); printf("\nPacked date: "); bit_print(date); printf("\n"); printf("Integer date: %d\n", date); printf("Unpacked date: "); unpack_date(date); printf("\n"); printf("\nNext packed date: "); date = next_date(date); bit_print(date); printf("\n"); printf("Integer date: %d\n", date); printf("Unpacked date: "); unpack_date(date); printf("\n"); return 0; }
int folder_menu(char *path, int mode) { FILE *folder; register article_header *ah; news_header_buffer dgbuf; char buffer[256]; int more, length, re, menu_cmd, was_raw; memory_marker mem_marker; group_header fake_group; int cc_save; char folder_name[FILENAME], folder_file[FILENAME]; int orig_layout; char *orig_hdr_lines; orig_layout = fmt_linenum; orig_hdr_lines = header_lines; strcpy(folder_name, path); fake_group.group_name = folder_name; fake_group.kill_list = NULL; if (!expand_file_name(folder_file, folder_name, 1)) return ME_NO_REDRAW; fake_group.archive_file = path = folder_file; fake_group.next_group = fake_group.prev_group = NULL; fake_group.group_flag = G_FOLDER | G_FAKED; fake_group.master_flag = 0; fake_group.save_file = NULL; current_group = NULL; init_group(&fake_group); folder = open_file(path, OPEN_READ); if (folder == NULL) { msg("%s not found", path); return ME_NO_REDRAW; } switch (get_folder_type(folder)) { case 0: msg("Reading: %-.65s", path); break; case 1: case 2: msg("Reading %s folder: %-.50s", current_folder_type == 1 ? "mail" : "mmdf", path); break; default: msg("Folder is empty"); fclose(folder); return ME_NO_REDRAW; } rewind(folder); was_raw = no_raw(); s_keyboard = 0; current_group = &fake_group; mark_memory(&mem_marker); ah = alloc_art(); more = 1; while (more && (more = get_digest_article(folder, dgbuf)) >= 0) { if (s_keyboard) break; ah->a_number = 0; ah->flag = A_FOLDER; ah->attr = 0; ah->lines = digest.dg_lines; ah->hpos = digest.dg_hpos; ah->fpos = digest.dg_fpos; ah->lpos = digest.dg_lpos; if (digest.dg_from) { length = pack_name(buffer, digest.dg_from, Name_Length); ah->sender = alloc_str(length); strcpy(ah->sender, buffer); ah->name_length = length; if (mode == 1) fold_string(ah->sender); } else { ah->sender = ""; ah->name_length = 0; } if (digest.dg_subj) { length = pack_subject(buffer, digest.dg_subj, &re, 255); ah->replies = re; ah->subject = alloc_str(length); strcpy(ah->subject, buffer); ah->subj_length = length; if (mode == 1 && length > 1) fold_string(ah->subject + 1); } else { ah->replies = 0; ah->subject = ""; ah->subj_length = 0; } ah->t_stamp = digest.dg_date ? pack_date(digest.dg_date) : 0; add_article(ah); ah = alloc_art(); } fclose(folder); if (s_keyboard) { menu_cmd = ME_NO_REDRAW; } else if (n_articles == 0) { msg("Not a folder (no article header)"); menu_cmd = ME_NO_REDRAW; } else { if (n_articles > 1) { clrdisp(); prompt_line = 2; if (mode == 0 && !dont_sort_folders) sort_articles(-1); else if (mode == 1) { article_number n; for (n = 0; n < n_articles; n++) { ah = articles[n]; if (n == 0) ah->flag |= A_ROOT_ART; else if (strcmp(ah->sender, articles[n - 1]->sender) == 0) articles[n - 1]->flag |= A_NEXT_SAME; else ah->flag |= A_ROOT_ART; } bypass_consolidation = consolidated_manual ? 2 : 1; } else no_sort_articles(); } else no_sort_articles(); cc_save = cancel_count; cancel_count = 0; if (mode == 1) { fmt_linenum = -1; header_lines = "*"; } reenter_menu: ignore_fancy_select = 1; menu_cmd = menu(folder_header); ignore_fancy_select = 0; if (mode == 0 && cancel_count) { register article_number cur; cancel_count = 0; for (cur = 0; cur < n_articles; cur++) { if (articles[cur]->attr == A_CANCEL) cancel_count++; } } if (mode == 0 && cancel_count) { clrdisp(); tprintf("\rFolder: %s\n\rFile: %s\n\n\r", folder_name, folder_file); if (cancel_count == n_articles) tprintf("Cancel all articles and remove folder? "); else tprintf("Remove %d article%s from folder? ", cancel_count, plural((long) cancel_count)); fl; switch (yes(1)) { case 1: tprintf("\n\n"); if (cancel_count == n_articles) { if (unlink(group_path_name) < 0 && nn_truncate(group_path_name, (off_t) 0) < 0) { tprintf("\rCould not unlink %s\n\r", group_path_name); any_key(0); } } else rewrite_folder(); break; case 0: break; default: goto reenter_menu; } } cancel_count = cc_save; } release_memory(&mem_marker); if (fmt_linenum == -1) { fmt_linenum = orig_layout; header_lines = orig_hdr_lines; } if (was_raw) nn_raw(); return menu_cmd; }
static void build_hdr(int type) { register char *name, *subj; int re; db_data.dh_type = type; if (type == DH_SUB_DIGEST) { name = digest.dg_from; subj = digest.dg_subj; db_hdr.dh_lines = digest.dg_lines; db_hdr.dh_hpos = digest.dg_hpos; db_hdr.dh_fpos = (int16) (digest.dg_fpos - db_hdr.dh_hpos); db_hdr.dh_lpos = digest.dg_lpos; db_hdr.dh_date = pack_date(digest.dg_date ? digest.dg_date : news.ng_date); } else { if (!news.ng_from) news.ng_from = news.ng_reply; name = news.ng_from; subj = news.ng_subj; db_hdr.dh_lines = news.ng_lines; db_hdr.dh_hpos = 0; db_hdr.dh_fpos = (int16) (news.ng_fpos); db_hdr.dh_lpos = news.ng_lpos; db_hdr.dh_date = pack_date(news.ng_date); } if (name) { db_hdr.dh_sender_length = pack_name(db_data.dh_sender, name, NAME_LENGTH); } else db_hdr.dh_sender_length = 0; if (type == DH_DIGEST_HEADER) { db_hdr.dh_subject_length = 1; db_data.dh_subject[0] = '@'; } else db_hdr.dh_subject_length = 0; db_hdr.dh_subject_length += pack_subject(db_data.dh_subject + db_hdr.dh_subject_length, subj, &re, DBUF_SIZE); #ifdef COUNT_RE_REFERENCES if (re) re = 0x80; if (news.ng_ref) { for (name = news.ng_ref; *name; name++) { if ((re & 0x7f) == 0x7f) break; if (*name == '<') re++; } } #endif db_hdr.dh_replies = re; if (db_write_art(data) < 0) write_error(); }