#!/usr/local/bin/gawk -f # determine file type and output information in plain2html.awk format # $Id: magic.awk,v 1.4 1999/12/22 10:55:47 aonuma Exp aonuma $ # $Log: magic.awk,v $ # Revision 1.4 1999/12/22 10:55:47 aonuma # Added NOHEADER, HEADERONLY, FOOTERONLY (for xargs) # # If resource is temporarily unavailable, try `unlimit'. BEGIN { CURRENTFILE="unknownmagic.xxx" READLINES=10 IGNORECASE=1 MONTHS="00JanFebMarAprMayJunJulAugSepOctNovDec" # TOP # NOHEADER # HEADERONLY # FOOTERONLY if (FOOTERONLY) NOHEADER=1 #LIST or TABLE TABLE=1 # default is TABLE if (LIST) TABLE=0 # set LIST=non-zero to output list format. if (!NOHEADER) { print ".LANG en" print ".TI directory listing" if (TABLE) { print ".TTAG 1" print ".TS ///" print "#name /// file type and description ///>size /// YYYY/MM/DD" if (!TOP) print "../ /// UP /// . /// ." } } if (HEADERONLY || FOOTERONLY) exit } END { if (!SKIP && CURRENTFILE!="unknownmagic.xxx") { if (TABLE) PrintOutTable() else PrintOutList() } if (!HEADERONLY && (!NOHEADER || FOOTERONLY) ) PrintFooter() } (FILENAME != CURRENTFILE) { if (!SKIP && CURRENTFILE!="unknownmagic.xxx") { if (TABLE) PrintOutTable() else PrintOutList() } CLINE=1 SKIP=0 FRCS="" CURRENTFILE=BASE=FILENAME if (FILENAME ~ /~$/) SKIP=1 else { "ls -LTl "FILENAME | getline tmp split(tmp, FINFO) # 1 2 3 4 5 6 7 8 9 10 # -rwxr-xr-x 1 aonuma zoo 4424 Nov 21 22:29:23 1999 magic.awk FSIZE=FINFO[5] if (FSIZE<1024) FSIZE=sprintf("%i bytes", FSIZE) else { FSIZE=FSIZE/1024 if (FSIZE<1024) FSIZE=sprintf("%i Kbytes", FSIZE) else { FSIZE=FSIZE/1024 FSIZE=sprintf("%i Mbytes", FSIZE) } } FDATE=sprintf("%04i/%02i/%02i", FINFO[9], index(MONTHS, FINFO[6])/3, FINFO[7]) } while (index(BASE, "/")) BASE=substr(BASE, index(BASE, "/")+1) EXT=BASE while (index(EXT, ".")) EXT=substr(EXT, index(EXT, ".")+1) } ($0 && CLINE<=READLINES && !SKIP) { LINE[CLINE++]=$0 } ($0 ~ /\$Id: / && !SKIP) { n=split(substr($0, index($0, "$Id: ")), RCS) # if (RCS[4]) FDATE=RCS[4] if (n>6 && RCS[3]) FRCS=RCS[3] } (CLINE==READLINES && !SKIP) {# Analyze file type TYPE=DESC="" if (EXT=="Makefile") TypeMakefile() if (EXT ~ /,v$/ ) TypeRcs() if (EXT=="nn") TypeNn() if (EXT=="tex") TypeTex() if (EXT=="html" || EXT=="htm") TypeHtml() if (LINE[1] ~ /^%!/ && LINE[1] ~ "PS-Adobe") TypeFile() if (LINE[2] ~ /^#/) TypeFile() if (!TYPE) TypeASCII() if (!TYPE) TypeFile() sub("^[ \t]+", "", DESC) sub("[ \t]+$", "", DESC) CLINE++ } function PrintOutList(){ printf("@%s", CURRENTFILE, CURRENTFILE) TYPE=TYPE" "DESC if (FRCS) TYPE=sprintf("%s (RCS rev. %s)", TYPE, FRCS) printf("
%50s%10s, %10s\n", TYPE, FSIZE, FDATE) DESC=TYPE="" } function PrintOutTable(){ printf("%s///", CURRENTFILE, CURRENTFILE) printf("%s, %s", TYPE, DESC) if (FRCS) printf(" (RCS rev. %s)", FRCS) printf("///%s///%s", FSIZE, FDATE) printf "\n" DESC=TYPE="" } function Type(type){ TYPE=type } function TypeMakefile(){ TYPE="Makefile text" if (LINE[1] ~ /^#/) DESC=substr(LINE[1], 2) } function TypeHtml(){ TYPE="html document" i=1 while (LINE[i] !~ "