xref: /freebsd/usr.sbin/bsdconfig/share/packages/index.awk (revision 6d3c0798ccbe7f6d3b677eed31206efc1227be50)
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