#!/usr/bin/perl

# ccsta
#   Set Status Reg.
#   last modified : 03/03/27 14:06:32 


$CMDCC = "/usr/nbbq/bin/cmdcc";
#$CMDCC = "/bin/echo";

$mode;
$c;
$n;
$a;
$f;
$val;

$STAFILE = $ARGV[0];

open(IN,"< $STAFILE");
@data = <IN>;
close(IN);

if($#data < 0){
  print "Can't open $STAFILE\n";
  exit(0);
}

foreach $line (@data){
    $line =~ s/\n//;
    $line =~ s/ +/ /g;
    ($mod,$fun,$c,$n,$a,$val) = split(/ /,$line);
    if($val =~ /^0x/){
      $val = hex($val);
    }
    if($mod eq "4300B" || $mod eq "4300BT"){
      # 4300B
      if($fun eq "STT"){
	$val = $val | 0x8600;
	$a = 0;
	$f = 16;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,0,16,&val);
	&cmdcc;
      }elsif($fun eq "STA"){
	$val = $val | 0x0700;
	$a = 0;
	$f = 16;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,0,16,&val);
	&cmdcc;
      }elsif($fun eq "STC"){
	$val = $val | 0x2000;
	$a = 0;
	$f = 16;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,0,16,&val);
	&cmdcc;
      }elsif($fun eq "PED"){
	$f = 17;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,a,17,&val);
	&cmdcc;
      }
  }elsif($mod eq "3351"){
      # 3351
      if($fun eq "STA"){
	  $val = $val | 0x3400;
	  $a = 14;
	  $f = 20;
	  $mode = "w";
	  printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	  #write_mod(c,n,14,20,&val);
	  &cmdcc;
      }elsif($fun eq "STP"){
	  $val = $val | 0x2400;
	  $a = 14;
	  $f = 20;
	  $mode = "w";
	  printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	  #write_mod(c,n,14,20,&val);
	  &cmdcc;
      }elsif($fun eq "OFF"){
	$f = 20;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,a,20,&val);
	&cmdcc;
      }elsif($fun eq "CTH"){
	$a = 9;
	$f = 20;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,9,20,&val);
	&cmdcc;
      }elsif($fun eq "ULD"){
	$f = 17;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,a,17,&val);
	&cmdcc;
      }elsif($fun eq "LLD"){
	$f = 17;
	$a = $a + 8;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,a+8,17,&val);
	&cmdcc;
      }
    }elsif($mod eq "3371"){
        # 3371
	if($fun eq "STA" || $fun eq "STT"){
        # $val = $val | 0x2400;
	$val = $val | 0x3400;
	$a = 14;
	$f = 20;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,14,20,&val);
	&cmdcc;
      }elsif($fun eq "STP"){
	  $val = $val | 0x2400;
	  $a = 14;
	  $f = 20;
	  $mode = "w";
	  printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	  #write_mod(c,n,14,20,&val);
	  &cmdcc;
      }elsif($fun eq "OFF"){
	$f = 20;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,a,20,&val);
	&cmdcc;
      }elsif($fun eq "ULD"){
	$f = 17;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,a,17,&val);
	&cmdcc;
      }elsif($fun eq "LLD"){
	$f = 17;
	$a = $a + 8;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,a+8,17,&val);
	&cmdcc;
      }
    }elsif($mod eq "AD413A"){
      # AD413A
      if($fun eq "STA"){
	$val = $val | 0x8000;
	$a = 0;
	$f = 16;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,0,16,&val);
	&cmdcc;

	$a = 1;
	$f = 16;
	$mode = "w";
	$val = 0x0000;
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,1,16,&val);
	&cmdcc;
      }elsif($fun eq "LLD"){
	$f = 17;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	#write_mod(c,n,a,17,&val);
	&cmdcc;
      }
    }elsif($mod eq "7167"){
      # Phillips 7167 series
      if($fun eq "SPD"){
	$f = 17;
	$a = 0;
	$mode = "n";
	printf("%d %d %d %d\n",$c,$n,$a,$f);
	&cmdcc;
      }elsif($fun eq "SLT"){
	$f = 17;
	$a = 1;
	$mode = "n";
	printf("%d %d %d %d\n",$c,$n,$a,$f);
	&cmdcc;
      }elsif($fun eq "SUT"){
	$f = 17;
	$a = 2;
	$mode = "n";
	printf("%d %d %d %d\n",$c,$n,$a,$f);
	&cmdcc;
      }elsif($fun eq "CNT"){
	$val = $val & 0x0007;
	$f = 19;
	$a = 0;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	&cmdcc;
      }elsif($fun eq "WRT"){
	$f = 20;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	&cmdcc;
      }

    }elsif($mod eq "C808"){
      # C808
      if($fun eq "LLD" || $fun eq "THR"){
	$f = 16;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	&cmdcc;
      }elsif($fun eq "INH"){
	$f = 17;
	$a = 0;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	&cmdcc;
      }elsif($fun eq "WID"){
	$f = 18;
	$a = 0;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	&cmdcc;
	$a = 1;
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	&cmdcc;
      }elsif($fun eq "DET"){
	$f = 19;
	$a = 0;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	&cmdcc;
	$a = 1;
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	&cmdcc;
      }elsif($fun eq "MAJ"){
	$f = 20;
	$a = 0;
	$mode = "w";
	printf("%d %d %d %d 0x%04x\n",$c,$n,$a,$f,$val);
	&cmdcc;
      }
    }elsif($mod eq "cccc"){
      if($fun eq "ZZZ"){
	$val = "z";
	$mode = "c";
	print "Crate Z ($c)\n";
	#crate_z(c);
	&cmdcc;
      }elsif($fun eq "CCC"){
	$val = "c";
	$mode = "c";
	print "Crate C ($c)\n";
	#crate_c(c);
	&cmdcc;
      }elsif($fun eq "SIN"){
        $val = "seti";
	$mode = "c";
	print "Crate Inhibit ($c)\n";
	#crate_seti(c);
	&cmdcc;
      }elsif($fun eq "DIN"){
	$val = "deli";
	$mode = "c";
	print "Crate Dell Inhibit ($c)\n";
	#crate_deli(c);
	&cmdcc;
      }elsif($fun eq "OPW"){
	$f = 17;
	$mode = "w";
        print "Write $c $n $a $f $val\n";
	&cmdcc;
      }
    }
}

sub cmdcc{
  if($mode ne "c"){
    $com = sprintf("%s -%s %d %d %d %d 0x%04x\0",$CMDCC,$mode,$c,$n,$a,$f,$val);
  }else{
    $com = sprintf("%s -%s %d %s",$CMDCC,$mode,$c,$val);
  }
  #print "$com\n";
  system($com);
}

