17 DefaultNiceExec = NicePriority
18 DefaultNiceFreq = NiceNormal
19 DefaultNiceFile = NiceBulk
23 niceRe *regexp.Regexp = regexp.MustCompile(`^(\w+)([-+])(\d+)$`)
24 niceAliases map[string]uint8 = map[string]uint8{
27 "priority": NicePriority,
37 func NicenessParse(s string) (uint8, error) {
38 if nice, err := strconv.Atoi(s); err == nil {
39 if nice <= 0 || nice > 255 {
40 return 0, errors.New("nice out of bounds")
42 return uint8(nice), nil
44 s = strings.ToLower(s)
47 if baseNice, found = niceAliases[s]; found {
50 matches := niceRe.FindStringSubmatch(s)
51 if len(matches) != 1+3 {
52 return 0, errors.New("invalid niceness")
54 baseNice, found = niceAliases[matches[1]]
56 return 0, errors.New("invalid niceness")
58 delta, err := strconv.Atoi(matches[3])
62 if matches[2] == "-" {
64 return 0, errors.New("too big niceness delta")
66 return baseNice - uint8(delta), nil
68 if delta > 32 || (baseNice == NiceBulk && delta > 31) {
69 return 0, errors.New("too big niceness delta")
71 return baseNice + uint8(delta), nil
75 func NicenessFmt(nice uint8) string {
79 case NiceFlash-31 < nice && nice < NiceFlash:
80 return fmt.Sprintf("F-%d", NiceFlash-nice)
81 case nice == NiceFlash:
83 case NiceFlash < nice && nice <= (NiceFlash+32):
84 return fmt.Sprintf("F+%d", nice-NiceFlash)
86 case NicePriority-31 < nice && nice < NicePriority:
87 return fmt.Sprintf("P-%d", NicePriority-nice)
88 case nice == NicePriority:
90 case NicePriority < nice && nice <= (NicePriority+32):
91 return fmt.Sprintf("P+%d", nice-NicePriority)
93 case NiceNormal-31 < nice && nice < NiceNormal:
94 return fmt.Sprintf("N-%d", NiceNormal-nice)
95 case nice == NiceNormal:
97 case NiceNormal < nice && nice <= (NiceNormal+32):
98 return fmt.Sprintf("N+%d", nice-NiceNormal)
100 case NiceBulk-31 < nice && nice < NiceBulk:
101 return fmt.Sprintf("B-%d", NiceBulk-nice)
102 case nice == NiceBulk:
104 case NiceBulk < nice && nice <= (NiceBulk+30):
105 return fmt.Sprintf("B+%d", nice-NiceBulk)
107 return strconv.Itoa(int(nice))