protected void GetDictItem() {
for (int i=0; i<arg_count; i++) args[i]=null;
arg_count = 0;
key = null;
bool gotKey = false;
while (!gotKey) {
char b0 = GetCard8();
if (b0 == 29) {
int item = GetInt();
args[arg_count] = item;
arg_count++;
//System.err.Println(item+" ");
continue;
}
if (b0 == 28) {
short item = GetShort();
args[arg_count] = (int)item;
arg_count++;
//System.err.Println(item+" ");
continue;
}
if (b0 >= 32 && b0 <= 246) {
sbyte item = (sbyte) ((int)b0-139);
args[arg_count] = (int)item;
arg_count++;
//System.err.Println(item+" ");
continue;
}
if (b0 >= 247 && b0 <= 250) {
char b1 = GetCard8();
short item = (short) (((int)b0-247)*256+(int)b1+108);
args[arg_count] = (int)item;
arg_count++;
//System.err.Println(item+" ");
continue;
}
if (b0 >= 251 && b0 <= 254) {
char b1 = GetCard8();
short item = (short) (-((int)b0-251)*256-(int)b1-108);
args[arg_count] = (int)item;
arg_count++;
//System.err.Println(item+" ");
continue;
}
if (b0 == 30) {
StringBuilder item = new StringBuilder();
bool done = false;
char buffer = (char)0;
byte avail = 0;
int nibble = 0;
while (!done) {
// get a nibble
if (avail==0) { buffer = GetCard8(); avail=2; }
if (avail==1) { nibble = (buffer / 16); avail--; }
if (avail==2) { nibble = (buffer % 16); avail--; }
switch (nibble) {
case 0xa: item.Append(".") ; break;
case 0xb: item.Append("E") ; break;
case 0xc: item.Append("E-"); break;
case 0xe: item.Append("-") ; break;
case 0xf: done=true ; break;
default:
if (nibble >= 0 && nibble <= 9)
item.Append(nibble.ToString());
else {
item.Append("<NIBBLE ERROR: "+nibble.ToString()+">");
done = true;
}
break;
}
}
args[arg_count] = item.ToString();
arg_count++;
//System.err.Println(" real=["+item+"]");
continue;
}
if (b0 <= 21) {
gotKey=true;
if (b0 != 12) key = operatorNames[b0];
else key = operatorNames[32 + GetCard8()];
//for (int i=0; i<arg_count; i++)
// System.err.Print(args[i].ToString()+" ");
//System.err.Println(key+" ;");
continue;
}
}
}