void list_contents(int ingresso){ filetype type; int total_entries,used; int used_entries; char tape_name[25]; int start_address,end_address,count,offset; char entry_name[17]; switch (type=detect_type(ingresso)){ case t64: total_entries=get_total_entries(ingresso); used_entries=get_used_entries(ingresso); get_tape_name(tape_name,ingresso); printf("%d total entr",total_entries); if (total_entries==1) printf("y"); else printf("ies"); printf(", %d used entr",used_entries); if (used_entries==1) printf("y"); else printf("ies"); printf(", tape name: %s\n",tape_name); printf(" Start address End address\n"); printf(" No. Name dec hex dec hex\n"); printf("--------------------------------------------------\n"); for(count=1;count<=total_entries;count++) if(used=get_entry(count,ingresso,&start_address,&end_address, &offset,entry_name)) printf("%5d %s %5d %04x %5d %04x\n",count,entry_name, start_address,start_address,end_address,end_address); return; case p00: get_entry(count,ingresso,&start_address,&end_address, &offset,entry_name); printf("Start address: %d (hex %04x), end address: %d (hex %04x), name: %s\n" ,start_address,start_address,end_address,end_address,entry_name); return; case prg: get_entry(count,ingresso,&start_address,&end_address, &offset,entry_name); printf("Start address: %d (hex %04x), end address: %d (hex %04x)\n" ,start_address,start_address,end_address,end_address); return; } }
static void write_entries_to_window(HWND window, char *filename){ int num_of_entries, entry, row_num = 0; char numstr[6]; filetype type; LVITEMA row; FILE *fd; struct program_block program; HWND preview = GetDlgItem(window, IDC_PREVIEW); HWND text = GetDlgItem(window, IDC_FILE_TYPE); HWND c64name = GetDlgItem(window, IDC_C64_NAME); fd = fopen(filename, "rb"); if (fd == NULL) return; switch (type = detect_type(fd)) { case not_a_valid_file: EnableWindow(preview, FALSE); EnableWindow(c64name, FALSE); SetWindowTextA(text, ""); SetWindowTextA(c64name, ""); fclose(fd); return; case t64: { char message[1000]; char tape_name[25]; int num_of_used_entries; num_of_entries = get_total_entries(fd); num_of_used_entries = get_used_entries(fd); get_tape_name(tape_name, fd); _snprintf(message, 1000, "T64 file with %u total entr%s, %u used entr%s, name %s", num_of_entries, num_of_entries == 1 ? "y" : "ies", num_of_used_entries, num_of_used_entries == 1 ? "y" : "ies", tape_name); SetWindowTextA(text, message); EnableWindow(preview, num_of_used_entries > 1); } EnableWindow(c64name, FALSE); break; case p00: EnableWindow(preview, FALSE); num_of_entries = 1; SetWindowTextA(text, "P00 file"); EnableWindow(c64name, TRUE); break; case prg: EnableWindow(preview, FALSE); num_of_entries = 1; SetWindowTextA(text, "PRG file"); EnableWindow(c64name, TRUE); break; } for (entry = 1; entry <= num_of_entries; entry++) { if (get_entry(entry, fd, &program)) { row.mask = LVIF_TEXT; row.iItem = row_num++; row.iSubItem = 0; row.pszText = numstr; sprintf(numstr, "%u", entry); ListView_InsertItem(preview, &row); row.iSubItem = 1; row.pszText = program.info.name; ListView_SetItem(preview, &row); row.iSubItem = 2; row.pszText = numstr; sprintf(numstr, "%u", program.info.start); ListView_SetItem(preview, &row); row.iSubItem = 3; sprintf(numstr, "%u", program.info.end); ListView_SetItem(preview, &row); } } if (row_num == 1) { ListView_SetItemState(preview, 0, LVIS_SELECTED, LVIS_SELECTED); SetWindowTextA(c64name, program.info.name); } else { SetWindowTextA(c64name, ""); if (IsWindowEnabled(preview)) ListView_SetItemState(preview, 0, LVIS_FOCUSED, LVIS_FOCUSED); } fclose(fd); }