#!/usr/athena/bin/perl

# user/knuckle statuses, from 1<<0 through 1<<31, as listed in <olc/status.h>
#   [this is a perl4 kludge for qw()]
@status = grep(length($_), split(/\s+/, <<EndOfStatus));
    unused0
  ON  FIRST  DUTY  SECOND  URGENT
    unused6 unused7
  LOGGED_OUT  MACHINE_DOWN  UNKNOWN_STATUS  NOT_HERE  ACTIVE
    unused13
  BUSY  CACHED
  PENDING  NOT_SEEN  DONE  CANCEL  SERVICED
    unused21
  PICKUP  REFERRED
    unused24 unused25 unused26 unused27 unused28 unused29 unused30 unused31
EndOfStatus

# map a long onto the symbols
sub num2sym {
  local($N) = @_;
  local($s) = 0;
  local(@toks);

  for ($s=0;  $N && ($s < 32);  $N >>= 1, $s++) {
    push(@toks, $status[$s]) if ($N & 1) != 0;
  }
  push(@toks, "+$N<<32") unless $N == 0;

  "[@toks]";
}

while (<>) {
  /^status/ && s/\d+/&num2sym($&)/eg;
  print;
}
