crl@pur-phy.UUCP (Charles LaBrec) (10/31/84)
About a week ago I had an article complaining about how sortactive worked. Here is the replacement for the compare routine that it uses. One other change is that since findrcline() returns an int, I changed the struct declaration of table so that it runs faster on 11's, being able to use registers. The compare routine is changed in the following way: 1. groups not in .newsrc are always placed after any listed in the .newsrc 2. two groups not in .newsrc are compared by their active file positions, so that active file order is otherwise maintained. Charles LaBrec UUCP: pur-ee!Physics:crl, purdue!Physics:crl INTERNET: crl @ pur-phy.UUCP *** rfuncs.c.orig Tue Oct 23 12:12:59 1984 --- rfuncs.c Tue Oct 23 12:37:22 1984 *************** *** 553,559 */ struct table_elt { ! long actpos, rcpos; }; static int --- 553,560 ----- */ struct table_elt { ! long actpos; ! int rcpos; }; static int *************** *** 560,566 rcsort(a,b) struct table_elt *a, *b; { ! return(a->rcpos - b->rcpos); } sortactive() --- 561,583 ----- rcsort(a,b) struct table_elt *a, *b; { ! register int arc, brc; ! ! arc = a->rcpos; ! brc = b->rcpos; ! ! if (arc < 0) { /* a not in .newsrc */ ! if (brc < 0) /* b not in .newsrc */ ! return(a->actpos - b->actpos); /* sort by active */ ! else ! return(1); /* force b first */ ! } else { ! if (brc < 0) ! return(-1); /* force a first */ ! else ! return(arc - brc); /* otherwise sort by .newsrc */ ! } ! /*NOTREACHED*/ } sortactive()