private BufferTemplate createBufferTemplate( Request r )
throws IOException
{
BufferTemplate bt = new BufferTemplate();
LispValue cmdListList = r.mediumOptions;
LispValue cmdList, val;
int i;
String cmdStr;
Object o, id;
bt.byteBuf = (ByteBuffer) r.medium;
bt.byteBuf.clear();
bt.floatBuf = bt.byteBuf.asFloatBuffer();
bt.numCmds = r.mediumOptions.basic_length();
bt.cmd = new int[ bt.numCmds ];
bt.constant = new int[ bt.numCmds ];
bt.offset = new int[ bt.numCmds ];
for( i = 0; i < bt.numCmds; i++ ) {
cmdList = cmdListList.car();
cmdListList = cmdListList.cdr();
cmdStr = cmdList.first().toStringSimple().toUpperCase();
if( cmdStr.equals( "SEND" )) {
bt.cmd[ i ] = BT_SEND;
id = cmdList.second().toJava();
o = jatha.getObject( id);
if( o == null ) {
throw new IOException( getResourceString( "errLispWrongObjType" ) + " : " + id );
}
if( !(o instanceof DatagramChannel) ) {
throw new IOException( getResourceString( "errLispWrongObjType" ) + " : " + id );
}
bt.dch = (DatagramChannel) o;
} else {
val = cmdList.basic_length() == 3 ? cmdList.third() : cmdList.second();
if( !val.basic_integerp() ) {
throw new IOException( getResourceString( "errLispWrongArgType" ));
}
bt.offset[ i ] = (int) ((LispNumber) val).getLongValue();
if( cmdStr.equals( "INT" )) {
bt.cmd[ i ] = BT_CONST;
val = cmdList.second();
if( !val.basic_numberp() ) {
throw new IOException( getResourceString( "errLispWrongArgType" ));
}
bt.constant[ i ] = (int) ((LispNumber) val).getLongValue();
} else if( cmdStr.equals( "FLOAT" )) {
bt.cmd[ i ] = BT_CONST;
val = cmdList.second();
if( !val.basic_numberp() ) {
throw new IOException( getResourceString( "errLispWrongArgType" ));
}
bt.constant[ i ] = Float.floatToRawIntBits( (float) ((LispNumber) val).getDoubleValue() );
} else if( cmdStr.equals( "VAR" )) {
bt.cmd[ i ] = BT_VAR;
cmdStr = cmdList.second().toStringSimple().toUpperCase();
if( cmdStr.equals( "BUFOFF" )) {
bt.constant[ i ] = BT_VAR_BUFOFF;
} else {
throw new IOException( getResourceString( "errLispWrongArgValue" ));
}