### ### att reference formatting style ### BEGIN { PASS = ""; # only one pass thru document sortflag = 0; # reference_placement bibliography is not sorted STYLE = "att"; SKEY = "adt"; } ####################################################### # # Functions required by general awk script # ####################################################### ## ## Set author and editor fields ## for reference ## for possible sorting ## func setauthor(b,a) { Afull[b,a] = LastF_M(); Asort[b] = Asort[b] Afull[b,a] " "; } func seteditor(b,a) { E[b,a] = LastF_M(); Ename[b,a] = F_M_Last(); Esort[b] = Esort[b] E[b,a] " "; } ## ## citations ## print a citation list ## troff superscripted numbers ## nroff numbers in square brackets ## func citations(tpunc) { seq = "no"; sep = ""; # troff citation if(nroff == 0) { tcite = ""; begin_super = "\\^\\s-2\\v'-0.4m'\\f1\\&"; end_super = "\\fP\\v'0.4m'\\s+2" if(quote(tpunc) || period(tpunc)) end_super = end_super "\\ "; # format the list of citations, putting in commas and hypens for(i=1; i<=cites; i++) { seq = sequence(i,cites); if (seq == "in") continue; if (seq == "end") { sep = "-"; seq = "no"; } tcite = tcite sep makemark(i); sep = ",\\ "; } printf "%s%s%s%s", tpunc, begin_super, tcite, end_super; } # nroff citation else { ncite = "\n"; if(quote(tpunc)) { ncite = tpunc " "; tpunc = "\\ "; } else if(tpunc == "(") { ncite = tpunc; tpunc = ""; } # format the list of citations, putting in commas and hypens for(i=1; i<=cites; i++) { seq = sequence(i,cites); if (seq == "in") continue; if (seq == "end") { sep = "-"; seq = "no"; } ncite = ncite sep "[" makemark(i) "]"; sep = ", "; } printf "%s%s", ncite, tpunc; } } func quote(punc) { if(tpunc == "\"" || tpunc == "'") return 1; return 0; } func period(punc) { if (tpunc == "." || tpunc == "!" || tpunc == "?") return 1; return 0; } ## ## makemark ## return citation mark: identical citations have the same number ## func makemark(m) { return(uniqno[bibptr[m]]); } ## ## bibindex ## print citation mark for the bibliography; ## return an index for accessing rest of citation ## func bibindex(b) { printf ".sp .5\n.ti -\\w'[" b "]\\ \\ \\ 'u\n"; printf "[" b "]\\ \\ \\ " ; if(sortflag) return sortorder[b]; else return b; } ############################################# # # Reference types # ############################################ func book(b) { punc = "" # authorlist, if(authors[b]) { authorlist(b); punc = ",\n"; } # italic(title), if (title[b]) { printf "%s\\f2\\&%s\\f1\\&", punc, title[b]; punc = ",\n"; } # volume, if(volstr[b]) { printf "%s%s", punc, volstr[b]; punc = ",\n"; } else if(volume[b]) { printf "%sVol. %s", punc, volume[b]; punc = ",\n"; } # pages, if (pages[b]) { if ( pages[b] ~ /[,-]/ ) printf "%spp. %s", punc, pages[b]; else printf "%sp. %s", punc, pages[b]; punc = ",\n"; } # publisher, printf "%s%s", punc, issuer[b] ; punc = ",\n"; # location if (city[b]) printf "%s%s", punc, city[b] ; # (date) printf " (%s)", date[b] ; } func editedbook(b) { punc = ""; # authorlist (Eds.), if(authors[b]) { authorlist(b); if(authors[b] <2) printf " (Ed.)"; else printf " (Eds.)"; punc = ",\n"; } # italic(title), if (title[b]) { printf "%s\\f2\\&%s\\f1\\&", punc, title[b]; punc = ",\n"; } # volume, if(volstr[b]) { printf "%s%s", punc, volstr[b]; punc = ",\n"; } else if(volume[b]) { printf "%sVol. %s", punc, volume[b]; punc = ",\n"; } # publisher, printf "%s%s", punc, issuer[b] ; punc = ",\n"; # location, if (city[b] != "") printf "%s%s", punc, city[b] ; # pages if ( pages[b] != "" ) { if ( pages[b] ~ /[,-]/ ) printf "%spp. %s", punc, pages[b]; else printf "%sp. %s", punc, pages[b]; } # (date) printf " (%s)", date[b] ; } func thesis(b) { punc = "" # authorlist, if(authors[b]) { authorlist(b); punc = ",\n" } # italic(title), if(title[b]) { printf "%s\\f2\\&%s\\f1\\&", punc, title[b]; punc = ",\n" } # thesis, printf punc; if(reftype[b] == "phdthesis") printf "PhD Thesis"; else printf "Master's Thesis"; punc = ",\n"; # report number, if(report[b]) printf "%s%s", punc, report[b]; # school printf "%s%s", punc, issuer[b]; # (date) printf " (%s)", date[b] ; } func review(b) { article(b); } func article(b) { punc = ""; # authorlist, if(authors[b]) { authorlist(b); punc = ",\n" } # ``Title,'' if(title[b]) { if(nroff) printf "%s\"%s,\"", punc, title[b] ; else printf "%s``%s,''", punc, title[b] ; punc = "\n"; } # Reviewed title and author if(booktitle[b]) { printf "%sReview of \\f2\\&%s\\f1\\&", punc, booktitle[b]; if(editors[b]) { printf " by "; enamelist(b); } if (issuer[b]) { printf " %s", issuer[b]; } punc = ",\n"; } # italics(journal) printf "%s\\f2\\&%s\\f1\\&", punc, journal[b]; punc = ",\n"; # bold(volume)(number Pt part), if (volstr[b]) printf " \\f3\\&%s\\f1\\&", volstr[b] ; else if (volume[b]) printf " \\f3\\&%s\\f1\\&", volume[b] ; if (numstr[b]) { printf "(%s", numstr[b]; if(partstr[b]) printf " %s", partstr[b]; else if(part[b]) printf " Pt. %s", part[b]; printf ")"; } else if (number[b]) { printf "(%s", number[b]; if(partstr[b]) printf " %s", partstr[b]; else if(part[b]) printf " Pt. %s", part[b]; printf ")"; } # pages, if ( pages[b]) { if ( pages[b] ~ /[,-]/ ) printf "%spp. %s", punc, pages[b]; else printf "%sp. %s", punc,pages[b]; } # publisher if(issuer[b]) if(authors[b] || editors[b]) printf "%s%s", punc, issuer[b]; # (date) printf " (%s)", date[b]; } func incollection(b) { punc = ""; # Authorlist if(authors[b]) { authorlist(b); punc = ",\n"; } # ``Title,'' if(title[b]) { if(nroff) printf "%s\"%s,\"", punc, title[b] ; else printf "%s``%s,''", punc, title[b] ; punc = "\n"; } # pages if ( pages[b]) { if ( pages[b] ~ /[,-]/ ) printf "%spp. %s ", punc, pages[b]; else printf "%sp. %s ", punc, pages[b]; punc = ""; } # in italics(booktitle), printf "%sin \\f2\\&%s\\f1\\&", punc, booktitle[b]; punc = ",\n"; # volume, if(volstr[b]) { printf "%s%s", punc, volstr[b]; } else if(volume[b]) { printf "%sVol. %s", punc, volume[b]; } # editorlist (Ed.), if(editors[b]) { printf punc; editorlist(b); if (editors[b] == 1) printf " (Ed.)" else if (editors[b] > 1) printf " (Eds.)" } # publisher, location, printf "%s%s", punc, issuer[b] if (city[b]) printf ", %s", city[b] ; # (date) printf " (%s)", date[b]; } func inproceedings(b) { punc = ""; # authorlist if(authors[b]) { authorlist(b); punc = ",\n"; } # ``Title,'' if(title[b]) { if(nroff) printf "%s\"%s,\"", punc,title[b] ; else printf "%s``%s,''", punc,title[b] ; punc = "\n"; } # italics(journal) printf "%s\\f2\\&%s\\f1\\&", punc, journal[b]; punc = ",\n"; # bold(vol)(no Pt. #), if (volstr[b]) printf " \\f3\\&%s\\f1\\&", volstr[b] ; else if (volume[b]) printf " \\f3\\&%s\\f1\\&", volume[b] ; if (numstr[b]) { printf "(%s", numstr[b]; if(partstr[b]) printf " %s", partstr[b]; else if(part[b]) printf " Pt. %s", part[b]; printf ")"; } else if (number[b]) { printf "(%s", number[b]; if(partstr[b]) printf " %s", partstr[b]; else if(part[b]) printf " Pt. %s", part[b]; printf ")"; } # pages, if ( pages[b]) { if ( pages[b] ~ /[,-]/ ) printf "%spp. %s", punc, pages[b]; else printf "%sp. %s", punc, pages[b]; } # editorlist (Ed.), if(editors[b]) { printf punc; editorlist(b); if (editors[b] == 1) printf " (Ed.)" else if (editors[b] > 1) printf " (Eds.)" } # publisher if(issuer[b]) if(authors[b] || editors[b]) printf "%s%s", punc, issuer[b]; if (city[b]) printf "%s%s", punc, city[b] ; # (date) printf " (%s)", date[b]; } func proceedings(b) { punc = ""; # authorlist, if(authors[b]) { authorlist(b); punc = ",\n"; } # editorlist (Ed.), else if(editors[b]) { printf punc; editorlist(b); if (editors[b] == 1) printf " (Ed.)" else if (editors[b] > 1) printf " (Eds.)" punc = ",\n"; } # publisher, else if(issuer[b]) { printf "%s%s", punc, issuer[b]; punc = ",\n"; } # italics(title) if(title[b]) { printf "%s\\f2\\&%s\\f1\\&", punc,title[b]; punc = " "; } # bold(vol)(no Pt. #), if (volstr[b]) { printf "%s\\f3\\&%s\\f1\\&", punc,volstr[b]; punc = ",\n"; } else if (volume[b]) { printf "%s\\f3\\&%s\\f1\\&", punc,volume[b]; punc = ",\n"; } if (numstr[b]) { printf "(%s", numstr[b]; if(partstr[b]) printf " %s", partstr[b]; else if(part[b]) printf " Pt. %s", part[b]; printf ")"; } else if (number[b]) { printf "(%s", number[b]; if(partstr[b]) printf " %s", partstr[b]; else if(part[b]) printf " Pt. %s", part[b]; printf ")"; } # publisher, if(issuer[b]) if(authors[b] != 0 || editors[b] != 0) { printf "%s%s", punc, issuer[b]; punc = ",\n"; } # location, if (city[b]) printf "%s%s", punc, city[b] ; # (date) if (date[b]) printf " (%s)", date[b]; } func techreport(b) { punc = ""; # authorlist, if(authors[b]) { authorlist(b); punc = ",\n"; } # ``Title,'' if(title[b]) { if(nroff) printf "%s\"%s,\"", punc, title[b] ; else printf "%s``%s,''", punc, title[b] ; punc = "\n"; } # report, printf "%s%s", punc, report[b]; punc = ",\n"; # publisher, if (issuer[b]) printf "%s%s", punc, issuer[b] ; # location if (city[b]) printf "%s%s", punc, city[b] ; # (date) printf " (%s)", date[b] ; } func tm(b) { punc = "" # authorlist if(authors[b]) { authorlist(b); punc = ",\n"; } # italic(title), if(title[b]) { printf "%s\\f2\\&%s\\f1\\&", punc, title[b]; punc = ",\n"; } # tmno printf punc; if(rp) printf "AT&T Bell Laboratories internal memorandum"; else printf "%s", tmno[b] # (date) printf " (%s)", date[b] ; } func manual(b) { punc = ""; # authorlist, if(authors[b]) { authorlist(b); punc = ",\n"; } # editorlist (Ed.), else if(editors[b] > 0) { printf punc; editorlist(b); if (editors[b] == 1) printf " (Ed.)" else if (editors[b] > 1) printf " (Eds.)" punc = ",\n" } # publisher, else if(issuer[b]) { printf "%s%s", punc, issuer[b]; punc = ",\n"; } # italic(title), if(title[b]) { printf "%s\\f2\\&%s\\f1\\&", punc, title[b]; punc = ",\n"; } # volume, if(volstr[b]) { printf "%s%s", punc, volstr[b]; } else if(volume[b]) { printf "%sVol. %s", punc, volume[b]; } # publisher, if(issuer[b]) if(authors[b] || editors[b] ) { printf "%s%s", punc, issuer[b]; punc = ",\n"; } # location, if (city[b]) printf "%s%s", punc, city[b] ; # pages if (pages[b]) { if ( pages[b] ~ /[,-]/ ) printf "%spp. %s", punc, pages[b]; else printf "%sp. %s", punc, pages[b]; } # (date) printf " (%s)", date[b]; } func pamphlet(b) { punc = ""; # authorlist, if(authors[b]) { authorlist(b); punc = ",\n"; } # publisher, else if(issuer[b]) { printf "%s%s", punc, issuer[b]; punc = ",\n"; } # ``Title,'' if(title[b]) { printf "%s\\f2\\&%s\\f1\\&", punc, title[b] ; punc = ",\n"; } # publisher, if(issuer[b]) { if(authors[b] || editors[b]) { printf "%s%s", punc, issuer[b]; } } # location if (city[b]) { printf "%s%s", punc, city[b] ; } # (date), if (date[b]) { printf " (%s)", date[b]; } } func default(b) { punc = ""; # authorlist, if(authors[b]) { authorlist(b); punc = ",\n"; } # publisher, else if(issuer[b]) { printf "%s%s", punc, issuer[b]; punc = ",\n"; } # title, if(title[b]) { printf "%s\\f2\\&%s\\f1\\&", punc, title[b] ; punc = ",\n"; } # volume, if(volstr[b]) { printf "%s%s", punc, volstr[b]; } else if(volume[b]) { printf "%sVol. %s", punc, volume[b]; } # publisher, if(issuer[b]) { if(authors[b] || editors[b]) { printf "%s%s", punc, issuer[b]; } } # location, if (city[b]) { printf "%s%s", punc, city[b] ; } # pages if (pages[b]) { if ( pages[b] ~ /[,-]/ ) printf "%spp. %s", punc, pages[b]; else printf "%sp. %s", punc, pages[b]; } # (date) if (date[b]) { printf " (%s)", date[b]; } } ## ## authorlist ## First ## First and Second ## First, Second,..., and Last ## func authorlist(b) { if ( authors[b] == 0 ) ; else if ( authors[b] == 1 ) { printf Afull[b,1] ; if(aetal[b]) printf ", et al."; } else if ( authors[b] == 2 ) printf Afull[b,1] " and " Afull[b,2]; else { for ( j = 1; j < authors[b]; j++ ) print Afull[b,j] ", "; printf "and " Afull[b,authors[b]]; } } ## ## editorlist ## First ## First and Second ## First, Second,..., and Last ## func editorlist(b) { if ( editors[b] == 0 ) ; else if ( editors[b] == 1 ) { printf E[b,1] ; if(eetal[b]) printf ", et al."; } else if ( editors[b] == 2 ) printf E[b,1] " and " E[b,2]; else { for ( j = 1; j < editors[b]; j++ ) print E[b,j] ", "; printf "and " E[b,editors[b]]; } } ## ## enamelist ## First ## First and Second ## First, Second,..., and Last ## func enamelist(b) { if ( editors[b] == 0 ) ; else if ( editors[b] == 1 ) { printf Ename[b,1] ; if(eetal[b]) printf ", et al."; } else if ( editors[b] == 2 ) printf Ename[b,1] " and " Ename[b,2]; else { for ( j = 1; j < editors[b]; j++ ) print Ename[b,j] ", "; printf "and " Ename[b,editors[b]]; } }