@@IF@@ @_Language_@ /= GUI
--sub@_REPLACE(SDL/Ada):REPLACE(VDM/C):Language_@ @_Function_Name_@ \
@@END_IF@@
# Generate code for function "@_Function_Name_@ implemented in "@_Language_@
# Zip code of function @_Function_Name_@
......@@ -2,15 +2,11 @@
# This script will build your system
# DO NOT EDIT THIS FILE
# Generated by kazoo on @_Now_@
# If you need additional pre-processing, there are three hook files
# that you can provide and that are called dring the build:
# user_init_pre.sh, user_init_post.sh and user_init_last.sh
# These files will never get overwritten by TASTE.
# Inside these files you may set some environment variables:
# C_INCLUDE_PATH=/usr/include/xenomai/analogy/:${C_INCLUDE_PATH}
# unset USE_POHIC
# this file was genrated for backward compatibility (legacy)
# but it is deprecated in favour of the Makefile
# Generated by kazoo on @_Now_@
CWD=$(pwd)
......@@ -24,43 +20,4 @@ fi
INFO="${COLORON}[INFO]${COLOROFF}"
if [ -f user_init_pre.sh ]
then
echo -e "${INFO} Executing user-defined init script"
source user_init_pre.sh
fi
INTERFACEVIEW=@_Interface_View_Path_@
if [ -f ConcurrencyView.pro ]
then
ORCHESTRATOR_OPTIONS+=" -w ConcurrencyView.pro "
elif [ -f ../ConcurrencyView_Properties.aadl ]
then
ORCHESTRATOR_OPTIONS+=" -w ConcurrencyView_Properties.aadl "
fi
if [ -f user_init_post.sh ]
then
echo -e "${INFO} Executing user-defined post-init script"
source user_init_post.sh
fi
if [ -f additionalCommands.sh ]
then
source additionalCommands.sh
fi
# Execute the makefile to update dataviews, if needed, then call ocarina and build everything
make && \
cd build && \
ocarina -x main.aadl &&
make -f Makefile.taste
if [ -f user_init_last.sh ]
then
echo -e "${INFO} Executing user-defined post-build script"
source user_init_last.sh
fi
# End of build script
make
......@@ -74,6 +74,7 @@ project @_CAPITALIZE:Name_@ is
@@END_TABLE@@
"../deploymentview_final/@_LOWER:Name_@")
& external_as_list("EXTERNAL_SOURCE_PATH", ":")
& external_as_list("@_UPPER:Name_@_EXTERNAL_SOURCE_PATH", ":")
& external_as_list("ADA_INCLUDE_PATH", ":");
for Object_Dir use "obj_ada";
......
......@@ -111,6 +111,7 @@ project @_CAPITALIZE:Name_@_AIR is
@@END_TABLE@@
"../deploymentview_final/@_LOWER:Name_@")
& external_as_list("EXTERNAL_SOURCE_PATH", ":")
& external_as_list("@_UPPER:Name_@_EXTERNAL_SOURCE_PATH", ":")
& external_as_list("ADA_INCLUDE_PATH", ":");
-- These files are not needed to use POHIC: don' t compile them
......
......@@ -71,6 +71,7 @@ project @_CAPITALIZE:Name_@ is
@@END_TABLE@@
"../deploymentview_final/@_LOWER:Name_@")
& external_as_list("EXTERNAL_SOURCE_PATH", ":")
& external_as_list("@_UPPER:Name_@_EXTERNAL_SOURCE_PATH", ":")
& external_as_list("ADA_INCLUDE_PATH", ":");
for Object_Dir use "obj";
......
......@@ -132,6 +132,7 @@ project @_CAPITALIZE:Name_@_RTEMS_Ada is
@@END_TABLE@@
"../deploymentview_final/@_LOWER:Name_@")
& external_as_list("EXTERNAL_SOURCE_PATH", ":")
& external_as_list("@_UPPER:Name_@_EXTERNAL_SOURCE_PATH", ":")
& external_as_list("ADA_INCLUDE_PATH", ":");
-- These files are not needed to use POHIC: don' t compile them
......
......@@ -15,7 +15,7 @@ ada:
c: # Polyorb_HI_C output
rm -rf work
$(KAZOO) -p --gw --glue -o work
$(KAZOO) -p -g --gw --glue -o work
cp simple_c_function/*.c work/simple_c_function/C/src
$(MAKE) -C work
......
......@@ -2203,18 +2203,32 @@ end gumstix;
-- end gumstix.rtems;
end ocarina_processors_arm;
property set Processor_Properties is
Core_Id : aadlinteger 0 .. Max_Aadlinteger applies to (virtual processor);
end Processor_Properties;
package ocarina_processors_leon
public
with Deployment;
with Processor_Properties;
processor leon
end leon;
processor leon3 extends leon
end leon3;
virtual processor leon3_core
end leon3_core;
virtual processor implementation leon3_core.generic
end leon3_core.generic;
processor implementation leon3.AIR
subcomponents
Core_1 : virtual processor leon3_core.generic { Processor_Properties::Core_Id => 0;};
Core_2 : virtual processor leon3_core.generic { Processor_Properties::Core_Id => 1;};
properties
Deployment::Execution_Platform => AIR;
end leon3.AIR;
......
......@@ -763,6 +763,49 @@ END Observation_Timeline.others;
END interfaceview::IV::Observation_Timeline;
PACKAGE interfaceview::IV::Function1
PUBLIC
WITH Taste;
WITH DataView;
WITH TASTE_IV_Properties;
SUBPROGRAM PI_abc
END PI_abc;
SUBPROGRAM IMPLEMENTATION PI_abc.others
PROPERTIES
Compute_Execution_Time => 0 ms .. 0 ms;
END PI_abc.others;
SUBPROGRAM RI_RI1
END RI_RI1;
SUBPROGRAM IMPLEMENTATION RI_RI1.others
END RI_RI1.others;
SYSTEM Function1
FEATURES
PI_abc : PROVIDES SUBPROGRAM ACCESS interfaceview::IV::Function1::PI_abc.others {
Taste::coordinates => "97236 115109";
Taste::RCMoperationKind => unprotected;
Taste::InterfaceName => "abc";
};
RI_RI1 : REQUIRES SUBPROGRAM ACCESS interfaceview::IV::Function1::RI_RI1.others {
Taste::coordinates => "118404 111581";
Taste::RCMoperationKind => any;
Taste::InterfaceName => "RI1";
Taste::labelInheritance => "true";
};
PROPERTIES
Source_Language => (C);
Taste::Active_Interfaces => any;
END Function1;
SYSTEM IMPLEMENTATION Function1.others
END Function1.others;
END interfaceview::IV::Function1;
PACKAGE interfaceview::IV
PUBLIC
......@@ -771,6 +814,7 @@ WITH interfaceview::IV::Geometry_Module;
WITH interfaceview::IV::Scene_Creation_Module;
WITH interfaceview::IV::Console;
WITH interfaceview::IV::Observation_Timeline;
WITH interfaceview::IV::Function1;
WITH Taste;
WITH DataView;
WITH TASTE_IV_Properties;
......@@ -797,6 +841,9 @@ SUBCOMPONENTS
Observation_Timeline : SYSTEM interfaceview::IV::Observation_Timeline::Observation_Timeline.others {
Taste::coordinates => "97119 47148 154968 87948";
};
Function1 : SYSTEM interfaceview::IV::Function1::Function1.others {
Taste::coordinates => "97236 111581 121340 125102";
};
CONNECTIONS
Simulation_Manager_PI_Module1_In_Scene_Creation_Module_RI_Module_Out : SUBPROGRAM ACCESS Simulation_Manager.PI_Module1_In -> Scene_Creation_Module.RI_Module_Out {
Taste::coordinates => "153791 107465 75954 107465 75954 74544";
......
KAZOO=../../kazoo
all: test-parse
cp input_data/helloworld1.c output/helloworld1/C/src
cp input_data/helloworld2.c output/helloworld2/C/src
make -C output air
cp input_data/helloworld1.c work/helloworld1/C/src
cp input_data/helloworld2.c work/helloworld2/C/src
make -C work air
test-parse: clean
$(KAZOO) --gw -p \
-o output \
-o work \
--glue \
--no-stdlib \
--debug \
../common/ocarina_components.aadl
skeletons:
$(MAKE) -C work skeletons
gdb: clean
gdb --args $(KAZOO) --gw -p \
......
--------------------------------------------------------
--! File generated by asn2aadl v2.1.39: DO NOT EDIT !
--! File generated by asn2aadl v2.2-r327f5c8: DO NOT EDIT !
--------------------------------------------------------
--! MadeInFastMode:True:
--! InputASN1FileChecksum:6bf664b31ce9ca6fd89af52cea7ea0f2:/home/taste/tool-src/kazoo/test/test-air-portnames/DataView.asn:
--! InputASN1FileChecksum:ee8a7e01f29874c0d50f437d5abb9599:/home/taste/tool-inst/share/taste-types/taste-types.asn:
--------------------------------------------------------
......@@ -47,9 +48,6 @@ PROPERTIES
TASTE::Ada_Package_Name => "TASTE_BasicTypes";
Deployment::ASN1_Module_Name => "TASTE-BasicTypes";
Source_Language => (ASN1);
-- Size of a buffer to cover all forms of message representation:
-- Real message size is 1; suggested aligned message buffer is...
Source_Data_Size => 8 Bytes;
-- name of the corresponding data type in the source file:
Type_Source_Name => "T-Boolean";
TASTE::Position_In_File => [ line => 14 ; column => 1 ; ];
......@@ -67,8 +65,6 @@ DATA IMPLEMENTATION T_Boolean_Buffer_Max.impl
-- Buffer to hold a marshalled data of type T_Boolean
PROPERTIES
Data_Model::Data_Representation => array;
Data_Model::Dimension => (8); -- Size of the buffer
Source_Data_Size => 8 Bytes; -- Size of the buffer in bytes
Data_Model::Base_Type => (classifier (DataView::Stream_Element_Buffer));
END T_Boolean_Buffer_Max.impl;
......@@ -82,7 +78,6 @@ SUBCOMPONENTS
Length : data Base_Types::Unsigned_32;
PROPERTIES
Data_Model::Data_Representation => Struct;
Source_Data_Size => 24 Bytes; -- Size of the buffer in bytes
END T_Boolean_Buffer.impl;
DATA T_Int32
......@@ -92,9 +87,6 @@ PROPERTIES
TASTE::Ada_Package_Name => "TASTE_BasicTypes";
Deployment::ASN1_Module_Name => "TASTE-BasicTypes";
Source_Language => (ASN1);
-- Size of a buffer to cover all forms of message representation:
-- Real message size is 8; suggested aligned message buffer is...
Source_Data_Size => 8 Bytes;
-- name of the corresponding data type in the source file:
Type_Source_Name => "T-Int32";
TASTE::Position_In_File => [ line => 6 ; column => 1 ; ];
......@@ -112,8 +104,6 @@ DATA IMPLEMENTATION T_Int32_Buffer_Max.impl
-- Buffer to hold a marshalled data of type T_Int32
PROPERTIES
Data_Model::Data_Representation => array;
Data_Model::Dimension => (8); -- Size of the buffer
Source_Data_Size => 8 Bytes; -- Size of the buffer in bytes
Data_Model::Base_Type => (classifier (DataView::Stream_Element_Buffer));
END T_Int32_Buffer_Max.impl;
......@@ -127,7 +117,6 @@ SUBCOMPONENTS
Length : data Base_Types::Unsigned_32;
PROPERTIES
Data_Model::Data_Representation => Struct;
Source_Data_Size => 24 Bytes; -- Size of the buffer in bytes
END T_Int32_Buffer.impl;
DATA T_Int8
......@@ -137,9 +126,6 @@ PROPERTIES
TASTE::Ada_Package_Name => "TASTE_BasicTypes";
Deployment::ASN1_Module_Name => "TASTE-BasicTypes";
Source_Language => (ASN1);
-- Size of a buffer to cover all forms of message representation:
-- Real message size is 8; suggested aligned message buffer is...
Source_Data_Size => 8 Bytes;
-- name of the corresponding data type in the source file:
Type_Source_Name => "T-Int8";
TASTE::Position_In_File => [ line => 10 ; column => 1 ; ];
......@@ -157,8 +143,6 @@ DATA IMPLEMENTATION T_Int8_Buffer_Max.impl
-- Buffer to hold a marshalled data of type T_Int8
PROPERTIES
Data_Model::Data_Representation => array;
Data_Model::Dimension => (8); -- Size of the buffer
Source_Data_Size => 8 Bytes; -- Size of the buffer in bytes
Data_Model::Base_Type => (classifier (DataView::Stream_Element_Buffer));
END T_Int8_Buffer_Max.impl;
......@@ -172,7 +156,6 @@ SUBCOMPONENTS
Length : data Base_Types::Unsigned_32;
PROPERTIES
Data_Model::Data_Representation => Struct;
Source_Data_Size => 24 Bytes; -- Size of the buffer in bytes
END T_Int8_Buffer.impl;
DATA T_UInt32
......@@ -182,9 +165,6 @@ PROPERTIES
TASTE::Ada_Package_Name => "TASTE_BasicTypes";
Deployment::ASN1_Module_Name => "TASTE-BasicTypes";
Source_Language => (ASN1);
-- Size of a buffer to cover all forms of message representation:
-- Real message size is 8; suggested aligned message buffer is...
Source_Data_Size => 8 Bytes;
-- name of the corresponding data type in the source file:
Type_Source_Name => "T-UInt32";
TASTE::Position_In_File => [ line => 8 ; column => 1 ; ];
......@@ -202,8 +182,6 @@ DATA IMPLEMENTATION T_UInt32_Buffer_Max.impl
-- Buffer to hold a marshalled data of type T_UInt32
PROPERTIES
Data_Model::Data_Representation => array;
Data_Model::Dimension => (8); -- Size of the buffer
Source_Data_Size => 8 Bytes; -- Size of the buffer in bytes
Data_Model::Base_Type => (classifier (DataView::Stream_Element_Buffer));
END T_UInt32_Buffer_Max.impl;
......@@ -217,7 +195,6 @@ SUBCOMPONENTS
Length : data Base_Types::Unsigned_32;
PROPERTIES
Data_Model::Data_Representation => Struct;
Source_Data_Size => 24 Bytes; -- Size of the buffer in bytes
END T_UInt32_Buffer.impl;
DATA T_UInt8
......@@ -227,9 +204,6 @@ PROPERTIES
TASTE::Ada_Package_Name => "TASTE_BasicTypes";
Deployment::ASN1_Module_Name => "TASTE-BasicTypes";
Source_Language => (ASN1);
-- Size of a buffer to cover all forms of message representation:
-- Real message size is 8; suggested aligned message buffer is...
Source_Data_Size => 8 Bytes;
-- name of the corresponding data type in the source file:
Type_Source_Name => "T-UInt8";
TASTE::Position_In_File => [ line => 12 ; column => 1 ; ];
......@@ -247,8 +221,6 @@ DATA IMPLEMENTATION T_UInt8_Buffer_Max.impl
-- Buffer to hold a marshalled data of type T_UInt8
PROPERTIES
Data_Model::Data_Representation => array;
Data_Model::Dimension => (8); -- Size of the buffer
Source_Data_Size => 8 Bytes; -- Size of the buffer in bytes
Data_Model::Base_Type => (classifier (DataView::Stream_Element_Buffer));
END T_UInt8_Buffer_Max.impl;
......@@ -262,7 +234,6 @@ SUBCOMPONENTS
Length : data Base_Types::Unsigned_32;
PROPERTIES
Data_Model::Data_Representation => Struct;
Source_Data_Size => 24 Bytes; -- Size of the buffer in bytes
END T_UInt8_Buffer.impl;
DATA TASTE_Boolean
......@@ -272,9 +243,6 @@ PROPERTIES
TASTE::Ada_Package_Name => "TASTE_Dataview";
Deployment::ASN1_Module_Name => "TASTE-Dataview";
Source_Language => (ASN1);
-- Size of a buffer to cover all forms of message representation:
-- Real message size is 1; suggested aligned message buffer is...
Source_Data_Size => 8 Bytes;
-- name of the corresponding data type in the source file:
Type_Source_Name => "TASTE-Boolean";
TASTE::Position_In_File => [ line => 5 ; column => 1 ; ];
......@@ -292,8 +260,6 @@ DATA IMPLEMENTATION TASTE_Boolean_Buffer_Max.impl
-- Buffer to hold a marshalled data of type TASTE_Boolean
PROPERTIES
Data_Model::Data_Representation => array;
Data_Model::Dimension => (8); -- Size of the buffer
Source_Data_Size => 8 Bytes; -- Size of the buffer in bytes
Data_Model::Base_Type => (classifier (DataView::Stream_Element_Buffer));
END TASTE_Boolean_Buffer_Max.impl;
......@@ -307,7 +273,6 @@ SUBCOMPONENTS
Length : data Base_Types::Unsigned_32;
PROPERTIES
Data_Model::Data_Representation => Struct;
Source_Data_Size => 24 Bytes; -- Size of the buffer in bytes
END TASTE_Boolean_Buffer.impl;
SYSTEM Taste_DataView
......
---------------------------------------------------
-- AADL2.1
-- AADL2.2
-- TASTE type deploymentview
--
-- generated code: do not edit
......@@ -108,6 +108,7 @@ PUBLIC
WITH interfaceview::IV::hello;
WITH interfaceview::IV::read;
WITH interfaceview::IV::R2;
WITH interfaceview::IV::Function1;
WITH interfaceview::IV::Function2;
WITH ocarina_processors_leon;
......@@ -142,6 +143,9 @@ SUBCOMPONENTS
IV_read : SYSTEM interfaceview::IV::read::read.others {
Taste::FunctionName => "read";
};
IV_R2 : SYSTEM interfaceview::IV::R2::R2.others {
Taste::FunctionName => "R2";
};
part2 : PROCESS deploymentview::DV::Node1::part2.others {
Taste::coordinates => "110548 78423 139209 88029";
Deployment::Port_Number => 0;
......@@ -182,6 +186,7 @@ PROPERTIES
Actual_Processor_Binding => (reference (part1_VP)) APPLIES TO part1;
Actual_Memory_Binding => (reference (main_memory.part1_Segment)) APPLIES TO part1;
Taste::APLC_Binding => (reference (part2)) APPLIES TO IV_read;
Taste::APLC_Binding => (reference (part2)) APPLIES TO IV_R2;
Actual_Processor_Binding => (reference (proc1)) APPLIES TO part2_VP;
Actual_Processor_Binding => (reference (part2_VP)) APPLIES TO part2;
Actual_Memory_Binding => (reference (main_memory.part2_Segment)) APPLIES TO part2;
......@@ -193,19 +198,19 @@ PROPERTIES
Actual_Processor_Binding => (reference (proc1)) APPLIES TO part4_VP;
Actual_Processor_Binding => (reference (part4_VP)) APPLIES TO part4;
Actual_Memory_Binding => (reference (main_memory.part4_Segment)) APPLIES TO part4;
ARINC653::Module_Major_Frame => 1000ms APPLIES TO proc1;
ARINC653::Module_Major_Frame => 1000 ms APPLIES TO proc1;
ARINC653::Module_Schedule => (
[ Partition => reference(part1_VP);
Duration => 200ms;
Duration => 200 ms;
Periodic_Processing_Start => False; ],
[ Partition => reference(part3_VP);
Duration => 200ms;
Duration => 200 ms;
Periodic_Processing_Start => False; ],
[ Partition => reference(part4_VP);
Duration => 200ms;
Duration => 200 ms;
Periodic_Processing_Start => False; ],
[ Partition => reference(part2_VP);
Duration => 200ms;
Duration => 200 ms;
Periodic_Processing_Start => False; ]
) APPLIES TO proc1;
END Node1.others;
......@@ -223,8 +228,8 @@ END deploymentview.others;
PROPERTIES
Taste::coordinates => "0 0 297000 210000";
Taste::version => "2.0";
Taste::version => "2.3";
Taste::interfaceView => "InterfaceView.aadl";
Taste::HWLibraries => ("/home/taste/tool-inst/share/ocarina/AADLv2/ocarina_components.aadl");
Taste::HWLibraries => ("../../../../tool-inst/share/ocarina/AADLv2/ocarina_components.aadl");
END deploymentview::DV;
---------------------------------------------------
-- AADL2.1
-- AADL2.2
-- TASTE type interfaceview
--
-- generated code: do not edit
......@@ -22,6 +22,8 @@ PROPERTIES
END PI_s;
SUBPROGRAM IMPLEMENTATION PI_s.others
PROPERTIES
Compute_Execution_Time => 0 ms .. 0 ms;
END PI_s.others;
SUBPROGRAM RI_new1
......@@ -72,6 +74,8 @@ PROPERTIES
END PI_h;
SUBPROGRAM IMPLEMENTATION PI_h.others
PROPERTIES
Compute_Execution_Time => 0 ms .. 0 ms;
END PI_h.others;
SUBPROGRAM PI_new
......@@ -84,6 +88,8 @@ PROPERTIES
END PI_new;
SUBPROGRAM IMPLEMENTATION PI_new.others
PROPERTIES
Compute_Execution_Time => 0 ms .. 0 ms;
END PI_new.others;
SUBPROGRAM RI_s
......@@ -141,6 +147,8 @@ PROPERTIES
END PI_cycl;
SUBPROGRAM IMPLEMENTATION PI_cycl.others
PROPERTIES
Compute_Execution_Time => 0 ms .. 0 ms;
END PI_cycl.others;
SUBPROGRAM RI_t
......@@ -194,6 +202,8 @@ PROPERTIES
END PI_t;
SUBPROGRAM IMPLEMENTATION PI_t.others
PROPERTIES
Compute_Execution_Time => 0 ms .. 0 ms;
END PI_t.others;
SYSTEM Function2
......@@ -215,6 +225,55 @@ END Function2.others;
END interfaceview::IV::Function2;
PACKAGE interfaceview::IV::R2
PUBLIC
WITH interfaceview::IV::hello;
WITH Taste;
WITH DataView;
WITH TASTE_IV_Properties;
SUBPROGRAM RI_s
FEATURES
t : IN PARAMETER DataView::TASTE_Boolean {
Taste::encoding => NATIVE;
};
END RI_s;
SUBPROGRAM IMPLEMENTATION RI_s.others
END RI_s.others;
SUBPROGRAM PI_h2
END PI_h2;
SUBPROGRAM IMPLEMENTATION PI_h2.others
PROPERTIES
Compute_Execution_Time => 0 ms .. 0 ms;
END PI_h2.others;
SYSTEM R2
FEATURES
RI_s : REQUIRES SUBPROGRAM ACCESS interfaceview::IV::hello::PI_s.others {
Taste::coordinates => "156144 85338";
Taste::RCMoperationKind => any;
Taste::InterfaceName => "s";
Taste::labelInheritance => "true";
};
PI_h2 : PROVIDES SUBPROGRAM ACCESS interfaceview::IV::R2::PI_h2.others {
Taste::coordinates => "189239 89691";
Taste::RCMoperationKind => cyclic;
Taste::RCMperiod => 1000 ms;
Taste::InterfaceName => "h2";
};
PROPERTIES
Source_Language => (C);
Taste::Active_Interfaces => any;
END R2;
SYSTEM IMPLEMENTATION R2.others
END R2.others;
END interfaceview::IV::R2;
PACKAGE interfaceview::IV
PUBLIC
......@@ -222,6 +281,7 @@ WITH interfaceview::IV::hello;
WITH interfaceview::IV::read;
WITH interfaceview::IV::Function1;
WITH interfaceview::IV::Function2;
WITH interfaceview::IV::R2;
WITH Taste;
WITH DataView;
WITH TASTE_IV_Properties;
......@@ -245,10 +305,16 @@ SUBCOMPONENTS
Function2 : SYSTEM interfaceview::IV::Function2::Function2.others {
Taste::coordinates => "97180 11096 124920 34243";
};
R2 : SYSTEM interfaceview::IV::R2::R2.others {
Taste::coordinates => "155418 85338 189239 104354";
};
CONNECTIONS
hello_PI_s_read_RI_s : SUBPROGRAM ACCESS hello.PI_s -> read.RI_s {
Taste::coordinates => "154957 53700 142043 53700 142043 47716 129130 47716";
};
hello_PI_s_R2_RI_s : SUBPROGRAM ACCESS hello.PI_s -> R2.RI_s {
Taste::coordinates => "156144 85338 156144 47716 129130 47716";
};
read_PI_new_hello_RI_new1 : SUBPROGRAM ACCESS read.PI_new -> hello.RI_new1 {
Taste::coordinates => "129130 58476 142043 58476 142043 65025 154957 65025";
};
......@@ -261,6 +327,6 @@ PROPERTIES
Taste::dataView => ("DataView");
Taste::dataViewPath => ("DataView.aadl");
Taste::coordinates => "0 0 297000 210000";
Taste::version => "2.0";
Taste::version => "2.3";
END interfaceview::IV;