[net.bugs.4bsd] 'refer' sort problem and fix

cons@sdccsu3.UUCP (08/03/84)

Subject: REFER mis-sorts reference lists if duplicate citations occur.
Index:	usr.bin/refer/refer2.c 4.2BSD
      	usr.bin/refer/refer5.c 4.2BSD

Description:
	The putsig routine in refer5.c is responsible for placing
	signals (usually superscripts, or author-date labels) in the
	body of a document.  Putsig also makes the signals available
	for printing in the reference list by emitting strings such as
	".ds [F signal" into the reference list.

	If a reference is cited more than once, it is only put on the
	reference list the first time it is cited.  However putsig
	persists in emitting the ".ds [F ..." string for duplicate
	citations.

	This causes a problem if the reference list is sorted because
	the extraneous ".ds [F ..." material appears at the beginning
	of the next non-duplicate reference where it obscures the
	sortkey.  Thus the reference list is mis-sorted.

Repeat-By:
	Create a document which cites a reference twice, then cites a
	new reference.  Process the document using REFER with the -s
	option.  Notice the extra ".ds [F ..." line in the REFER
	output.  If the two references came out sorted properly, you
	were lucky, reverse their roles and you will see the failure.

Fix:
	Instead of providing the fixes in the form of diff output, the
	sources for refer2.c and refer5.c have been posted to
	net.sources.  Numerous comments and a feature to condense
	numeric signals (1,2,3 becomes 1-3) have been added. You may
	find these useful.

	Brief description of the fix:
	putsig is called at two places in refer2.c, in one context a
	duplicate citation is being processed and in the other a new
	citation is being processed.  Add a flag parameter to putsig to
	distinguish the two calls.  Modify the routine to suppress the
	emission of ".ds [F ..." when it is called for a
	duplicate citation.  (See sources posted to net.sources)

Rick Accurso
UUCP:  ...!ucbvax!sdcsvax!sdccsu3!accurso
ARPA:  sdcsvax!sdccsu3!accurso@nosc