1*6d3c0798SBaptiste Daroussinfunction _asorti(src, dest) 2*6d3c0798SBaptiste Daroussin{ 3*6d3c0798SBaptiste Daroussin k = nitems = 0 4*6d3c0798SBaptiste Daroussin 5*6d3c0798SBaptiste Daroussin # Copy src indices to dest and calculate array length 6*6d3c0798SBaptiste Daroussin for (i in src) dest[++nitems] = i 7*6d3c0798SBaptiste Daroussin 8*6d3c0798SBaptiste Daroussin # Sort the array of indices (dest) using insertion sort method 9*6d3c0798SBaptiste Daroussin for (i = 1; i <= nitems; k = i++) 10*6d3c0798SBaptiste Daroussin { 11*6d3c0798SBaptiste Daroussin idx = dest[i] 12*6d3c0798SBaptiste Daroussin while ((k > 0) && (dest[k] > idx)) 13*6d3c0798SBaptiste Daroussin { 14*6d3c0798SBaptiste Daroussin dest[k+1] = dest[k] 15*6d3c0798SBaptiste Daroussin k-- 16*6d3c0798SBaptiste Daroussin } 17*6d3c0798SBaptiste Daroussin dest[k+1] = idx 18*6d3c0798SBaptiste Daroussin } 19*6d3c0798SBaptiste Daroussin 20*6d3c0798SBaptiste Daroussin return nitems 21*6d3c0798SBaptiste Daroussin} 22*6d3c0798SBaptiste Daroussin 23*6d3c0798SBaptiste Daroussinfunction print_category(category, npkgs, desc) 24*6d3c0798SBaptiste Daroussin{ 25*6d3c0798SBaptiste Daroussin cat = category 26*6d3c0798SBaptiste Daroussin # Accent the category if the first page has been 27*6d3c0798SBaptiste Daroussin # cached (also acting as a visitation indicator) 28*6d3c0798SBaptiste Daroussin if ( ENVIRON["_index_page_" varcat "_1"] ) 29*6d3c0798SBaptiste Daroussin cat = cat "*" 30*6d3c0798SBaptiste Daroussin printf "'\''%s'\'' '\''%s " packages "'\'' '\''%s'\''\n", 31*6d3c0798SBaptiste Daroussin cat, npkgs, desc >>tmpfile 32*6d3c0798SBaptiste Daroussin} 33*6d3c0798SBaptiste Daroussin 34*6d3c0798SBaptiste DaroussinBEGIN{ 35*6d3c0798SBaptiste Daroussin cnt=0 36*6d3c0798SBaptiste Daroussin div=int(npkg / 100) 37*6d3c0798SBaptiste Daroussin last=0 38*6d3c0798SBaptiste Daroussin prefix = "" 39*6d3c0798SBaptiste Daroussin} 40*6d3c0798SBaptiste Daroussin{ 41*6d3c0798SBaptiste Daroussin cnt+=1 42*6d3c0798SBaptiste Daroussin i = int(cnt / div) 43*6d3c0798SBaptiste Daroussin if (i > last) { 44*6d3c0798SBaptiste Daroussin last = i 45*6d3c0798SBaptiste Daroussin print "XXX" 46*6d3c0798SBaptiste Daroussin print i 47*6d3c0798SBaptiste Daroussin print msg 48*6d3c0798SBaptiste Daroussin print "XXX" 49*6d3c0798SBaptiste Daroussin fflush("/dev/stdout"); 50*6d3c0798SBaptiste Daroussin } 51*6d3c0798SBaptiste Daroussin varpkg = $1 52*6d3c0798SBaptiste Daroussin gsub("[^" valid_chars "]", "_", varpkg) 53*6d3c0798SBaptiste Daroussin print "_categories_" varpkg "=\"" $7 "\"" >> tmpfile 54*6d3c0798SBaptiste Daroussin split($7, pkg_categories, /[[:space:]]+/) 55*6d3c0798SBaptiste Daroussin for (pkg_category in pkg_categories) 56*6d3c0798SBaptiste Daroussin categories[pkg_categories[pkg_category]]++ 57*6d3c0798SBaptiste Daroussin print "_rundeps_" varpkg "=\"" $9 "\"" >> tmpfile 58*6d3c0798SBaptiste Daroussin 59*6d3c0798SBaptiste Daroussin} 60*6d3c0798SBaptiste DaroussinEND { 61*6d3c0798SBaptiste Daroussin n = _asorti(categories, categories_sorted) 62*6d3c0798SBaptiste Daroussin # Produce package counts for each category 63*6d3c0798SBaptiste Daroussin for (i = 1; i <= n; i++) 64*6d3c0798SBaptiste Daroussin { 65*6d3c0798SBaptiste Daroussin cat = varcat = categories_sorted[i] 66*6d3c0798SBaptiste Daroussin npkgs = categories[cat] 67*6d3c0798SBaptiste Daroussin gsub("[^" valid_chars "]", "_", varcat) 68*6d3c0798SBaptiste Daroussin print "_npkgs_" varcat "=\"" npkgs "\"" >>tmpfile 69*6d3c0798SBaptiste Daroussin } 70*6d3c0798SBaptiste Daroussin # 71*6d3c0798SBaptiste Daroussin # Create menu list and generate list of categories at same time 72*6d3c0798SBaptiste Daroussin print "CATEGORY_MENU_LIST=\"" >>tmpfile 73*6d3c0798SBaptiste Daroussin print_category(msg_all, npkg, msg_all_desc) 74*6d3c0798SBaptiste Daroussin category_list = "" 75*6d3c0798SBaptiste Daroussin for (i = 1; i <= n; i++) 76*6d3c0798SBaptiste Daroussin { 77*6d3c0798SBaptiste Daroussin cat = varcat = categories_sorted[i] 78*6d3c0798SBaptiste Daroussin npkgs = categories[cat] 79*6d3c0798SBaptiste Daroussin cur_prefix = tolower(substr(cat, 1, 1)) 80*6d3c0798SBaptiste Daroussin if ( prefix != cur_prefix ) 81*6d3c0798SBaptiste Daroussin prefix = cur_prefix 82*6d3c0798SBaptiste Daroussin else 83*6d3c0798SBaptiste Daroussin cat = " " cat 84*6d3c0798SBaptiste Daroussin gsub("[^" valid_chars "]", "_", varcat) 85*6d3c0798SBaptiste Daroussin desc = ENVIRON["_category_" varcat] 86*6d3c0798SBaptiste Daroussin if ( ! desc ) desc = default_desc 87*6d3c0798SBaptiste Daroussin print_category(cat, npkgs, desc) 88*6d3c0798SBaptiste Daroussin category_list = category_list " " cat 89*6d3c0798SBaptiste Daroussin } 90*6d3c0798SBaptiste Daroussin print "\"" >>tmpfile 91*6d3c0798SBaptiste Daroussin 92*6d3c0798SBaptiste Daroussin # Produce the list of categories (calculated in above block) 93*6d3c0798SBaptiste Daroussin sub(/^ /, "", category_list) 94*6d3c0798SBaptiste Daroussin print "PACKAGE_CATEGORIES=\"" category_list "\"" >> tmpfile 95*6d3c0798SBaptiste Daroussin print "_npkgs=\""npkg"\"" >>tmpfile 96*6d3c0798SBaptiste Daroussin 97*6d3c0798SBaptiste Daroussin print "EOF" 98*6d3c0798SBaptiste Daroussin} 99