This is arclst.c in view mode; [Download] [Up]
/* * $Header: arclst.c,v 1.5 88/06/01 18:05:57 hyc Locked $ */ /* ARC - Archive utility - ARCLST Version 2.39, created on 04/22/87 at 13:48:29 (C) COPYRIGHT 1985-87 by System Enhancement Associates; ALL RIGHTS RESERVED By: Thom Henderson Description: This file contains the routines used to list the contents of an archive. Language: Computer Innovations Optimizing C86 */ #include <stdio.h> #include "arc.h" void rempath(), openarc(), closearc(); int readhdr(), match(); void lstarc(num, arg) /* list files in archive */ int num; /* number of arguments */ char *arg[]; /* pointers to arguments */ { struct heads hdr; /* header data */ int list; /* true to list a file */ int did[MAXARG]; /* true when argument was used */ long tnum, tlen, tsize; /* totals */ int n; /* index */ void lstfile(); tnum = tlen = tsize = 0;/* reset totals */ for (n = 0; n < num; n++) /* for each argument */ did[n] = 0; /* reset usage flag */ rempath(num, arg); /* strip off paths */ if (note && !kludge) { printf("Name Length "); if (bose) printf(" Stowage SF Size now"); printf(" Date "); if (bose) printf(" Time CRC"); printf("\n"); printf("============ ========"); if (bose) printf(" ======== ==== ========"); printf(" ========="); if (bose) printf(" ====== ===="); printf("\n"); } openarc(0); /* open archive for reading */ if (num) { /* if files were named */ while (readhdr(&hdr, arc)) { /* process all archive files */ list = 0; /* reset list flag */ for (n = 0; n < num; n++) { /* for each template * given */ if (match(hdr.name, arg[n])) { list = 1; /* turn on list flag */ did[n] = 1; /* turn on usage flag */ break; /* stop looking */ } } if (list) { /* if this file is wanted */ if (!kludge) lstfile(&hdr); /* then tell about it */ tnum++; /* update totals */ tlen += hdr.length; tsize += hdr.size; } fseek(arc, hdr.size, 1); /* move to next header */ } } else while (readhdr(&hdr, arc)) { /* else report on all files */ if (!kludge) lstfile(&hdr); tnum++; /* update totals */ tlen += hdr.length; tsize += hdr.size; fseek(arc, hdr.size, 1); /* skip to next header */ } closearc(0); /* close archive after reading */ if (note && !kludge) { printf(" ==== ========"); if (bose) printf(" ==== ========"); printf("\n"); } if (note) { printf("Total %6ld %8ld", tnum, tlen); if (bose) { if (tlen) printf(" %3ld%%", 100L - (100L * tsize) / tlen); else printf(" ---"); printf(" %8ld", tsize); } printf("\n"); for (n = 0; n < num; n++) { /* report unused args */ if (!did[n]) { printf("File not found: %s\n", arg[n]); nerrs++; } } } } void lstfile(hdr) /* tell about a file */ struct heads *hdr; /* pointer to header data */ { int yr, mo, dy; /* parts of a date */ int hh, mm; /* parts of a time */ static char *mon[] = /* month abbreviations */ { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; if (!note) { /* no notes means short listing */ printf("%s\n", hdr->name); return; } yr = (hdr->date >> 9) & 0x7f; /* dissect the date */ mo = (hdr->date >> 5) & 0x0f; dy = hdr->date & 0x1f; hh = (hdr->time >> 11) & 0x1f; /* dissect the time */ mm = (hdr->time >> 5) & 0x3f; /* ss = (hdr->time & 0x1f) * 2; seconds, not used. */ printf("%-12s %8ld ", hdr->name, hdr->length); if (bose) { switch (hdrver) { case 1: case 2: printf(" -- "); break; case 3: printf(" Packed "); break; case 4: printf("Squeezed"); break; case 5: case 6: case 7: printf("crunched"); break; case 8: printf("Crunched"); break; case 9: printf("Squashed"); break; default: printf("Unknown!"); } if (hdr->length) printf(" %3ld%%", 100L - (100L * hdr->size) / hdr->length); else printf(" ---"); printf(" %8ld ", hdr->size); } printf("%2d %3s %02d", dy, mon[mo - 1], (yr + 80) % 100); if (bose) printf(" %2d:%02d%c %04x", (hh > 12 ? hh - 12 : hh), mm, (hh > 11 ? 'p' : 'a'), hdr->crc & 0xffff); printf("\n"); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.