author | etisserant |
Wed, 01 Aug 2007 13:48:03 +0200 | |
changeset 246 | d635cfc520ee |
parent 245 | d43ebbed895f |
child 247 | e655aab6bfc9 |
--- a/configure Wed Jul 25 18:01:14 2007 +0200 +++ b/configure Wed Aug 01 13:48:03 2007 +0200 @@ -651,6 +651,14 @@ if [ "$SUB_TARGET" = "unix" ]; then MAKEFILES=$MAKEFILES\ +\ examples/DS401_Master/Makefile.in +fi +if [ "$SUB_TARGET" = "unix" ]; then + MAKEFILES=$MAKEFILES\ +\ examples/DS401_Slave_Gui/Makefile.in +fi +if [ "$SUB_TARGET" = "unix" ]; then + MAKEFILES=$MAKEFILES\ \ examples/TestMasterMicroMod/Makefile.in fi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Master/.cvsignore Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,3 @@ +Makefile +TestMasterMicroMod +DS401_Master
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Master/Makefile.in Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,77 @@ +#! gmake + +# +# Copyright (C) 2006 Laurent Bessard +# +# This file is part of canfestival, a library implementing the canopen +# stack +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +CC = SUB_CC +OPT_CFLAGS = -O2 +CFLAGS = SUB_OPT_CFLAGS +PROG_CFLAGS = SUB_PROG_CFLAGS +EXE_CFLAGS = SUB_EXE_CFLAGS +OS_NAME = SUB_OS_NAME +ARCH_NAME = SUB_ARCH_NAME +PREFIX = SUB_PREFIX +TARGET = SUB_TARGET +CAN_DRIVER = SUB_CAN_DRIVER +TIMERS_DRIVER = SUB_TIMERS_DRIVER + +INCLUDES = -I../../include -I../../include/$(TARGET) -I../../include/$(CAN_DRIVER) -I../../include/$(TIMERS_DRIVER) + +MASTER_OBJS = TestMaster.o TestMasterMicroMod.o + +OBJS = $(MASTER_OBJS) ../../src/libcanfestival.a ../../drivers/$(TARGET)/libcanfestival_$(TARGET).a + +ifeq ($(TIMERS_DRIVER),timers_xeno) + PROGDEFINES = -DUSE_XENO +endif + +all: DS401_Master + +../../drivers/$(TARGET)/libcanfestival_$(TARGET).a: + $(MAKE) -C ../../drivers/$(TARGET) libcanfestival_$(TARGET).a + + +DS401_Master: TestMaster.c $(OBJS) + $(CC) $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) -o $@ $(OBJS) $(EXE_CFLAGS) + + +TestMaster.c: TestMaster.od + $(MAKE) -C ../../objdictgen gnosis + python ../../objdictgen/objdictgen.py TestMaster.od TestMaster.c + +%o: %c + $(CC) $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) -o $@ -c $< + +clean: + rm -f $(MASTER_OBJS) + rm -f DS401_Master + +mrproper: clean + rm -f TestMaster.c + +install: DS401_Master + mkdir -p $(PREFIX)/bin/ + cp $< $(PREFIX)/bin/ + +uninstall: + rm -f $(PREFIX)/bin/DS401_Master + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Master/TestMaster.c Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,566 @@ + +/* File generated by gen_cfile.py. Should not be modified. */ + +#include "TestMaster.h" + +/**************************************************************************/ +/* Declaration of the mapped variables */ +/**************************************************************************/ +UNS8 DO = 0x0; /* Mapped at index 0x2000, subindex 0x00 */ +INTEGER16 AO1 = 0x0; /* Mapped at index 0x2001, subindex 0x00 */ +INTEGER16 AO2 = 0x0; /* Mapped at index 0x2002, subindex 0x00 */ +INTEGER16 AO3 = 0x0; /* Mapped at index 0x2003, subindex 0x00 */ +INTEGER16 AO4 = 0x0; /* Mapped at index 0x2004, subindex 0x00 */ +INTEGER16 AI1 = 0x0; /* Mapped at index 0x2005, subindex 0x00 */ +INTEGER16 AI2 = 0x0; /* Mapped at index 0x2006, subindex 0x00 */ +INTEGER16 AI3 = 0x0; /* Mapped at index 0x2007, subindex 0x00 */ +INTEGER16 AI4 = 0x0; /* Mapped at index 0x2008, subindex 0x00 */ +INTEGER16 AI5 = 0x0; /* Mapped at index 0x2009, subindex 0x00 */ +INTEGER16 AI6 = 0x0; /* Mapped at index 0x200A, subindex 0x00 */ +INTEGER16 AI7 = 0x0; /* Mapped at index 0x200B, subindex 0x00 */ +INTEGER16 AI8 = 0x0; /* Mapped at index 0x200C, subindex 0x00 */ +UNS8 DI1 = 0x0; /* Mapped at index 0x200F, subindex 0x00 */ +UNS8 DI2 = 0x0; /* Mapped at index 0x2010, subindex 0x00 */ +UNS8 DI3 = 0x0; /* Mapped at index 0x2011, subindex 0x00 */ +UNS8 DI4 = 0x0; /* Mapped at index 0x2012, subindex 0x00 */ +UNS8 DI5 = 0x0; /* Mapped at index 0x2013, subindex 0x00 */ +UNS8 DI6 = 0x0; /* Mapped at index 0x2014, subindex 0x00 */ +UNS8 DI7 = 0x0; /* Mapped at index 0x2015, subindex 0x00 */ +UNS8 DI8 = 0x0; /* Mapped at index 0x2016, subindex 0x00 */ + +/**************************************************************************/ +/* Declaration of the value range types */ +/**************************************************************************/ + +UNS32 TestMaster_valueRangeTest (UNS8 typeValue, void * value) +{ + switch (typeValue) { + } + return 0; +} + +/**************************************************************************/ +/* The node id */ +/**************************************************************************/ +/* node_id default value.*/ +UNS8 TestMaster_bDeviceNodeId = 0x01; + +/**************************************************************************/ +/* Array of message processing information */ + +const UNS8 TestMaster_iam_a_slave = 0; + +TIMER_HANDLE TestMaster_heartBeatTimers[1] = {TIMER_NONE,}; + +/* +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + + OBJECT DICTIONARY + +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ +*/ + +/* index 0x1000 : Device Type. */ + UNS32 TestMaster_obj1000 = 0x191; /* 401 */ + subindex TestMaster_Index1000[] = + { + { RO, uint32, sizeof (UNS32), (void*)&TestMaster_obj1000 } + }; + +/* index 0x1001 : Error Register. */ + UNS8 TestMaster_obj1001 = 0x0; /* 0 */ + subindex TestMaster_Index1001[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestMaster_obj1001 } + }; + +/* index 0x1005 : SYNC COB ID. */ + UNS32 TestMaster_obj1005 = 0x40000080; /* 1073741952 */ + ODCallback_t TestMaster_Index1005_callbacks[] = + { + NULL, + }; + subindex TestMaster_Index1005[] = + { + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1005 } + }; + +/* index 0x1006 : Communication / Cycle Period. */ + UNS32 TestMaster_obj1006 = 0xC350; /* 50000 */ + ODCallback_t TestMaster_Index1006_callbacks[] = + { + NULL, + }; + subindex TestMaster_Index1006[] = + { + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1006 } + }; + +/* index 0x1016 : Consumer Heartbeat Time. */ + UNS8 TestMaster_highestSubIndex_obj1016 = 1; /* number of subindex - 1*/ + UNS32 TestMaster_obj1016[] = + { + 0x4005DC /* 4195804 */ + }; + subindex TestMaster_Index1016[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1016 }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1016[0] } + }; + +/* index 0x1017 : Producer Heartbeat Time */ + UNS16 TestMaster_obj1017 = 0x0; /* 0 */ + +/* index 0x1018 : Identity. */ + UNS8 TestMaster_highestSubIndex_obj1018 = 4; /* number of subindex - 1*/ + UNS32 TestMaster_obj1018_Vendor_ID = 0x0; /* 0 */ + UNS32 TestMaster_obj1018_Product_Code = 0x0; /* 0 */ + UNS32 TestMaster_obj1018_Revision_Number = 0x0; /* 0 */ + UNS32 TestMaster_obj1018_Serial_Number = 0x0; /* 0 */ + subindex TestMaster_Index1018[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1018 }, + { RO, uint32, sizeof (UNS32), (void*)&TestMaster_obj1018_Vendor_ID }, + { RO, uint32, sizeof (UNS32), (void*)&TestMaster_obj1018_Product_Code }, + { RO, uint32, sizeof (UNS32), (void*)&TestMaster_obj1018_Revision_Number }, + { RO, uint32, sizeof (UNS32), (void*)&TestMaster_obj1018_Serial_Number } + }; + +/* index 0x1280 : Client SDO 1 Parameter. */ + UNS8 TestMaster_highestSubIndex_obj1280 = 3; /* number of subindex - 1*/ + UNS32 TestMaster_obj1280_COB_ID_Client_to_Server_Transmit_SDO = 0x640; /* 1600 */ + UNS32 TestMaster_obj1280_COB_ID_Server_to_Client_Receive_SDO = 0x5C0; /* 1472 */ + INTEGER32 TestMaster_obj1280_Node_ID_of_the_SDO_Server = 0x40; /* 64 */ + subindex TestMaster_Index1280[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1280 }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1280_COB_ID_Client_to_Server_Transmit_SDO }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1280_COB_ID_Server_to_Client_Receive_SDO }, + { RW, int32, sizeof (INTEGER32), (void*)&TestMaster_obj1280_Node_ID_of_the_SDO_Server } + }; + +/* index 0x1400 : Receive PDO 1 Parameter. */ + UNS8 TestMaster_highestSubIndex_obj1400 = 5; /* number of subindex - 1*/ + UNS32 TestMaster_obj1400_COB_ID_used_by_PDO = 0x1C0; /* 448 */ + UNS8 TestMaster_obj1400_Transmission_Type = 0x1; /* 1 */ + UNS16 TestMaster_obj1400_Inhibit_Time = 0x0; /* 0 */ + UNS8 TestMaster_obj1400_Compatibility_Entry = 0x0; /* 0 */ + UNS16 TestMaster_obj1400_Event_Timer = 0x0; /* 0 */ + subindex TestMaster_Index1400[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1400 }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1400_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_obj1400_Transmission_Type }, + { RW, uint16, sizeof (UNS16), (void*)&TestMaster_obj1400_Inhibit_Time }, + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_obj1400_Compatibility_Entry }, + { RW, uint16, sizeof (UNS16), (void*)&TestMaster_obj1400_Event_Timer } + }; + +/* index 0x1401 : Receive PDO 2 Parameter. */ + UNS8 TestMaster_highestSubIndex_obj1401 = 5; /* number of subindex - 1*/ + UNS32 TestMaster_obj1401_COB_ID_used_by_PDO = 0x2C0; /* 704 */ + UNS8 TestMaster_obj1401_Transmission_Type = 0x1; /* 1 */ + UNS16 TestMaster_obj1401_Inhibit_Time = 0x0; /* 0 */ + UNS8 TestMaster_obj1401_Compatibility_Entry = 0x0; /* 0 */ + UNS16 TestMaster_obj1401_Event_Timer = 0x0; /* 0 */ + subindex TestMaster_Index1401[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1401 }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1401_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_obj1401_Transmission_Type }, + { RW, uint16, sizeof (UNS16), (void*)&TestMaster_obj1401_Inhibit_Time }, + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_obj1401_Compatibility_Entry }, + { RW, uint16, sizeof (UNS16), (void*)&TestMaster_obj1401_Event_Timer } + }; + +/* index 0x1402 : Receive PDO 3 Parameter. */ + UNS8 TestMaster_highestSubIndex_obj1402 = 5; /* number of subindex - 1*/ + UNS32 TestMaster_obj1402_COB_ID_used_by_PDO = 0x3C0; /* 960 */ + UNS8 TestMaster_obj1402_Transmission_Type = 0x1; /* 1 */ + UNS16 TestMaster_obj1402_Inhibit_Time = 0x0; /* 0 */ + UNS8 TestMaster_obj1402_Compatibility_Entry = 0x0; /* 0 */ + UNS16 TestMaster_obj1402_Event_Timer = 0x0; /* 0 */ + subindex TestMaster_Index1402[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1402 }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1402_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_obj1402_Transmission_Type }, + { RW, uint16, sizeof (UNS16), (void*)&TestMaster_obj1402_Inhibit_Time }, + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_obj1402_Compatibility_Entry }, + { RW, uint16, sizeof (UNS16), (void*)&TestMaster_obj1402_Event_Timer } + }; + +/* index 0x1600 : Receive PDO 1 Mapping. */ + UNS8 TestMaster_highestSubIndex_obj1600 = 8; /* number of subindex - 1*/ + UNS32 TestMaster_obj1600[] = + { + 0x200F0001, /* 537853953 */ + 0x20100001, /* 537919489 */ + 0x20110001, /* 537985025 */ + 0x20120001, /* 538050561 */ + 0x20130001, /* 538116097 */ + 0x20140001, /* 538181633 */ + 0x20150001, /* 538247169 */ + 0x20160001 /* 538312705 */ + }; + subindex TestMaster_Index1600[] = + { + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1600 }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1600[0] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1600[1] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1600[2] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1600[3] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1600[4] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1600[5] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1600[6] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1600[7] } + }; + +/* index 0x1601 : Receive PDO 2 Mapping. */ + UNS8 TestMaster_highestSubIndex_obj1601 = 4; /* number of subindex - 1*/ + UNS32 TestMaster_obj1601[] = + { + 0x20050010, /* 537198608 */ + 0x20060010, /* 537264144 */ + 0x20070010, /* 537329680 */ + 0x20080010 /* 537395216 */ + }; + subindex TestMaster_Index1601[] = + { + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1601 }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1601[0] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1601[1] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1601[2] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1601[3] } + }; + +/* index 0x1602 : Receive PDO 3 Mapping. */ + UNS8 TestMaster_highestSubIndex_obj1602 = 4; /* number of subindex - 1*/ + UNS32 TestMaster_obj1602[] = + { + 0x20090010, /* 537460752 */ + 0x200A0010, /* 537526288 */ + 0x200B0010, /* 537591824 */ + 0x200C0010 /* 537657360 */ + }; + subindex TestMaster_Index1602[] = + { + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1602 }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1602[0] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1602[1] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1602[2] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1602[3] } + }; + +/* index 0x1800 : Transmit PDO 1 Parameter. */ + UNS8 TestMaster_highestSubIndex_obj1800 = 5; /* number of subindex - 1*/ + UNS32 TestMaster_obj1800_COB_ID_used_by_PDO = 0x240; /* 576 */ + UNS8 TestMaster_obj1800_Transmission_Type = 0x1; /* 1 */ + UNS16 TestMaster_obj1800_Inhibit_Time = 0x0; /* 0 */ + UNS8 TestMaster_obj1800_Compatibility_Entry = 0x0; /* 0 */ + UNS16 TestMaster_obj1800_Event_Timer = 0x0; /* 0 */ + subindex TestMaster_Index1800[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1800 }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1800_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_obj1800_Transmission_Type }, + { RW, uint16, sizeof (UNS16), (void*)&TestMaster_obj1800_Inhibit_Time }, + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_obj1800_Compatibility_Entry }, + { RW, uint16, sizeof (UNS16), (void*)&TestMaster_obj1800_Event_Timer } + }; + +/* index 0x1801 : Transmit PDO 2 Parameter. */ + UNS8 TestMaster_highestSubIndex_obj1801 = 5; /* number of subindex - 1*/ + UNS32 TestMaster_obj1801_COB_ID_used_by_PDO = 0x340; /* 832 */ + UNS8 TestMaster_obj1801_Transmission_Type = 0x1; /* 1 */ + UNS16 TestMaster_obj1801_Inhibit_Time = 0x0; /* 0 */ + UNS8 TestMaster_obj1801_Compatibility_Entry = 0x0; /* 0 */ + UNS16 TestMaster_obj1801_Event_Timer = 0x0; /* 0 */ + subindex TestMaster_Index1801[] = + { + { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1801 }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1801_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_obj1801_Transmission_Type }, + { RW, uint16, sizeof (UNS16), (void*)&TestMaster_obj1801_Inhibit_Time }, + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_obj1801_Compatibility_Entry }, + { RW, uint16, sizeof (UNS16), (void*)&TestMaster_obj1801_Event_Timer } + }; + +/* index 0x1A00 : Transmit PDO 1 Mapping. */ + UNS8 TestMaster_highestSubIndex_obj1A00 = 1; /* number of subindex - 1*/ + UNS32 TestMaster_obj1A00[] = + { + 0x20000008 /* 536870920 */ + }; + subindex TestMaster_Index1A00[] = + { + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1A00 }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1A00[0] } + }; + +/* index 0x1A01 : Transmit PDO 2 Mapping. */ + UNS8 TestMaster_highestSubIndex_obj1A01 = 4; /* number of subindex - 1*/ + UNS32 TestMaster_obj1A01[] = + { + 0x20010010, /* 536936464 */ + 0x20020010, /* 537002000 */ + 0x20030010, /* 537067536 */ + 0x20040010 /* 537133072 */ + }; + subindex TestMaster_Index1A01[] = + { + { RW, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1A01 }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1A01[0] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1A01[1] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1A01[2] }, + { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1A01[3] } + }; + +/* index 0x2000 : Mapped variable DO */ + subindex TestMaster_Index2000[] = + { + { RW, uint8, sizeof (UNS8), (void*)&DO } + }; + +/* index 0x2001 : Mapped variable AO1 */ + subindex TestMaster_Index2001[] = + { + { RW, int16, sizeof (INTEGER16), (void*)&AO1 } + }; + +/* index 0x2002 : Mapped variable AO2 */ + subindex TestMaster_Index2002[] = + { + { RW, int16, sizeof (INTEGER16), (void*)&AO2 } + }; + +/* index 0x2003 : Mapped variable AO3 */ + subindex TestMaster_Index2003[] = + { + { RW, int16, sizeof (INTEGER16), (void*)&AO3 } + }; + +/* index 0x2004 : Mapped variable AO4 */ + subindex TestMaster_Index2004[] = + { + { RW, int16, sizeof (INTEGER16), (void*)&AO4 } + }; + +/* index 0x2005 : Mapped variable AI1 */ + subindex TestMaster_Index2005[] = + { + { RW, int16, sizeof (INTEGER16), (void*)&AI1 } + }; + +/* index 0x2006 : Mapped variable AI2 */ + subindex TestMaster_Index2006[] = + { + { RW, int16, sizeof (INTEGER16), (void*)&AI2 } + }; + +/* index 0x2007 : Mapped variable AI3 */ + subindex TestMaster_Index2007[] = + { + { RW, int16, sizeof (INTEGER16), (void*)&AI3 } + }; + +/* index 0x2008 : Mapped variable AI4 */ + subindex TestMaster_Index2008[] = + { + { RW, int16, sizeof (INTEGER16), (void*)&AI4 } + }; + +/* index 0x2009 : Mapped variable AI5 */ + subindex TestMaster_Index2009[] = + { + { RW, int16, sizeof (INTEGER16), (void*)&AI5 } + }; + +/* index 0x200A : Mapped variable AI6 */ + subindex TestMaster_Index200A[] = + { + { RW, int16, sizeof (INTEGER16), (void*)&AI6 } + }; + +/* index 0x200B : Mapped variable AI7 */ + subindex TestMaster_Index200B[] = + { + { RW, int16, sizeof (INTEGER16), (void*)&AI7 } + }; + +/* index 0x200C : Mapped variable AI8 */ + subindex TestMaster_Index200C[] = + { + { RW, int16, sizeof (INTEGER16), (void*)&AI8 } + }; + +/* index 0x200F : Mapped variable DI1 */ + subindex TestMaster_Index200F[] = + { + { RW, boolean, sizeof (UNS8), (void*)&DI1 } + }; + +/* index 0x2010 : Mapped variable DI2 */ + subindex TestMaster_Index2010[] = + { + { RW, boolean, sizeof (UNS8), (void*)&DI2 } + }; + +/* index 0x2011 : Mapped variable DI3 */ + subindex TestMaster_Index2011[] = + { + { RW, boolean, sizeof (UNS8), (void*)&DI3 } + }; + +/* index 0x2012 : Mapped variable DI4 */ + subindex TestMaster_Index2012[] = + { + { RW, boolean, sizeof (UNS8), (void*)&DI4 } + }; + +/* index 0x2013 : Mapped variable DI5 */ + subindex TestMaster_Index2013[] = + { + { RW, boolean, sizeof (UNS8), (void*)&DI5 } + }; + +/* index 0x2014 : Mapped variable DI6 */ + subindex TestMaster_Index2014[] = + { + { RW, boolean, sizeof (UNS8), (void*)&DI6 } + }; + +/* index 0x2015 : Mapped variable DI7 */ + subindex TestMaster_Index2015[] = + { + { RW, boolean, sizeof (UNS8), (void*)&DI7 } + }; + +/* index 0x2016 : Mapped variable DI8 */ + subindex TestMaster_Index2016[] = + { + { RW, boolean, sizeof (UNS8), (void*)&DI8 } + }; + +const indextable TestMaster_objdict[] = +{ + { (subindex*)TestMaster_Index1000,sizeof(TestMaster_Index1000)/sizeof(TestMaster_Index1000[0]), 0x1000}, + { (subindex*)TestMaster_Index1001,sizeof(TestMaster_Index1001)/sizeof(TestMaster_Index1001[0]), 0x1001}, + { (subindex*)TestMaster_Index1005,sizeof(TestMaster_Index1005)/sizeof(TestMaster_Index1005[0]), 0x1005}, + { (subindex*)TestMaster_Index1006,sizeof(TestMaster_Index1006)/sizeof(TestMaster_Index1006[0]), 0x1006}, + { (subindex*)TestMaster_Index1016,sizeof(TestMaster_Index1016)/sizeof(TestMaster_Index1016[0]), 0x1016}, + { (subindex*)TestMaster_Index1018,sizeof(TestMaster_Index1018)/sizeof(TestMaster_Index1018[0]), 0x1018}, + { (subindex*)TestMaster_Index1280,sizeof(TestMaster_Index1280)/sizeof(TestMaster_Index1280[0]), 0x1280}, + { (subindex*)TestMaster_Index1400,sizeof(TestMaster_Index1400)/sizeof(TestMaster_Index1400[0]), 0x1400}, + { (subindex*)TestMaster_Index1401,sizeof(TestMaster_Index1401)/sizeof(TestMaster_Index1401[0]), 0x1401}, + { (subindex*)TestMaster_Index1402,sizeof(TestMaster_Index1402)/sizeof(TestMaster_Index1402[0]), 0x1402}, + { (subindex*)TestMaster_Index1600,sizeof(TestMaster_Index1600)/sizeof(TestMaster_Index1600[0]), 0x1600}, + { (subindex*)TestMaster_Index1601,sizeof(TestMaster_Index1601)/sizeof(TestMaster_Index1601[0]), 0x1601}, + { (subindex*)TestMaster_Index1602,sizeof(TestMaster_Index1602)/sizeof(TestMaster_Index1602[0]), 0x1602}, + { (subindex*)TestMaster_Index1800,sizeof(TestMaster_Index1800)/sizeof(TestMaster_Index1800[0]), 0x1800}, + { (subindex*)TestMaster_Index1801,sizeof(TestMaster_Index1801)/sizeof(TestMaster_Index1801[0]), 0x1801}, + { (subindex*)TestMaster_Index1A00,sizeof(TestMaster_Index1A00)/sizeof(TestMaster_Index1A00[0]), 0x1A00}, + { (subindex*)TestMaster_Index1A01,sizeof(TestMaster_Index1A01)/sizeof(TestMaster_Index1A01[0]), 0x1A01}, + { (subindex*)TestMaster_Index2000,sizeof(TestMaster_Index2000)/sizeof(TestMaster_Index2000[0]), 0x2000}, + { (subindex*)TestMaster_Index2001,sizeof(TestMaster_Index2001)/sizeof(TestMaster_Index2001[0]), 0x2001}, + { (subindex*)TestMaster_Index2002,sizeof(TestMaster_Index2002)/sizeof(TestMaster_Index2002[0]), 0x2002}, + { (subindex*)TestMaster_Index2003,sizeof(TestMaster_Index2003)/sizeof(TestMaster_Index2003[0]), 0x2003}, + { (subindex*)TestMaster_Index2004,sizeof(TestMaster_Index2004)/sizeof(TestMaster_Index2004[0]), 0x2004}, + { (subindex*)TestMaster_Index2005,sizeof(TestMaster_Index2005)/sizeof(TestMaster_Index2005[0]), 0x2005}, + { (subindex*)TestMaster_Index2006,sizeof(TestMaster_Index2006)/sizeof(TestMaster_Index2006[0]), 0x2006}, + { (subindex*)TestMaster_Index2007,sizeof(TestMaster_Index2007)/sizeof(TestMaster_Index2007[0]), 0x2007}, + { (subindex*)TestMaster_Index2008,sizeof(TestMaster_Index2008)/sizeof(TestMaster_Index2008[0]), 0x2008}, + { (subindex*)TestMaster_Index2009,sizeof(TestMaster_Index2009)/sizeof(TestMaster_Index2009[0]), 0x2009}, + { (subindex*)TestMaster_Index200A,sizeof(TestMaster_Index200A)/sizeof(TestMaster_Index200A[0]), 0x200A}, + { (subindex*)TestMaster_Index200B,sizeof(TestMaster_Index200B)/sizeof(TestMaster_Index200B[0]), 0x200B}, + { (subindex*)TestMaster_Index200C,sizeof(TestMaster_Index200C)/sizeof(TestMaster_Index200C[0]), 0x200C}, + { (subindex*)TestMaster_Index200F,sizeof(TestMaster_Index200F)/sizeof(TestMaster_Index200F[0]), 0x200F}, + { (subindex*)TestMaster_Index2010,sizeof(TestMaster_Index2010)/sizeof(TestMaster_Index2010[0]), 0x2010}, + { (subindex*)TestMaster_Index2011,sizeof(TestMaster_Index2011)/sizeof(TestMaster_Index2011[0]), 0x2011}, + { (subindex*)TestMaster_Index2012,sizeof(TestMaster_Index2012)/sizeof(TestMaster_Index2012[0]), 0x2012}, + { (subindex*)TestMaster_Index2013,sizeof(TestMaster_Index2013)/sizeof(TestMaster_Index2013[0]), 0x2013}, + { (subindex*)TestMaster_Index2014,sizeof(TestMaster_Index2014)/sizeof(TestMaster_Index2014[0]), 0x2014}, + { (subindex*)TestMaster_Index2015,sizeof(TestMaster_Index2015)/sizeof(TestMaster_Index2015[0]), 0x2015}, + { (subindex*)TestMaster_Index2016,sizeof(TestMaster_Index2016)/sizeof(TestMaster_Index2016[0]), 0x2016}, +}; + +const indextable * TestMaster_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCallback_t **callbacks) +{ + int i; + *callbacks = NULL; + switch(wIndex){ + case 0x1000: i = 0;break; + case 0x1001: i = 1;break; + case 0x1005: i = 2;*callbacks = TestMaster_Index1005_callbacks; break; + case 0x1006: i = 3;*callbacks = TestMaster_Index1006_callbacks; break; + case 0x1016: i = 4;break; + case 0x1018: i = 5;break; + case 0x1280: i = 6;break; + case 0x1400: i = 7;break; + case 0x1401: i = 8;break; + case 0x1402: i = 9;break; + case 0x1600: i = 10;break; + case 0x1601: i = 11;break; + case 0x1602: i = 12;break; + case 0x1800: i = 13;break; + case 0x1801: i = 14;break; + case 0x1A00: i = 15;break; + case 0x1A01: i = 16;break; + case 0x2000: i = 17;break; + case 0x2001: i = 18;break; + case 0x2002: i = 19;break; + case 0x2003: i = 20;break; + case 0x2004: i = 21;break; + case 0x2005: i = 22;break; + case 0x2006: i = 23;break; + case 0x2007: i = 24;break; + case 0x2008: i = 25;break; + case 0x2009: i = 26;break; + case 0x200A: i = 27;break; + case 0x200B: i = 28;break; + case 0x200C: i = 29;break; + case 0x200F: i = 30;break; + case 0x2010: i = 31;break; + case 0x2011: i = 32;break; + case 0x2012: i = 33;break; + case 0x2013: i = 34;break; + case 0x2014: i = 35;break; + case 0x2015: i = 36;break; + case 0x2016: i = 37;break; + default: + *errorCode = OD_NO_SUCH_OBJECT; + return NULL; + } + *errorCode = OD_SUCCESSFUL; + return &TestMaster_objdict[i]; +} + +/* + * To count at which received SYNC a PDO must be sent. + * Even if no pdoTransmit are defined, at least one entry is computed + * for compilations issues. + */ +s_PDO_status TestMaster_PDO_status[2] = {s_PDO_staus_Initializer,s_PDO_staus_Initializer}; + +quick_index TestMaster_firstIndex = { + 0, /* SDO_SVR */ + 6, /* SDO_CLT */ + 7, /* PDO_RCV */ + 10, /* PDO_RCV_MAP */ + 13, /* PDO_TRS */ + 15 /* PDO_TRS_MAP */ +}; + +quick_index TestMaster_lastIndex = { + 0, /* SDO_SVR */ + 6, /* SDO_CLT */ + 9, /* PDO_RCV */ + 12, /* PDO_RCV_MAP */ + 14, /* PDO_TRS */ + 16 /* PDO_TRS_MAP */ +}; + +UNS16 TestMaster_ObjdictSize = sizeof(TestMaster_objdict)/sizeof(TestMaster_objdict[0]); + +CO_Data TestMaster_Data = CANOPEN_NODE_DATA_INITIALIZER(TestMaster); +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Master/TestMaster.h Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,37 @@ + +/* File generated by gen_cfile.py. Should not be modified. */ + +#ifndef TESTMASTER_H +#define TESTMASTER_H + +#include "data.h" + +/* Prototypes of function provided by object dictionnary */ +UNS32 TestMaster_valueRangeTest (UNS8 typeValue, void * value); +const indextable * TestMaster_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCallback_t **callbacks); + +/* Master node data struct */ +extern CO_Data TestMaster_Data; +extern UNS8 DO; /* Mapped at index 0x2000, subindex 0x00*/ +extern INTEGER16 AO1; /* Mapped at index 0x2001, subindex 0x00*/ +extern INTEGER16 AO2; /* Mapped at index 0x2002, subindex 0x00*/ +extern INTEGER16 AO3; /* Mapped at index 0x2003, subindex 0x00*/ +extern INTEGER16 AO4; /* Mapped at index 0x2004, subindex 0x00*/ +extern INTEGER16 AI1; /* Mapped at index 0x2005, subindex 0x00*/ +extern INTEGER16 AI2; /* Mapped at index 0x2006, subindex 0x00*/ +extern INTEGER16 AI3; /* Mapped at index 0x2007, subindex 0x00*/ +extern INTEGER16 AI4; /* Mapped at index 0x2008, subindex 0x00*/ +extern INTEGER16 AI5; /* Mapped at index 0x2009, subindex 0x00*/ +extern INTEGER16 AI6; /* Mapped at index 0x200A, subindex 0x00*/ +extern INTEGER16 AI7; /* Mapped at index 0x200B, subindex 0x00*/ +extern INTEGER16 AI8; /* Mapped at index 0x200C, subindex 0x00*/ +extern UNS8 DI1; /* Mapped at index 0x200F, subindex 0x00*/ +extern UNS8 DI2; /* Mapped at index 0x2010, subindex 0x00*/ +extern UNS8 DI3; /* Mapped at index 0x2011, subindex 0x00*/ +extern UNS8 DI4; /* Mapped at index 0x2012, subindex 0x00*/ +extern UNS8 DI5; /* Mapped at index 0x2013, subindex 0x00*/ +extern UNS8 DI6; /* Mapped at index 0x2014, subindex 0x00*/ +extern UNS8 DI7; /* Mapped at index 0x2015, subindex 0x00*/ +extern UNS8 DI8; /* Mapped at index 0x2016, subindex 0x00*/ + +#endif // TESTMASTER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Master/TestMaster.od Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,1079 @@ +<?xml version="1.0"?> +<!DOCTYPE PyObject SYSTEM "PyObjects.dtd"> +<PyObject module="node" class="Node" id="159651660"> +<attr name="Profile" type="dict" id="159765884" > +</attr> +<attr name="Name" type="string">TestMaster</attr> +<attr name="Dictionary" type="dict" id="159766156" > + <entry> + <key type="numeric" value="4096" /> + <val type="numeric" value="401" /> + </entry> + <entry> + <key type="numeric" value="4097" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8194" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8195" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8196" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="4101" /> + <val type="numeric" value="1073741952" /> + </entry> + <entry> + <key type="numeric" value="4102" /> + <val type="numeric" value="50000" /> + </entry> + <entry> + <key type="numeric" value="8193" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8200" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8201" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8202" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8203" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8204" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="5122" /> + <val type="list" id="160594860" > + <item type="numeric" value="960" /> + <item type="numeric" value="1" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="8207" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8208" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8209" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8210" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8211" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8212" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8213" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8214" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="4120" /> + <val type="list" id="160621036" > + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="4118" /> + <val type="list" id="160594156" > + <item type="numeric" value="4195804" /> + </val> + </entry> + <entry> + <key type="numeric" value="8197" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="4736" /> + <val type="list" id="160592364" > + <item type="numeric" value="1600" /> + <item type="numeric" value="1472" /> + <item type="numeric" value="64" /> + </val> + </entry> + <entry> + <key type="numeric" value="8198" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="5120" /> + <val type="list" id="160595948" > + <item type="numeric" value="448" /> + <item type="numeric" value="1" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="8192" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="8199" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="5632" /> + <val type="list" id="160594124" > + <item type="numeric" value="537853953" /> + <item type="numeric" value="537919489" /> + <item type="numeric" value="537985025" /> + <item type="numeric" value="538050561" /> + <item type="numeric" value="538116097" /> + <item type="numeric" value="538181633" /> + <item type="numeric" value="538247169" /> + <item type="numeric" value="538312705" /> + </val> + </entry> + <entry> + <key type="numeric" value="5121" /> + <val type="list" id="160595276" > + <item type="numeric" value="704" /> + <item type="numeric" value="1" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="6144" /> + <val type="list" id="160592428" > + <item type="numeric" value="576" /> + <item type="numeric" value="1" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="5633" /> + <val type="list" id="159736236" > + <item type="numeric" value="537198608" /> + <item type="numeric" value="537264144" /> + <item type="numeric" value="537329680" /> + <item type="numeric" value="537395216" /> + </val> + </entry> + <entry> + <key type="numeric" value="6656" /> + <val type="list" id="159597228" > + <item type="numeric" value="536870920" /> + </val> + </entry> + <entry> + <key type="numeric" value="6145" /> + <val type="list" id="159599564" > + <item type="numeric" value="832" /> + <item type="numeric" value="1" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="5634" /> + <val type="list" id="159713900" > + <item type="numeric" value="537460752" /> + <item type="numeric" value="537526288" /> + <item type="numeric" value="537591824" /> + <item type="numeric" value="537657360" /> + </val> + </entry> + <entry> + <key type="numeric" value="6657" /> + <val type="list" id="159714252" > + <item type="numeric" value="536936464" /> + <item type="numeric" value="537002000" /> + <item type="numeric" value="537067536" /> + <item type="numeric" value="537133072" /> + </val> + </entry> +</attr> +<attr name="SpecificMenu" type="list" id="160603788" > +</attr> +<attr name="ParamsDictionary" type="dict" id="159716732" > +</attr> +<attr name="UserMapping" type="dict" id="159658164" > + <entry> + <key type="numeric" value="8192" /> + <val type="dict" id="160582348" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159631692" > + <item type="dict" id="160588908" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DO</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DO</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8193" /> + <val type="dict" id="160608980" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159709036" > + <item type="dict" id="159716460" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AO1</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AO1</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8194" /> + <val type="dict" id="159675636" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160591948" > + <item type="dict" id="160589044" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AO2</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AO2</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8195" /> + <val type="dict" id="159660340" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159735948" > + <item type="dict" id="159780620" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AO3</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AO3</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8196" /> + <val type="dict" id="160582212" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159738028" > + <item type="dict" id="160589588" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AO4</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AO4</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8197" /> + <val type="dict" id="159757556" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159738956" > + <item type="dict" id="160589724" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI1</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI1</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8198" /> + <val type="dict" id="159745948" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159591436" > + <item type="dict" id="160567476" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI2</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI2</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8199" /> + <val type="dict" id="160590132" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159652460" > + <item type="dict" id="159740084" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI3</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI3</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8200" /> + <val type="dict" id="160589452" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159650188" > + <item type="dict" id="159654884" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI4</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI4</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8201" /> + <val type="dict" id="159742124" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159707884" > + <item type="dict" id="160588092" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI5</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI5</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8202" /> + <val type="dict" id="160569652" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159650092" > + <item type="dict" id="160570876" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI6</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI6</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8203" /> + <val type="dict" id="160714100" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159653452" > + <item type="dict" id="160714236" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI7</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI7</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8204" /> + <val type="dict" id="160714372" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159610380" > + <item type="dict" id="160714508" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI8</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">AI8</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8207" /> + <val type="dict" id="160718892" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159651052" > + <item type="dict" id="160719028" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI1</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI1</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8208" /> + <val type="dict" id="160719164" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159600396" > + <item type="dict" id="160719300" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI2</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI2</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8209" /> + <val type="dict" id="160719436" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159652204" > + <item type="dict" id="160719572" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI3</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI3</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8210" /> + <val type="dict" id="160719708" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159651980" > + <item type="dict" id="160719844" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI4</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI4</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8211" /> + <val type="dict" id="160719980" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159650540" > + <item type="dict" id="160720116" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI5</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI5</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8212" /> + <val type="dict" id="160720252" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160621004" > + <item type="dict" id="160720388" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI6</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI6</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8213" /> + <val type="dict" id="160720524" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159652780" > + <item type="dict" id="160720660" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI7</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI7</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="8214" /> + <val type="dict" id="160720796" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159612396" > + <item type="dict" id="160720932" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI8</val> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">DI8</val> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> +</attr> +<attr name="DS302" type="dict" id="160721068" > +</attr> +<attr name="ProfileName" type="string" value="DS-301" /> +<attr name="Type" type="string">master</attr> +<attr name="ID" type="numeric" value="1" /> +</PyObject>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Master/TestMasterMicroMod.c Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,510 @@ +/* +This file is part of CanFestival, a library implementing CanOpen Stack. + +Copyright (C): Edouard TISSERANT and Francis DUPIN + +See COPYING file for copyrights details. + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#if defined(WIN32) && !defined(__CYGWIN__) +#include <windows.h> +#include "getopt.h" +void pause(void) +{ + system("PAUSE"); +} +#else +#include <unistd.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <signal.h> +#endif + +#include "canfestival.h" +#include "TestMasterMicroMod.h" +#include "TestMaster.h" +UNS8 slavenodeid; + + +/*****************************************************************************/ +void TestMaster_heartbeatError(UNS8 heartbeatID) +{ + eprintf("TestMaster_heartbeatError %d\n", heartbeatID); +} + +/******************************************************** + * ConfigureSlaveNode is responsible to + * - setup master RPDO 1 to receive TPDO 1 from id 0x40 + * - setup master TPDO 1 to send RPDO 1 to id 0x40 + ********************************************************/ +void TestMaster_initialisation() +{ + UNS32 PDO1_COBID = 0x0180 + slavenodeid; + UNS32 PDO2_COBID = 0x0200 + slavenodeid; + UNS8 size = sizeof(UNS32); + + eprintf("TestMaster_initialisation\n"); + + /***************************************** + * Define RPDOs to match slave ID=0x40 TPDOs* + *****************************************/ + writeLocalDict( &TestMaster_Data, /*CO_Data* d*/ + 0x1400, /*UNS16 index*/ + 0x01, /*UNS8 subind*/ + &PDO1_COBID, /*void * pSourceData,*/ + &size, /* UNS8 * pExpectedSize*/ + RW); /* UNS8 checkAccess */ + + + /***************************************** + * Define TPDOs to match slave ID=0x40 RPDOs* + *****************************************/ + writeLocalDict( &TestMaster_Data, /*CO_Data* d*/ + 0x1800, /*UNS16 index*/ + 0x01, /*UNS8 subind*/ + &PDO2_COBID, /*void * pSourceData,*/ + &size, /* UNS8 * pExpectedSize*/ + RW); /* UNS8 checkAccess */ +} + +static init_step = 0; + +/*Froward declaration*/ +static void ConfigureSlaveNode(CO_Data* d, UNS8 nodeId); + +/**/ +static void CheckSDOAndContinue(CO_Data* d, UNS8 nodeId) +{ + UNS32 abortCode; + + if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED) + eprintf("Master : Failed in initializing slave %2.2x, step %d, AbortCode :%4.4x \n", nodeId, init_step, abortCode); + + /* Finalise last SDO transfer with this node */ + closeSDOtransfer(&TestMaster_Data, nodeId, SDO_CLIENT); + + ConfigureSlaveNode(d, nodeId); +} + +/******************************************************** + * ConfigureSlaveNode is responsible to + * - setup slave TPDO 1 transmit time + * - setup slave TPDO 2 transmit time + * - setup slave Heartbeat Producer time + * - switch to operational mode + * - send NMT to slave + ******************************************************** + * This an example of : + * Network Dictionary Access (SDO) with Callback + * Slave node state change request (NMT) + ******************************************************** + * This is called first by TestMaster_preOperational + * then it called again each time a SDO exchange is + * finished. + ********************************************************/ +static void ConfigureSlaveNode(CO_Data* d, UNS8 nodeId) +{ + UNS8 res; + eprintf("Master : ConfigureSlaveNode %2.2x\n", nodeId); + printf("nodeid slave=%x\n",nodeId); + switch(++init_step){ + case 1: + { /*disable Slave's TPDO 1 */ + UNS32 TPDO_COBId = 0x80000180 + nodeId; + + eprintf("Master : disable slave %2.2x TPDO 1 \n", nodeId); + res = writeNetworkDictCallBack (d, /*CO_Data* d*/ + /**TestSlave_Data.bDeviceNodeId, UNS8 nodeId*/ + nodeId, /*UNS8 nodeId*/ + 0x1800, /*UNS16 index*/ + 0x01, /*UNS8 subindex*/ + 4, /*UNS8 count*/ + 0, /*UNS8 dataType*/ + &TPDO_COBId,/*void *data*/ + CheckSDOAndContinue); /*SDOCallback_t Callback*/ + } + break; + + case 2: + { /*setup Slave's TPDO 1 to be transmitted on SYNC*/ + UNS8 Transmission_Type = 0x01; + + eprintf("Master : set slave %2.2x TPDO 1 transmit type\n", nodeId); + res = writeNetworkDictCallBack (d, /*CO_Data* d*/ + /**TestSlave_Data.bDeviceNodeId, UNS8 nodeId*/ + nodeId, /*UNS8 nodeId*/ + 0x1800, /*UNS16 index*/ + 0x02, /*UNS8 subindex*/ + 1, /*UNS8 count*/ + 0, /*UNS8 dataType*/ + &Transmission_Type,/*void *data*/ + CheckSDOAndContinue); /*SDOCallback_t Callback*/ + } + break; + + case 3: + { /*re-enable Slave's TPDO 1 */ + UNS32 TPDO_COBId = 0x00000180 + nodeId; + + eprintf("Master : re-enable slave %2.2x TPDO 1\n", nodeId); + res = writeNetworkDictCallBack (d, /*CO_Data* d*/ + /**TestSlave_Data.bDeviceNodeId, UNS8 nodeId*/ + nodeId, /*UNS8 nodeId*/ + 0x1800, /*UNS16 index*/ + 0x01, /*UNS8 subindex*/ + 4, /*UNS8 count*/ + 0, /*UNS8 dataType*/ + &TPDO_COBId,/*void *data*/ + CheckSDOAndContinue); /*SDOCallback_t Callback*/ + } + break; + + case 4: + { /*disable Slave's TPDO 2 */ + UNS32 TPDO_COBId = 0x80000200 + nodeId; + + eprintf("Master : disable slave %2.2x RPDO 1\n", nodeId); + res = writeNetworkDictCallBack (d, /*CO_Data* d*/ + /**TestSlave_Data.bDeviceNodeId, UNS8 nodeId*/ + nodeId, /*UNS8 nodeId*/ + 0x1400, /*UNS16 index*/ + 0x01, /*UNS8 subindex*/ + 4, /*UNS8 count*/ + 0, /*UNS8 dataType*/ + &TPDO_COBId,/*void *data*/ + CheckSDOAndContinue); /*SDOCallback_t Callback*/ + } + break; + + + case 5: + { + UNS8 Transmission_Type = 0x01; + + eprintf("Master : set slave %2.2x RPDO 1 receive type\n", nodeId); + res = writeNetworkDictCallBack (d, /*CO_Data* d*/ + /**TestSlave_Data.bDeviceNodeId, UNS8 nodeId*/ + nodeId, /*UNS8 nodeId*/ + 0x1400, /*UNS16 index*/ + 0x02, /*UNS8 subindex*/ + 1, /*UNS8 count*/ + 0, /*UNS8 dataType*/ + &Transmission_Type,/*void *data*/ + CheckSDOAndContinue); /*SDOCallback_t Callback*/ + } + break; + + case 6: + { /*re-enable Slave's TPDO 1 */ + UNS32 TPDO_COBId = 0x00000200 + nodeId; + + eprintf("Master : re-enable %2.2x RPDO 1\n", nodeId); + res = writeNetworkDictCallBack (d, /*CO_Data* d*/ + /**TestSlave_Data.bDeviceNodeId, UNS8 nodeId*/ + nodeId, /*UNS8 nodeId*/ + 0x1400, /*UNS16 index*/ + 0x01, /*UNS8 subindex*/ + 4, /*UNS8 count*/ + 0, /*UNS8 dataType*/ + &TPDO_COBId,/*void *data*/ + CheckSDOAndContinue); /*SDOCallback_t Callback*/ + } + break; + + case 7: + { + UNS16 Heartbeat_Producer_Time = 0x03E8; + eprintf("Master : set slave %2.2x heartbeat producer time \n", nodeId); + res = writeNetworkDictCallBack (d, /*CO_Data* d*/ + /**TestSlave_Data.bDeviceNodeId, UNS8 nodeId*/ + nodeId, /*UNS8 nodeId*/ + 0x1017, /*UNS16 index*/ + 0x00, /*UNS8 subindex*/ + 2, /*UNS8 count*/ + 0, /*UNS8 dataType*/ + &Heartbeat_Producer_Time,/*void *data*/ + CheckSDOAndContinue); /*SDOCallback_t Callback*/ + } + break; + + case 8: + { /*disable Slave's TPDO 2 */ + UNS32 TPDO_COBId = 0x80000280 + nodeId; + + eprintf("Master : disable slave %2.2x TPDO 2 \n", nodeId); + res = writeNetworkDictCallBack (d, /*CO_Data* d*/ + /**TestSlave_Data.bDeviceNodeId, UNS8 nodeId*/ + nodeId, /*UNS8 nodeId*/ + 0x1801, /*UNS16 index*/ + 0x01, /*UNS8 subindex*/ + 4, /*UNS8 count*/ + 0, /*UNS8 dataType*/ + &TPDO_COBId,/*void *data*/ + CheckSDOAndContinue); /*SDOCallback_t Callback*/ + } + break; + + case 9: + { /*disable Slave's TPDO 3 */ + UNS32 TPDO_COBId = 0x80000380 + nodeId; + + eprintf("Master : disable slave %2.2x TPDO 3 \n", nodeId); + res = writeNetworkDictCallBack (d, /*CO_Data* d*/ + /**TestSlave_Data.bDeviceNodeId, UNS8 nodeId*/ + nodeId, /*UNS8 nodeId*/ + 0x1802, /*UNS16 index*/ + 0x01, /*UNS8 subindex*/ + 4, /*UNS8 count*/ + 0, /*UNS8 dataType*/ + &TPDO_COBId,/*void *data*/ + CheckSDOAndContinue); /*SDOCallback_t Callback*/ + } + break; + + case 10: + { /*disable Slave's TPDO 2 */ + UNS32 TPDO_COBId = 0x80000480 + nodeId; + + eprintf("Master : disable slave %2.2x TPDO 4 \n", nodeId); + res = writeNetworkDictCallBack (d, /*CO_Data* d*/ + /**TestSlave_Data.bDeviceNodeId, UNS8 nodeId*/ + nodeId, /*UNS8 nodeId*/ + 0x1803, /*UNS16 index*/ + 0x01, /*UNS8 subindex*/ + 4, /*UNS8 count*/ + 0, /*UNS8 dataType*/ + &TPDO_COBId,/*void *data*/ + CheckSDOAndContinue); /*SDOCallback_t Callback*/ + } + break; + + case 11: + /* Put the master in operational mode */ + setState(d, Operational); + + /* Ask slave node to go in operational mode */ + masterSendNMTstateChange (d, nodeId, NMT_Start_Node); + } + +} + +void TestMaster_preOperational() +{ + + eprintf("TestMaster_preOperational\n"); + ConfigureSlaveNode(&TestMaster_Data, slavenodeid); + +} + +void TestMaster_operational() +{ + eprintf("TestMaster_operational\n"); +} + +void TestMaster_stopped() +{ + eprintf("TestMaster_stopped\n"); +} + +void TestMaster_post_sync() +{ + DO++; + + AO1 = AI1 / 2; + AO2 = AI2 / 2; + AO3 = AI3 / 2; + AO4 = AI4 / 2; + eprintf("MicroMod Digital Out: %2.2x\n",DO); + eprintf("MicroMod Analogue Out1: %d\n",AO1); + eprintf("MicroMod Analogue Out2: %d\n",AO2); + eprintf("MicroMod Analogue Out3: %d\n",AO3); + eprintf("MicroMod Analogue Out4: %d\n",AO4); + eprintf("MicroMod Digital In (by bit): DI1: %2.2x DI2: %2.2x DI3: %2.2x DI4: %2.2x DI5: %2.2x DI6: %2.2x DI7: %2.2x DI8: %2.2x\n",DI1,DI2,DI3,DI4,DI5,DI6,DI7,DI8); + eprintf("MicroMod Analogue In1: %d\n", AI1); + eprintf("MicroMod Analogue In2: %d\n", AI2); + eprintf("MicroMod Analogue In3: %d\n", AI3); + eprintf("MicroMod Analogue In4: %d\n", AI4); + eprintf("MicroMod Analogue In5: %d\n", AI5); + eprintf("MicroMod Analogue In6: %d\n", AI6); + eprintf("MicroMod Analogue In7: %d\n", AI7); + eprintf("MicroMod Analogue In8: %d\n", AI8); +} + +void TestMaster_post_TPDO() +{ +// eprintf("TestMaster_post_TPDO\n"); +} + +//s_BOARD SlaveBoard = {"0", "500K"}; +s_BOARD MasterBoard = {"32", "125K"}; + +#if !defined(WIN32) || defined(__CYGWIN__) +void catch_signal(int sig) +{ + signal(SIGTERM, catch_signal); + signal(SIGINT, catch_signal); + + eprintf("Got Signal %d\n",sig); +} +#endif + +void help() +{ + printf("**************************************************************\n"); + printf("* TestMasterMicroMod *\n"); + printf("* *\n"); + printf("* A simple example for PC. *\n"); + printf("* A CanOpen master that control a MicroMod module: *\n"); + printf("* - setup module TPDO 1 transmit type *\n"); + printf("* - setup module RPDO 1 transmit type *\n"); + printf("* - setup module hearbeatbeat period *\n"); + printf("* - disable others TPDOs *\n"); + printf("* - set state to operational *\n"); + printf("* - send periodic SYNC *\n"); + printf("* - send periodic RPDO 1 to Micromod (digital output) *\n"); + printf("* - listen Micromod's TPDO 1 (digital input) *\n"); + printf("* - Mapping RPDO 1 bit per bit (digital input) *\n"); + printf("* *\n"); + printf("* Usage: *\n"); + printf("* ./TestMasterMicroMod [OPTIONS] *\n"); + printf("* *\n"); + printf("* OPTIONS: *\n"); + printf("* -l : Can library [\"libcanfestival_can_virtual.so\"] *\n"); + printf("* *\n"); + printf("* Slave: *\n"); + printf("* -i : Slave Node id format [0x01 , 0x7F] *\n"); + printf("* *\n"); + printf("* Master: *\n"); + printf("* -m : bus name [\"1\"] *\n"); + printf("* -M : 1M,500K,250K,125K,100K,50K,20K,10K *\n"); + printf("* *\n"); + printf("**************************************************************\n"); +} + +/*************************** INIT *****************************************/ +void InitNodes(CO_Data* d, UNS32 id) +{ + /****************************** INITIALISATION MASTER *******************************/ + if(MasterBoard.baudrate){ + /* Defining the node Id */ + //setNodeId(&TestMaster_Data, 0x01); + + /* init */ + setState(&TestMaster_Data, Initialisation); + } +} + +/****************************************************************************/ +/*************************** MAIN *****************************************/ +/****************************************************************************/ +int main(int argc,char **argv) +{ + + int c; + extern char *optarg; + char* LibraryPath="libcanfestival_can_virtual.so"; + char *snodeid; + while ((c = getopt(argc, argv, "-m:s:M:S:l:i:")) != EOF) + { + switch(c) + { + case 'm' : + if (optarg[0] == 0) + { + help(); + exit(1); + } + MasterBoard.busname = optarg; + break; + case 'M' : + if (optarg[0] == 0) + { + help(); + exit(1); + } + MasterBoard.baudrate = optarg; + break; + case 'l' : + if (optarg[0] == 0) + { + help(); + exit(1); + } + LibraryPath = optarg; + break; + case 'i' : + if (optarg[0] == 0) + { + help(); + exit(1); + } + snodeid = optarg; + sscanf(snodeid,"%x",&slavenodeid); + break; + default: + help(); + exit(1); + } + } + +#if !defined(WIN32) || defined(__CYGWIN__) + /* install signal handler for manual break */ + signal(SIGTERM, catch_signal); + signal(SIGINT, catch_signal); +#endif + +#ifndef NOT_USE_DYNAMIC_LOADING + LoadCanDriver(LibraryPath); +#endif + + TestMaster_Data.heartbeatError = TestMaster_heartbeatError; + TestMaster_Data.initialisation = TestMaster_initialisation; + TestMaster_Data.preOperational = TestMaster_preOperational; + TestMaster_Data.operational = TestMaster_operational; + TestMaster_Data.stopped = TestMaster_stopped; + TestMaster_Data.post_sync = TestMaster_post_sync; + TestMaster_Data.post_TPDO = TestMaster_post_TPDO; + + if(!canOpen(&MasterBoard,&TestMaster_Data)){ + eprintf("Cannot open Master Board\n"); + goto fail_master; + } + + // Start timer thread + StartTimerLoop(&InitNodes); + + // wait Ctrl-C + pause(); + eprintf("Finishing.\n"); + + // Reset the slave node for next use (will stop emitting heartbeat) + masterSendNMTstateChange (&TestMaster_Data, slavenodeid, NMT_Reset_Node); + + // Stop master + setState(&TestMaster_Data, Stopped); + + // Stop timer thread + StopTimerLoop(); + +fail_master: + if(MasterBoard.baudrate) canClose(&TestMaster_Data); + + return 0; +} + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Master/TestMasterMicroMod.h Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,59 @@ +/* +This file is part of CanFestival, a library implementing CanOpen Stack. + +Copyright (C): Edouard TISSERANT and Francis DUPIN + +See COPYING file for copyrights details. + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +#ifdef USE_XENO +#define eprintf(...) +#else +#define eprintf(...) printf (__VA_ARGS__) +#endif +//void print_message(Message *m); + +/*UNS8 canSend(CAN_HANDLE fd0, Message *m);*/ + +#include "canfestival.h" + +/* +#define CAN_FIFO_LENGTH 100 + +#define DECLARE_A_CAN_FIFO \ +static Message FIFO[CAN_FIFO_LENGTH];\ +static int FIFO_First = 0;\ +static int FIFO_Last = 0;\ +\ +static void PutInFIFO(Message *m)\ +{\ + FIFO[FIFO_Last++] = *m;\ + FIFO_Last %= CAN_FIFO_LENGTH;\ +}\ +\ +static void GetFromFIFO(Message *m)\ +{\ + *m = FIFO[FIFO_First++];\ + FIFO_First %= CAN_FIFO_LENGTH;\ +}\ +\ +static void TransmitMessage(CO_Data* d, UNS32 id)\ +{\ + Message m;\ + GetFromFIFO(&m);\ + canDispatch(d, &m);\ +} +*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Master/TestMasterMicroMod.vcproj Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,228 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8,00" + Name="TestMasterMicroMod" + ProjectGUID="{B51A176D-5320-4534-913B-3025CED5B27E}" + Keyword="Win32Proj" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="../../Debug" + IntermediateDirectory="Debug" + ConfigurationType="1" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="../../include;../../include/win32" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="CanFestival-3.lib" + OutputFile="$(OutDir)/TestMasterMicroMod.exe" + LinkIncremental="2" + AdditionalLibraryDirectories="../../Debug UNICODE" + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)/TestMasterMicroMod.pdb" + SubSystem="1" + OptimizeForWindows98="1" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="../../Release" + IntermediateDirectory="Release" + ConfigurationType="1" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + AdditionalIncludeDirectories="../../include;../../include/win32" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + RuntimeLibrary="2" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="CanFestival-3.lib" + OutputFile="$(OutDir)/TestMasterMicroMod.exe" + LinkIncremental="1" + AdditionalLibraryDirectories="../../Release" + GenerateDebugInformation="true" + SubSystem="1" + OptimizeReferences="2" + EnableCOMDATFolding="2" + OptimizeForWindows98="1" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath=".\getopt.c" + > + </File> + <File + RelativePath=".\TestMaster.c" + > + </File> + <File + RelativePath=".\TestMasterMicroMod.c" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath=".\getopt.h" + > + </File> + <File + RelativePath=".\TestMaster.h" + > + </File> + <File + RelativePath=".\TestMasterMicroMod.h" + > + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" + > + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Master/getopt.c Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,1260 @@ +/* from http://www.pwilson.net/getopt.html */ + +/* Getopt for GNU. + NOTE: getopt is now part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to drepper@gnu.org + before changing it! + Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>. + Ditto for AIX 3.2 and <stdlib.h>. */ +#ifndef _NO_PROTO +# define _NO_PROTO +#endif + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if !defined __STDC__ || !__STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +# ifndef const +# define const +# endif +#endif + +#include <stdio.h> + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#define GETOPT_INTERFACE_VERSION 2 +#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 +# include <gnu-versions.h> +# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION +# define ELIDE_CODE +# endif +#endif + +#ifndef ELIDE_CODE + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +/* Don't include stdlib.h for non-GNU C libraries because some of them + contain conflicting prototypes for getopt. */ +# include <stdlib.h> +# include <unistd.h> +#endif /* GNU C library. */ + +#ifdef VMS +# include <unixlib.h> +# if HAVE_STRING_H - 0 +# include <string.h> +# endif +#endif + +#ifndef _ +/* This is for other GNU distributions with internationalized messages. */ +# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC +# include <libintl.h> +# ifndef _ +# define _(msgid) gettext (msgid) +# endif +# else +# define _(msgid) (msgid) +# endif +# if defined _LIBC && defined USE_IN_LIBIO +# include <wchar.h> +# endif +#endif + +/* This version of `getopt' appears to the caller like standard Unix `getopt' + but it behaves differently for the user, since it allows the user + to intersperse the options with the other arguments. + + As `getopt' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Setting the environment variable POSIXLY_CORRECT disables permutation. + Then the behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include "getopt.h" + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* 1003.2 says this must be 1 before any call. */ +int optind = 1; + +/* Formerly, initialization of getopt depended on optind==0, which + causes problems with re-calling getopt as programs generally don't + know that. */ + +int __getopt_initialized; + +/* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + +static char *nextchar; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using `+' as the first character + of the list of option characters. + + PERMUTE is the default. We permute the contents of ARGV as we scan, + so that eventually all the non-options are at the end. This allows options + to be given in any order, even with programs that were not written to + expect this. + + RETURN_IN_ORDER is an option available to programs that were written + to expect options and other ARGV-elements in any order and that care about + the ordering of the two. We describe each non-option ARGV-element + as if it were the argument of an option with character code 1. + Using `-' as the first character of the list of option characters + selects this mode of operation. + + The special argument `--' forces an end of option-scanning regardless + of the value of `ordering'. In the case of RETURN_IN_ORDER, only + `--' can cause `getopt' to return -1 with `optind' != ARGC. */ + +static enum +{ + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER +} ordering; + +/* Value of POSIXLY_CORRECT environment variable. */ +static char *posixly_correct; + +#ifdef __GNU_LIBRARY__ +/* We want to avoid inclusion of string.h with non-GNU libraries + because there are many ways it can cause trouble. + On some systems, it contains special magic macros that don't work + in GCC. */ +# include <string.h> +# define my_index strchr +#else + +# if HAVE_STRING_H || WIN32 /* Pete Wilson mod 7/28/02 */ +# include <string.h> +# else +# include <strings.h> +# endif + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +#ifndef getenv +extern char *getenv (); +#endif + +static char * +my_index (str, chr) + const char *str; + int chr; +{ + while (*str) + { + if (*str == chr) + return (char *) str; + str++; + } + return 0; +} + +/* If using GCC, we can safely declare strlen this way. + If not using GCC, it is ok not to declare it. */ +#ifdef __GNUC__ +/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. + That was relevant to code that was here before. */ +# if (!defined __STDC__ || !__STDC__) && !defined strlen +/* gcc with -traditional declares the built-in strlen to return int, + and has done so at least since version 2.4.5. -- rms. */ +extern int strlen (const char *); +# endif /* not __STDC__ */ +#endif /* __GNUC__ */ + +#endif /* not __GNU_LIBRARY__ */ + +/* Handle permutation of arguments. */ + +/* Describe the part of ARGV that contains non-options that have + been skipped. `first_nonopt' is the index in ARGV of the first of them; + `last_nonopt' is the index after the last of them. */ + +static int first_nonopt; +static int last_nonopt; + +#ifdef _LIBC +/* Stored original parameters. + XXX This is no good solution. We should rather copy the args so + that we can compare them later. But we must not use malloc(3). */ +extern int __libc_argc; +extern char **__libc_argv; + +/* Bash 2.0 gives us an environment variable containing flags + indicating ARGV elements that should not be considered arguments. */ + +# ifdef USE_NONOPTION_FLAGS +/* Defined in getopt_init.c */ +extern char *__getopt_nonoption_flags; + +static int nonoption_flags_max_len; +static int nonoption_flags_len; +# endif + +# ifdef USE_NONOPTION_FLAGS +# define SWAP_FLAGS(ch1, ch2) \ + if (nonoption_flags_len > 0) \ + { \ + char __tmp = __getopt_nonoption_flags[ch1]; \ + __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ + __getopt_nonoption_flags[ch2] = __tmp; \ + } +# else +# define SWAP_FLAGS(ch1, ch2) +# endif +#else /* !_LIBC */ +# define SWAP_FLAGS(ch1, ch2) +#endif /* _LIBC */ + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + `first_nonopt' and `last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +#if defined __STDC__ && __STDC__ +static void exchange (char **); +#endif + +static void +exchange (argv) + char **argv; +{ + int bottom = first_nonopt; + int middle = last_nonopt; + int top = optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + /* First make sure the handling of the `__getopt_nonoption_flags' + string can work normally. Our top argument must be in the range + of the string. */ + if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) + { + /* We must extend the array. The user plays games with us and + presents new arguments. */ + char *new_str = malloc (top + 1); + if (new_str == NULL) + nonoption_flags_len = nonoption_flags_max_len = 0; + else + { + memset (__mempcpy (new_str, __getopt_nonoption_flags, + nonoption_flags_max_len), + '\0', top + 1 - nonoption_flags_max_len); + nonoption_flags_max_len = top + 1; + __getopt_nonoption_flags = new_str; + } + } +#endif + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + SWAP_FLAGS (bottom + i, middle + i); + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + first_nonopt += (optind - last_nonopt); + last_nonopt = optind; +} + +/* Initialize the internal data when the first call is made. */ + +#if defined __STDC__ && __STDC__ +static const char *_getopt_initialize (int, char *const *, const char *); +#endif +static const char * +_getopt_initialize (argc, argv, optstring) + int argc; + char *const *argv; + const char *optstring; +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + first_nonopt = last_nonopt = optind; + + nextchar = NULL; + + posixly_correct = getenv ("POSIXLY_CORRECT"); + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + ordering = REQUIRE_ORDER; + ++optstring; + } + else if (posixly_correct != NULL) + ordering = REQUIRE_ORDER; + else + ordering = PERMUTE; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + if (posixly_correct == NULL + && argc == __libc_argc && argv == __libc_argv) + { + if (nonoption_flags_max_len == 0) + { + if (__getopt_nonoption_flags == NULL + || __getopt_nonoption_flags[0] == '\0') + nonoption_flags_max_len = -1; + else + { + const char *orig_str = __getopt_nonoption_flags; + int len = nonoption_flags_max_len = strlen (orig_str); + if (nonoption_flags_max_len < argc) + nonoption_flags_max_len = argc; + __getopt_nonoption_flags = + (char *) malloc (nonoption_flags_max_len); + if (__getopt_nonoption_flags == NULL) + nonoption_flags_max_len = -1; + else + memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), + '\0', nonoption_flags_max_len - len); + } + } + nonoption_flags_len = nonoption_flags_max_len; + } + else + nonoption_flags_len = 0; +#endif + + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If `getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If `getopt' finds another option character, it returns that character, + updating `optind' and `nextchar' so that the next call to `getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, `getopt' returns -1. + Then `optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set `opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in `optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in `optarg', otherwise `optarg' is set to zero. + + If OPTSTRING starts with `-' or `+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with `--' instead of `-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a `=', or else the in next ARGV-element. + When `getopt' finds a long-named option, it returns 0 if that option's + `flag' field is nonzero, the value of the option's `val' field + if the `flag' field is zero. + + The elements of ARGV aren't really const, because we permute them. + But we pretend they're const in the prototype to be compatible + with other systems. + + LONGOPTS is a vector of `struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. */ + +int +_getopt_internal (argc, argv, optstring, longopts, longind, long_only) + int argc; + char *const *argv; + const char *optstring; + const struct option *longopts; + int *longind; + int long_only; +{ + int print_errors = opterr; + if (optstring[0] == ':') + print_errors = 0; + + if (argc < 1) + return -1; + + optarg = NULL; + + if (optind == 0 || !__getopt_initialized) + { + if (optind == 0) + optind = 1; /* Don't scan ARGV[0], the program name. */ + optstring = _getopt_initialize (argc, argv, optstring); + __getopt_initialized = 1; + } + + /* Test whether ARGV[optind] points to a non-option argument. + Either it does not have option syntax, or there is an environment flag + from the shell indicating it is not an option. The later information + is only used when the used in the GNU libc. */ +#if defined _LIBC && defined USE_NONOPTION_FLAGS +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ + || (optind < nonoption_flags_len \ + && __getopt_nonoption_flags[optind] == '1')) +#else +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') +#endif + + if (nextchar == NULL || *nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + /* Give FIRST_NONOPT and LAST_NONOPT rational values if OPTIND has been + moved back by the user (who may also have changed the arguments). */ + if (last_nonopt > optind) + last_nonopt = optind; + if (first_nonopt > optind) + first_nonopt = optind; + + if (ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (last_nonopt != optind) + first_nonopt = optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (optind < argc && NONOPTION_P) + optind++; + last_nonopt = optind; + } + + /* The special ARGV-element `--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (optind != argc && !strcmp (argv[optind], "--")) + { + optind++; + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (first_nonopt == last_nonopt) + first_nonopt = optind; + last_nonopt = argc; + + optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (first_nonopt != last_nonopt) + optind = first_nonopt; + return -1; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if (NONOPTION_P) + { + if (ordering == REQUIRE_ORDER) + return -1; + optarg = argv[optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Skip the initial punctuation. */ + + nextchar = (argv[optind] + 1 + + (longopts != NULL && argv[optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + If long_only and the ARGV-element has the form "-f", where f is + a valid short option, don't consider it an abbreviated form of + a long option that starts with f. Otherwise there would be no + way to give the -f short option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an abbreviation of + the long option, just like "--fu", and not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + + if (longopts != NULL + && (argv[optind][1] == '-' + || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = -1; + int option_index; + + for (nameend = nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if ((unsigned int) (nameend - nextchar) + == (unsigned int) strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else if (long_only + || pfound->has_arg != p->has_arg + || pfound->flag != p->flag + || pfound->val != p->val) + /* Second or later nonexact match found. */ + ambig = 1; + } + + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[optind]); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[optind]); +#endif + } + nextchar += strlen (nextchar); + optind++; + optopt = 0; + return '?'; + } + + if (pfound != NULL) + { + option_index = indfound; + optind++; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; +#endif + + if (argv[optind - 1][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("\ +%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#else + fprintf (stderr, _("\ +%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("\ +%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[optind - 1][0], + pfound->name); +#else + fprintf (stderr, _("\ +%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[optind - 1][0], pfound->name); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#endif + } + + nextchar += strlen (nextchar); + + optopt = pfound->val; + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); +#endif + } + nextchar += strlen (nextchar); + optopt = pfound->val; + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[optind][1] == '-' + || my_index (optstring, *nextchar) == NULL) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; +#endif + + if (argv[optind][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("%s: unrecognized option `--%s'\n"), + argv[0], nextchar); +#else + fprintf (stderr, _("%s: unrecognized option `--%s'\n"), + argv[0], nextchar); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[optind][0], nextchar); +#else + fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[optind][0], nextchar); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#endif + } + nextchar = (char *) ""; + optind++; + optopt = 0; + return '?'; + } + } + + /* Look at and handle the next short option-character. */ + + { + char c = *nextchar++; + char *temp = my_index (optstring, c); + + /* Increment `optind' when we start to process its last character. */ + if (*nextchar == '\0') + ++optind; + + if (temp == NULL || c == ':') + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; +#endif + + if (posixly_correct) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("%s: illegal option -- %c\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); +#endif + } + else + { +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("%s: invalid option -- %c\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#endif + } + optopt = c; + return '?'; + } + /* Convenience. Treat POSIX -W foo same as long option --foo */ + if (temp[0] == 'W' && temp[1] == ';') + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = 0; + int option_index; + + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (print_errors) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("%s: option requires an argument -- %c\n"), + argv[0], c); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, _("%s: option requires an argument -- %c\n"), + argv[0], c); +#endif + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + return c; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + + /* optarg is now the argument, see if it's in the + table of longopts. */ + + for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if ((unsigned int) (nameend - nextchar) == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[optind]); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[optind]); +#endif + } + nextchar += strlen (nextchar); + optind++; + return '?'; + } + if (pfound != NULL) + { + option_index = indfound; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("\ +%s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, _("\ +%s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + + nextchar += strlen (nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("\ +%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); +#endif + } + nextchar += strlen (nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + nextchar = NULL; + return 'W'; /* Let the application handle it. */ + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*nextchar != '\0') + { + optarg = nextchar; + optind++; + } + else + optarg = NULL; + nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (print_errors) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, + _("%s: option requires an argument -- %c\n"), + argv[0], c); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, + _("%s: option requires an argument -- %c\n"), + argv[0], c); +#endif + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + nextchar = NULL; + } + } + return c; + } +} + +int +getopt (argc, argv, optstring) + int argc; + char *const *argv; + const char *optstring; +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0); +} + +#endif /* Not ELIDE_CODE. */ + + +/* Compile with -DTEST to make an executable for use in testing + the above definition of `getopt'. */ + +/* #define TEST */ /* Pete Wilson mod 7/28/02 */ +#ifdef TEST + +#ifndef exit /* Pete Wilson mod 7/28/02 */ + int exit(int); /* Pete Wilson mod 7/28/02 */ +#endif /* Pete Wilson mod 7/28/02 */ + +int +main (argc, argv) + int argc; + char **argv; +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == -1) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Master/getopt.h Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,191 @@ +/* from http://www.pwilson.net/getopt.html */ + +/* getopt.h */ +/* Declarations for getopt. + Copyright (C) 1989-1994, 1996-1999, 2001 Free Software + Foundation, Inc. This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute + it and/or modify it under the terms of the GNU Lesser + General Public License as published by the Free Software + Foundation; either version 2.1 of the License, or + (at your option) any later version. + + The GNU C Library is distributed in the hope that it will + be useful, but WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A + PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with the GNU C Library; if not, write + to the Free Software Foundation, Inc., 59 Temple Place, + Suite 330, Boston, MA 02111-1307 USA. */ + + + + + +#ifndef _GETOPT_H + +#ifndef __need_getopt +# define _GETOPT_H 1 +#endif + +/* If __GNU_LIBRARY__ is not already defined, either we are being used + standalone, or this is the first header included in the source file. + If we are being used with glibc, we need to include <features.h>, but + that does not exist if we are standalone. So: if __GNU_LIBRARY__ is + not defined, include <ctype.h>, which will pull in <features.h> for us + if it's from glibc. (Why ctype.h? It's guaranteed to exist and it + doesn't flood the namespace with stuff the way some other headers do.) */ +#if !defined __GNU_LIBRARY__ +# include <ctype.h> +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message `getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +#ifndef __need_getopt +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of `struct option' terminated by an element containing a name which is + zero. + + The field `has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field `flag' is not NULL, it points to a variable that is set + to the value given in the field `val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an `int' to + a compiled-in constant, such as set a value from `optarg', set the + option's `flag' field to zero and its `val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero `flag' field, `getopt' + returns the contents of the `val' field. */ + +struct option +{ +# if (defined __STDC__ && __STDC__) || defined __cplusplus + const char *name; +# else + char *name; +# endif + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the `has_arg' field of `struct option'. */ + +# define no_argument 0 +# define required_argument 1 +# define optional_argument 2 +#endif /* need getopt */ + + +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. + + Return the option character from OPTS just read. Return -1 when + there are no more options. For unrecognized options, or options + missing arguments, `optopt' is set to the option letter, and '?' is + returned. + + The OPTS string is a list of characters which are recognized option + letters, optionally followed by colons, specifying that that letter + takes an argument, to be placed in `optarg'. + + If a letter in OPTS is followed by two colons, its argument is + optional. This behavior is specific to the GNU `getopt'. + + The argument `--' causes premature termination of argument + scanning, explicitly telling `getopt' that there are no more + options. + + If OPTS begins with `--', then non-option arguments are treated as + arguments to the option '\0'. This behavior is specific to the GNU + `getopt'. */ + +#if (defined __STDC__ && __STDC__) || defined __cplusplus +# ifdef __GNU_LIBRARY__ +/* Many other libraries have conflicting prototypes for getopt, with + differences in the consts, in stdlib.h. To avoid compilation + errors, only prototype getopt for the GNU C library. */ +extern int getopt (int ___argc, char *const *___argv, const char *__shortopts); +# else /* not __GNU_LIBRARY__ */ +extern int getopt (); +# endif /* __GNU_LIBRARY__ */ + +# ifndef __need_getopt +extern int getopt_long (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind); +extern int getopt_long_only (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind); + +/* Internal only. Users should not call this directly. */ +extern int _getopt_internal (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only); +# endif +#else /* not __STDC__ */ +extern int getopt (); +# ifndef __need_getopt +extern int getopt_long (); +extern int getopt_long_only (); + +extern int _getopt_internal (); +# endif +#endif /* __STDC__ */ + +#ifdef __cplusplus +} +#endif + +/* Make sure we later can get all the definitions and declarations. */ +#undef __need_getopt + +#endif /* getopt.h */ +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/.cvsignore Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,8 @@ +Makefile +TestMasterSlave +result.txt +TestMasterSlave.exe +TestMasterSalve.vcproj.KONG.edouard.user +Release +*.depend +DS401_Slave_Gui
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/CallBack.cpp Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,80 @@ +/* +This file is part of CanFestival, a library implementing CanOpen Stack. + +Copyright (C): Edouard TISSERANT and Francis DUPIN + +See COPYING file for copyrights details. + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +#include <wx/wxprec.h> +#include <wx/wx.h> +#include <wx/textctrl.h> +#include <iostream> + +#include "CallBack.h" +#include "main.h" +extern "C" + { + #include "ObjDict.h" + } + + +extern wxTextCtrl *textLog; + +/*****************************************************************************/ +void Call_heartbeatError(UNS8 heartbeatID) +{ + *textLog << wxT("HeartbeatError\n"); +} + +void Call_initialisation() +{ + *textLog << wxT("Initialisation\n"); +} + +void Call_preOperational() +{ + *textLog << wxT("PreOperational\n"); +} + +void Call_operational() +{ + *textLog << wxT("Operational\n"); +} + +void Call_stopped() +{ + *textLog << wxT("Stopped\n"); +} + +void Call_post_sync() +{ + *textLog << wxT("Post_sync\n"); + printf("POST SYNC:\n"); + printf(" Write_Outputs: %x \n Analogue_Output1: %d \n Analogue_Output2: %d \n", Write_Outputs_8_Bit[0], Write_Analogue_Output_16_Bit[0], Write_Analogue_Output_16_Bit[1]); + printf(" Read_Input: %x \n Analogue_Input1: %d \n Analogue_Input2: %d \n", Read_Inputs_8_Bit[0], Read_Analogue_Input_16_Bit[0], Read_Analogue_Input_16_Bit[1]); +} + +void Call_post_TPDO() +{ + *textLog << wxT("Post_TPDO\n"); +} + +void Call_storeODSubIndex(UNS16 wIndex, UNS8 bSubindex) +{ + printf("StoreODSubIndex : %4.4x %2.2x\n", wIndex, bSubindex); + *textLog << wxT("StoreODSubIndex :\n"); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/CallBack.h Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,22 @@ +#ifndef CALLBACK_H_ +#define CALLBACK_H_ + +extern "C" + { + #include "ObjDict.h" + } + +void Call_heartbeatError(UNS8); + +UNS8 Call_canSend(Message *); + +void Call_initialisation(void); +void Call_preOperational(void); +void Call_operational(void); +void Call_stopped(void); + +void Call_post_sync(void); +void Call_post_TPDO(void); +void Call_storeODSubIndex(UNS16 wIndex, UNS8 bSubindex); + +#endif /*CALLBACK_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/Makefile.in Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,101 @@ +#! gmake + +# +# Copyright (C) 2006 Laurent Bessard +# +# This file is part of canfestival, a library implementing the canopen +# stack +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +CC = SUB_CC +OPT_CFLAGS = -O2 +CFLAGS = SUB_OPT_CFLAGS +PROG_CFLAGS = SUB_PROG_CFLAGS +EXE_CFLAGS = SUB_EXE_CFLAGS +OS_NAME = SUB_OS_NAME +ARCH_NAME = SUB_ARCH_NAME +PREFIX = SUB_PREFIX +TARGET = SUB_TARGET +CAN_DRIVER = SUB_CAN_DRIVER +TIMERS_DRIVER = SUB_TIMERS_DRIVER + + +# DĆ©termine le nom du fichier exĆ©cutable. +EXEC = main +# DĆ©termine la liste des fichiers sources. +SRCS = $(wildcard *.cpp) +# DĆ©termine le nom du fichier qui contiendra les dĆ©pendances. +DEPFILE = .depend +# Construit la liste des fichiers temporaires Ć partir de la liste des fichiers +# sources. + +CPP_OBJS = $(SRCS:%.cpp=%.o) + + +INCLUDES = -I../../include -I../../include/$(TARGET) -I../../include/$(CAN_DRIVER) -I../../include/$(TIMERS_DRIVER) + +OBJS = ObjDict.o ../../src/libcanfestival.a ../../drivers/$(TARGET)/libcanfestival_$(TARGET).a + +ifeq ($(TIMERS_DRIVER),timers_xeno) + PROGDEFINES = -DUSE_XENO +endif + +all: DS401_Slave_Gui + +../../drivers/$(TARGET)/libcanfestival_$(TARGET).a: + $(MAKE) -C ../../drivers/$(TARGET) libcanfestival_$(TARGET).a + + +DS401_Slave_Gui: ObjDict.c $(OBJS) $(CPP_OBJS) + $(CC) $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) `wx-config --libs` $(OBJS) $(CPP_OBJS) $(EXE_CFLAGS) -o $@ + +%o: %c + $(CC) -c $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) $< -o $@ + +ObjDict.c: ObjDict.od + $(MAKE) -C ../../objdictgen gnosis + python ../../objdictgen/objdictgen.py ObjDict.od ObjDict.c + +.cpp.o: + g++ -c $(CFLAGS) $(PROG_CFLAGS) ${PROGDEFINES} $(INCLUDES) `wx-config --cxxflags` $< -o $@ + +clean: + rm -f $(MASTER_OBJS) + rm -f DS401_Slave_Gui + rm -f *~ *.o \#* + +mrproper: clean + rm -f ObjDict.c + rm -f ObjDict.h + $(RM) $(EXEC) $(DEPEND_FILE) + +install: DS401_Slave_Gui + mkdir -p $(PREFIX)/bin/ + cp $< $(PREFIX)/bin/ + +uninstall: + rm -f $(PREFIX)/bin/DS401_Slave_Gui + +$(EXEC): $(OBJS) + g++ $(OBJS) `wx-config --libs` -o $(EXEC) + +-include $(DEPFILE) + + + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/ObjDict.c Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,709 @@ + +/* File generated by gen_cfile.py. Should not be modified. */ + +#include "ObjDict.h" + +/**************************************************************************/ +/* Declaration of the mapped variables */ +/**************************************************************************/ +UNS8 Read_Inputs_8_Bit[] = /* Mapped at index 0x6000, subindex 0x01 - 0x01 */ + { + 0x0 /* 0 */ + }; +UNS8 Polarity_Input_8_Bit[] = /* Mapped at index 0x6002, subindex 0x01 - 0x01 */ + { + 0x0 /* 0 */ + }; +UNS8 Write_Outputs_8_Bit[] = /* Mapped at index 0x6200, subindex 0x01 - 0x01 */ + { + 0x0 /* 0 */ + }; +UNS8 Change_Polarity_Outputs_8_Bit[] = /* Mapped at index 0x6202, subindex 0x01 - 0x01 */ + { + 0x0 /* 0 */ + }; +UNS8 Error_Mode_Outputs_8_Bit[] = /* Mapped at index 0x6206, subindex 0x01 - 0x01 */ + { + 0x0 /* 0 */ + }; +UNS8 Error_Value_Outputs_8_Bit[] = /* Mapped at index 0x6207, subindex 0x01 - 0x01 */ + { + 0x0 /* 0 */ + }; +INTEGER16 Read_Analogue_Input_16_Bit[] = /* Mapped at index 0x6401, subindex 0x01 - 0x08 */ + { + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0 /* 0 */ + }; +INTEGER16 Write_Analogue_Output_16_Bit[] = /* Mapped at index 0x6411, subindex 0x01 - 0x04 */ + { + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0 /* 0 */ + }; +UNS8 Analogue_Input_Global_Interrupt_Enable = 0x0; /* Mapped at index 0x6423, subindex 0x00 */ +UNS32 Analogue_Input_Interrupt_Delta_Unsigned[] = /* Mapped at index 0x6426, subindex 0x01 - 0x08 */ + { + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0 /* 0 */ + }; +UNS8 Analogue_Output_Error_Mode[] = /* Mapped at index 0x6443, subindex 0x01 - 0x04 */ + { + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0 /* 0 */ + }; +INTEGER32 Analogue_Output_Error_Value_Integer[] = /* Mapped at index 0x6444, subindex 0x01 - 0x04 */ + { + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0 /* 0 */ + }; + +/**************************************************************************/ +/* Declaration of the value range types */ +/**************************************************************************/ + +UNS32 ObjDict_valueRangeTest (UNS8 typeValue, void * value) +{ + switch (typeValue) { + } + return 0; +} + +/**************************************************************************/ +/* The node id */ +/**************************************************************************/ +/* node_id default value.*/ +UNS8 ObjDict_bDeviceNodeId = 0x40; + +/**************************************************************************/ +/* Array of message processing information */ + +const UNS8 ObjDict_iam_a_slave = 1; + +TIMER_HANDLE ObjDict_heartBeatTimers[3] = {TIMER_NONE,}; + +/* +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + + OBJECT DICTIONARY + +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ +*/ + +/* index 0x1000 : Device Type. */ + UNS32 ObjDict_obj1000 = 0xF0191; /* 983441 */ + subindex ObjDict_Index1000[] = + { + { RO, uint32, sizeof (UNS32), (void*)&ObjDict_obj1000 } + }; + +/* index 0x1001 : Error Register. */ + UNS8 ObjDict_obj1001 = 0x0; /* 0 */ + subindex ObjDict_Index1001[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_obj1001 } + }; + +/* index 0x1002 : Manufacturer Status Register. */ + UNS32 ObjDict_obj1002 = 0x0; /* 0 */ + subindex ObjDict_Index1002[] = + { + { RO, uint32, sizeof (UNS32), (void*)&ObjDict_obj1002 } + }; + +/* index 0x1005 : SYNC COB ID. */ + UNS32 ObjDict_obj1005 = 0x80; /* 128 */ + ODCallback_t ObjDict_Index1005_callbacks[] = + { + NULL, + }; + subindex ObjDict_Index1005[] = + { + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1005 } + }; + +/* index 0x1006 : Communication / Cycle Period */ + UNS32 ObjDict_obj1006 = 0x0; /* 0 */ + +/* index 0x1008 : Manufacturer Device Name. */ + UNS8 ObjDict_obj1008[10] = ""; + subindex ObjDict_Index1008[] = + { + { RO, visible_string, 0, (void*)&ObjDict_obj1008 } + }; + +/* index 0x1009 : Manufacturer Hardware Version. */ + UNS8 ObjDict_obj1009[10] = ""; + subindex ObjDict_Index1009[] = + { + { RO, visible_string, 0, (void*)&ObjDict_obj1009 } + }; + +/* index 0x100A : Manufacturer Software Version. */ + UNS8 ObjDict_obj100A[10] = ""; + subindex ObjDict_Index100A[] = + { + { RO, visible_string, 0, (void*)&ObjDict_obj100A } + }; + +/* index 0x100C : Guard Time. */ + UNS16 ObjDict_obj100C = 0x0; /* 0 */ + subindex ObjDict_Index100C[] = + { + { RW, uint16, sizeof (UNS16), (void*)&ObjDict_obj100C } + }; + +/* index 0x100D : Life Time Factor. */ + UNS8 ObjDict_obj100D = 0x0; /* 0 */ + subindex ObjDict_Index100D[] = + { + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj100D } + }; + +/* index 0x1010 : Store parameters. */ + UNS8 ObjDict_highestSubIndex_obj1010 = 1; /* number of subindex - 1*/ + UNS32 ObjDict_obj1010_Save_All_Parameters = 0x0; /* 0 */ + subindex ObjDict_Index1010[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1010 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1010_Save_All_Parameters } + }; + +/* index 0x1011 : Restore Default Parameters. */ + UNS8 ObjDict_highestSubIndex_obj1011 = 1; /* number of subindex - 1*/ + UNS32 ObjDict_obj1011_Restore_All_Default_Parameters = 0x0; /* 0 */ + subindex ObjDict_Index1011[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1011 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1011_Restore_All_Default_Parameters } + }; + +/* index 0x1016 : Consumer Heartbeat Time. */ + UNS8 ObjDict_highestSubIndex_obj1016 = 3; /* number of subindex - 1*/ + UNS32 ObjDict_obj1016[] = + { + 0x0, /* 0 */ + 0x0, /* 0 */ + 0x0 /* 0 */ + }; + subindex ObjDict_Index1016[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1016 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1016[0] }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1016[1] }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1016[2] } + }; + +/* index 0x1017 : Producer Heartbeat Time. */ + UNS16 ObjDict_obj1017 = 0x0; /* 0 */ + ODCallback_t ObjDict_Index1017_callbacks[] = + { + NULL, + }; + subindex ObjDict_Index1017[] = + { + { RW, uint16, sizeof (UNS16), (void*)&ObjDict_obj1017 } + }; + +/* index 0x1018 : Identity. */ + UNS8 ObjDict_highestSubIndex_obj1018 = 3; /* number of subindex - 1*/ + UNS32 ObjDict_obj1018_Vendor_ID = 0x175; /* 373 */ + UNS32 ObjDict_obj1018_Product_Code = 0x100000; /* 1048576 */ + UNS32 ObjDict_obj1018_Revision_Number = 0x10001; /* 65537 */ + subindex ObjDict_Index1018[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1018 }, + { RO, uint32, sizeof (UNS32), (void*)&ObjDict_obj1018_Vendor_ID }, + { RO, uint32, sizeof (UNS32), (void*)&ObjDict_obj1018_Product_Code }, + { RO, uint32, sizeof (UNS32), (void*)&ObjDict_obj1018_Revision_Number } + }; + +/* index 0x1020 : Verify Configuration. */ + UNS8 ObjDict_highestSubIndex_obj1020 = 2; /* number of subindex - 1*/ + UNS32 ObjDict_obj1020_Configuration_Date = 0x0; /* 0 */ + UNS32 ObjDict_obj1020_Configuration_Time = 0x0; /* 0 */ + subindex ObjDict_Index1020[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1020 }, + { RO, uint32, sizeof (UNS32), (void*)&ObjDict_obj1020_Configuration_Date }, + { RO, uint32, sizeof (UNS32), (void*)&ObjDict_obj1020_Configuration_Time } + }; + +/* index 0x1200 : Server SDO Parameter. */ + UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ + UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x640; /* 1600 */ + UNS32 ObjDict_obj1200_COB_ID_Server_to_Client_Transmit_SDO = 0x5C0; /* 1472 */ + subindex ObjDict_Index1200[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1200 }, + { RO, uint32, sizeof (UNS32), (void*)&ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO }, + { RO, uint32, sizeof (UNS32), (void*)&ObjDict_obj1200_COB_ID_Server_to_Client_Transmit_SDO } + }; + +/* index 0x1400 : Receive PDO 1 Parameter. */ + UNS8 ObjDict_highestSubIndex_obj1400 = 2; /* number of subindex - 1*/ + UNS32 ObjDict_obj1400_COB_ID_used_by_PDO = 0x240; /* 576 */ + UNS8 ObjDict_obj1400_Transmission_Type = 0x1; /* 1 */ + subindex ObjDict_Index1400[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1400 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1400_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1400_Transmission_Type } + }; + +/* index 0x1401 : Receive PDO 2 Parameter. */ + UNS8 ObjDict_highestSubIndex_obj1401 = 2; /* number of subindex - 1*/ + UNS32 ObjDict_obj1401_COB_ID_used_by_PDO = 0x340; /* 832 */ + UNS8 ObjDict_obj1401_Transmission_Type = 0x1; /* 1 */ + subindex ObjDict_Index1401[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1401 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1401_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1401_Transmission_Type } + }; + +/* index 0x1402 : Receive PDO 3 Parameter. */ + UNS8 ObjDict_highestSubIndex_obj1402 = 2; /* number of subindex - 1*/ + UNS32 ObjDict_obj1402_COB_ID_used_by_PDO = 0x80000440; /* 2147484736 */ + UNS8 ObjDict_obj1402_Transmission_Type = 0x1; /* 1 */ + subindex ObjDict_Index1402[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1402 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1402_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1402_Transmission_Type } + }; + +/* index 0x1403 : Receive PDO 4 Parameter. */ + UNS8 ObjDict_highestSubIndex_obj1403 = 2; /* number of subindex - 1*/ + UNS32 ObjDict_obj1403_COB_ID_used_by_PDO = 0x80000540; /* 2147484992 */ + UNS8 ObjDict_obj1403_Transmission_Type = 0x1; /* 1 */ + subindex ObjDict_Index1403[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1403 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1403_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1403_Transmission_Type } + }; + +/* index 0x1600 : Receive PDO 1 Mapping. */ + UNS8 ObjDict_highestSubIndex_obj1600 = 1; /* number of subindex - 1*/ + UNS32 ObjDict_obj1600[] = + { + 0x62000108 /* 1644167432 */ + }; + subindex ObjDict_Index1600[] = + { + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1600 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1600[0] } + }; + +/* index 0x1601 : Receive PDO 2 Mapping. */ + UNS8 ObjDict_highestSubIndex_obj1601 = 4; /* number of subindex - 1*/ + UNS32 ObjDict_obj1601[] = + { + 0x64110110, /* 1678835984 */ + 0x64110210, /* 1678836240 */ + 0x64110310, /* 1678836496 */ + 0x64110410 /* 1678836752 */ + }; + subindex ObjDict_Index1601[] = + { + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1601 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1601[0] }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1601[1] }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1601[2] }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1601[3] } + }; + +/* index 0x1800 : Transmit PDO 1 Parameter. */ + UNS8 ObjDict_highestSubIndex_obj1800 = 5; /* number of subindex - 1*/ + UNS32 ObjDict_obj1800_COB_ID_used_by_PDO = 0x1C0; /* 448 */ + UNS8 ObjDict_obj1800_Transmission_Type = 0x1; /* 1 */ + UNS16 ObjDict_obj1800_Inhibit_Time = 0x0; /* 0 */ + UNS8 ObjDict_obj1800_Compatibility_Entry = 0x0; /* 0 */ + UNS16 ObjDict_obj1800_Event_Timer = 0x0; /* 0 */ + subindex ObjDict_Index1800[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1800 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1800_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1800_Transmission_Type }, + { RW, uint16, sizeof (UNS16), (void*)&ObjDict_obj1800_Inhibit_Time }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1800_Compatibility_Entry }, + { RW, uint16, sizeof (UNS16), (void*)&ObjDict_obj1800_Event_Timer } + }; + +/* index 0x1801 : Transmit PDO 2 Parameter. */ + UNS8 ObjDict_highestSubIndex_obj1801 = 5; /* number of subindex - 1*/ + UNS32 ObjDict_obj1801_COB_ID_used_by_PDO = 0x2C0; /* 704 */ + UNS8 ObjDict_obj1801_Transmission_Type = 0x1; /* 1 */ + UNS16 ObjDict_obj1801_Inhibit_Time = 0x0; /* 0 */ + UNS8 ObjDict_obj1801_Compatibility_Entry = 0x0; /* 0 */ + UNS16 ObjDict_obj1801_Event_Timer = 0x0; /* 0 */ + subindex ObjDict_Index1801[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1801 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1801_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1801_Transmission_Type }, + { RW, uint16, sizeof (UNS16), (void*)&ObjDict_obj1801_Inhibit_Time }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1801_Compatibility_Entry }, + { RW, uint16, sizeof (UNS16), (void*)&ObjDict_obj1801_Event_Timer } + }; + +/* index 0x1802 : Transmit PDO 3 Parameter. */ + UNS8 ObjDict_highestSubIndex_obj1802 = 5; /* number of subindex - 1*/ + UNS32 ObjDict_obj1802_COB_ID_used_by_PDO = 0x3C0; /* 960 */ + UNS8 ObjDict_obj1802_Transmission_Type = 0x1; /* 1 */ + UNS16 ObjDict_obj1802_Inhibit_Time = 0x0; /* 0 */ + UNS8 ObjDict_obj1802_Compatibility_Entry = 0x0; /* 0 */ + UNS16 ObjDict_obj1802_Event_Timer = 0x0; /* 0 */ + subindex ObjDict_Index1802[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1802 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1802_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1802_Transmission_Type }, + { RW, uint16, sizeof (UNS16), (void*)&ObjDict_obj1802_Inhibit_Time }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1802_Compatibility_Entry }, + { RW, uint16, sizeof (UNS16), (void*)&ObjDict_obj1802_Event_Timer } + }; + +/* index 0x1803 : Transmit PDO 4 Parameter. */ + UNS8 ObjDict_highestSubIndex_obj1803 = 5; /* number of subindex - 1*/ + UNS32 ObjDict_obj1803_COB_ID_used_by_PDO = 0x800004C0; /* 2147484864 */ + UNS8 ObjDict_obj1803_Transmission_Type = 0x1; /* 1 */ + UNS16 ObjDict_obj1803_Inhibit_Time = 0x0; /* 0 */ + UNS8 ObjDict_obj1803_Compatibility_Entry = 0x0; /* 0 */ + UNS16 ObjDict_obj1803_Event_Timer = 0x0; /* 0 */ + subindex ObjDict_Index1803[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1803 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1803_COB_ID_used_by_PDO }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1803_Transmission_Type }, + { RW, uint16, sizeof (UNS16), (void*)&ObjDict_obj1803_Inhibit_Time }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1803_Compatibility_Entry }, + { RW, uint16, sizeof (UNS16), (void*)&ObjDict_obj1803_Event_Timer } + }; + +/* index 0x1A00 : Transmit PDO 1 Mapping. */ + UNS8 ObjDict_highestSubIndex_obj1A00 = 1; /* number of subindex - 1*/ + UNS32 ObjDict_obj1A00[] = + { + 0x60000108 /* 1610613000 */ + }; + subindex ObjDict_Index1A00[] = + { + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1A00 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1A00[0] } + }; + +/* index 0x1A01 : Transmit PDO 2 Mapping. */ + UNS8 ObjDict_highestSubIndex_obj1A01 = 4; /* number of subindex - 1*/ + UNS32 ObjDict_obj1A01[] = + { + 0x64010110, /* 1677787408 */ + 0x64010210, /* 1677787664 */ + 0x64010310, /* 1677787920 */ + 0x64010410 /* 1677788176 */ + }; + subindex ObjDict_Index1A01[] = + { + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1A01 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1A01[0] }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1A01[1] }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1A01[2] }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1A01[3] } + }; + +/* index 0x1A02 : Transmit PDO 3 Mapping. */ + UNS8 ObjDict_highestSubIndex_obj1A02 = 4; /* number of subindex - 1*/ + UNS32 ObjDict_obj1A02[] = + { + 0x64010510, /* 1677788432 */ + 0x64010610, /* 1677788688 */ + 0x64010710, /* 1677788944 */ + 0x64010810 /* 1677789200 */ + }; + subindex ObjDict_Index1A02[] = + { + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1A02 }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1A02[0] }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1A02[1] }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1A02[2] }, + { RW, uint32, sizeof (UNS32), (void*)&ObjDict_obj1A02[3] } + }; + +/* index 0x1F50 : Download Program Data. */ + UNS8 ObjDict_highestSubIndex_obj1F50 = 3; /* number of subindex - 1*/ + UNS8 ObjDict_obj1F50_Compatibility_Entry = 0x0; /* 0 */ + UNS8 ObjDict_obj1F50_Compatibility = 0x0; /* 0 */ + UNS8* ObjDict_obj1F50_Download_Program_Data_HW_Settings = ""; + subindex ObjDict_Index1F50[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj1F50 }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1F50_Compatibility_Entry }, + { RW, uint8, sizeof (UNS8), (void*)&ObjDict_obj1F50_Compatibility }, + { RW, domain, 0, (void*)&ObjDict_obj1F50_Download_Program_Data_HW_Settings } + }; + +/* index 0x6000 : Mapped variable Read Inputs 8 Bit */ + UNS8 ObjDict_highestSubIndex_obj6000 = 1; /* number of subindex - 1*/ + subindex ObjDict_Index6000[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj6000 }, + { RO, uint8, sizeof (UNS8), (void*)&Read_Inputs_8_Bit[0] } + }; + +/* index 0x6002 : Mapped variable Polarity Input 8 Bit */ + UNS8 ObjDict_highestSubIndex_obj6002 = 1; /* number of subindex - 1*/ + subindex ObjDict_Index6002[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj6002 }, + { RW, uint8, sizeof (UNS8), (void*)&Polarity_Input_8_Bit[0] } + }; + +/* index 0x6200 : Mapped variable Write Outputs 8 Bit */ + UNS8 ObjDict_highestSubIndex_obj6200 = 1; /* number of subindex - 1*/ + subindex ObjDict_Index6200[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj6200 }, + { RW, uint8, sizeof (UNS8), (void*)&Write_Outputs_8_Bit[0] } + }; + +/* index 0x6202 : Mapped variable Change Polarity Outputs 8 Bit */ + UNS8 ObjDict_highestSubIndex_obj6202 = 1; /* number of subindex - 1*/ + subindex ObjDict_Index6202[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj6202 }, + { RW, uint8, sizeof (UNS8), (void*)&Change_Polarity_Outputs_8_Bit[0] } + }; + +/* index 0x6206 : Mapped variable Error Mode Outputs 8 Bit */ + UNS8 ObjDict_highestSubIndex_obj6206 = 1; /* number of subindex - 1*/ + subindex ObjDict_Index6206[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj6206 }, + { RW, uint8, sizeof (UNS8), (void*)&Error_Mode_Outputs_8_Bit[0] } + }; + +/* index 0x6207 : Mapped variable Error Value Outputs 8 Bit */ + UNS8 ObjDict_highestSubIndex_obj6207 = 1; /* number of subindex - 1*/ + subindex ObjDict_Index6207[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj6207 }, + { RW, uint8, sizeof (UNS8), (void*)&Error_Value_Outputs_8_Bit[0] } + }; + +/* index 0x6401 : Mapped variable Read Analogue Input 16 Bit */ + UNS8 ObjDict_highestSubIndex_obj6401 = 8; /* number of subindex - 1*/ + subindex ObjDict_Index6401[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj6401 }, + { RO, int16, sizeof (INTEGER16), (void*)&Read_Analogue_Input_16_Bit[0] }, + { RO, int16, sizeof (INTEGER16), (void*)&Read_Analogue_Input_16_Bit[1] }, + { RO, int16, sizeof (INTEGER16), (void*)&Read_Analogue_Input_16_Bit[2] }, + { RO, int16, sizeof (INTEGER16), (void*)&Read_Analogue_Input_16_Bit[3] }, + { RO, int16, sizeof (INTEGER16), (void*)&Read_Analogue_Input_16_Bit[4] }, + { RO, int16, sizeof (INTEGER16), (void*)&Read_Analogue_Input_16_Bit[5] }, + { RO, int16, sizeof (INTEGER16), (void*)&Read_Analogue_Input_16_Bit[6] }, + { RO, int16, sizeof (INTEGER16), (void*)&Read_Analogue_Input_16_Bit[7] } + }; + +/* index 0x6411 : Mapped variable Write Analogue Output 16 Bit */ + UNS8 ObjDict_highestSubIndex_obj6411 = 4; /* number of subindex - 1*/ + subindex ObjDict_Index6411[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj6411 }, + { RW, int16, sizeof (INTEGER16), (void*)&Write_Analogue_Output_16_Bit[0] }, + { RW, int16, sizeof (INTEGER16), (void*)&Write_Analogue_Output_16_Bit[1] }, + { RW, int16, sizeof (INTEGER16), (void*)&Write_Analogue_Output_16_Bit[2] }, + { RW, int16, sizeof (INTEGER16), (void*)&Write_Analogue_Output_16_Bit[3] } + }; + +/* index 0x6423 : Mapped variable Analogue Input Global Interrupt Enable */ + subindex ObjDict_Index6423[] = + { + { RW, boolean, sizeof (UNS8), (void*)&Analogue_Input_Global_Interrupt_Enable } + }; + +/* index 0x6426 : Mapped variable Analogue Input Interrupt Delta Unsigned */ + UNS8 ObjDict_highestSubIndex_obj6426 = 8; /* number of subindex - 1*/ + subindex ObjDict_Index6426[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj6426 }, + { RW, uint32, sizeof (UNS32), (void*)&Analogue_Input_Interrupt_Delta_Unsigned[0] }, + { RW, uint32, sizeof (UNS32), (void*)&Analogue_Input_Interrupt_Delta_Unsigned[1] }, + { RW, uint32, sizeof (UNS32), (void*)&Analogue_Input_Interrupt_Delta_Unsigned[2] }, + { RW, uint32, sizeof (UNS32), (void*)&Analogue_Input_Interrupt_Delta_Unsigned[3] }, + { RW, uint32, sizeof (UNS32), (void*)&Analogue_Input_Interrupt_Delta_Unsigned[4] }, + { RW, uint32, sizeof (UNS32), (void*)&Analogue_Input_Interrupt_Delta_Unsigned[5] }, + { RW, uint32, sizeof (UNS32), (void*)&Analogue_Input_Interrupt_Delta_Unsigned[6] }, + { RW, uint32, sizeof (UNS32), (void*)&Analogue_Input_Interrupt_Delta_Unsigned[7] } + }; + +/* index 0x6443 : Mapped variable Analogue Output Error Mode */ + UNS8 ObjDict_highestSubIndex_obj6443 = 4; /* number of subindex - 1*/ + subindex ObjDict_Index6443[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj6443 }, + { RW, uint8, sizeof (UNS8), (void*)&Analogue_Output_Error_Mode[0] }, + { RW, uint8, sizeof (UNS8), (void*)&Analogue_Output_Error_Mode[1] }, + { RW, uint8, sizeof (UNS8), (void*)&Analogue_Output_Error_Mode[2] }, + { RW, uint8, sizeof (UNS8), (void*)&Analogue_Output_Error_Mode[3] } + }; + +/* index 0x6444 : Mapped variable Analogue Output Error Value Integer */ + UNS8 ObjDict_highestSubIndex_obj6444 = 4; /* number of subindex - 1*/ + subindex ObjDict_Index6444[] = + { + { RO, uint8, sizeof (UNS8), (void*)&ObjDict_highestSubIndex_obj6444 }, + { RW, int32, sizeof (INTEGER32), (void*)&Analogue_Output_Error_Value_Integer[0] }, + { RW, int32, sizeof (INTEGER32), (void*)&Analogue_Output_Error_Value_Integer[1] }, + { RW, int32, sizeof (INTEGER32), (void*)&Analogue_Output_Error_Value_Integer[2] }, + { RW, int32, sizeof (INTEGER32), (void*)&Analogue_Output_Error_Value_Integer[3] } + }; + +const indextable ObjDict_objdict[] = +{ + { (subindex*)ObjDict_Index1000,sizeof(ObjDict_Index1000)/sizeof(ObjDict_Index1000[0]), 0x1000}, + { (subindex*)ObjDict_Index1001,sizeof(ObjDict_Index1001)/sizeof(ObjDict_Index1001[0]), 0x1001}, + { (subindex*)ObjDict_Index1002,sizeof(ObjDict_Index1002)/sizeof(ObjDict_Index1002[0]), 0x1002}, + { (subindex*)ObjDict_Index1005,sizeof(ObjDict_Index1005)/sizeof(ObjDict_Index1005[0]), 0x1005}, + { (subindex*)ObjDict_Index1008,sizeof(ObjDict_Index1008)/sizeof(ObjDict_Index1008[0]), 0x1008}, + { (subindex*)ObjDict_Index1009,sizeof(ObjDict_Index1009)/sizeof(ObjDict_Index1009[0]), 0x1009}, + { (subindex*)ObjDict_Index100A,sizeof(ObjDict_Index100A)/sizeof(ObjDict_Index100A[0]), 0x100A}, + { (subindex*)ObjDict_Index100C,sizeof(ObjDict_Index100C)/sizeof(ObjDict_Index100C[0]), 0x100C}, + { (subindex*)ObjDict_Index100D,sizeof(ObjDict_Index100D)/sizeof(ObjDict_Index100D[0]), 0x100D}, + { (subindex*)ObjDict_Index1010,sizeof(ObjDict_Index1010)/sizeof(ObjDict_Index1010[0]), 0x1010}, + { (subindex*)ObjDict_Index1011,sizeof(ObjDict_Index1011)/sizeof(ObjDict_Index1011[0]), 0x1011}, + { (subindex*)ObjDict_Index1016,sizeof(ObjDict_Index1016)/sizeof(ObjDict_Index1016[0]), 0x1016}, + { (subindex*)ObjDict_Index1017,sizeof(ObjDict_Index1017)/sizeof(ObjDict_Index1017[0]), 0x1017}, + { (subindex*)ObjDict_Index1018,sizeof(ObjDict_Index1018)/sizeof(ObjDict_Index1018[0]), 0x1018}, + { (subindex*)ObjDict_Index1020,sizeof(ObjDict_Index1020)/sizeof(ObjDict_Index1020[0]), 0x1020}, + { (subindex*)ObjDict_Index1200,sizeof(ObjDict_Index1200)/sizeof(ObjDict_Index1200[0]), 0x1200}, + { (subindex*)ObjDict_Index1400,sizeof(ObjDict_Index1400)/sizeof(ObjDict_Index1400[0]), 0x1400}, + { (subindex*)ObjDict_Index1401,sizeof(ObjDict_Index1401)/sizeof(ObjDict_Index1401[0]), 0x1401}, + { (subindex*)ObjDict_Index1402,sizeof(ObjDict_Index1402)/sizeof(ObjDict_Index1402[0]), 0x1402}, + { (subindex*)ObjDict_Index1403,sizeof(ObjDict_Index1403)/sizeof(ObjDict_Index1403[0]), 0x1403}, + { (subindex*)ObjDict_Index1600,sizeof(ObjDict_Index1600)/sizeof(ObjDict_Index1600[0]), 0x1600}, + { (subindex*)ObjDict_Index1601,sizeof(ObjDict_Index1601)/sizeof(ObjDict_Index1601[0]), 0x1601}, + { (subindex*)ObjDict_Index1800,sizeof(ObjDict_Index1800)/sizeof(ObjDict_Index1800[0]), 0x1800}, + { (subindex*)ObjDict_Index1801,sizeof(ObjDict_Index1801)/sizeof(ObjDict_Index1801[0]), 0x1801}, + { (subindex*)ObjDict_Index1802,sizeof(ObjDict_Index1802)/sizeof(ObjDict_Index1802[0]), 0x1802}, + { (subindex*)ObjDict_Index1803,sizeof(ObjDict_Index1803)/sizeof(ObjDict_Index1803[0]), 0x1803}, + { (subindex*)ObjDict_Index1A00,sizeof(ObjDict_Index1A00)/sizeof(ObjDict_Index1A00[0]), 0x1A00}, + { (subindex*)ObjDict_Index1A01,sizeof(ObjDict_Index1A01)/sizeof(ObjDict_Index1A01[0]), 0x1A01}, + { (subindex*)ObjDict_Index1A02,sizeof(ObjDict_Index1A02)/sizeof(ObjDict_Index1A02[0]), 0x1A02}, + { (subindex*)ObjDict_Index1F50,sizeof(ObjDict_Index1F50)/sizeof(ObjDict_Index1F50[0]), 0x1F50}, + { (subindex*)ObjDict_Index6000,sizeof(ObjDict_Index6000)/sizeof(ObjDict_Index6000[0]), 0x6000}, + { (subindex*)ObjDict_Index6002,sizeof(ObjDict_Index6002)/sizeof(ObjDict_Index6002[0]), 0x6002}, + { (subindex*)ObjDict_Index6200,sizeof(ObjDict_Index6200)/sizeof(ObjDict_Index6200[0]), 0x6200}, + { (subindex*)ObjDict_Index6202,sizeof(ObjDict_Index6202)/sizeof(ObjDict_Index6202[0]), 0x6202}, + { (subindex*)ObjDict_Index6206,sizeof(ObjDict_Index6206)/sizeof(ObjDict_Index6206[0]), 0x6206}, + { (subindex*)ObjDict_Index6207,sizeof(ObjDict_Index6207)/sizeof(ObjDict_Index6207[0]), 0x6207}, + { (subindex*)ObjDict_Index6401,sizeof(ObjDict_Index6401)/sizeof(ObjDict_Index6401[0]), 0x6401}, + { (subindex*)ObjDict_Index6411,sizeof(ObjDict_Index6411)/sizeof(ObjDict_Index6411[0]), 0x6411}, + { (subindex*)ObjDict_Index6423,sizeof(ObjDict_Index6423)/sizeof(ObjDict_Index6423[0]), 0x6423}, + { (subindex*)ObjDict_Index6426,sizeof(ObjDict_Index6426)/sizeof(ObjDict_Index6426[0]), 0x6426}, + { (subindex*)ObjDict_Index6443,sizeof(ObjDict_Index6443)/sizeof(ObjDict_Index6443[0]), 0x6443}, + { (subindex*)ObjDict_Index6444,sizeof(ObjDict_Index6444)/sizeof(ObjDict_Index6444[0]), 0x6444}, +}; + +const indextable * ObjDict_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCallback_t **callbacks) +{ + int i; + *callbacks = NULL; + switch(wIndex){ + case 0x1000: i = 0;break; + case 0x1001: i = 1;break; + case 0x1002: i = 2;break; + case 0x1005: i = 3;*callbacks = ObjDict_Index1005_callbacks; break; + case 0x1008: i = 4;break; + case 0x1009: i = 5;break; + case 0x100A: i = 6;break; + case 0x100C: i = 7;break; + case 0x100D: i = 8;break; + case 0x1010: i = 9;break; + case 0x1011: i = 10;break; + case 0x1016: i = 11;break; + case 0x1017: i = 12;*callbacks = ObjDict_Index1017_callbacks; break; + case 0x1018: i = 13;break; + case 0x1020: i = 14;break; + case 0x1200: i = 15;break; + case 0x1400: i = 16;break; + case 0x1401: i = 17;break; + case 0x1402: i = 18;break; + case 0x1403: i = 19;break; + case 0x1600: i = 20;break; + case 0x1601: i = 21;break; + case 0x1800: i = 22;break; + case 0x1801: i = 23;break; + case 0x1802: i = 24;break; + case 0x1803: i = 25;break; + case 0x1A00: i = 26;break; + case 0x1A01: i = 27;break; + case 0x1A02: i = 28;break; + case 0x1F50: i = 29;break; + case 0x6000: i = 30;break; + case 0x6002: i = 31;break; + case 0x6200: i = 32;break; + case 0x6202: i = 33;break; + case 0x6206: i = 34;break; + case 0x6207: i = 35;break; + case 0x6401: i = 36;break; + case 0x6411: i = 37;break; + case 0x6423: i = 38;break; + case 0x6426: i = 39;break; + case 0x6443: i = 40;break; + case 0x6444: i = 41;break; + default: + *errorCode = OD_NO_SUCH_OBJECT; + return NULL; + } + *errorCode = OD_SUCCESSFUL; + return &ObjDict_objdict[i]; +} + +/* + * To count at which received SYNC a PDO must be sent. + * Even if no pdoTransmit are defined, at least one entry is computed + * for compilations issues. + */ +s_PDO_status ObjDict_PDO_status[4] = {s_PDO_staus_Initializer,s_PDO_staus_Initializer,s_PDO_staus_Initializer,s_PDO_staus_Initializer}; + +quick_index ObjDict_firstIndex = { + 15, /* SDO_SVR */ + 0, /* SDO_CLT */ + 16, /* PDO_RCV */ + 20, /* PDO_RCV_MAP */ + 22, /* PDO_TRS */ + 26 /* PDO_TRS_MAP */ +}; + +quick_index ObjDict_lastIndex = { + 15, /* SDO_SVR */ + 0, /* SDO_CLT */ + 19, /* PDO_RCV */ + 21, /* PDO_RCV_MAP */ + 25, /* PDO_TRS */ + 28 /* PDO_TRS_MAP */ +}; + +UNS16 ObjDict_ObjdictSize = sizeof(ObjDict_objdict)/sizeof(ObjDict_objdict[0]); + +CO_Data ObjDict_Data = CANOPEN_NODE_DATA_INITIALIZER(ObjDict); +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/ObjDict.h Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,28 @@ + +/* File generated by gen_cfile.py. Should not be modified. */ + +#ifndef OBJDICT_H +#define OBJDICT_H + +#include "data.h" + +/* Prototypes of function provided by object dictionnary */ +UNS32 ObjDict_valueRangeTest (UNS8 typeValue, void * value); +const indextable * ObjDict_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCallback_t **callbacks); + +/* Master node data struct */ +extern CO_Data ObjDict_Data; +extern UNS8 Read_Inputs_8_Bit[1]; /* Mapped at index 0x6000, subindex 0x01 - 0x01 */ +extern UNS8 Polarity_Input_8_Bit[1]; /* Mapped at index 0x6002, subindex 0x01 - 0x01 */ +extern UNS8 Write_Outputs_8_Bit[1]; /* Mapped at index 0x6200, subindex 0x01 - 0x01 */ +extern UNS8 Change_Polarity_Outputs_8_Bit[1]; /* Mapped at index 0x6202, subindex 0x01 - 0x01 */ +extern UNS8 Error_Mode_Outputs_8_Bit[1]; /* Mapped at index 0x6206, subindex 0x01 - 0x01 */ +extern UNS8 Error_Value_Outputs_8_Bit[1]; /* Mapped at index 0x6207, subindex 0x01 - 0x01 */ +extern INTEGER16 Read_Analogue_Input_16_Bit[8]; /* Mapped at index 0x6401, subindex 0x01 - 0x08 */ +extern INTEGER16 Write_Analogue_Output_16_Bit[4]; /* Mapped at index 0x6411, subindex 0x01 - 0x04 */ +extern UNS8 Analogue_Input_Global_Interrupt_Enable; /* Mapped at index 0x6423, subindex 0x00*/ +extern UNS32 Analogue_Input_Interrupt_Delta_Unsigned[8]; /* Mapped at index 0x6426, subindex 0x01 - 0x08 */ +extern UNS8 Analogue_Output_Error_Mode[4]; /* Mapped at index 0x6443, subindex 0x01 - 0x04 */ +extern INTEGER32 Analogue_Output_Error_Value_Integer[4]; /* Mapped at index 0x6444, subindex 0x01 - 0x04 */ + +#endif // OBJDICT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/ObjDict.od Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,5430 @@ +<?xml version="1.0"?> +<!DOCTYPE PyObject SYSTEM "PyObjects.dtd"> +<PyObject module="node" class="Node" id="159620140"> +<attr name="Profile" type="dict" id="160667820" > + <entry> + <key type="numeric" value="24576" /> + <val type="dict" id="159779940" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159633388" > + <item type="dict" id="160570740" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 8 bit" /> + </entry> + </item> + <item type="dict" id="160597236" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Inputs 0x%X to 0x%X[(sub*8-7,sub*8)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Inputs 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24832" /> + <val type="dict" id="160569244" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159631948" > + <item type="dict" id="160668500" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 16 bit" /> + </entry> + </item> + <item type="dict" id="160617852" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="6" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Inputs 0x%X to 0x%X[(sub*16-15,sub*16)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Inputs 16 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24578" /> + <val type="dict" id="159743076" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159633196" > + <item type="dict" id="160560236" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 8 bit" /> + </entry> + </item> + <item type="dict" id="160668636" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Polarity Input 0x%X to 0x%X[(sub*8-7,sub*8)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Polarity Input 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24579" /> + <val type="dict" id="159747308" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159631532" > + <item type="dict" id="160677932" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 8 bit" /> + </entry> + </item> + <item type="dict" id="159717548" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Constant Input 0x%X to 0x%X[(sub*8-7,sub*8)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Constant Input 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25604" /> + <val type="dict" id="160576756" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159630252" > + <item type="dict" id="159748820" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Input" /> + </entry> + </item> + <item type="dict" id="160555188" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="17" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Manufacturer specific Analogue Input" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24581" /> + <val type="dict" id="160620164" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160601004" > + <item type="dict" id="160620028" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Global Interrupt Enable Digital" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Global Interrupt Enable Digital" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24582" /> + <val type="dict" id="160619756" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159633004" > + <item type="dict" id="160618260" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 8 bit" /> + </entry> + </item> + <item type="dict" id="159666628" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Any Change 0x%X to 0x%X[(sub*8-7,sub*8)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask Any Change 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24583" /> + <val type="dict" id="159667852" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159739756" > + <item type="dict" id="159666356" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 8 bit" /> + </entry> + </item> + <item type="dict" id="159666492" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Low to High 0x%X to 0x%X[(sub*8-7,sub*8)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask Low to High 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24584" /> + <val type="dict" id="159665932" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160701836" > + <item type="dict" id="159666220" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 8 bit" /> + </entry> + </item> + <item type="dict" id="159665660" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt High to Low 0x%X to 0x%X[(sub*8-7,sub*8)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask High to Low 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24834" /> + <val type="dict" id="159665796" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160701580" > + <item type="dict" id="159665388" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 16 bit" /> + </entry> + </item> + <item type="dict" id="159665524" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="6" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Polarity Input 0x%X to 0x%X[(sub*16-15,sub*16)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Polarity Input 16 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25616" /> + <val type="dict" id="159665116" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160564620" > + <item type="dict" id="159665252" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Input 8 Bit" /> + </entry> + </item> + <item type="dict" id="159664844" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="2" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Analogue Output 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25617" /> + <val type="dict" id="159664980" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160563884" > + <item type="dict" id="159664572" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Input 16 Bit" /> + </entry> + </item> + <item type="dict" id="159664708" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Analogue Output 16 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25618" /> + <val type="dict" id="159664300" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160563532" > + <item type="dict" id="159664164" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Outputs 32 Bit" /> + </entry> + </item> + <item type="dict" id="159664028" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="4" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Analogue Output 32 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24835" /> + <val type="dict" id="160533876" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160564300" > + <item type="dict" id="148728660" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 16 bit" /> + </entry> + </item> + <item type="dict" id="160577980" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="6" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Constant Input 0x%X to 0x%X[(sub*16-15,sub*16)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Constant Input 16 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25620" /> + <val type="dict" id="160578116" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160565356" > + <item type="dict" id="160577436" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Outputs" /> + </entry> + </item> + <item type="dict" id="160577572" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="17" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Manufacturer specific Analogue Output" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25088" /> + <val type="dict" id="159763556" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160566956" > + <item type="dict" id="160533196" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 8 Bit" /> + </entry> + </item> + <item type="dict" id="160616764" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Outputs 0x%X to 0x%X[(sub*8-7,sub*8)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Outputs 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25603" /> + <val type="dict" id="160569380" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160572780" > + <item type="dict" id="160540300" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Input Float" /> + </entry> + </item> + <item type="dict" id="160528284" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Analogue Input Float" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25344" /> + <val type="dict" id="160550668" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159617900" > + <item type="dict" id="160568156" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 16 Bit" /> + </entry> + </item> + <item type="dict" id="160539076" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="6" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Outputs 0x%X to 0x%X[(sub*16-15,sub*16)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Outputs 16 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24608" /> + <val type="dict" id="160571012" > + <entry> + <key type="string" value="incr" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="15" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159618796" > + <item type="dict" id="160570196" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 1 bit" /> + </entry> + </item> + <item type="dict" id="160598188" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Single Input 0x%X[((idx-1)*128+sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="128" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Input Bit 0x%X to 0x%X[(idx*128-127,idx*128)]" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25633" /> + <val type="dict" id="160548900" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159630444" > + <item type="dict" id="160570604" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160529508" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analog Inputs 0x%X[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Trigger Selection" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24866" /> + <val type="dict" id="160550396" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159619468" > + <item type="dict" id="160571148" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 32 bit" /> + </entry> + </item> + <item type="dict" id="160568020" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Polarity Input 0x%X to 0x%X[(sub*32-31,sub*32)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Polarity Input 32 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24867" /> + <val type="dict" id="160598596" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159617740" > + <item type="dict" id="159747852" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 32 bit" /> + </entry> + </item> + <item type="dict" id="160598324" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Polarity Input 0x%X to 0x%X[(sub*32-31,sub*32)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Constant Input 32 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25636" /> + <val type="dict" id="159749500" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159620684" > + <item type="dict" id="160569108" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160596692" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="4" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Interrupt Upper Limit Interger" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24838" /> + <val type="dict" id="160599140" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159618380" > + <item type="dict" id="148738772" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 16 bit" /> + </entry> + </item> + <item type="dict" id="160532244" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="6" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt High to Low 0x%X to 0x%X[(sub*16-15,sub*16)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask High to Low 16 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25638" /> + <val type="dict" id="148741900" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159617228" > + <item type="dict" id="160578524" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160555052" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Interrupt Delta Unsigned" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25383" /> + <val type="dict" id="160555324" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159609388" > + <item type="dict" id="159659388" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 32 Bit" /> + </entry> + </item> + <item type="dict" id="160608436" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Value Outputs 0x%X to 0x%X[(sub*32-31,sub*32)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Value Outputs 32 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25640" /> + <val type="dict" id="160608572" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159620300" > + <item type="dict" id="160608300" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="159673988" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Interrupt Positive Delta Unsigned" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25641" /> + <val type="dict" id="159648052" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="148732204" > + <item type="dict" id="159741988" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160533740" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Interrupt Upper Limit Float" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25642" /> + <val type="dict" id="159715644" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159630764" > + <item type="dict" id="159717820" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="159716596" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Interrupt Lower Limit Float" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25643" /> + <val type="dict" id="159716052" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159592076" > + <item type="dict" id="160586716" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160586988" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Interrupt Delta Float" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25644" /> + <val type="dict" id="160586852" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159633132" > + <item type="dict" id="160583996" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160583724" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Interrupt Negative Delta Float" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25645" /> + <val type="dict" id="160583860" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159589644" > + <item type="dict" id="160587396" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160587532" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Interrupt Positive Delta Float" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25646" /> + <val type="dict" id="160586444" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159590092" > + <item type="dict" id="160586580" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160587124" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Offset Float" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25647" /> + <val type="dict" id="160586172" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159597644" > + <item type="dict" id="160586308" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160586036" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Scaling Float" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24624" /> + <val type="dict" id="160585900" > + <entry> + <key type="string" value="incr" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="15" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160545356" > + <item type="dict" id="160585764" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 1 bit" /> + </entry> + </item> + <item type="dict" id="160587260" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Polarity Input bit 0x%X[((idx-1)*128+sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="128" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Polarity Input Bit 0x%X to 0x%X[(idx*128-127,idx*128)]" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25352" /> + <val type="dict" id="159778716" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159596748" > + <item type="dict" id="160639556" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 16 Bit" /> + </entry> + </item> + <item type="dict" id="160596556" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="6" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Mask Outputs 0x%X to 0x%X[(sub*16-15,sub*16)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Mask Outputs 16 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25650" /> + <val type="dict" id="160713964" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160552108" > + <item type="dict" id="160713148" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160713284" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="4" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Scaling Integer" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25350" /> + <val type="dict" id="160721340" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160553356" > + <item type="dict" id="160721476" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 16 Bit" /> + </entry> + </item> + <item type="dict" id="160721612" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="6" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Mode Outputs 0x%X to 0x%X[(sub*16-15,sub*16)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Mode Outputs 16 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25200" /> + <val type="dict" id="160688572" > + <entry> + <key type="string" value="incr" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="15" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159598988" > + <item type="dict" id="160688708" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 1 Bit" /> + </entry> + </item> + <item type="dict" id="160688844" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Constant Outputs 0x%X[((idx-1)*128+sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="128" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Constant Outputs Lines %d to %d[(idx*128-127,idx*128)]" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25096" /> + <val type="dict" id="160713828" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160634508" > + <item type="dict" id="160713012" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 8 Bit" /> + </entry> + </item> + <item type="dict" id="160712876" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Mask Outputs 0x%X to 0x%X[(sub*8-7,sub*8)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Mask Outputs 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24632" /> + <val type="dict" id="160712468" > + <entry> + <key type="string" value="incr" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="15" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160700300" > + <item type="dict" id="160712604" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 1 bit" /> + </entry> + </item> + <item type="dict" id="160712740" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Constant Input bit 0x%X[((idx-1)*128+sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="128" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Constant Input Bit 0x%X to 0x%X[(idx*128-127,idx*128)]" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25639" /> + <val type="dict" id="160688164" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160565100" > + <item type="dict" id="160688300" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160689660" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Interrupt Negative Delta Unsigned" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24872" /> + <val type="dict" id="160688980" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160564076" > + <item type="dict" id="160689116" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 32 bit" /> + </entry> + </item> + <item type="dict" id="160687620" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt High to Low Input 0x%X to 0x%X[(sub*32-31,sub*32)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask Input High to Low 32 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25152" /> + <val type="dict" id="160711652" > + <entry> + <key type="string" value="incr" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="15" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160634092" > + <item type="dict" id="160711788" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 1 Bit" /> + </entry> + </item> + <item type="dict" id="160711924" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Outputs 0x%X[((idx-1)*128+sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="128" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Change Polarity Outputs Bit %d to %d[(idx*128-127,idx*128)]" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24864" /> + <val type="dict" id="160711244" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160633036" > + <item type="dict" id="160711380" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 32 bit" /> + </entry> + </item> + <item type="dict" id="160711516" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Input 0x%X to 0x%X[(sub*32-31,sub*32)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="128" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Input 4 Byte" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25666" /> + <val type="dict" id="160710836" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160633260" > + <item type="dict" id="160710972" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Outputs" /> + </entry> + </item> + <item type="dict" id="160711108" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output Scaling Float" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25667" /> + <val type="dict" id="160710700" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160632972" > + <item type="dict" id="160665916" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Outputs" /> + </entry> + </item> + <item type="dict" id="160666052" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Mode Analogue Output %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output Error Mode" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25668" /> + <val type="dict" id="160666188" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160632908" > + <item type="dict" id="160681604" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Outputs" /> + </entry> + </item> + <item type="dict" id="160681740" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="4" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output Error Value Integer" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25669" /> + <val type="dict" id="160681196" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160602156" > + <item type="dict" id="160681332" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Outputs" /> + </entry> + </item> + <item type="dict" id="160681468" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output Error Value Float" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25665" /> + <val type="dict" id="160680788" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160602380" > + <item type="dict" id="160680924" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Outputs" /> + </entry> + </item> + <item type="dict" id="160681060" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output Offset Float" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25648" /> + <val type="dict" id="160680380" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160552044" > + <item type="dict" id="160680516" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160680652" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input SI unit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25634" /> + <val type="dict" id="160679156" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160552204" > + <item type="dict" id="160679292" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Interrupt Source Bank" /> + </entry> + </item> + <item type="dict" id="160679428" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Source Bank 0x%X[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Interrupt Source" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25094" /> + <val type="dict" id="160679564" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160601164" > + <item type="dict" id="160679700" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 8 Bit" /> + </entry> + </item> + <item type="dict" id="160679836" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Mode Outputs 0x%X to 0x%X[(sub*8-7,sub*8)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Mode Outputs 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25378" /> + <val type="dict" id="159758236" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159707948" > + <item type="dict" id="160539484" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 32 Bit" /> + </entry> + </item> + <item type="dict" id="160528420" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Polarity Outputs 0x%X to 0x%X[(sub*32-31,sub*32)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Change Polarity Outputs 32 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25680" /> + <val type="dict" id="160678340" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160554572" > + <item type="dict" id="160678476" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Outputs" /> + </entry> + </item> + <item type="dict" id="160721204" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output SI Unit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25090" /> + <val type="dict" id="160713420" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159597004" > + <item type="dict" id="160713556" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 8 Bit" /> + </entry> + </item> + <item type="dict" id="160713692" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Change Polarity Outputs 0x%X to 0x%X[(sub*8-7,sub*8)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Change Polarity Outputs 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25635" /> + <val type="dict" id="160721748" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160553164" > + <item type="dict" id="160721884" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Global Interrupt Enable" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Global Interrupt Enable" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="1" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25601" /> + <val type="dict" id="160689796" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159598924" > + <item type="dict" id="160689932" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Input 16 Bit" /> + </entry> + </item> + <item type="dict" id="160688436" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="3" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Analogue Input 16 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25120" /> + <val type="dict" id="160722428" > + <entry> + <key type="string" value="incr" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="15" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160554028" > + <item type="dict" id="160722564" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 1 Bit" /> + </entry> + </item> + <item type="dict" id="160722700" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Outputs 0x%X[((idx-1)*128+sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="128" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Outputs Bit %d to %d[(idx*128-127,idx*128)]" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25600" /> + <val type="dict" id="160706604" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160552012" > + <item type="dict" id="160706740" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Input 8 Bit" /> + </entry> + </item> + <item type="dict" id="160706876" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="2" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Analogue Input 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25184" /> + <val type="dict" id="160708644" > + <entry> + <key type="string" value="incr" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="15" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159712204" > + <item type="dict" id="160708780" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 1 Bit" /> + </entry> + </item> + <item type="dict" id="160708916" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Value Outputs 0x%X[((idx-1)*128+sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="128" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Value Outputs Lines %d to %d[(idx*128-127,idx*128)]" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25346" /> + <val type="dict" id="160707420" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160554828" > + <item type="dict" id="160707556" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 16 Bit" /> + </entry> + </item> + <item type="dict" id="160707692" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="6" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Change Polarity Outputs 0x%X to 0x%X[(sub*16-15,sub*16)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Change Polarity Outputs 16 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25670" /> + <val type="dict" id="160707828" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160544588" > + <item type="dict" id="160707964" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Outputs" /> + </entry> + </item> + <item type="dict" id="160708100" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="4" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output Offset Integer" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25376" /> + <val type="dict" id="160708236" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160551692" > + <item type="dict" id="160708372" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 32 Bit" /> + </entry> + </item> + <item type="dict" id="160708508" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Outputs 0x%X to 0x%X[(sub*32-31,sub*32)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Output 32 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24672" /> + <val type="dict" id="160679972" > + <entry> + <key type="string" value="incr" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="15" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159739372" > + <item type="dict" id="160680108" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 1 bit" /> + </entry> + </item> + <item type="dict" id="160680244" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask Any Change Input bit 0x%X[((idx-1)*128+sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="128" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask Input Low to High Bit 0x%X to 0x%X[(idx*128-127,idx*128)]" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24656" /> + <val type="dict" id="160709052" > + <entry> + <key type="string" value="incr" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="15" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160551340" > + <item type="dict" id="160709188" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 1 bit" /> + </entry> + </item> + <item type="dict" id="160709324" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask Any Change Input bit 0x%X[((idx-1)*128+sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="128" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask Input Any Change Bit 0x%X to 0x%X[(idx*128-127,idx*128)]" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25602" /> + <val type="dict" id="160709460" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160572204" > + <item type="dict" id="160709596" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Input 32 Bit" /> + </entry> + </item> + <item type="dict" id="160709732" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="4" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Read Analogue Input 32 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25382" /> + <val type="dict" id="160707012" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160553324" > + <item type="dict" id="160707148" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 32 Bit" /> + </entry> + </item> + <item type="dict" id="160707284" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Mode Outputs 0x%X to 0x%X[(sub*32-31,sub*32)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Mode Outputs 32 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25649" /> + <val type="dict" id="160710276" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160573996" > + <item type="dict" id="160710412" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160689252" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="4" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Offset Integer" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25095" /> + <val type="dict" id="160689388" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160593100" > + <item type="dict" id="160689524" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 8 Bit" /> + </entry> + </item> + <item type="dict" id="160688028" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Value Outputs 0x%X to 0x%X[(sub*8-7,sub*8)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Value Outputs 8 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24871" /> + <val type="dict" id="160712060" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160691884" > + <item type="dict" id="160712196" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 32 bit" /> + </entry> + </item> + <item type="dict" id="160712332" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Low to High Input 0x%X to 0x%X[(sub*32-31,sub*32)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask Input Low to High 32 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24870" /> + <val type="dict" id="160709868" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160575116" > + <item type="dict" id="160710004" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 32 bit" /> + </entry> + </item> + <item type="dict" id="160710140" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Any Change Input 0x%X to 0x%X[(sub*32-31,sub*32)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask Input Any Change 32 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25351" /> + <val type="dict" id="160722020" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159599820" > + <item type="dict" id="160722156" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 16 Bit" /> + </entry> + </item> + <item type="dict" id="160722292" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="6" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Value Outputs 0x%X to 0x%X[(sub*16-15,sub*16)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Value Outputs 16 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25384" /> + <val type="dict" id="160678748" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160552588" > + <item type="dict" id="160678884" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 32 Bit" /> + </entry> + </item> + <item type="dict" id="160679020" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="7" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Mask Outputs 0x%X to 0x%X[(sub*32-31,sub*32)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Filter Mask Outputs 32 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25619" /> + <val type="dict" id="160687756" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160566828" > + <item type="dict" id="160687892" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Outputs Float" /> + </entry> + </item> + <item type="dict" id="160687212" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Write Analogue Output Float" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25168" /> + <val type="dict" id="160687348" > + <entry> + <key type="string" value="incr" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="15" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160566028" > + <item type="dict" id="160687484" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Output 1 Bit" /> + </entry> + </item> + <item type="dict" id="160686804" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Mode Outputs 0x%X[((idx-1)*128+sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="128" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Error Mode Outputs Lines %d to %d[(idx*128-127,idx*128)]" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24839" /> + <val type="dict" id="160686940" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160563948" > + <item type="dict" id="160687076" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 16 bit" /> + </entry> + </item> + <item type="dict" id="160686396" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="6" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Low to High 0x%X to 0x%X[(sub*16-15,sub*16)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask Low to High 16 Bit" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25671" /> + <val type="dict" id="160686532" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159715084" > + <item type="dict" id="160686668" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Outputs" /> + </entry> + </item> + <item type="dict" id="160686124" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="4" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Output Scaling Integer" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="25637" /> + <val type="dict" id="160686260" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="159708108" > + <item type="dict" id="160694996" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Analogue Inputs" /> + </entry> + </item> + <item type="dict" id="160695132" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="4" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input %d[(sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="254" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Analogue Input Interrupt Lower Limit Interger" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="7" /> + </entry> + </val> + </entry> + <entry> + <key type="numeric" value="24688" /> + <val type="dict" id="160695268" > + <entry> + <key type="string" value="incr" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="15" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="8" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160717676" > + <item type="dict" id="160696220" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Input 1 bit" /> + </entry> + </item> + <item type="dict" id="160696356" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="True" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="1" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask Any Change Input bit 0x%X[((idx-1)*128+sub)]" /> + </entry> + <entry> + <key type="string" value="nbmax" /> + <val type="numeric" value="128" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Interrupt Mask Input High to Low Bit 0x%X to 0x%X[(idx*128-127,idx*128)]" /> + </entry> + </val> + </entry> +</attr> +<attr name="Description" type="string" value="" /> +<attr name="Dictionary" type="dict" id="160696492" > + <entry> + <key type="numeric" value="4096" /> + <val type="numeric" value="983441" /> + </entry> + <entry> + <key type="numeric" value="4097" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="4098" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="5123" /> + <val type="list" id="160634796" > + <item type="string" value="self.ID+0x80000500" /> + <item type="numeric" value="1" /> + </val> + </entry> + <entry> + <key type="numeric" value="4101" /> + <val type="numeric" value="128" /> + </entry> + <entry> + <key type="numeric" value="24576" /> + <val type="list" id="160635052" > + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="5121" /> + <val type="list" id="160636876" > + <item type="string" value="self.ID+0x300" /> + <item type="numeric" value="1" /> + </val> + </entry> + <entry> + <key type="numeric" value="4104" /> + <val type="string" value="" /> + </entry> + <entry> + <key type="numeric" value="4105" /> + <val type="string" value="" /> + </entry> + <entry> + <key type="numeric" value="4106" /> + <val type="string" value="" /> + </entry> + <entry> + <key type="numeric" value="4108" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="4109" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="4112" /> + <val type="list" id="160636620" > + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="4113" /> + <val type="list" id="160636844" > + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="6658" /> + <val type="list" id="160636748" > + <item type="numeric" value="1677788432" /> + <item type="numeric" value="1677788688" /> + <item type="numeric" value="1677788944" /> + <item type="numeric" value="1677789200" /> + </val> + </entry> + <entry> + <key type="numeric" value="6147" /> + <val type="list" id="160718284" > + <item type="string" value="self.ID+0x80000480" /> + <item type="numeric" value="1" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="25088" /> + <val type="list" id="160718060" > + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="4119" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="4120" /> + <val type="list" id="160717356" > + <item type="numeric" value="373" /> + <item type="numeric" value="1048576" /> + <item type="numeric" value="65537" /> + </val> + </entry> + <entry> + <key type="numeric" value="4118" /> + <val type="list" id="160717196" > + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="4128" /> + <val type="list" id="160717036" > + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="25635" /> + <val type="numeric" value="0" /> + </entry> + <entry> + <key type="numeric" value="25094" /> + <val type="list" id="160716908" > + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="5120" /> + <val type="list" id="160716780" > + <item type="string" value="self.ID+0x200" /> + <item type="numeric" value="1" /> + </val> + </entry> + <entry> + <key type="numeric" value="25095" /> + <val type="list" id="160715884" > + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="6146" /> + <val type="list" id="160715020" > + <item type="string" value="self.ID+0x380" /> + <item type="numeric" value="1" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="5632" /> + <val type="list" id="160716204" > + <item type="numeric" value="1644167432" /> + </val> + </entry> + <entry> + <key type="numeric" value="24578" /> + <val type="list" id="160716076" > + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="25667" /> + <val type="list" id="160715948" > + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="25668" /> + <val type="list" id="160715820" > + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="6144" /> + <val type="list" id="160715660" > + <item type="string" value="self.ID+0x180" /> + <item type="numeric" value="1" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="8016" /> + <val type="list" id="160715468" > + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="string" value="" /> + </val> + </entry> + <entry> + <key type="numeric" value="25090" /> + <val type="list" id="160715308" > + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="5633" /> + <val type="list" id="160715180" > + <item type="numeric" value="1678835984" /> + <item type="numeric" value="1678836240" /> + <item type="numeric" value="1678836496" /> + <item type="numeric" value="1678836752" /> + </val> + </entry> + <entry> + <key type="numeric" value="6656" /> + <val type="list" id="160716364" > + <item type="numeric" value="1610613000" /> + </val> + </entry> + <entry> + <key type="numeric" value="5122" /> + <val type="list" id="160718092" > + <item type="string" value="self.ID+0x80000400" /> + <item type="numeric" value="1" /> + </val> + </entry> + <entry> + <key type="numeric" value="6145" /> + <val type="list" id="160716748" > + <item type="string" value="self.ID+0x280" /> + <item type="numeric" value="1" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="25638" /> + <val type="list" id="160718028" > + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="25617" /> + <val type="list" id="160717868" > + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="25601" /> + <val type="list" id="160717804" > + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + <item type="numeric" value="0" /> + </val> + </entry> + <entry> + <key type="numeric" value="4608" /> + <val type="list" id="160716460" > + <item type="numeric" value="1600" /> + <item type="numeric" value="1472" /> + </val> + </entry> + <entry> + <key type="numeric" value="6657" /> + <val type="list" id="160714860" > + <item type="numeric" value="1677787408" /> + <item type="numeric" value="1677787664" /> + <item type="numeric" value="1677787920" /> + <item type="numeric" value="1677788176" /> + </val> + </entry> +</attr> +<attr name="SpecificMenu" type="list" id="160714924" > + <item type="tuple" id="159587468" > + <item type="string" value="Read Input Bit" /> + <item type="list" id="160714828" > + <item type="numeric" value="24608" /> + <item type="numeric" value="24624" /> + <item type="numeric" value="24632" /> + <item type="numeric" value="24656" /> + <item type="numeric" value="24672" /> + <item type="numeric" value="24688" /> + </item> + </item> + <item type="tuple" id="159587596" > + <item type="string" value="Write Output Bit" /> + <item type="list" id="160715052" > + <item type="numeric" value="25120" /> + <item type="numeric" value="25152" /> + <item type="numeric" value="25168" /> + <item type="numeric" value="25184" /> + <item type="numeric" value="25200" /> + </item> + </item> +</attr> +<attr name="ParamsDictionary" type="dict" id="160697444" > +</attr> +<attr name="UserMapping" type="dict" id="160697580" > + <entry> + <key type="numeric" value="8016" /> + <val type="dict" id="160697716" > + <entry> + <key type="string" value="need" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="values" /> + <val type="list" id="160716236" > + <item type="dict" id="160697036" > + <entry> + <key type="string" value="access" /> + <val type="string" value="ro" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Number of Entries" /> + </entry> + </item> + <item type="dict" id="160697172" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Compatibility Entry" /> + </entry> + </item> + <item type="dict" id="160697308" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="5" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string">Compatibility</val> + </entry> + </item> + <item type="dict" id="160696628" > + <entry> + <key type="string" value="access" /> + <val type="string" value="rw" /> + </entry> + <entry> + <key type="string" value="pdo" /> + <val type="False" value="" /> + </entry> + <entry> + <key type="string" value="type" /> + <val type="numeric" value="15" /> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Download Program Data - HW Settings" /> + </entry> + </item> + </val> + </entry> + <entry> + <key type="string" value="name" /> + <val type="string" value="Download Program Data" /> + </entry> + <entry> + <key type="string" value="struct" /> + <val type="numeric" value="3" /> + </entry> + </val> + </entry> +</attr> +<attr name="DS302" type="dict" id="160696764" > +</attr> +<attr name="ProfileName" type="string" value="DS-401" /> +<attr name="Type" type="string">slave</attr> +<attr name="ID" type="numeric" value="64" /> +<attr name="Name" type="string">ObjDict</attr> +</PyObject>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/TestSlaveGui.cpp Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,133 @@ +/* +This file is part of CanFestival, a library implementing CanOpen Stack. + +Copyright (C): Edouard TISSERANT and Francis DUPIN + +See COPYING file for copyrights details. + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + + +#include <wx/wxprec.h> +#include <wx/wx.h> +#include <wx/textctrl.h> +#include <iostream> + +#if defined(WIN32) && !defined(__CYGWIN__) + #include <windows.h> + + extern "C" { + #include "getopt.h" + } + + void pause(void) + { + system("PAUSE"); + } +#else + #include <stdio.h> + #include <string.h> + #include <unistd.h> + #include <stdlib.h> + #include <signal.h> +#endif + +//#include <can_driver.h> +//#include <timers_driver.h> +extern "C" + { + #include "canfestival.h" + } +#include "CallBack.h" +#include "TestSlaveGui.h" +#include "main.h" + +extern wxTextCtrl *textLog; +extern int node_id_ext; + +UNS32 OnMasterMap1Update(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex) +{ + return 0; +} + +s_BOARD MasterBoard = {"1", "125K"}; + +#if !defined(WIN32) || defined(__CYGWIN__) +void catch_signal(int sig) +{ + signal(SIGTERM, catch_signal); + signal(SIGINT, catch_signal); + printf("Got Signal %d\n",sig); +} +#endif + +//*************************** INIT ***************************************** +void InitNodes(CO_Data* d, UNS32 id) +{ + //****************************** INITIALISATION SLAVE ******************************* + /* Defining the node Id */ + setNodeId(&ObjDict_Data, node_id_ext); + /* init */ + setState(&ObjDict_Data, Initialisation); +} + +//**************************************************************************** +//*************************** MAIN ***************************************** +//**************************************************************************** +int main_can(s_BOARD SlaveBoard, char* LibraryPath) +{ + printf("Bus name: %s Freq: %s Driver: %s\n", SlaveBoard.busname, SlaveBoard.baudrate, LibraryPath); + + #if !defined(WIN32) || defined(__CYGWIN__) + signal(SIGTERM, catch_signal); + signal(SIGINT, catch_signal); + #endif + + #ifndef NOT_USE_DYNAMIC_LOADING + LoadCanDriver(LibraryPath); + #endif + // Open CAN devices + + ObjDict_Data.heartbeatError = Call_heartbeatError; + ObjDict_Data.initialisation = Call_initialisation; + ObjDict_Data.preOperational = Call_preOperational; + ObjDict_Data.operational = Call_operational; + ObjDict_Data.stopped = Call_stopped; + ObjDict_Data.post_sync = Call_post_sync; + ObjDict_Data.post_TPDO = Call_post_TPDO; + ObjDict_Data.storeODSubIndex = Call_storeODSubIndex; + + if(!canOpen(&SlaveBoard,&ObjDict_Data)) + { + printf("Cannot open Slave Board (%s,%s)\n",SlaveBoard.busname, SlaveBoard.baudrate); + return (1); + } + // Start timer thread + //printf("nodeid slave=%x\n",node_id_ext); + StartTimerLoop(&InitNodes); + return 0; +} + +void stop_slave() +{ + StopTimerLoop(); + // Close CAN devices (and can threads) + // Stop master + setState(&ObjDict_Data, Stopped); + //canClose(&ObjDict_Data); + //canClose(&TestMaster_Data); + return; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/TestSlaveGui.h Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,9 @@ +#ifndef TESTSLAVEGUI_H_ +#define TESTSLAVEGUI_H_ + + #include "canfestival.h" + + int main_can(s_BOARD SlaveBoard, char* LibraryPath); + void stop_slave(); + +#endif /*TESTSLAVEGUI_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/TestSlaveGui.vcproj Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,252 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8,00" + Name="TestSlaveGui" + ProjectGUID="{B51A176D-5320-4534-913B-3025CED5B27E}" + Keyword="Win32Proj" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="../../Debug" + IntermediateDirectory="Debug" + ConfigurationType="1" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="../../include;../../include/win32" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="CanFestival-3.lib" + OutputFile="$(OutDir)/TestSlaveGui.exe" + LinkIncremental="2" + AdditionalLibraryDirectories="../../Debug UNICODE" + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)/TestSlaveGui.pdb" + SubSystem="1" + OptimizeForWindows98="1" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="../../Release" + IntermediateDirectory="Release" + ConfigurationType="1" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + AdditionalIncludeDirectories="../../include;../../include/win32" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + RuntimeLibrary="2" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="CanFestival-3.lib" + OutputFile="$(OutDir)/TestSlaveGui.exe" + LinkIncremental="1" + AdditionalLibraryDirectories="../../Release" + GenerateDebugInformation="true" + SubSystem="1" + OptimizeReferences="2" + EnableCOMDATFolding="2" + OptimizeForWindows98="1" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath=".\getopt.c" + > + </File> + <File + RelativePath=".\Master.c" + > + </File> + <File + RelativePath=".\Slave.c" + > + </File> + <File + RelativePath=".\TestMaster.c" + > + </File> + <File + RelativePath=".\TestMasterSlave.c" + > + </File> + <File + RelativePath=".\TestSlave.c" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath=".\getopt.h" + > + </File> + <File + RelativePath=".\Master.h" + > + </File> + <File + RelativePath=".\Slave.h" + > + </File> + <File + RelativePath=".\TestMaster.h" + > + </File> + <File + RelativePath=".\TestSlaveGui.h" + > + </File> + <File + RelativePath=".\TestSlave.h" + > + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" + > + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/getopt.c Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,1260 @@ +/* from http://www.pwilson.net/getopt.html */ + +/* Getopt for GNU. + NOTE: getopt is now part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to drepper@gnu.org + before changing it! + Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>. + Ditto for AIX 3.2 and <stdlib.h>. */ +#ifndef _NO_PROTO +# define _NO_PROTO +#endif + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if !defined __STDC__ || !__STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +# ifndef const +# define const +# endif +#endif + +#include <stdio.h> + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#define GETOPT_INTERFACE_VERSION 2 +#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 +# include <gnu-versions.h> +# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION +# define ELIDE_CODE +# endif +#endif + +#ifndef ELIDE_CODE + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +/* Don't include stdlib.h for non-GNU C libraries because some of them + contain conflicting prototypes for getopt. */ +# include <stdlib.h> +# include <unistd.h> +#endif /* GNU C library. */ + +#ifdef VMS +# include <unixlib.h> +# if HAVE_STRING_H - 0 +# include <string.h> +# endif +#endif + +#ifndef _ +/* This is for other GNU distributions with internationalized messages. */ +# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC +# include <libintl.h> +# ifndef _ +# define _(msgid) gettext (msgid) +# endif +# else +# define _(msgid) (msgid) +# endif +# if defined _LIBC && defined USE_IN_LIBIO +# include <wchar.h> +# endif +#endif + +/* This version of `getopt' appears to the caller like standard Unix `getopt' + but it behaves differently for the user, since it allows the user + to intersperse the options with the other arguments. + + As `getopt' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Setting the environment variable POSIXLY_CORRECT disables permutation. + Then the behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include "getopt.h" + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* 1003.2 says this must be 1 before any call. */ +int optind = 1; + +/* Formerly, initialization of getopt depended on optind==0, which + causes problems with re-calling getopt as programs generally don't + know that. */ + +int __getopt_initialized; + +/* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + +static char *nextchar; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using `+' as the first character + of the list of option characters. + + PERMUTE is the default. We permute the contents of ARGV as we scan, + so that eventually all the non-options are at the end. This allows options + to be given in any order, even with programs that were not written to + expect this. + + RETURN_IN_ORDER is an option available to programs that were written + to expect options and other ARGV-elements in any order and that care about + the ordering of the two. We describe each non-option ARGV-element + as if it were the argument of an option with character code 1. + Using `-' as the first character of the list of option characters + selects this mode of operation. + + The special argument `--' forces an end of option-scanning regardless + of the value of `ordering'. In the case of RETURN_IN_ORDER, only + `--' can cause `getopt' to return -1 with `optind' != ARGC. */ + +static enum +{ + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER +} ordering; + +/* Value of POSIXLY_CORRECT environment variable. */ +static char *posixly_correct; + +#ifdef __GNU_LIBRARY__ +/* We want to avoid inclusion of string.h with non-GNU libraries + because there are many ways it can cause trouble. + On some systems, it contains special magic macros that don't work + in GCC. */ +# include <string.h> +# define my_index strchr +#else + +# if HAVE_STRING_H || WIN32 /* Pete Wilson mod 7/28/02 */ +# include <string.h> +# else +# include <strings.h> +# endif + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +#ifndef getenv +extern char *getenv (); +#endif + +static char * +my_index (str, chr) + const char *str; + int chr; +{ + while (*str) + { + if (*str == chr) + return (char *) str; + str++; + } + return 0; +} + +/* If using GCC, we can safely declare strlen this way. + If not using GCC, it is ok not to declare it. */ +#ifdef __GNUC__ +/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. + That was relevant to code that was here before. */ +# if (!defined __STDC__ || !__STDC__) && !defined strlen +/* gcc with -traditional declares the built-in strlen to return int, + and has done so at least since version 2.4.5. -- rms. */ +extern int strlen (const char *); +# endif /* not __STDC__ */ +#endif /* __GNUC__ */ + +#endif /* not __GNU_LIBRARY__ */ + +/* Handle permutation of arguments. */ + +/* Describe the part of ARGV that contains non-options that have + been skipped. `first_nonopt' is the index in ARGV of the first of them; + `last_nonopt' is the index after the last of them. */ + +static int first_nonopt; +static int last_nonopt; + +#ifdef _LIBC +/* Stored original parameters. + XXX This is no good solution. We should rather copy the args so + that we can compare them later. But we must not use malloc(3). */ +extern int __libc_argc; +extern char **__libc_argv; + +/* Bash 2.0 gives us an environment variable containing flags + indicating ARGV elements that should not be considered arguments. */ + +# ifdef USE_NONOPTION_FLAGS +/* Defined in getopt_init.c */ +extern char *__getopt_nonoption_flags; + +static int nonoption_flags_max_len; +static int nonoption_flags_len; +# endif + +# ifdef USE_NONOPTION_FLAGS +# define SWAP_FLAGS(ch1, ch2) \ + if (nonoption_flags_len > 0) \ + { \ + char __tmp = __getopt_nonoption_flags[ch1]; \ + __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ + __getopt_nonoption_flags[ch2] = __tmp; \ + } +# else +# define SWAP_FLAGS(ch1, ch2) +# endif +#else /* !_LIBC */ +# define SWAP_FLAGS(ch1, ch2) +#endif /* _LIBC */ + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + `first_nonopt' and `last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +#if defined __STDC__ && __STDC__ +static void exchange (char **); +#endif + +static void +exchange (argv) + char **argv; +{ + int bottom = first_nonopt; + int middle = last_nonopt; + int top = optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + /* First make sure the handling of the `__getopt_nonoption_flags' + string can work normally. Our top argument must be in the range + of the string. */ + if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) + { + /* We must extend the array. The user plays games with us and + presents new arguments. */ + char *new_str = malloc (top + 1); + if (new_str == NULL) + nonoption_flags_len = nonoption_flags_max_len = 0; + else + { + memset (__mempcpy (new_str, __getopt_nonoption_flags, + nonoption_flags_max_len), + '\0', top + 1 - nonoption_flags_max_len); + nonoption_flags_max_len = top + 1; + __getopt_nonoption_flags = new_str; + } + } +#endif + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + SWAP_FLAGS (bottom + i, middle + i); + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + first_nonopt += (optind - last_nonopt); + last_nonopt = optind; +} + +/* Initialize the internal data when the first call is made. */ + +#if defined __STDC__ && __STDC__ +static const char *_getopt_initialize (int, char *const *, const char *); +#endif +static const char * +_getopt_initialize (argc, argv, optstring) + int argc; + char *const *argv; + const char *optstring; +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + first_nonopt = last_nonopt = optind; + + nextchar = NULL; + + posixly_correct = getenv ("POSIXLY_CORRECT"); + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + ordering = REQUIRE_ORDER; + ++optstring; + } + else if (posixly_correct != NULL) + ordering = REQUIRE_ORDER; + else + ordering = PERMUTE; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + if (posixly_correct == NULL + && argc == __libc_argc && argv == __libc_argv) + { + if (nonoption_flags_max_len == 0) + { + if (__getopt_nonoption_flags == NULL + || __getopt_nonoption_flags[0] == '\0') + nonoption_flags_max_len = -1; + else + { + const char *orig_str = __getopt_nonoption_flags; + int len = nonoption_flags_max_len = strlen (orig_str); + if (nonoption_flags_max_len < argc) + nonoption_flags_max_len = argc; + __getopt_nonoption_flags = + (char *) malloc (nonoption_flags_max_len); + if (__getopt_nonoption_flags == NULL) + nonoption_flags_max_len = -1; + else + memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), + '\0', nonoption_flags_max_len - len); + } + } + nonoption_flags_len = nonoption_flags_max_len; + } + else + nonoption_flags_len = 0; +#endif + + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If `getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If `getopt' finds another option character, it returns that character, + updating `optind' and `nextchar' so that the next call to `getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, `getopt' returns -1. + Then `optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set `opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in `optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in `optarg', otherwise `optarg' is set to zero. + + If OPTSTRING starts with `-' or `+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with `--' instead of `-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a `=', or else the in next ARGV-element. + When `getopt' finds a long-named option, it returns 0 if that option's + `flag' field is nonzero, the value of the option's `val' field + if the `flag' field is zero. + + The elements of ARGV aren't really const, because we permute them. + But we pretend they're const in the prototype to be compatible + with other systems. + + LONGOPTS is a vector of `struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. */ + +int +_getopt_internal (argc, argv, optstring, longopts, longind, long_only) + int argc; + char *const *argv; + const char *optstring; + const struct option *longopts; + int *longind; + int long_only; +{ + int print_errors = opterr; + if (optstring[0] == ':') + print_errors = 0; + + if (argc < 1) + return -1; + + optarg = NULL; + + if (optind == 0 || !__getopt_initialized) + { + if (optind == 0) + optind = 1; /* Don't scan ARGV[0], the program name. */ + optstring = _getopt_initialize (argc, argv, optstring); + __getopt_initialized = 1; + } + + /* Test whether ARGV[optind] points to a non-option argument. + Either it does not have option syntax, or there is an environment flag + from the shell indicating it is not an option. The later information + is only used when the used in the GNU libc. */ +#if defined _LIBC && defined USE_NONOPTION_FLAGS +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ + || (optind < nonoption_flags_len \ + && __getopt_nonoption_flags[optind] == '1')) +#else +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') +#endif + + if (nextchar == NULL || *nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + /* Give FIRST_NONOPT and LAST_NONOPT rational values if OPTIND has been + moved back by the user (who may also have changed the arguments). */ + if (last_nonopt > optind) + last_nonopt = optind; + if (first_nonopt > optind) + first_nonopt = optind; + + if (ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (last_nonopt != optind) + first_nonopt = optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (optind < argc && NONOPTION_P) + optind++; + last_nonopt = optind; + } + + /* The special ARGV-element `--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (optind != argc && !strcmp (argv[optind], "--")) + { + optind++; + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (first_nonopt == last_nonopt) + first_nonopt = optind; + last_nonopt = argc; + + optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (first_nonopt != last_nonopt) + optind = first_nonopt; + return -1; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if (NONOPTION_P) + { + if (ordering == REQUIRE_ORDER) + return -1; + optarg = argv[optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Skip the initial punctuation. */ + + nextchar = (argv[optind] + 1 + + (longopts != NULL && argv[optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + If long_only and the ARGV-element has the form "-f", where f is + a valid short option, don't consider it an abbreviated form of + a long option that starts with f. Otherwise there would be no + way to give the -f short option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an abbreviation of + the long option, just like "--fu", and not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + + if (longopts != NULL + && (argv[optind][1] == '-' + || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = -1; + int option_index; + + for (nameend = nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if ((unsigned int) (nameend - nextchar) + == (unsigned int) strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else if (long_only + || pfound->has_arg != p->has_arg + || pfound->flag != p->flag + || pfound->val != p->val) + /* Second or later nonexact match found. */ + ambig = 1; + } + + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[optind]); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[optind]); +#endif + } + nextchar += strlen (nextchar); + optind++; + optopt = 0; + return '?'; + } + + if (pfound != NULL) + { + option_index = indfound; + optind++; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; +#endif + + if (argv[optind - 1][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("\ +%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#else + fprintf (stderr, _("\ +%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("\ +%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[optind - 1][0], + pfound->name); +#else + fprintf (stderr, _("\ +%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[optind - 1][0], pfound->name); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#endif + } + + nextchar += strlen (nextchar); + + optopt = pfound->val; + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); +#endif + } + nextchar += strlen (nextchar); + optopt = pfound->val; + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[optind][1] == '-' + || my_index (optstring, *nextchar) == NULL) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; +#endif + + if (argv[optind][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("%s: unrecognized option `--%s'\n"), + argv[0], nextchar); +#else + fprintf (stderr, _("%s: unrecognized option `--%s'\n"), + argv[0], nextchar); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[optind][0], nextchar); +#else + fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[optind][0], nextchar); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#endif + } + nextchar = (char *) ""; + optind++; + optopt = 0; + return '?'; + } + } + + /* Look at and handle the next short option-character. */ + + { + char c = *nextchar++; + char *temp = my_index (optstring, c); + + /* Increment `optind' when we start to process its last character. */ + if (*nextchar == '\0') + ++optind; + + if (temp == NULL || c == ':') + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; +#endif + + if (posixly_correct) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("%s: illegal option -- %c\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); +#endif + } + else + { +#if defined _LIBC && defined USE_IN_LIBIO + __asprintf (&buf, _("%s: invalid option -- %c\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#endif + } + optopt = c; + return '?'; + } + /* Convenience. Treat POSIX -W foo same as long option --foo */ + if (temp[0] == 'W' && temp[1] == ';') + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = 0; + int option_index; + + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (print_errors) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("%s: option requires an argument -- %c\n"), + argv[0], c); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, _("%s: option requires an argument -- %c\n"), + argv[0], c); +#endif + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + return c; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + + /* optarg is now the argument, see if it's in the + table of longopts. */ + + for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if ((unsigned int) (nameend - nextchar) == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[optind]); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[optind]); +#endif + } + nextchar += strlen (nextchar); + optind++; + return '?'; + } + if (pfound != NULL) + { + option_index = indfound; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("\ +%s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, _("\ +%s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + + nextchar += strlen (nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, _("\ +%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); +#endif + } + nextchar += strlen (nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + nextchar = NULL; + return 'W'; /* Let the application handle it. */ + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*nextchar != '\0') + { + optarg = nextchar; + optind++; + } + else + optarg = NULL; + nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (print_errors) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + __asprintf (&buf, + _("%s: option requires an argument -- %c\n"), + argv[0], c); + + if (_IO_fwide (stderr, 0) > 0) + __fwprintf (stderr, L"%s", buf); + else + fputs (buf, stderr); + + free (buf); +#else + fprintf (stderr, + _("%s: option requires an argument -- %c\n"), + argv[0], c); +#endif + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + nextchar = NULL; + } + } + return c; + } +} + +int +getopt (argc, argv, optstring) + int argc; + char *const *argv; + const char *optstring; +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0); +} + +#endif /* Not ELIDE_CODE. */ + + +/* Compile with -DTEST to make an executable for use in testing + the above definition of `getopt'. */ + +/* #define TEST */ /* Pete Wilson mod 7/28/02 */ +#ifdef TEST + +#ifndef exit /* Pete Wilson mod 7/28/02 */ + int exit(int); /* Pete Wilson mod 7/28/02 */ +#endif /* Pete Wilson mod 7/28/02 */ + +int +main (argc, argv) + int argc; + char **argv; +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == -1) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/getopt.h Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,191 @@ +/* from http://www.pwilson.net/getopt.html */ + +/* getopt.h */ +/* Declarations for getopt. + Copyright (C) 1989-1994, 1996-1999, 2001 Free Software + Foundation, Inc. This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute + it and/or modify it under the terms of the GNU Lesser + General Public License as published by the Free Software + Foundation; either version 2.1 of the License, or + (at your option) any later version. + + The GNU C Library is distributed in the hope that it will + be useful, but WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A + PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with the GNU C Library; if not, write + to the Free Software Foundation, Inc., 59 Temple Place, + Suite 330, Boston, MA 02111-1307 USA. */ + + + + + +#ifndef _GETOPT_H + +#ifndef __need_getopt +# define _GETOPT_H 1 +#endif + +/* If __GNU_LIBRARY__ is not already defined, either we are being used + standalone, or this is the first header included in the source file. + If we are being used with glibc, we need to include <features.h>, but + that does not exist if we are standalone. So: if __GNU_LIBRARY__ is + not defined, include <ctype.h>, which will pull in <features.h> for us + if it's from glibc. (Why ctype.h? It's guaranteed to exist and it + doesn't flood the namespace with stuff the way some other headers do.) */ +#if !defined __GNU_LIBRARY__ +# include <ctype.h> +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message `getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +#ifndef __need_getopt +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of `struct option' terminated by an element containing a name which is + zero. + + The field `has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field `flag' is not NULL, it points to a variable that is set + to the value given in the field `val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an `int' to + a compiled-in constant, such as set a value from `optarg', set the + option's `flag' field to zero and its `val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero `flag' field, `getopt' + returns the contents of the `val' field. */ + +struct option +{ +# if (defined __STDC__ && __STDC__) || defined __cplusplus + const char *name; +# else + char *name; +# endif + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the `has_arg' field of `struct option'. */ + +# define no_argument 0 +# define required_argument 1 +# define optional_argument 2 +#endif /* need getopt */ + + +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. + + Return the option character from OPTS just read. Return -1 when + there are no more options. For unrecognized options, or options + missing arguments, `optopt' is set to the option letter, and '?' is + returned. + + The OPTS string is a list of characters which are recognized option + letters, optionally followed by colons, specifying that that letter + takes an argument, to be placed in `optarg'. + + If a letter in OPTS is followed by two colons, its argument is + optional. This behavior is specific to the GNU `getopt'. + + The argument `--' causes premature termination of argument + scanning, explicitly telling `getopt' that there are no more + options. + + If OPTS begins with `--', then non-option arguments are treated as + arguments to the option '\0'. This behavior is specific to the GNU + `getopt'. */ + +#if (defined __STDC__ && __STDC__) || defined __cplusplus +# ifdef __GNU_LIBRARY__ +/* Many other libraries have conflicting prototypes for getopt, with + differences in the consts, in stdlib.h. To avoid compilation + errors, only prototype getopt for the GNU C library. */ +extern int getopt (int ___argc, char *const *___argv, const char *__shortopts); +# else /* not __GNU_LIBRARY__ */ +extern int getopt (); +# endif /* __GNU_LIBRARY__ */ + +# ifndef __need_getopt +extern int getopt_long (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind); +extern int getopt_long_only (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind); + +/* Internal only. Users should not call this directly. */ +extern int _getopt_internal (int ___argc, char *const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only); +# endif +#else /* not __STDC__ */ +extern int getopt (); +# ifndef __need_getopt +extern int getopt_long (); +extern int getopt_long_only (); + +extern int _getopt_internal (); +# endif +#endif /* __STDC__ */ + +#ifdef __cplusplus +} +#endif + +/* Make sure we later can get all the definitions and declarations. */ +#undef __need_getopt + +#endif /* getopt.h */ +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/main.cpp Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,777 @@ +#include <wx/wxprec.h> +#include <wx/wx.h> +#include <wx/textctrl.h> +#include <wx/spinctrl.h> +#include <wx/tglbtn.h> +#include <wx/slider.h> +#include <iostream> +#include <wx/brush.h> +#include <sstream> +#include <wx/listbox.h> +#include <wx/dynarray.h> +#include <wx/dcclient.h> +#include <wx/gauge.h> +#include <wx/spinctrl.h> + +#include "monicone.xpm" + +#include "main.h" +#include "tools.h" +#include "TestSlaveGui.h" +extern "C" { + #include "canfestival.h" + #include "ObjDict.h" +} +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#ifndef WX_PRECOMP + #include "wx/wx.h" +#endif + + +wxTextCtrl *textLog; +int node_id_ext; +MyFrame *frame; +s_BOARD SlaveBoard = {NULL, NULL}; +char* LibraryPath = NULL; +double Gtime = 0; +double y[28][45]; +double hdelta = 0; +double old_max = 5; +double old_min = -5; + +// Declare some IDs. These are arbitrary. +const int BOOKCTRL = 100; +const int FILE_QUIT = wxID_EXIT; +const int HELP_ABOUT = wxID_ABOUT; +const int ADD = 105; +const int REMOVE = 108; +const int QUIT = 109; +const int FREQBOX = 110; +const int START = 112; +const int TEXTBOX1 = 113; +const int STOP = 114; +const int LOAD = 115; +const int INBT1 = 118; +const int INBT2 = 119; +const int INBT3 = 120; +const int INBT4 = 121; +const int INBT5 = 122; +const int INBT6 = 123; +const int INBT7 = 124; +const int INBT8 = 125; +const int INS1 = 126; +const int INS2 = 127; +const int INS3 = 128; +const int INS4 = 129; +const int INS5 = 135; +const int INS6 = 136; +const int INS7 = 137; +const int INS8 = 138; +const int TIMER_ID = 130; +const int INST1 = 131; +const int INST2 = 132; +const int INST3 = 133; +const int INST4 = 134; +const int INST5 = 135; +const int INST6 = 136; +const int INST7 = 137; +const int INST8 = 138; + +// Attach the event handlers. Put this after MyFrame declaration. +BEGIN_EVENT_TABLE(MyFrame, wxFrame) + EVT_BUTTON(STOP, MyFrame::OnStop) + EVT_BUTTON(LOAD, MyFrame::OnLoad) + EVT_BUTTON(START, MyFrame::OnStart) + EVT_TOGGLEBUTTON(INBT1, MyFrame::OnInbt1) + EVT_TOGGLEBUTTON(INBT2, MyFrame::OnInbt2) + EVT_TOGGLEBUTTON(INBT3, MyFrame::OnInbt3) + EVT_TOGGLEBUTTON(INBT4, MyFrame::OnInbt4) + EVT_TOGGLEBUTTON(INBT5, MyFrame::OnInbt5) + EVT_TOGGLEBUTTON(INBT6, MyFrame::OnInbt6) + EVT_TOGGLEBUTTON(INBT7, MyFrame::OnInbt7) + EVT_TOGGLEBUTTON(INBT8, MyFrame::OnInbt8) + EVT_COMMAND_SCROLL(INS1, MyFrame::OnIns1) + EVT_COMMAND_SCROLL(INS2, MyFrame::OnIns2) + EVT_COMMAND_SCROLL(INS3, MyFrame::OnIns3) + EVT_COMMAND_SCROLL(INS4, MyFrame::OnIns4) + EVT_COMMAND_SCROLL(INS5, MyFrame::OnIns5) + EVT_COMMAND_SCROLL(INS6, MyFrame::OnIns6) + EVT_COMMAND_SCROLL(INS7, MyFrame::OnIns7) + EVT_COMMAND_SCROLL(INS8, MyFrame::OnIns8) + EVT_SPINCTRL(INST1, MyFrame::OnInst1) + EVT_SPINCTRL(INST2, MyFrame::OnInst2) + EVT_SPINCTRL(INST3, MyFrame::OnInst3) + EVT_SPINCTRL(INST4, MyFrame::OnInst4) + EVT_SPINCTRL(INST5, MyFrame::OnInst5) + EVT_SPINCTRL(INST6, MyFrame::OnInst6) + EVT_SPINCTRL(INST7, MyFrame::OnInst7) + EVT_SPINCTRL(INST8, MyFrame::OnInst8) + + EVT_LISTBOX(FREQBOX, MyFrame::OnFreqBoxClick) + EVT_MENU(FILE_QUIT, MyFrame::OnQuit) + EVT_BUTTON(QUIT, MyFrame::OnQuit) + EVT_MENU(HELP_ABOUT, MyFrame::OnAbout) + EVT_PAINT(MyFrame::OnPaint) + + EVT_TIMER(TIMER_ID, MyFrame::OnTimer) +END_EVENT_TABLE() + +IMPLEMENT_APP(MyApp) + +bool MyApp::OnInit() +{ + frame = new MyFrame( _T("I-O simulator")); + frame->Show(true); + return true; +} + +MyFrame::MyFrame(const wxString& title) + : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(800, 740), wxDEFAULT_FRAME_STYLE, wxT("frame")) + ,m_timer(this, TIMER_ID) +{ + wxMenu *fileMenu = new wxMenu; + wxMenu *helpMenu = new wxMenu; + wxPanel *panel; + wxButton *quit; + wxButton *load; + wxBoxSizer *mysizer; + wxBoxSizer *mysssizer; + wxBoxSizer *myhsizer; + wxBoxSizer *mybsizer; + wxBoxSizer *myentrysizer; + wxListBox *freqlist; + wxStaticBox *namebox; + wxStaticBox *freqbox; + + SetIcon(wxICON(monicone)); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)); + helpMenu->Append(HELP_ABOUT, _T("&About...\tF1"), + _T("Show about dialog")); + fileMenu->Append(FILE_QUIT, _T("E&xit\tAlt-X"), + _T("Quit this program")); + wxMenuBar *menuBar = new wxMenuBar(); + menuBar->Append(fileMenu, _T("&File")); + menuBar->Append(helpMenu, _T("&Help")); + SetMenuBar(menuBar); + CreateStatusBar(2); + SetStatusText(_T("Lolitech."), 0); + SetStatusText(_T("Welcome."), 1); + + book = new wxNotebook(this, BOOKCTRL); + + panel = new wxPanel(book); + book->AddPage(panel, _T("Configuration"), true); + mysizer = new wxBoxSizer( wxVERTICAL ); + panel->SetSizer(mysizer); + wxString choices[] = + { + _T("10K"), _T("20K"), _T("50K"), _T("100K"), + _T("125K"), _T("250K"), _T("500K"), _T("1M") + }; + + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Bus driver")), wxHORIZONTAL ); + mysizer->Add(myhsizer, 0, wxEXPAND | wxALL, 5); + load = new wxButton( panel, LOAD, _T("Load can driver")); + myhsizer->Add(load, 0, wxLEFT, 5); + drivername = new wxTextCtrl(panel, wxID_ANY, _T("No driver loaded!!")); + myhsizer->Add(drivername, 1, wxEXPAND | wxALL, 5); + myentrysizer = new wxBoxSizer( wxHORIZONTAL ); + mysizer->Add(myentrysizer, 0, wxEXPAND | wxALL, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Bus name")), wxHORIZONTAL ); + myentrysizer->Add(myhsizer, 0, wxEXPAND | wxALL, 5); + busname = new wxTextCtrl(panel, wxID_ANY, _T("0")); + myhsizer->Add(busname, 0, wxLEFT, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Node ID (Hexa)")), wxHORIZONTAL ); + myentrysizer->Add(myhsizer, 0, wxEXPAND | wxALL, 5); + node_id = new wxSpinCtrl(panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 127, 1, _T("wxSpinCtrl")); + myhsizer->Add(node_id, 0, wxRIGHT, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Baudrate")), wxHORIZONTAL ); + mysizer->Add(myhsizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + freqlist = new wxListBox( panel, FREQBOX, wxDefaultPosition, wxDefaultSize, 8, choices, wxLB_SINGLE | wxLB_HSCROLL); + myhsizer->Add(freqlist, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + quit = new wxButton( panel, QUIT, _T("QUIT")); + mysizer->Add(quit, 0, wxALL, 5); + + + panel = new wxPanel(book); + book->AddPage(panel, wxT("Inputs"), true); + mysizer = new wxBoxSizer( wxVERTICAL ); + panel->SetSizer(mysizer); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Read Inputs UNSIGNED8")), wxHORIZONTAL ); + mysizer->Add(myhsizer, 0, wxEXPAND | wxALL, 30); + inbt1 = new wxToggleButton(panel, INBT1, wxT("1")); + inbt2 = new wxToggleButton(panel, INBT2, wxT("2")); + inbt3 = new wxToggleButton(panel, INBT3, wxT("3")); + inbt4 = new wxToggleButton(panel, INBT4, wxT("4")); + inbt5 = new wxToggleButton(panel, INBT5, wxT("5")); + inbt6 = new wxToggleButton(panel, INBT6, wxT("6")); + inbt7 = new wxToggleButton(panel, INBT7, wxT("7")); + inbt8 = new wxToggleButton(panel, INBT8, wxT("8")); + myhsizer->Add(inbt1, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt2, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt3, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt4, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt5, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt6, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt7, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt8, wxEXPAND | wxALL, 0, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Analogue Inputs INTEGER16")), wxVERTICAL ); + mysizer->Add(myhsizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 30); + mysssizer = new wxBoxSizer( wxHORIZONTAL ); + myhsizer->Add(mysssizer, 0, wxEXPAND | wxALL, 0); + inst1 = new wxSpinCtrl(panel, INST1, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst2 = new wxSpinCtrl(panel, INST2, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst3 = new wxSpinCtrl(panel, INST3, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst4 = new wxSpinCtrl(panel, INST4, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst5 = new wxSpinCtrl(panel, INST5, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst6 = new wxSpinCtrl(panel, INST6, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst7 = new wxSpinCtrl(panel, INST7, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst8 = new wxSpinCtrl(panel, INST8, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + mysssizer->Add(inst1, wxALL, 0, 5); + mysssizer->Add(inst2, wxALL, 0, 5); + mysssizer->Add(inst3, wxALL, 0, 5); + mysssizer->Add(inst4, wxALL, 0, 5); + mysssizer->Add(inst5, wxALL, 0, 5); + mysssizer->Add(inst6, wxALL, 0, 5); + mysssizer->Add(inst7, wxALL, 0, 5); + mysssizer->Add(inst8, wxALL, 0, 5); + mysssizer = new wxBoxSizer( wxHORIZONTAL ); + myhsizer->Add(mysssizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 0); + ins1 = new wxSlider(panel, INS1, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins2 = new wxSlider(panel, INS2, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins3 = new wxSlider(panel, INS3, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins4 = new wxSlider(panel, INS4, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins5 = new wxSlider(panel, INS5, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins6 = new wxSlider(panel, INS6, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins7 = new wxSlider(panel, INS7, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins8 = new wxSlider(panel, INS8, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + mysssizer->Add(ins1, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins2, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins3, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins4, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins5, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins6, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins7, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins8, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + quit = new wxButton( panel, QUIT, _T("QUIT")); + mysizer->Add(quit, 0, wxALL, 5); + + panel = new wxPanel(book); + book->AddPage(panel, wxT("Outputs"), true); + mysizer = new wxBoxSizer( wxVERTICAL ); + panel->SetSizer(mysizer); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Write Outputs UNSIGNED8")), wxHORIZONTAL ); + mysizer->Add(myhsizer, 0, wxEXPAND | wxALL, 30); + outbt1 = new wxToggleButton(panel, wxID_ANY, wxT("1")); + outbt2 = new wxToggleButton(panel, wxID_ANY, wxT("2")); + outbt3 = new wxToggleButton(panel, wxID_ANY, wxT("3")); + outbt4 = new wxToggleButton(panel, wxID_ANY, wxT("4")); + outbt5 = new wxToggleButton(panel, wxID_ANY, wxT("5")); + outbt6 = new wxToggleButton(panel, wxID_ANY, wxT("6")); + outbt7 = new wxToggleButton(panel, wxID_ANY, wxT("7")); + outbt8 = new wxToggleButton(panel, wxID_ANY, wxT("8")); + myhsizer->Add(outbt1, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt2, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt3, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt4, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt5, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt6, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt7, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt8, wxEXPAND | wxALL, 0, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Analogue Output INTEGER16")), wxVERTICAL ); + mysizer->Add(myhsizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 30); + mysssizer = new wxBoxSizer( wxHORIZONTAL ); + myhsizer->Add(mysssizer, 0, wxEXPAND | wxALL, 0); + outst1 = new wxStaticText(panel, wxID_ANY, wxT("label"), wxDefaultPosition, wxDefaultSize, 0, wxT("staticText")); + outst2 = new wxStaticText(panel, wxID_ANY, wxT("label"), wxDefaultPosition, wxDefaultSize, 0, wxT("staticText")); + outst3 = new wxStaticText(panel, wxID_ANY, wxT("label"), wxDefaultPosition, wxDefaultSize, 0, wxT("staticText")); + outst4 = new wxStaticText(panel, wxID_ANY, wxT("label"), wxDefaultPosition, wxDefaultSize, 0, wxT("staticText")); + mysssizer->Add(outst1, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + mysssizer->Add(outst2, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + mysssizer->Add(outst3, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + mysssizer->Add(outst4, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + mysssizer = new wxBoxSizer( wxHORIZONTAL ); + myhsizer->Add(mysssizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 0); + outs1 = new wxGauge(panel, wxID_ANY, 65535, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("gauge")); + outs2 = new wxGauge(panel, wxID_ANY, 65535, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("gauge")); + outs3 = new wxGauge(panel, wxID_ANY, 65535, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("gauge")); + outs4 = new wxGauge(panel, wxID_ANY, 65535, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("gauge")); + mysssizer->Add(outs1, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(outs2, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(outs3, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(outs4, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + quit = new wxButton( panel, QUIT, _T("QUIT")); + mysizer->Add(quit, 0, wxALL, 5); + + wxString choice[] = + { + _T("Analogue Out 1"), _T("Analogue Out 2"), + _T("Analogue Out 3"), _T("Analogue Out 4"), + _T("Bool Out 1"), _T("Bool Out 2"), + _T("Bool Out 3"), _T("Bool Out 4"), + _T("Bool Out 5"), _T("Bool Out 6"), + _T("Bool Out 7"), _T("Bool Out 8"), + _T("Analogue Input 1"), _T("Analogue Input 2"), + _T("Analogue Input 3"), _T("Analogue Input 4"), + _T("Analogue Input 5"), _T("Analogue Input 6"), + _T("Analogue Input 7"), _T("Analogue Input 8"), + _T("Bool Input 1"), _T("Bool Input 2"), + _T("Bool Input 3"), _T("Bool Input 4"), + _T("Bool Input 5"), _T("Bool Input 6"), + _T("Bool Input 7"), _T("Bool Input 8"), }; + panel = new wxPanel(book); + book->AddPage(panel, wxT("Graphic"), true); + mysizer = new wxBoxSizer( wxVERTICAL ); + panel->SetSizer(mysizer); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Graphic")), wxVERTICAL ); + mysizer->Add(myhsizer, 0, wxEXPAND | wxALL, 10); + mygraphpan = new wxPanel(panel, wxID_ANY, wxDefaultPosition, wxSize(0, 350), wxTAB_TRAVERSAL, wxT("Graphic")); + myhsizer->Add(mygraphpan, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + echelle = new wxSlider(panel, wxID_ANY, 44, 44, 1000, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL , wxDefaultValidator, wxT("slider")); + myhsizer->Add(echelle, 0, wxEXPAND | wxALL, 0); + mybsizer = new wxBoxSizer( wxHORIZONTAL ); + mysizer->Add(mybsizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Select viewable Inputs")), wxHORIZONTAL ); + mybsizer->Add(myhsizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 10); + inlist = new wxListBox( panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, 28, choice, wxLB_EXTENDED | wxLB_HSCROLL); + myhsizer->Add(inlist, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Legende")), wxHORIZONTAL ); + mybsizer->Add(myhsizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 10); + mylegpan = new wxPanel(panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, wxT("Legende")); + myhsizer->Add(mylegpan, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + quit = new wxButton( panel, QUIT, _T("QUIT")); + mysizer->Add(quit, 0, wxALL, 5); + + panel = new wxPanel(book); + book->InsertPage(0, panel, wxT("Control"), true); + mysizer = new wxBoxSizer( wxVERTICAL ); + panel->SetSizer(mysizer); + myhsizer = new wxBoxSizer( wxHORIZONTAL ); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Control your node")), wxHORIZONTAL ); + mysizer->Add(myhsizer, 0, wxALL, 5); + start = new wxButton( panel, START, _T("START")); + stop = new wxButton( panel, STOP, _T("STOP")); + stop->Enable(false); + myhsizer->Add(start, 0, wxRIGHT, 5); + myhsizer->Add(stop, 0, wxLEFT, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Operation log")), wxHORIZONTAL ); + mysizer->Add(myhsizer, wxALL, wxEXPAND | wxALL, 5); + textLog = new wxTextCtrl( panel, TEXTBOX1, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE, wxDefaultValidator, wxTextCtrlNameStr); + myhsizer->Add(textLog, wxALL, wxEXPAND | wxALL, 5); + quit = new wxButton( panel, QUIT, _T("QUIT")); + mysizer->Add(quit, 0, wxALL, 5); + + for (int i= 0; i < 28; i++) + for (int j = 0; j < 44; j++) + y[i][j] = 0; + m_timer.Start(100); +} + +void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) +{ + Close(true); +} + +void MyFrame::OnStart(wxCommandEvent& WXUNUSED(event)) +{ + wxString s; + + if (LibraryPath == NULL) + { + *textLog << wxT("No driver found!! ----------------------------------Initialization [KO]\n"); + return; + } + if (SlaveBoard.baudrate == NULL) + { + *textLog << wxT("No baudrate found!! ----------------------------------Initialization [KO]\n"); + return; + } + + node_id_ext = node_id->GetValue(); + s = busname->GetValue(); + SlaveBoard.busname = wxstr_to_charbuf(s); + *textLog << wxT("-- Bus name: ------> ") << s << wxT("\n"); + *textLog << wxT("-- Node ID: -------> ") << node_id->GetValue() << wxT("\n"); + + if (main_can(SlaveBoard, LibraryPath)) + { + printf("[KO]\n"); + *textLog << wxT("----------------------------------------------------Initialization [KO]\n"); + } + else + { + printf("[OK]\n"); + *textLog << wxT("----------------------------------------------------Initialization [OK]\n"); + stop->Enable(true); + start->Enable(false); + } +} + +void MyFrame::OnStop(wxCommandEvent& WXUNUSED(event)) +{ + + *textLog << wxT("----------------------------------------------------Slave [STOPPED]") << wxT("\n"); + stop_slave(); + stop->Enable(false); + start->Enable(true); + charbuf_free(SlaveBoard.busname); +} + +void MyFrame::OnLoad(wxCommandEvent& WXUNUSED(event)) +{ + wxFileDialog fd(this, wxT("Choose a node configuration file"), wxT(""), wxT("Slave.od"), wxT("*.so")); + + if(fd.ShowModal() == wxID_OK) + { + drivername->Clear(); + drivername->AppendText(fd.GetPath()); + *textLog << wxT("LibraryPath: ") << fd.GetPath() << wxT("\n"); + if (LibraryPath != NULL) + charbuf_free(LibraryPath); + LibraryPath = wxstr_to_charbuf(fd.GetPath()); + printf("path=%s",LibraryPath); + } +} + +void MyFrame::OnInbt1(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x1; +} +void MyFrame::OnInbt2(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x2; +} +void MyFrame::OnInbt3(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x4; +} +void MyFrame::OnInbt4(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x8; +} +void MyFrame::OnInbt5(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x10; +} +void MyFrame::OnInbt6(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x20; +} +void MyFrame::OnInbt7(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x40; +} +void MyFrame::OnInbt8(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x80; +} + + + +void MyFrame::OnIns1(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[0] = ins1->GetValue(); + inst1->SetValue(ins1->GetValue()); +} +void MyFrame::OnIns2(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[1] = ins2->GetValue(); + inst2->SetValue(ins2->GetValue()); +} +void MyFrame::OnIns3(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[2] = ins3->GetValue(); + inst3->SetValue(ins3->GetValue()); +} +void MyFrame::OnIns4(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[3] = ins4->GetValue(); + inst4->SetValue(ins4->GetValue()); +} +void MyFrame::OnIns5(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[4] = ins5->GetValue(); + inst5->SetValue(ins5->GetValue()); +} +void MyFrame::OnIns6(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[5] = ins6->GetValue(); + inst6->SetValue(ins6->GetValue()); +} +void MyFrame::OnIns7(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[6] = ins7->GetValue(); + inst7->SetValue(ins7->GetValue()); +} +void MyFrame::OnIns8(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[7] = ins8->GetValue(); + inst8->SetValue(ins8->GetValue()); +} + + +void MyFrame::OnInst1 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[0] = inst1->GetValue(); + ins1->SetValue(inst1->GetValue()); +} +void MyFrame::OnInst2 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[1] = inst2->GetValue(); + ins2->SetValue(inst2->GetValue()); +} +void MyFrame::OnInst3 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[2] = inst3->GetValue(); + ins3->SetValue(inst3->GetValue()); +} +void MyFrame::OnInst4 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[3] = inst4->GetValue(); + ins4->SetValue(inst4->GetValue()); +} +void MyFrame::OnInst5 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[4] = inst5->GetValue(); + ins5->SetValue(inst5->GetValue()); +} +void MyFrame::OnInst6 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[5] = inst6->GetValue(); + ins6->SetValue(inst6->GetValue()); +} +void MyFrame::OnInst7 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[6] = inst7->GetValue(); + ins7->SetValue(inst7->GetValue()); +} +void MyFrame::OnInst8 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[7] = inst8->GetValue(); + ins8->SetValue(inst8->GetValue()); +} + + +void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) +{ + wxString msg; + msg.Printf( _T("About.\n\n") + _T("Input-Output simulation by GRANDEMANGE Nicolas for CanFestival!!")); + + wxMessageBox(msg, _T("About !!!"), wxOK | wxICON_INFORMATION, this); +} + + +void MyFrame::OnFreqBoxClick( wxCommandEvent &event ) +{ + wxString wxstr; + + wxstr = event.GetString(); + if (SlaveBoard.baudrate != NULL) + charbuf_free(SlaveBoard.baudrate); + SlaveBoard.baudrate = wxstr_to_charbuf(wxstr); + *textLog << wxT("Baudrate:") << event.GetString() << wxT("\n"); +} + +static int is_set(int i, + wxListBox *inlist, + wxArrayInt in) +{ + inlist->GetSelections(in); + for (int j = 0; j < in.GetCount(); j++) + { + if (i == (in[j] + 1)) + { + return (i); + } + } + return (0); +} + +static int get_bit(UNS8 input, int bit) +{ + if (bit == 1) + return ((input & 0x1) ? 1 : 0); + if (bit == 2) + return ((input & 0x2) ? 1 : 0); + if (bit == 3) + return ((input & 0x4) ? 1 : 0); + if (bit == 4) + return ((input & 0x8) ? 1 : 0); + if (bit == 5) + return ((input & 0x10) ? 1 : 0); + if (bit == 6) + return ((input & 0x20) ? 1 : 0); + if (bit == 7) + return ((input & 0x40) ? 1 : 0); + if (bit == 8) + return ((input & 0x80) ? 1 : 0); + return 0; +} + +void MyFrame::Paint() +{ + double vmax = old_max; + double vmin = old_min; + double vdelta = vmax - vmin; + double vech = ((float)vdelta) / 10.0; + + double hmax = frame->echelle->GetValue(); + double hech = hdelta / 11; + + double d = 300 / vdelta; + double g = 0; + double top = 5; + double left = 50; + + double tmpi = 0; + wxString tmps; + double p = 0; + double q = 0; + int i = 0; + int j = 0; + wxColor col[8] = {wxColor("BLUE"), wxColor("RED"), wxColor("GREEN"), wxColor("GREY"), + wxColor("ORANGE"), wxColor("YELLOW"), wxColor("PINK"), wxColor("BLACK")}; + hdelta = hmax - 0; + g = (Gtime / hdelta) * 44.00; + + wxClientDC MonDc(mygraphpan); + MonDc.Clear(); + + MonDc.SetPen(wxPen(wxColour(200,200,200), 5, wxSOLID)); + MonDc.DrawRectangle((int) left, (int)top, 660, 300); + + MonDc.SetPen(wxPen(wxColor(150,200,150), 2, wxSOLID)); + MonDc.SetFont(wxFont(9, wxSWISS , wxNORMAL, wxNORMAL, false, wxT("Arial Black"))); + for (i=0; i < 11; i++) + { + tmpi = (vmin + (vech * i)); + tmps.Printf(wxT("%d"), (int)tmpi); + MonDc.DrawRotatedText(tmps, 0, (int)(293 - (30 * i) + top), 0); + } + for (i=0; i < 12; i++) + { + tmpi = (hech * i * 100); + if (tmpi < 1000) + tmps.Printf(wxT("%ims"), (int)tmpi); + if (tmpi > 1000) + tmps.Printf(wxT("%is"), (int)(tmpi / 1000)); + MonDc.DrawRotatedText(tmps, (int)((60 * i) + left) - 10, (int)(317 + top), 0); + } + for (j=1; j < 10; j++) + MonDc.DrawLine((int)left, (int)(300 - (30 * j) + top), (int)(left + 660), (int)(300 - (30 * j) + top)); + MonDc.SetPen(wxPen(wxColor(150,200,150), 2, wxSOLID)); + for (j=1; j < 22; j++) + MonDc.DrawLine((int)(30 * j + left), (int)(300 + top), (int)(30 * j + left), (int)(top)); + MonDc.SetPen(wxPen(wxColor(150,170,150), 1, wxSOLID)); + for (j=1; j < 22; j++) + MonDc.DrawLine((int)(30 * j + left - 15), (int)(300 + top), (int)(30 * j + left - 15), (int)(top)); + MonDc.DrawLine((int)(30 * 22 + left - 15), (int)(300 + top), (int)(30 * 22 + left - 15), (int)(top)); + + double m = (- vmin) * d; + MonDc.SetPen(wxPen(wxColor(170,170,150), 3, wxSOLID)); + MonDc.DrawLine((int)(left), (int)(300 + top - m), (int)(left + 660), (int)(300 + top - m)); + + wxClientDC MaLeg(mylegpan); + MaLeg.Clear(); + + MaLeg.SetPen(wxPen(wxColour(150,200,100), 2, wxSOLID)); + MaLeg.SetFont(wxFont(7, wxSWISS , wxNORMAL, wxNORMAL, false, wxT("Arial Black"))); + for (int k=1, tmpi = 0; k < 30; k++) + { + if ((tmpi < 8) && is_set(k, inlist, in)) + { + if (k <= 4) + tmps.Printf(wxT("Analogue Output %d"), k); + if ((k > 4) && (k <= 12)) + tmps.Printf(wxT("Bool Output %d"), k - 4); + if ((k > 12) && (k <= 20)) + tmps.Printf(wxT("Analogue Input %d"), k - 12); + if ((k > 20) && (k <= 28)) + tmps.Printf(wxT("Bool Input %d"), k - 20); + + MaLeg.DrawRotatedText(tmps, 0, 10 * tmpi , 0); + MaLeg.SetPen(wxPen(col[tmpi], 4, wxSOLID)); + MaLeg.DrawLine(100, 10 * tmpi + 6, 115, 10 * tmpi + 6); + //////////////////////////////////////////DAW//////////////////////////////////////// + MonDc.SetPen(wxPen(col[tmpi], 4, wxSOLID)); + if (k <= 4) + y[k - 1][(int)g] = Write_Analogue_Output_16_Bit[k - 1]; + if ((k > 4) && (k <= 12)) + y[k - 1][(int)g] = get_bit(Write_Outputs_8_Bit[0] ,k - 4); + if ((k > 12) && (k <= 20)) + y[k - 1][(int)g] = Read_Analogue_Input_16_Bit[k - 1 -12]; + if ((k > 20) && (k <= 28)) + y[k - 1][(int)g] = get_bit(Read_Inputs_8_Bit[0] ,k - 20); + + if (y[k - 1][(int)g] > old_max) + old_max = y[k - 1][(int)g]; + if (y[k - 1][(int)g] < old_min) + old_min = y[k - 1][(int)g]; + for (j=1; j < (g + 1) ; j++) + { + p = (y[k - 1][j - 1] - vmin) * d; + q = (y[k - 1][j ] - vmin) * d; + MonDc.DrawLine((int)(15 * (j - 1) + left), (int)(300 + top - p), (int)(15 * j + left), (int)(300 + top - q)); + } + ///////////////////////////////////////////////////////////////////////////////////// + tmpi++; + } + } +} + +void actu_output(void) +{ + wxString tmp; + + frame->outbt1->SetValue(get_bit(Write_Outputs_8_Bit[0], 1)); + frame->outbt2->SetValue(get_bit(Write_Outputs_8_Bit[0], 2)); + frame->outbt3->SetValue(get_bit(Write_Outputs_8_Bit[0], 3)); + frame->outbt4->SetValue(get_bit(Write_Outputs_8_Bit[0], 4)); + frame->outbt5->SetValue(get_bit(Write_Outputs_8_Bit[0], 5)); + frame->outbt6->SetValue(get_bit(Write_Outputs_8_Bit[0], 6)); + frame->outbt7->SetValue(get_bit(Write_Outputs_8_Bit[0], 7)); + frame->outbt8->SetValue(get_bit(Write_Outputs_8_Bit[0], 8)); + + frame->outs1->SetValue(Write_Analogue_Output_16_Bit[0] + 32768); + frame->outs2->SetValue(Write_Analogue_Output_16_Bit[1] + 32768); + frame->outs3->SetValue(Write_Analogue_Output_16_Bit[2] + 32768); + frame->outs4->SetValue(Write_Analogue_Output_16_Bit[3] + 32768); + tmp.Printf(wxT(" %i"), Write_Analogue_Output_16_Bit[0]); + frame->outst1->SetLabel(tmp); + tmp.Printf(wxT(" %i"), Write_Analogue_Output_16_Bit[1]); + frame->outst2->SetLabel(tmp); + tmp.Printf(wxT(" %i"), Write_Analogue_Output_16_Bit[2]); + frame->outst3->SetLabel(tmp); + tmp.Printf(wxT(" %i"), Write_Analogue_Output_16_Bit[3]); + frame->outst4->SetLabel(tmp); +} + +void actu(void) +{ + actu_output(); + + Gtime++; + if (Gtime > hdelta) + { + old_max = 5; + old_min = -5; + Gtime = 0; + } + frame->Paint(); +} + +void MyFrame::OnTimer(wxTimerEvent& event) +{ + actu();// do whatever you want to do every second here +} + +void MyFrame::OnPaint( wxPaintEvent &event ) +{ + //Paint(); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/main.h Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,119 @@ +#ifndef MAIN_H_ +#define MAIN_H_ + +#include <wx/tglbtn.h> +#include <wx/slider.h> +#include <wx/brush.h> +#include <wx/dynarray.h> +#include <wx/listbox.h> +#include <wx/gauge.h> +#include <wx/spinctrl.h> + +class MyApp : public wxApp { +public: + virtual bool OnInit(); +}; + +class MyFrame : public wxFrame { +public: + + wxNotebook *book; + wxButton *stop; + wxButton *start; + wxTextCtrl *busname; + wxSpinCtrl *inst1; + wxSpinCtrl *inst2; + wxSpinCtrl *inst3; + wxSpinCtrl *inst4; + wxSpinCtrl *inst5; + wxSpinCtrl *inst6; + wxSpinCtrl *inst7; + wxSpinCtrl *inst8; + wxTextCtrl *drivername; + wxSpinCtrl *node_id; + wxToggleButton *inbt1; + wxToggleButton *inbt2; + wxToggleButton *inbt3; + wxToggleButton *inbt4; + wxToggleButton *inbt5; + wxToggleButton *inbt6; + wxToggleButton *inbt7; + wxToggleButton *inbt8; + wxSlider *ins1; + wxSlider *ins2; + wxSlider *ins3; + wxSlider *ins4; + wxSlider *ins5; + wxSlider *ins6; + wxSlider *ins7; + wxSlider *ins8; + wxToggleButton *outbt1; + wxToggleButton *outbt2; + wxToggleButton *outbt3; + wxToggleButton *outbt4; + wxToggleButton *outbt5; + wxToggleButton *outbt6; + wxToggleButton *outbt7; + wxToggleButton *outbt8; + wxGauge *outs1; + wxGauge *outs2; + wxGauge *outs3; + wxGauge *outs4; + wxStaticText *outst1; + wxStaticText *outst2; + wxStaticText *outst3; + wxStaticText *outst4; + wxSlider *echelle; + wxPanel *mygraphpan; + wxPanel *mylegpan; + wxListBox *inlist; + wxArrayInt in; + wxTimer m_timer; + + MyFrame(const wxString& title); + + void OnListBoxDoubleClick( wxCommandEvent &event ); + void OnInbt1(wxCommandEvent& event); + void OnInbt2(wxCommandEvent& event); + void OnInbt3(wxCommandEvent& event); + void OnInbt4(wxCommandEvent& event); + void OnInbt5(wxCommandEvent& event); + void OnInbt6(wxCommandEvent& event); + void OnInbt7(wxCommandEvent& event); + void OnInbt8(wxCommandEvent& event); + void OnQuit(wxCommandEvent& event); + void OnAdd(wxCommandEvent& event); + void OnRemove(wxCommandEvent& event); + void OnAbout(wxCommandEvent& event); + void OnStart(wxCommandEvent& WXUNUSED(event)); + void OnStop(wxCommandEvent& WXUNUSED(event)); + void OnFreqBoxClick(wxCommandEvent& WXUNUSED(event)); + void OnLoad(wxCommandEvent& WXUNUSED(event)); + void OnPaint(wxPaintEvent& WXUNUSED(event)); + void OnIns1(wxScrollEvent &event); + void OnIns2(wxScrollEvent &event); + void OnIns3(wxScrollEvent &event); + void OnIns4(wxScrollEvent &event); + void OnIns5(wxScrollEvent &event); + void OnIns6(wxScrollEvent &event); + void OnIns7(wxScrollEvent &event); + void OnIns8(wxScrollEvent &event); + void OnInst1( wxSpinEvent &ev ); + void OnInst2( wxSpinEvent &ev ); + void OnInst3( wxSpinEvent &ev ); + void OnInst4( wxSpinEvent &ev ); + void OnInst5( wxSpinEvent &ev ); + void OnInst6( wxSpinEvent &ev ); + void OnInst7( wxSpinEvent &ev ); + void OnInst8( wxSpinEvent &ev ); + void Paint(); + void OnTimer(wxTimerEvent& event); +private: + DECLARE_EVENT_TABLE() +}; + +void actu(void); +void actu_output(void); + + +#endif /*MAIN_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/monicone.xpm Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,6339 @@ +/* XPM */ +static char * monicone_xpm[] = { +"127 126 6210 2", +" c None", +". c #020200", +"+ c #020500", +"@ c #000201", +"# c #000503", +"$ c #000102", +"% c #00080A", +"& c #000103", +"* c #000002", +"= c #000000", +"- c #000105", +"; c #000004", +"> c #020005", +", c #020003", +"' c #070005", +") c #000008", +"! c #00000A", +"~ c #000009", +"{ c #010007", +"] c #050007", +"^ c #060008", +"/ c #000016", +"( c #00000E", +"_ c #000010", +": c #000113", +"< c #010012", +"[ c #010010", +"} c #030011", +"| c #04000F", +"1 c #04000E", +"2 c #03000C", +"3 c #04000B", +"4 c #02000C", +"5 c #0B0C00", +"6 c #000117", +"7 c #000015", +"8 c #000724", +"9 c #000627", +"0 c #000525", +"a c #000524", +"b c #000421", +"c c #00011E", +"d c #00001D", +"e c #03001B", +"f c #020018", +"g c #000212", +"h c #000211", +"i c #000210", +"j c #00000F", +"k c #101300", +"l c #000200", +"m c #040500", +"n c #00011C", +"o c #000019", +"p c #000625", +"q c #000C36", +"r c #001045", +"s c #00124A", +"t c #000F43", +"u c #000C3C", +"v c #000D39", +"w c #000A37", +"x c #000632", +"y c #00032F", +"z c #00042A", +"A c #000523", +"B c #000420", +"C c #00041E", +"D c #000115", +"E c #000316", +"F c #000313", +"G c #000616", +"H c #080900", +"I c #080800", +"J c #010100", +"K c #000230", +"L c #000526", +"M c #000022", +"N c #00082F", +"O c #00113E", +"P c #00164E", +"Q c #001D67", +"R c #001B60", +"S c #001D5F", +"T c #001A5D", +"U c #001860", +"V c #001861", +"W c #001258", +"X c #000F4E", +"Y c #000D43", +"Z c #000935", +"` c #00082E", +" . c #000020", +".. c #000827", +"+. c #000622", +"@. c #00051B", +"#. c #000617", +"$. c #000315", +"%. c #010000", +"&. c #060500", +"*. c #030000", +"=. c #030300", +"-. c #00030E", +";. c #000933", +">. c #000D3B", +",. c #001249", +"'. c #001958", +"). c #001C58", +"!. c #002676", +"~. c #002678", +"{. c #00277A", +"]. c #002780", +"^. c #002680", +"/. c #002179", +"(. c #001D71", +"_. c #00186B", +":. c #001665", +"<. c #000939", +"[. c #000B3A", +"}. c #000027", +"|. c #000024", +"1. c #000629", +"2. c #000621", +"3. c #000013", +"4. c #00000D", +"5. c #010006", +"6. c #010002", +"7. c #000411", +"8. c #000E34", +"9. c #001654", +"0. c #001A5F", +"a. c #00226B", +"b. c #00246B", +"c. c #002572", +"d. c #002E8A", +"e. c #003398", +"f. c #003090", +"g. c #002D8E", +"h. c #002C8B", +"i. c #00298A", +"j. c #002888", +"k. c #002385", +"l. c #001D7C", +"m. c #001973", +"n. c #001156", +"o. c #000E53", +"p. c #000C40", +"q. c #000C3F", +"r. c #000936", +"s. c #000423", +"t. c #000018", +"u. c #00000B", +"v. c #030004", +"w. c #060004", +"x. c #040001", +"y. c #020001", +"z. c #000100", +"A. c #050800", +"B. c #030002", +"C. c #060007", +"D. c #020006", +"E. c #010005", +"F. c #000405", +"G. c #000403", +"H. c #00010E", +"I. c #000B35", +"J. c #001862", +"K. c #001E6F", +"L. c #00216F", +"M. c #002976", +"N. c #00307D", +"O. c #003684", +"P. c #004197", +"Q. c #00469F", +"R. c #004191", +"S. c #003A87", +"T. c #003F92", +"U. c #0044A2", +"V. c #0043A4", +"W. c #003894", +"X. c #002C7C", +"Y. c #00195C", +"Z. c #001C63", +"`. c #001F68", +" + c #001F64", +".+ c #001B56", +"++ c #00184C", +"@+ c #001645", +"#+ c #000D32", +"$+ c #000017", +"%+ c #01000E", +"&+ c #000007", +"*+ c #010004", +"=+ c #050004", +"-+ c #010700", +";+ c #030500", +">+ c #040400", +",+ c #060000", +"'+ c #000300", +")+ c #0C1700", +"!+ c #0E0200", +"~+ c #080000", +"{+ c #0C000A", +"]+ c #0C000F", +"^+ c #06000C", +"/+ c #06000E", +"(+ c #090013", +"_+ c #04000D", +":+ c #00030A", +"<+ c #000A0B", +"[+ c #000C09", +"}+ c #000B16", +"|+ c #000E3F", +"1+ c #001264", +"2+ c #001A6D", +"3+ c #00216C", +"4+ c #00317C", +"5+ c #00428D", +"6+ c #004E92", +"7+ c #005998", +"8+ c #00619A", +"9+ c #00679D", +"0+ c #0069A2", +"a+ c #0069A5", +"b+ c #0067A7", +"c+ c #005CA0", +"d+ c #004F91", +"e+ c #003F7A", +"f+ c #002654", +"g+ c #002851", +"h+ c #002C58", +"i+ c #003161", +"j+ c #003B72", +"k+ c #003C75", +"l+ c #003974", +"m+ c #003774", +"n+ c #002A5F", +"o+ c #001237", +"p+ c #000322", +"q+ c #000920", +"r+ c #000213", +"s+ c #040005", +"t+ c #000501", +"u+ c #000400", +"v+ c #000D00", +"w+ c #011600", +"x+ c #000500", +"y+ c #020D00", +"z+ c #020800", +"A+ c #070A00", +"B+ c #010300", +"C+ c #010C00", +"D+ c #140900", +"E+ c #040000", +"F+ c #01000B", +"G+ c #030010", +"H+ c #040012", +"I+ c #0D001A", +"J+ c #0A0018", +"K+ c #050016", +"L+ c #000314", +"M+ c #000511", +"N+ c #00131A", +"O+ c #001B31", +"P+ c #001E58", +"Q+ c #001F60", +"R+ c #002362", +"S+ c #00327E", +"T+ c #004B9F", +"U+ c #0058A7", +"V+ c #0070B8", +"W+ c #009BE8", +"X+ c #00B7FF", +"Y+ c #00B5F5", +"Z+ c #00AAE3", +"`+ c #00A1DA", +" @ c #009FDD", +".@ c #009FE5", +"+@ c #0093E4", +"@@ c #0085D4", +"#@ c #0061A9", +"$@ c #005595", +"%@ c #004C83", +"&@ c #004576", +"*@ c #004573", +"=@ c #003967", +"-@ c #003461", +";@ c #003765", +">@ c #002D5D", +",@ c #002149", +"'@ c #00163A", +")@ c #000C27", +"!@ c #000012", +"~@ c #000005", +"{@ c #050009", +"]@ c #06000A", +"^@ c #030009", +"/@ c #000308", +"(@ c #00080B", +"_@ c #000404", +":@ c #000502", +"<@ c #00130F", +"[@ c #000903", +"}@ c #000600", +"|@ c #000B03", +"1@ c #040700", +"2@ c #10000D", +"3@ c #000205", +"4@ c #000302", +"5@ c #000604", +"6@ c #00140F", +"7@ c #000E0A", +"8@ c #000609", +"9@ c #000D15", +"0@ c #010011", +"a@ c #0B001A", +"b@ c #10001E", +"c@ c #0C0022", +"d@ c #010021", +"e@ c #000726", +"f@ c #001633", +"g@ c #00274E", +"h@ c #004076", +"i@ c #004F8E", +"j@ c #005CA9", +"k@ c #0070C9", +"l@ c #007CDC", +"m@ c #008BED", +"n@ c #00A7F7", +"o@ c #00B8FB", +"p@ c #00B9F5", +"q@ c #00B1EB", +"r@ c #00AEE1", +"s@ c #00AFE3", +"t@ c #0092FF", +"u@ c #0081E0", +"v@ c #007ED4", +"w@ c #007ED0", +"x@ c #0067A8", +"y@ c #00487B", +"z@ c #002F5E", +"A@ c #002352", +"B@ c #00143D", +"C@ c #00072F", +"D@ c #040020", +"E@ c #040013", +"F@ c #06000D", +"G@ c #02000A", +"H@ c #02000E", +"I@ c #000B20", +"J@ c #00071D", +"K@ c #00031B", +"L@ c #000319", +"M@ c #00081C", +"N@ c #000B1B", +"O@ c #00020C", +"P@ c #000107", +"Q@ c #000A17", +"R@ c #00050F", +"S@ c #00040E", +"T@ c #00141D", +"U@ c #00101C", +"V@ c #000112", +"W@ c #000D1D", +"X@ c #000D16", +"Y@ c #001A1A", +"Z@ c #000F0B", +"`@ c #00130D", +" # c #001A1B", +".# c #000615", +"+# c #050018", +"@# c #0C0023", +"## c #07002A", +"$# c #001541", +"%# c #002D5B", +"&# c #004775", +"*# c #006E9F", +"=# c #006D99", +"-# c #007AB0", +";# c #009BE3", +"># c #008FD9", +",# c #007DC0", +"'# c #008BD4", +")# c #00A4F3", +"!# c #00ACFF", +"~# c #00A9FF", +"{# c #00A7FF", +"]# c #00B4FF", +"^# c #00C3FF", +"/# c #009DF7", +"(# c #006BAC", +"_# c #004C84", +":# c #003568", +"<# c #001B44", +"[# c #000F31", +"}# c #000118", +"|# c #02000F", +"1# c #00050A", +"2# c #000413", +"3# c #00162B", +"4# c #001C37", +"5# c #002044", +"6# c #00254E", +"7# c #002B5E", +"8# c #002F66", +"9# c #002B5D", +"0# c #002C5E", +"a# c #002652", +"b# c #001D3A", +"c# c #001023", +"d# c #000612", +"e# c #001E2C", +"f# c #002132", +"g# c #000C1E", +"h# c #001326", +"i# c #002137", +"j# c #001932", +"k# c #001E3F", +"l# c #002242", +"m# c #00162A", +"n# c #00232E", +"o# c #002524", +"p# c #00342F", +"q# c #001713", +"r# c #00090B", +"s# c #00021A", +"t# c #010026", +"u# c #000A39", +"v# c #001C4B", +"w# c #003C6E", +"x# c #0065A2", +"y# c #008BC3", +"z# c #00AAD1", +"A# c #00859F", +"B# c #007490", +"C# c #0089AF", +"D# c #0097CD", +"E# c #00A2E8", +"F# c #00A1F1", +"G# c #008CDD", +"H# c #00B1FF", +"I# c #00D5FF", +"J# c #00CFFF", +"K# c #00A6F1", +"L# c #008ACA", +"M# c #0081BE", +"N# c #008ED4", +"O# c #00A3FF", +"P# c #0067A9", +"Q# c #003C65", +"R# c #00132E", +"S# c #000619", +"T# c #00121E", +"U# c #00020B", +"V# c #00050C", +"W# c #00222A", +"X# c #003543", +"Y# c #004A65", +"Z# c #005E8D", +"`# c #005D94", +" $ c #005791", +".$ c #005A9E", +"+$ c #0064B0", +"@$ c #005CA4", +"#$ c #0060AB", +"$$ c #005FA3", +"%$ c #004E7F", +"&$ c #004363", +"*$ c #003649", +"=$ c #003C4B", +"-$ c #00394F", +";$ c #001124", +">$ c #00142C", +",$ c #003D5A", +"'$ c #004066", +")$ c #00436F", +"!$ c #003B6A", +"~$ c #003B64", +"{$ c #003858", +"]$ c #004D64", +"^$ c #005563", +"/$ c #005259", +"($ c #003E45", +"_$ c #002B35", +":$ c #00172B", +"<$ c #00102A", +"[$ c #001438", +"}$ c #002856", +"|$ c #004D7E", +"1$ c #0082BB", +"2$ c #00BDFF", +"3$ c #00CCFE", +"4$ c #00D9F8", +"5$ c #00EAFF", +"6$ c #00CDE7", +"7$ c #008FA9", +"8$ c #00607D", +"9$ c #00779A", +"0$ c #009AD4", +"a$ c #00B6FF", +"b$ c #009FF6", +"c$ c #00A5FF", +"d$ c #00B0DD", +"e$ c #00A6CB", +"f$ c #0093B7", +"g$ c #0095C2", +"h$ c #00B4F0", +"i$ c #00CAFF", +"j$ c #00AFF7", +"k$ c #00ADF3", +"l$ c #00A4E5", +"m$ c #008ABF", +"n$ c #005B79", +"o$ c #00374C", +"p$ c #001F2D", +"q$ c #00202A", +"r$ c #00333D", +"s$ c #005564", +"t$ c #00697D", +"u$ c #007492", +"v$ c #007EA8", +"w$ c #0081B4", +"x$ c #007AB6", +"y$ c #007BBE", +"z$ c #007FC8", +"A$ c #0092E7", +"B$ c #0090DF", +"C$ c #0081C7", +"D$ c #0070A6", +"E$ c #006F9C", +"F$ c #006384", +"G$ c #005369", +"H$ c #00495A", +"I$ c #003A50", +"J$ c #003147", +"K$ c #003544", +"L$ c #001F32", +"M$ c #004C63", +"N$ c #006A8D", +"O$ c #0074A4", +"P$ c #006291", +"Q$ c #005F92", +"R$ c #00619B", +"S$ c #005686", +"T$ c #00507A", +"U$ c #004B71", +"V$ c #004A69", +"W$ c #00405D", +"X$ c #003654", +"Y$ c #00304F", +"Z$ c #002C51", +"`$ c #002747", +" % c #003756", +".% c #006289", +"+% c #00A0C8", +"@% c #00DBFF", +"#% c #00F9FF", +"$% c #00E6FF", +"%% c #00EDFF", +"&% c #00D2E5", +"*% c #00C7DA", +"=% c #00CCE8", +"-% c #00BCD9", +";% c #0090AA", +">% c #00718D", +",% c #007191", +"'% c #0080A9", +")% c #0080AE", +"!% c #0085B7", +"~% c #0089BD", +"{% c #0090C4", +"]% c #0097C5", +"^% c #0098C6", +"/% c #009BB5", +"(% c #008484", +"_% c #00A19C", +":% c #00BCC2", +"<% c #00CCE4", +"[% c #00D8FF", +"}% c #00D4FF", +"|% c #00CEFF", +"1% c #00D2FF", +"2% c #00BBF1", +"3% c #00C3F6", +"4% c #00D9FF", +"5% c #00BFE8", +"6% c #0087A3", +"7% c #005567", +"8% c #003B4A", +"9% c #005B6E", +"0% c #007D95", +"a% c #008AA5", +"b% c #0082A1", +"c% c #0083A6", +"d% c #0092BF", +"e% c #009BCE", +"f% c #009CD7", +"g% c #00A9EB", +"h% c #00B0F7", +"i% c #00B0F8", +"j% c #00A5E6", +"k% c #008DC4", +"l% c #007AA6", +"m% c #007399", +"n% c #006F92", +"o% c #006788", +"p% c #004F71", +"q% c #002F46", +"r% c #003752", +"s% c #002643", +"t% c #002940", +"u% c #006C85", +"v% c #00829F", +"w% c #0090B7", +"x% c #008AB9", +"y% c #007DB1", +"z% c #007CB6", +"A% c #0083BF", +"B% c #0072AC", +"C% c #005E92", +"D% c #005489", +"E% c #004678", +"F% c #003F72", +"G% c #003760", +"H% c #00426D", +"I% c #003A5A", +"J% c #00627E", +"K% c #00AFCE", +"L% c #00DEF4", +"M% c #00E1F0", +"N% c #00F2FB", +"O% c #00F2FE", +"P% c #00F1FF", +"Q% c #00D6EE", +"R% c #00CCE3", +"S% c #00DDF2", +"T% c #00D3EA", +"U% c #00BDD4", +"V% c #00BFD5", +"W% c #009CB4", +"X% c #0095AC", +"Y% c #008BA1", +"Z% c #00859B", +"`% c #00899D", +" & c #0092A3", +".& c #009CAB", +"+& c #00A1A7", +"@& c #00DCCA", +"#& c #00FBE1", +"$& c #00FBF2", +"%& c #00E7ED", +"&& c #00E2F7", +"*& c #00DDFE", +"=& c #00DAFF", +"-& c #00E2FF", +";& c #00DCFF", +">& c #00CFF8", +",& c #00C6E9", +"'& c #00C1E3", +")& c #00CAF0", +"!& c #00A3C1", +"~& c #006C7F", +"{& c #005A70", +"]& c #007E9F", +"^& c #0088AC", +"/& c #008BAF", +"(& c #009EC8", +"_& c #00C4F7", +":& c #00BFF0", +"<& c #00B1E3", +"[& c #00CBFF", +"}& c #00E8FF", +"|& c #00BDF7", +"1& c #00A5DD", +"2& c #00A4DE", +"3& c #0087BA", +"4& c #0077A4", +"5& c #0073A2", +"6& c #006793", +"7& c #005A84", +"8& c #004466", +"9& c #003854", +"0& c #003A59", +"a& c #001E41", +"b& c #005C7D", +"c& c #007C99", +"d& c #009DBD", +"e& c #00AECF", +"f& c #00ABD3", +"g& c #00A3D4", +"h& c #009AD1", +"i& c #0097CE", +"j& c #009ED1", +"k& c #008BBC", +"l& c #0086C0", +"m& c #0076BB", +"n& c #005FA9", +"o& c #00529A", +"p& c #004B8B", +"q& c #005188", +"r& c #003B65", +"s& c #007FA1", +"t& c #00B4CE", +"u& c #00D0DC", +"v& c #00E6E9", +"w& c #00E2DB", +"x& c #00D4CC", +"y& c #00D4D5", +"z& c #00D6F7", +"A& c #00DEFF", +"B& c #00CDE5", +"C& c #00D7E7", +"D& c #00E9F2", +"E& c #00E4EA", +"F& c #00F3F4", +"G& c #00F5F4", +"H& c #00E4E0", +"I& c #00DED9", +"J& c #00EAE0", +"K& c #00F8EB", +"L& c #00F1DF", +"M& c #00DECC", +"N& c #00CEC2", +"O& c #00D6CE", +"P& c #00DFDD", +"Q& c #00CACB", +"R& c #00D4D6", +"S& c #00E1E8", +"T& c #00DBE7", +"U& c #00DDED", +"V& c #00D4EB", +"W& c #00CBE8", +"X& c #00C8E8", +"Y& c #00CDF2", +"Z& c #00C7EE", +"`& c #00C2E7", +" * c #00E1FF", +".* c #008FB0", +"+* c #006C96", +"@* c #0095CA", +"#* c #00C7FF", +"$* c #00F3FF", +"%* c #00C6F3", +"&* c #00D2F9", +"** c #00EBFF", +"=* c #00BFEA", +"-* c #00B0E1", +";* c #0087C3", +">* c #0079B7", +",* c #0075B8", +"'* c #006DAE", +")* c #006397", +"!* c #005C87", +"~* c #004D73", +"{* c #004160", +"]* c #00364E", +"^* c #002753", +"/* c #005D8B", +"(* c #0099CB", +"_* c #009EC3", +":* c #00A3C0", +"<* c #00B3D2", +"[* c #00C8F0", +"}* c #00B8F1", +"|* c #00A4D6", +"1* c #00A7D1", +"2* c #00A4D1", +"3* c #009CDA", +"4* c #0082CB", +"5* c #0074C8", +"6* c #006DC7", +"7* c #0061A5", +"8* c #005389", +"9* c #0092BE", +"0* c #00CFF1", +"a* c #00D7E6", +"b* c #00E6E7", +"c* c #00D1CC", +"d* c #00D9CC", +"e* c #00A298", +"f* c #009396", +"g* c #00A7CB", +"h* c #00B5E9", +"i* c #00C0E7", +"j* c #00D5F1", +"k* c #00F2FF", +"l* c #00F7FF", +"m* c #00F2F6", +"n* c #00E9EF", +"o* c #00F2FC", +"p* c #00F6FF", +"q* c #00E5F5", +"r* c #00C6D2", +"s* c #00B6C1", +"t* c #00BDC6", +"u* c #00C6DD", +"v* c #00BBE5", +"w* c #00F0FF", +"x* c #00F8FF", +"y* c #00E6F8", +"z* c #00D6DD", +"A* c #00D6D5", +"B* c #00D1CE", +"C* c #00A9AA", +"D* c #0095A0", +"E* c #007688", +"F* c #007691", +"G* c #00C0E5", +"H* c #00C8F1", +"I* c #007DAE", +"J* c #0079B3", +"K* c #00AAEB", +"L* c #00E7F9", +"M* c #00E0EE", +"N* c #00EBFB", +"O* c #00C5D9", +"P* c #00BFE5", +"Q* c #00B0F9", +"R* c #008FDC", +"S* c #007FCA", +"T* c #0071B8", +"U* c #006DA7", +"V* c #00618E", +"W* c #005C86", +"X* c #00567D", +"Y* c #003D58", +"Z* c #00405C", +"`* c #00356A", +" = c #00355F", +".= c #005787", +"+= c #0075A6", +"@= c #00ADDD", +"#= c #00B8DC", +"$= c #00C2DF", +"%= c #00CDEC", +"&= c #00E5FF", +"*= c #00DDFF", +"== c #00D3FF", +"-= c #00C6F0", +";= c #00B8E6", +">= c #00ADE7", +",= c #009CE9", +"'= c #0090EB", +")= c #007BCA", +"!= c #006CA7", +"~= c #0081B0", +"{= c #00EEFF", +"]= c #00EFF4", +"^= c #00E7E5", +"/= c #00B1AB", +"(= c #00726E", +"_= c #002B2C", +":= c #001621", +"<= c #005670", +"[= c #0080A6", +"}= c #00A4C7", +"|= c #00DBFC", +"1= c #00E1F5", +"2= c #00FDFF", +"3= c #00D0FF", +"4= c #00ABEE", +"5= c #0090D4", +"6= c #0081C4", +"7= c #0076B9", +"8= c #0075BB", +"9= c #0078C4", +"0= c #0072CE", +"a= c #0082DF", +"b= c #00ACF5", +"c= c #00FFFF", +"d= c #00F7F0", +"e= c #00D6C3", +"f= c #008D7D", +"g= c #003635", +"h= c #000C15", +"i= c #00091C", +"j= c #00364F", +"k= c #008EBB", +"l= c #00D0FC", +"m= c #00D2F2", +"n= c #00C6EB", +"o= c #00ACE8", +"p= c #0081BA", +"q= c #00D7CE", +"r= c #00CDFF", +"s= c #00AFF8", +"t= c #0099E7", +"u= c #0088CE", +"v= c #0076AD", +"w= c #0073A5", +"x= c #006591", +"y= c #00628C", +"z= c #004F70", +"A= c #003D55", +"B= c #003259", +"C= c #006EA8", +"D= c #0084BB", +"E= c #0089B5", +"F= c #00A7CD", +"G= c #00C5E7", +"H= c #00E9FF", +"I= c #00ECFF", +"J= c #00DFFF", +"K= c #00B4F1", +"L= c #009BE2", +"M= c #0089D5", +"N= c #0075B2", +"O= c #0077A9", +"P= c #00B4E2", +"Q= c #00D3F0", +"R= c #00D4E1", +"S= c #00FBFF", +"T= c #00E4E1", +"U= c #00B8BA", +"V= c #003B3F", +"W= c #00142A", +"X= c #00647F", +"Y= c #0089A5", +"Z= c #00C1E0", +"`= c #00D5F6", +" - c #00C4E5", +".- c #00E0FF", +"+- c #00D1FF", +"@- c #0090E6", +"#- c #0075D3", +"$- c #006ED7", +"%- c #0072EA", +"&- c #0074F7", +"*- c #0074F4", +"=- c #006DED", +"-- c #005EDE", +";- c #005AC7", +">- c #0077C8", +",- c #00B0F0", +"'- c #00C8B8", +")- c #00655A", +"!- c #00100E", +"~- c #000E15", +"{- c #00081A", +"]- c #000520", +"^- c #005174", +"/- c #00AAD3", +"(- c #00D0EC", +"_- c #009ACE", +":- c #008AB0", +"<- c #00BEFF", +"[- c #008DC5", +"}- c #0087BE", +"|- c #007CB1", +"1- c #006E9C", +"2- c #006995", +"3- c #005D83", +"4- c #004361", +"5- c #003E61", +"6- c #005B83", +"7- c #0092C6", +"8- c #00B8F2", +"9- c #00D4FD", +"0- c #00E4FF", +"a- c #00A6DF", +"b- c #0076A9", +"c- c #006A9F", +"d- c #006D9F", +"e- c #00B9DC", +"f- c #00E9FE", +"g- c #00D8E1", +"h- c #00EEEF", +"i- c #00C8CA", +"j- c #009CA9", +"k- c #002C3C", +"l- c #000723", +"m- c #00213F", +"n- c #00132B", +"o- c #006278", +"p- c #007B91", +"q- c #00C2EA", +"r- c #00BBEA", +"s- c #00B7F8", +"t- c #008AD1", +"u- c #0066B9", +"v- c #005CC3", +"w- c #0054D4", +"x- c #0054F0", +"y- c #0059FF", +"z- c #005DFF", +"A- c #0061FF", +"B- c #0063FF", +"C- c #0061EE", +"D- c #006ED0", +"E- c #007ABD", +"F- c #0099C6", +"G- c #00DCFA", +"H- c #00CFDE", +"I- c #006266", +"J- c #000B1A", +"K- c #000E26", +"L- c #005273", +"M- c #009EC5", +"N- c #00C1DA", +"O- c #00D2EB", +"P- c #00B2D1", +"Q- c #00C5EB", +"R- c #009CB0", +"S- c #00989F", +"T- c #009476", +"U- c #00D1F8", +"V- c #00ADD9", +"W- c #009ED5", +"X- c #0080B3", +"Y- c #007BAD", +"Z- c #0076A4", +"`- c #00658F", +" ; c #00658E", +".; c #005479", +"+; c #005880", +"@; c #003355", +"#; c #004B6B", +"$; c #007FAA", +"%; c #009FCC", +"&; c #00BDEA", +"*; c #00A7DC", +"=; c #007FB1", +"-; c #005C8A", +";; c #00618C", +">; c #00718F", +",; c #009AB3", +"'; c #00B9C5", +"); c #00DDE0", +"!; c #00D9DC", +"~; c #00D1DA", +"{; c #0096AD", +"]; c #005975", +"^; c #000F34", +"/; c #002B49", +"(; c #00748E", +"_; c #008DA7", +":; c #00A5C6", +"<; c #00B3DB", +"[; c #00A5D5", +"}; c #0090CD", +"|; c #006BAE", +"1; c #005CBC", +"2; c #004AC1", +"3; c #003AC5", +"4; c #0035CD", +"5; c #0038CD", +"6; c #003CCE", +"7; c #0046D5", +"8; c #004BDD", +"9; c #0044D3", +"0; c #0054DF", +"a; c #0063CE", +"b; c #006DBA", +"c; c #007BB2", +"d; c #009FD1", +"e; c #00C8FD", +"f; c #009FC9", +"g; c #003E56", +"h; c #000F29", +"i; c #000D2B", +"j; c #003856", +"k; c #00B0D6", +"l; c #00C2DB", +"m; c #00C6DC", +"n; c #00B0C2", +"o; c #0096A1", +"p; c #007178", +"q; c #004748", +"r; c #003330", +"s; c #002925", +"t; c #000E07", +"u; c #002019", +"v; c #003631", +"w; c #004943", +"x; c #007C7C", +"y; c #00DDEF", +"z; c #00A3D3", +"A; c #00A1DE", +"B; c #008CC1", +"C; c #0076A3", +"D; c #007CAD", +"E; c #006189", +"F; c #00628D", +"G; c #004E6F", +"H; c #002E44", +"I; c #00617D", +"J; c #008CAE", +"K; c #00B3DA", +"L; c #00BBDD", +"M; c #00C8E6", +"N; c #00C7E9", +"O; c #00B2DA", +"P; c #007397", +"Q; c #00557C", +"R; c #00436A", +"S; c #003E62", +"T; c #003555", +"U; c #002944", +"V; c #002335", +"W; c #00444E", +"X; c #005F65", +"Y; c #008C8E", +"Z; c #00A9AE", +"`; c #00DEF1", +" > c #00D0F1", +".> c #00B7E8", +"+> c #00709F", +"@> c #006690", +"#> c #00779D", +"$> c #009AC2", +"%> c #00B7E2", +"&> c #00AACF", +"*> c #008AAD", +"=> c #006B92", +"-> c #005481", +";> c #003C76", +">> c #002663", +",> c #001754", +"'> c #001450", +")> c #001A51", +"!> c #002155", +"~> c #002D5C", +"{> c #00346A", +"]> c #003587", +"^> c #003994", +"/> c #004698", +"(> c #005AA8", +"_> c #0064A9", +":> c #006EAB", +"<> c #0097DE", +"[> c #00CCFF", +"}> c #00B8FC", +"|> c #0091C2", +"1> c #0089B3", +"2> c #0091B6", +"3> c #00A4C9", +"4> c #00A8C5", +"5> c #00DDFC", +"6> c #00DCF2", +"7> c #00656A", +"8> c #003837", +"9> c #001313", +"0> c #000A0C", +"a> c #001218", +"b> c #000E16", +"c> c #00010B", +"d> c #000912", +"e> c #000E19", +"f> c #000A15", +"g> c #002630", +"h> c #00505B", +"i> c #00919F", +"j> c #00D4EC", +"k> c #00B5E7", +"l> c #00C9FF", +"m> c #0077A6", +"n> c #0088C0", +"o> c #006790", +"p> c #005981", +"q> c #006999", +"r> c #002A42", +"s> c #003D54", +"t> c #006482", +"u> c #008EB3", +"v> c #00A3C7", +"w> c #00FAFF", +"x> c #007184", +"y> c #00516E", +"z> c #004A6B", +"A> c #004668", +"B> c #003653", +"C> c #00263A", +"D> c #001D2D", +"E> c #001520", +"F> c #001017", +"G> c #00363D", +"H> c #005E68", +"I> c #008494", +"J> c #00BCDB", +"K> c #00D1F7", +"L> c #00CBF7", +"M> c #00C3F9", +"N> c #00BFF4", +"O> c #009BC1", +"P> c #006C88", +"Q> c #003953", +"R> c #002743", +"S> c #001935", +"T> c #000E2C", +"U> c #000823", +"V> c #000821", +"W> c #000C1D", +"X> c #000F1B", +"Y> c #001821", +"Z> c #002032", +"`> c #001F4C", +" , c #00215D", +"., c #001C57", +"+, c #003069", +"@, c #00437E", +"#, c #005590", +"$, c #0080C7", +"%, c #00B3FF", +"&, c #00CBEF", +"*, c #00C2D9", +"=, c #00BECF", +"-, c #00CADD", +";, c #006D72", +">, c #00120E", +",, c #000D06", +"', c #000805", +"), c #001214", +"!, c #000207", +"~, c #03000A", +"{, c #010009", +"], c #00000C", +"^, c #000F19", +"/, c #001E27", +"(, c #002229", +"_, c #004A53", +":, c #008F9C", +"<, c #00DAFA", +"[, c #00F4FF", +"}, c #00B5F3", +"|, c #00B1EA", +"1, c #0093C2", +"2, c #007DA7", +"3, c #0079A7", +"4, c #006C99", +"5, c #006795", +"6, c #00476A", +"7, c #00567B", +"8, c #005671", +"9, c #005469", +"0, c #003C4E", +"a, c #00597A", +"b, c #0078A6", +"c, c #0092C8", +"d, c #00A4DB", +"e, c #00D7FF", +"f, c #00FCFF", +"g, c #00535A", +"h, c #00394C", +"i, c #003241", +"j, c #003340", +"k, c #00313F", +"l, c #002C3A", +"m, c #002E3F", +"n, c #001F2F", +"o, c #001B2D", +"p, c #000F23", +"q, c #000719", +"r, c #003E4D", +"s, c #008A98", +"t, c #00BAC2", +"u, c #00EDF3", +"v, c #00D2FC", +"w, c #00BFF7", +"x, c #0096C6", +"y, c #006283", +"z, c #003F58", +"A, c #001A31", +"B, c #001629", +"C, c #001627", +"D, c #000E1E", +"E, c #00030F", +"F, c #00040D", +"G, c #00040C", +"H, c #00070E", +"I, c #001117", +"J, c #000415", +"K, c #000023", +"L, c #000330", +"M, c #000C37", +"N, c #001439", +"O, c #001536", +"P, c #002645", +"Q, c #004F73", +"R, c #0074A8", +"S, c #00B9FF", +"T, c #00CEF7", +"U, c #00EEF3", +"V, c #00E3D9", +"W, c #007B77", +"X, c #00211B", +"Y, c #000A00", +"Z, c #001005", +"`, c #000800", +" ' c #000F09", +".' c #00100F", +"+' c #00100D", +"@' c #00302E", +"#' c #003038", +"$' c #005262", +"%' c #00BCED", +"&' c #00E3FF", +"*' c #00C6F4", +"=' c #00B5DE", +"-' c #009AC0", +";' c #0082AB", +">' c #0075A7", +",' c #0076B0", +"'' c #006090", +")' c #005F89", +"!' c #007EA6", +"~' c #007995", +"{' c #007086", +"]' c #005E6E", +"^' c #00495C", +"/' c #006C93", +"(' c #0084BC", +"_' c #009ADC", +":' c #00A9ED", +"<' c #00635D", +"[' c #003034", +"}' c #00111E", +"|' c #002234", +"1' c #00353F", +"2' c #002732", +"3' c #001D2C", +"4' c #000215", +"5' c #000218", +"6' c #080016", +"7' c #020011", +"8' c #000A1C", +"9' c #001A27", +"0' c #005C64", +"a' c #00C5C5", +"b' c #00EAE4", +"c' c #00EFF1", +"d' c #007599", +"e' c #00475F", +"f' c #00283E", +"g' c #00172E", +"h' c #000E23", +"i' c #000517", +"j' c #00010C", +"k' c #000710", +"l' c #000D1A", +"m' c #001321", +"n' c #001120", +"o' c #00041B", +"p' c #00001E", +"q' c #000721", +"r' c #002036", +"s' c #003750", +"t' c #004769", +"u' c #005A89", +"v' c #009DD9", +"w' c #00FFFB", +"x' c #00AF9F", +"y' c #004039", +"z' c #00130B", +"A' c #000C08", +"B' c #00110F", +"C' c #00180D", +"D' c #00333C", +"E' c #002A3F", +"F' c #00648F", +"G' c #00B6FB", +"H' c #00D3FB", +"I' c #00C1E4", +"J' c #00ABD0", +"K' c #0097C1", +"L' c #007CB2", +"M' c #0071AB", +"N' c #006093", +"O' c #006594", +"P' c #0094C1", +"Q' c #0099BF", +"R' c #0087A2", +"S' c #00708A", +"T' c #006A8A", +"U' c #008694", +"V' c #007582", +"W' c #005C69", +"X' c #003E51", +"Y' c #006991", +"Z' c #007EB3", +"`' c #0096DA", +" ) c #00AAEF", +".) c #00C0FF", +"+) c #003D3B", +"@) c #001114", +"#) c #001422", +"$) c #002A45", +"%) c #001C30", +"&) c #001325", +"*) c #00071A", +"=) c #00020E", +"-) c #00131E", +";) c #000B13", +">) c #002C33", +",) c #00919C", +"') c #00DAE7", +")) c #00C7D1", +"!) c #006D78", +"~) c #00424C", +"{) c #000F1D", +"]) c #000919", +"^) c #000A1E", +"/) c #00091E", +"() c #00031A", +"_) c #00061D", +":) c #000C23", +"<) c #00112C", +"[) c #001632", +"}) c #001838", +"|) c #001537", +"1) c #000A30", +"2) c #000D3E", +"3) c #000E44", +"4) c #00093D", +"5) c #000F30", +"6) c #00112E", +"7) c #002544", +"8) c #003659", +"9) c #003961", +"0) c #00527A", +"a) c #009BC0", +"b) c #00DCF7", +"c) c #00B5B5", +"d) c #007771", +"e) c #001B19", +"f) c #000505", +"g) c #110002", +"h) c #00040F", +"i) c #000109", +"j) c #00202F", +"k) c #003B5D", +"l) c #0092D0", +"m) c #00D9FC", +"n) c #00C9E8", +"o) c #00BADF", +"p) c #00A4D2", +"q) c #006396", +"r) c #004D7A", +"s) c #007FA4", +"t) c #008CAC", +"u) c #0089A6", +"v) c #008AAA", +"w) c #006889", +"x) c #006385", +"y) c #007979", +"z) c #007474", +"A) c #009494", +"B) c #007D80", +"C) c #004C55", +"D) c #003142", +"E) c #005E80", +"F) c #006D9C", +"G) c #0085C2", +"H) c #0099D7", +"I) c #00ABE7", +"J) c #00C1F8", +"K) c #006564", +"L) c #001415", +"M) c #00151B", +"N) c #001322", +"O) c #000B1E", +"P) c #000E17", +"Q) c #00161B", +"R) c #001E22", +"S) c #001D23", +"T) c #001B22", +"U) c #00505D", +"V) c #008AA4", +"W) c #006374", +"X) c #001D1E", +"Y) c #000E0E", +"Z) c #000A10", +"`) c #000E1B", +" ! c #000A24", +".! c #000927", +"+! c #00092C", +"@! c #000E32", +"#! c #00143E", +"$! c #001B4B", +"%! c #002150", +"&! c #002055", +"*! c #002059", +"=! c #001E55", +"-! c #000B4A", +";! c #001C62", +">! c #001565", +",! c #00195A", +"'! c #001E4A", +")! c #000A2F", +"!! c #00153C", +"~! c #001D48", +"{! c #001A41", +"]! c #005573", +"^! c #00777F", +"/! c #005252", +"(! c #000D12", +"_! c #0C0009", +":! c #010016", +"<! c #02001A", +"[! c #001930", +"}! c #001D34", +"|! c #002947", +"1! c #006B99", +"2! c #00E2FB", +"3! c #00DFFA", +"4! c #00D7F5", +"5! c #00C1EA", +"6! c #009FCE", +"7! c #0072A3", +"8! c #00507F", +"9! c #00527C", +"0! c #008DB8", +"a! c #0099BA", +"b! c #00AAD2", +"c! c #007EA3", +"d! c #0083AE", +"e! c #00687F", +"f! c #006769", +"g! c #007072", +"h! c #00A3A2", +"i! c #009694", +"j! c #009497", +"k! c #004F59", +"l! c #00394B", +"m! c #005676", +"n! c #008CC5", +"o! c #009AD2", +"p! c #00B5EA", +"q! c #00C2E3", +"r! c #004043", +"s! c #000C12", +"t! c #001921", +"u! c #000A16", +"v! c #000418", +"w! c #000F16", +"x! c #001818", +"y! c #001C1A", +"z! c #001311", +"A! c #002929", +"B! c #002F40", +"C! c #00395A", +"D! c #002436", +"E! c #000A05", +"F! c #00070A", +"G! c #000813", +"H! c #00081E", +"I! c #000828", +"J! c #000A34", +"K! c #000E3B", +"L! c #001245", +"M! c #001D57", +"N! c #002466", +"O! c #00286E", +"P! c #002977", +"Q! c #002C7E", +"R! c #00297E", +"S! c #00287D", +"T! c #002E81", +"U! c #002E88", +"V! c #002684", +"W! c #002579", +"X! c #002968", +"Y! c #00295B", +"Z! c #001E4B", +"`! c #000A38", +" ~ c #00204B", +".~ c #001030", +"+~ c #005064", +"@~ c #00606B", +"#~ c #003941", +"$~ c #000410", +"%~ c #100014", +"&~ c #000030", +"*~ c #00021C", +"=~ c #00021D", +"-~ c #000518", +";~ c #001228", +">~ c #005370", +",~ c #00EFFF", +"'~ c #00C8F5", +")~ c #006FA0", +"!~ c #005B8A", +"~~ c #005581", +"{~ c #00486D", +"]~ c #008EB6", +"^~ c #0095B6", +"/~ c #00BFF9", +"(~ c #009ECB", +"_~ c #00697F", +":~ c #00525B", +"<~ c #00646C", +"[~ c #008C98", +"}~ c #00818A", +"|~ c #009CA5", +"1~ c #008E97", +"2~ c #004A58", +"3~ c #003C4F", +"4~ c #00506F", +"5~ c #00658D", +"6~ c #008BC4", +"7~ c #0096CF", +"8~ c #00AEE6", +"9~ c #00B1DF", +"0~ c #00AFD4", +"a~ c #00222C", +"b~ c #00121A", +"c~ c #00020F", +"d~ c #00181D", +"e~ c #002F28", +"f~ c #002820", +"g~ c #001E18", +"h~ c #001414", +"i~ c #002035", +"j~ c #001E3D", +"k~ c #00110B", +"l~ c #000B0F", +"m~ c #000717", +"n~ c #000E48", +"o~ c #001E62", +"p~ c #003081", +"q~ c #003487", +"r~ c #003692", +"s~ c #003696", +"t~ c #003397", +"u~ c #003BA3", +"v~ c #0049BB", +"w~ c #0043B1", +"x~ c #00379E", +"y~ c #003193", +"z~ c #00388C", +"A~ c #00347C", +"B~ c #002A66", +"C~ c #002259", +"D~ c #00154B", +"E~ c #001E50", +"F~ c #000E30", +"G~ c #00455C", +"H~ c #004D5F", +"I~ c #002A38", +"J~ c #070011", +"K~ c #000A2B", +"L~ c #000C2C", +"M~ c #000C2B", +"N~ c #002133", +"O~ c #002A41", +"P~ c #004857", +"Q~ c #00C5F7", +"R~ c #0093C4", +"S~ c #0072A4", +"T~ c #006194", +"U~ c #00557F", +"V~ c #003B5C", +"W~ c #00799C", +"X~ c #008BA8", +"Y~ c #00A5D2", +"Z~ c #00819C", +"`~ c #00374E", +" { c #005872", +".{ c #0085A4", +"+{ c #00718E", +"@{ c #004052", +"#{ c #003B4F", +"${ c #004D6D", +"%{ c #006188", +"&{ c #0075A8", +"*{ c #009CD8", +"={ c #00AAE6", +"-{ c #00B7EC", +";{ c #00B2E4", +">{ c #0089A9", +",{ c #002431", +"'{ c #001B26", +"){ c #000A14", +"!{ c #05000B", +"~{ c #100010", +"{{ c #020016", +"]{ c #001F1A", +"^{ c #001213", +"/{ c #001722", +"({ c #001E30", +"_{ c #00223F", +":{ c #00051D", +"<{ c #00040B", +"[{ c #00090E", +"}{ c #000816", +"|{ c #000836", +"1{ c #000D4D", +"2{ c #001967", +"3{ c #002378", +"4{ c #003192", +"5{ c #003CA2", +"6{ c #003FA2", +"7{ c #0042A2", +"8{ c #0040A5", +"9{ c #003C9E", +"0{ c #003B9A", +"a{ c #0043AD", +"b{ c #0056CA", +"c{ c #0053C4", +"d{ c #0046B9", +"e{ c #0044B2", +"f{ c #0045A4", +"g{ c #003D8A", +"h{ c #003074", +"i{ c #002365", +"j{ c #001456", +"k{ c #00184F", +"l{ c #002C4F", +"m{ c #00425E", +"n{ c #004659", +"o{ c #003244", +"p{ c #000A23", +"q{ c #00070D", +"r{ c #000414", +"s{ c #00162C", +"t{ c #001A35", +"u{ c #001E3E", +"v{ c #001F41", +"w{ c #001C36", +"x{ c #002038", +"y{ c #00233A", +"z{ c #002639", +"A{ c #002535", +"B{ c #002938", +"C{ c #001927", +"D{ c #005A62", +"E{ c #00BBEE", +"F{ c #0096CC", +"G{ c #0076AC", +"H{ c #006495", +"I{ c #005178", +"J{ c #00445F", +"K{ c #006F90", +"L{ c #00839F", +"M{ c #009BBB", +"N{ c #00A2C6", +"O{ c #00A1CB", +"P{ c #00B1DA", +"Q{ c #0092AD", +"R{ c #00747E", +"S{ c #003A54", +"T{ c #00445E", +"U{ c #005C89", +"V{ c #003A56", +"W{ c #003B55", +"X{ c #004D70", +"Y{ c #006D9B", +"Z{ c #008BC2", +"`{ c #00A4DD", +" ] c #009DCD", +".] c #008FBA", +"+] c #005974", +"@] c #000613", +"#] c #09000C", +"$] c #000A13", +"%] c #000C13", +"&] c #00090D", +"*] c #001C27", +"=] c #003E5D", +"-] c #001D33", +";] c #001122", +">] c #000516", +",] c #000320", +"'] c #000D37", +")] c #001051", +"!] c #001971", +"~] c #00278E", +"{] c #0034A5", +"]] c #0041B6", +"^] c #004DC1", +"/] c #004CB9", +"(] c #004CB2", +"_] c #004AAE", +":] c #00419A", +"<] c #003A92", +"[] c #0047A8", +"}] c #0061D3", +"|] c #005FD2", +"1] c #005AD5", +"2] c #005FE3", +"3] c #0061D4", +"4] c #004CA5", +"5] c #003781", +"6] c #00276B", +"7] c #001A60", +"8] c #001E5B", +"9] c #002E53", +"0] c #003C56", +"a] c #005165", +"b] c #004258", +"c] c #00021E", +"d] c #000910", +"e] c #001216", +"f] c #001521", +"g] c #001E37", +"h] c #002B4E", +"i] c #00345B", +"j] c #003A60", +"k] c #003957", +"l] c #003C55", +"m] c #003F55", +"n] c #003442", +"o] c #00B7EE", +"p] c #009CD6", +"q] c #007EB4", +"r] c #006493", +"s] c #002039", +"t] c #004256", +"u] c #006780", +"v] c #00849D", +"w] c #00AED6", +"x] c #008CA2", +"y] c #006B77", +"z] c #004655", +"A] c #005A74", +"B] c #004A81", +"C] c #00385F", +"D] c #003351", +"E] c #004C71", +"F] c #005980", +"G] c #007AA5", +"H] c #0094C8", +"I] c #0084AF", +"J] c #0080AA", +"K] c #007EA7", +"L] c #00536D", +"M] c #002034", +"N] c #001625", +"O] c #07000B", +"P] c #0A0009", +"Q] c #010008", +"R] c #000D14", +"S] c #00171C", +"T] c #001A1C", +"U] c #000B0C", +"V] c #00030C", +"W] c #002635", +"X] c #006376", +"Y] c #005F79", +"Z] c #002948", +"`] c #001B43", +" ^ c #001443", +".^ c #001650", +"+^ c #001E74", +"@^ c #002689", +"#^ c #002B91", +"$^ c #003BAB", +"%^ c #0048B7", +"&^ c #0052C2", +"*^ c #0057C7", +"=^ c #005CCB", +"-^ c #005BC6", +";^ c #004BA7", +">^ c #0048A1", +",^ c #005DC8", +"'^ c #0064CE", +")^ c #0073EE", +"!^ c #0073FC", +"~^ c #006CEF", +"{^ c #007AFF", +"]^ c #003D85", +"^^ c #00337E", +"/^ c #00236A", +"(^ c #001F52", +"_^ c #00375E", +":^ c #006A85", +"<^ c #005D78", +"[^ c #000D29", +"}^ c #001013", +"|^ c #000F0A", +"1^ c #001010", +"2^ c #00151C", +"3^ c #001220", +"4^ c #001429", +"5^ c #002D50", +"6^ c #00365E", +"7^ c #004470", +"8^ c #00456B", +"9^ c #003B5B", +"0^ c #005371", +"a^ c #003E52", +"b^ c #007783", +"c^ c #00C5BF", +"d^ c #00A8DA", +"e^ c #008EC0", +"f^ c #0079AB", +"g^ c #006491", +"h^ c #003F5E", +"i^ c #002237", +"j^ c #003542", +"k^ c #00677C", +"l^ c #0081A0", +"m^ c #0096B8", +"n^ c #009EBF", +"o^ c #007285", +"p^ c #005E66", +"q^ c #007789", +"r^ c #00708C", +"s^ c #008DDC", +"t^ c #00589A", +"u^ c #003762", +"v^ c #003254", +"w^ c #00466C", +"x^ c #006990", +"y^ c #0081A8", +"z^ c #006583", +"A^ c #005472", +"B^ c #003246", +"C^ c #001523", +"D^ c #000D17", +"E^ c #030007", +"F^ c #00060C", +"G^ c #000F12", +"H^ c #000D11", +"I^ c #001E20", +"J^ c #001A19", +"K^ c #00211F", +"L^ c #000E0F", +"M^ c #16000A", +"N^ c #0B000C", +"O^ c #001926", +"P^ c #003844", +"Q^ c #00A0B0", +"R^ c #00839E", +"S^ c #004D7B", +"T^ c #002E65", +"U^ c #002865", +"V^ c #002D79", +"W^ c #003298", +"X^ c #0036A2", +"Y^ c #003CAE", +"Z^ c #0048C0", +"`^ c #0051C8", +" / c #005ACE", +"./ c #005CC2", +"+/ c #005DC0", +"@/ c #0052AD", +"#/ c #0059B7", +"$/ c #0069D2", +"%/ c #006FDD", +"&/ c #0094FF", +"*/ c #007FFF", +"=/ c #0068D0", +"-/ c #0065C7", +";/ c #004D9F", +">/ c #003B86", +",/ c #002B70", +"'/ c #001D51", +")/ c #004870", +"!/ c #004D68", +"~/ c #007C94", +"{/ c #0086A7", +"]/ c #002F4D", +"^/ c #000D26", +"// c #000C11", +"(/ c #000D13", +"_/ c #000F1C", +":/ c #001E44", +"</ c #003561", +"[/ c #004170", +"}/ c #004C7A", +"|/ c #00547C", +"1/ c #005B80", +"2/ c #004763", +"3/ c #004860", +"4/ c #0093A8", +"5/ c #009293", +"6/ c #009699", +"7/ c #00B0C7", +"8/ c #00B0D8", +"9/ c #0096C4", +"0/ c #008FBF", +"a/ c #0083B4", +"b/ c #003F5B", +"c/ c #001121", +"d/ c #000715", +"e/ c #003347", +"f/ c #006784", +"g/ c #008BAD", +"h/ c #00B1D6", +"i/ c #006578", +"j/ c #007673", +"k/ c #00878C", +"l/ c #008A9A", +"m/ c #0089AA", +"n/ c #0075B4", +"o/ c #002751", +"p/ c #003E64", +"q/ c #004F74", +"r/ c #00597B", +"s/ c #00708F", +"t/ c #007D9E", +"u/ c #00738F", +"v/ c #006C89", +"w/ c #0084AD", +"x/ c #000915", +"y/ c #000C10", +"z/ c #00090C", +"A/ c #00191C", +"B/ c #00373B", +"C/ c #002A2A", +"D/ c #001C1B", +"E/ c #001514", +"F/ c #000D10", +"G/ c #13000B", +"H/ c #0D0005", +"I/ c #080010", +"J/ c #00101E", +"K/ c #006B78", +"L/ c #00BCC8", +"M/ c #00ADC5", +"N/ c #0071A9", +"O/ c #004685", +"P/ c #003E83", +"Q/ c #004297", +"R/ c #0042A5", +"S/ c #0044AE", +"T/ c #0049BC", +"U/ c #004DBB", +"V/ c #0053C1", +"W/ c #005AC3", +"X/ c #0061CA", +"Y/ c #006AD8", +"Z/ c #0069D3", +"`/ c #0054A8", +" ( c #004591", +".( c #004FA3", +"+( c #0064C6", +"@( c #0073E4", +"#( c #008AFF", +"$( c #006EE5", +"%( c #0062BF", +"&( c #0069CA", +"*( c #005DB9", +"=( c #0051AA", +"-( c #00367F", +";( c #00356B", +">( c #006D89", +",( c #00A1BC", +"'( c #0092AC", +")( c #006086", +"!( c #00102B", +"~( c #001823", +"{( c #00080E", +"]( c #000B34", +"^( c #004290", +"/( c #003566", +"(( c #004376", +"_( c #00578C", +":( c #004465", +"<( c #007090", +"[( c #00BDDE", +"}( c #00D4E3", +"|( c #00CAD7", +"1( c #00A0B8", +"2( c #008DAA", +"3( c #008BB2", +"4( c #00779B", +"5( c #00739A", +"6( c #00324A", +"7( c #001026", +"8( c #000D25", +"9( c #00061E", +"0( c #003249", +"a( c #007595", +"b( c #006781", +"c( c #006F8D", +"d( c #007773", +"e( c #009EA1", +"f( c #008996", +"g( c #0095B3", +"h( c #007AA2", +"i( c #00436C", +"j( c #004575", +"k( c #00224F", +"l( c #00375F", +"m( c #005C7B", +"n( c #006680", +"o( c #006177", +"p( c #00657A", +"q( c #006984", +"r( c #002933", +"s( c #001518", +"t( c #000F13", +"u( c #001014", +"v( c #000106", +"w( c #0A0007", +"x( c #000F1E", +"y( c #002735", +"z( c #008C9D", +"A( c #00B1BE", +"B( c #00BCD7", +"C( c #008FCA", +"D( c #0067AE", +"E( c #00579F", +"F( c #0055A6", +"G( c #0055B2", +"H( c #0056C3", +"I( c #0057C6", +"J( c #0053BB", +"K( c #005AC4", +"L( c #005AC0", +"M( c #005BB7", +"N( c #0053A6", +"O( c #004388", +"P( c #003369", +"Q( c #002C59", +"R( c #002E5F", +"S( c #003F80", +"T( c #0051A5", +"U( c #005FD0", +"V( c #0062D0", +"W( c #0072E1", +"X( c #0078E3", +"Y( c #0068D2", +"Z( c #004BA1", +"`( c #00417B", +" _ c #003861", +"._ c #00BFDA", +"+_ c #009BB3", +"@_ c #008EB9", +"#_ c #003E5B", +"$_ c #00051E", +"%_ c #002554", +"&_ c #00376C", +"*_ c #00487E", +"=_ c #004E7D", +"-_ c #004E74", +";_ c #005A79", +">_ c #0081A3", +",_ c #00E1F7", +"'_ c #008EAE", +")_ c #00708D", +"!_ c #006D86", +"~_ c #005A72", +"{_ c #000F27", +"]_ c #00233C", +"^_ c #000323", +"/_ c #000F32", +"(_ c #000A27", +"__ c #00435E", +":_ c #006D92", +"<_ c #007679", +"[_ c #007C85", +"}_ c #0090A4", +"|_ c #007B9A", +"1_ c #005678", +"2_ c #001740", +"3_ c #003A6A", +"4_ c #002F63", +"5_ c #001345", +"6_ c #00234F", +"7_ c #005580", +"8_ c #005E7C", +"9_ c #006072", +"0_ c #006979", +"a_ c #0091A5", +"b_ c #004450", +"c_ c #001315", +"d_ c #000B0B", +"e_ c #001617", +"f_ c #001115", +"g_ c #001C22", +"h_ c #00161D", +"i_ c #000309", +"j_ c #02000B", +"k_ c #00111F", +"l_ c #000D1E", +"m_ c #006579", +"n_ c #0090A6", +"o_ c #00B1C7", +"p_ c #00B4D3", +"q_ c #00A7E1", +"r_ c #008CCE", +"s_ c #006FAD", +"t_ c #0064A8", +"u_ c #006BC3", +"v_ c #0065C1", +"w_ c #0055AF", +"x_ c #0057B7", +"y_ c #004FA7", +"z_ c #00458E", +"A_ c #00366E", +"B_ c #001847", +"C_ c #000832", +"D_ c #000E2F", +"E_ c #000325", +"F_ c #002354", +"G_ c #003787", +"H_ c #0059CB", +"I_ c #006BDA", +"J_ c #006DD3", +"K_ c #006BD0", +"L_ c #006AD5", +"M_ c #003A75", +"N_ c #0077A5", +"O_ c #00A1C2", +"P_ c #00B7D0", +"Q_ c #00BDD7", +"R_ c #0099C0", +"S_ c #007298", +"T_ c #002139", +"U_ c #000E21", +"V_ c #001C2E", +"W_ c #000E28", +"X_ c #001538", +"Y_ c #002651", +"Z_ c #004C7E", +"`_ c #004E76", +" : c #005675", +".: c #0088AA", +"+: c #00ABC4", +"@: c #006877", +"#: c #000731", +"$: c #03002D", +"%: c #000334", +"&: c #001844", +"*: c #000A2E", +"=: c #005685", +"-: c #00596B", +";: c #006F91", +">: c #004666", +",: c #001940", +"': c #00447B", +"): c #00093E", +"!: c #00205B", +"~: c #00255B", +"{: c #002A59", +"]: c #00476C", +"^: c #00556E", +"/: c #007385", +"(: c #00A1AF", +"_: c #004445", +":: c #000E0C", +"<: c #001614", +"[: c #000A0E", +"}: c #000B11", +"|: c #00121F", +"1: c #00101B", +"2: c #000712", +"3: c #00030B", +"4: c #000610", +"5: c #000C19", +"6: c #004C5B", +"7: c #00849E", +"8: c #009AB7", +"9: c #00B3D4", +"0: c #00B8EB", +"a: c #00A5DF", +"b: c #0083B7", +"c: c #0078B4", +"d: c #0082D2", +"e: c #006CB9", +"f: c #00569E", +"g: c #005AAB", +"h: c #00478D", +"i: c #003064", +"j: c #001C46", +"k: c #001034", +"l: c #000222", +"m: c #00001C", +"n: c #00041D", +"o: c #00041F", +"p: c #000321", +"q: c #000931", +"r: c #001950", +"s: c #003079", +"t: c #0057B9", +"u: c #006AD1", +"v: c #0069CE", +"w: c #006CD7", +"x: c #0054A9", +"y: c #00599C", +"z: c #00A0D8", +"A: c #00AED0", +"B: c #00B0C4", +"C: c #00B6CE", +"D: c #00ACD2", +"E: c #0093BD", +"F: c #007699", +"G: c #00455E", +"H: c #001025", +"I: c #00192A", +"J: c #001C35", +"K: c #00213E", +"L: c #00345C", +"M: c #00416A", +"N: c #002A4B", +"O: c #004D6A", +"P: c #009FC1", +"Q: c #005C67", +"R: c #00073B", +"S: c #090043", +"T: c #010035", +"U: c #000B43", +"V: c #001A44", +"W: c #002344", +"X: c #003055", +"Y: c #00204A", +"Z: c #002661", +"`: c #002069", +" < c #001C64", +".< c #002575", +"+< c #00386B", +"@< c #004064", +"#< c #00A5B8", +"$< c #004C48", +"%< c #001A17", +"&< c #000509", +"*< c #030012", +"=< c #00080C", +"-< c #001B20", +";< c #007B8C", +">< c #008CA5", +",< c #00A9D3", +"'< c #00BAE4", +")< c #00C0EC", +"!< c #00A6D5", +"~< c #0091C3", +"{< c #0091D1", +"]< c #0088D3", +"^< c #006EB5", +"/< c #005697", +"(< c #002F5A", +"_< c #000B2F", +":< c #020013", +"<< c #0B0012", +"[< c #07000E", +"}< c #080018", +"|< c #000123", +"1< c #00002C", +"2< c #000740", +"3< c #004294", +"4< c #006BDC", +"5< c #0071E3", +"6< c #0065CA", +"7< c #0056AD", +"8< c #0076CA", +"9< c #009FDA", +"0< c #00B4D8", +"a< c #00B9CE", +"b< c #00A2B9", +"c< c #009DC6", +"d< c #0090B6", +"e< c #007E9E", +"f< c #00647E", +"g< c #004255", +"h< c #001C2A", +"i< c #001622", +"j< c #001727", +"k< c #001D2F", +"l< c #001E34", +"m< c #005E77", +"n< c #00A7C1", +"o< c #00E3E3", +"p< c #00C9C7", +"q< c #004D67", +"r< c #003265", +"s< c #000A47", +"t< c #00003D", +"u< c #070044", +"v< c #000443", +"w< c #001F54", +"x< c #001C45", +"y< c #030024", +"z< c #002462", +"A< c #001646", +"B< c #00175B", +"C< c #001892", +"D< c #0024A8", +"E< c #0040B8", +"F< c #003C8B", +"G< c #003769", +"H< c #00849A", +"I< c #005E56", +"J< c #00353C", +"K< c #001720", +"L< c #000515", +"M< c #000417", +"N< c #000419", +"O< c #001022", +"P< c #002935", +"Q< c #00515F", +"R< c #007D8F", +"S< c #00879F", +"T< c #00A0C4", +"U< c #00A1C9", +"V< c #00A5D7", +"W< c #00ADDF", +"X< c #00A1C6", +"Y< c #00BEE4", +"Z< c #00BDE9", +"`< c #0092BA", +" [ c #0084B0", +".[ c #00A4EB", +"+[ c #0088D5", +"@[ c #00467B", +"#[ c #000C33", +"$[ c #000528", +"%[ c #06001D", +"&[ c #1C0011", +"*[ c #0B0009", +"=[ c #090012", +"-[ c #040024", +";[ c #00123F", +">[ c #00295D", +",[ c #0065BB", +"'[ c #009DFF", +")[ c #0061A6", +"![ c #0080DE", +"~[ c #0085D8", +"{[ c #00A6EB", +"][ c #00A7D8", +"^[ c #00BCDC", +"/[ c #00B0CB", +"([ c #00A6C4", +"_[ c #00ABCE", +":[ c #009DC3", +"<[ c #0091B4", +"[[ c #00546A", +"}[ c #004153", +"|[ c #002F41", +"1[ c #002D3E", +"2[ c #003A4B", +"3[ c #007795", +"4[ c #00E4E8", +"5[ c #00D5C1", +"6[ c #00636B", +"7[ c #004E50", +"8[ c #004A82", +"9[ c #00328F", +"0[ c #000F55", +"a[ c #000047", +"b[ c #000546", +"c[ c #001C5A", +"d[ c #001C51", +"e[ c #001130", +"f[ c #002157", +"g[ c #002574", +"h[ c #002B9B", +"i[ c #003CC0", +"j[ c #004AA9", +"k[ c #004D96", +"l[ c #0094A1", +"m[ c #005F6C", +"n[ c #005B6F", +"o[ c #005972", +"p[ c #00526B", +"q[ c #005C7A", +"r[ c #006B8A", +"s[ c #007C9E", +"t[ c #008FB1", +"u[ c #009EC4", +"v[ c #00A3CA", +"w[ c #00A5CE", +"x[ c #00A5D6", +"y[ c #00A4CE", +"z[ c #00B0D7", +"A[ c #00B3DD", +"B[ c #0076A2", +"C[ c #002A56", +"D[ c #000A3C", +"E[ c #000C41", +"F[ c #000038", +"G[ c #0B0037", +"H[ c #2A0012", +"I[ c #1C0010", +"J[ c #004457", +"K[ c #009BE4", +"L[ c #0096E2", +"M[ c #0093D9", +"N[ c #0092C5", +"O[ c #009BBE", +"P[ c #00A7BB", +"Q[ c #00A5B5", +"R[ c #00A3BB", +"S[ c #0097B5", +"T[ c #008AAB", +"U[ c #007498", +"V[ c #001A2F", +"W[ c #000A1A", +"X[ c #000A18", +"Y[ c #003845", +"Z[ c #008A9E", +"`[ c #00E5EA", +" } c #00E9E5", +".} c #000208", +"+} c #006C9C", +"@} c #005284", +"#} c #003B79", +"$} c #00003E", +"%} c #001D5C", +"&} c #002260", +"*} c #001343", +"=} c #001A39", +"-} c #002567", +";} c #002F88", +">} c #0037AF", +",} c #0045C9", +"'} c #0051B7", +")} c #004B90", +"!} c #00477C", +"~} c #000829", +"{} c #003A71", +"]} c #00C9E0", +"^} c #00C1DF", +"/} c #007891", +"(} c #005D77", +"_} c #006D8E", +":} c #007295", +"<} c #0090BB", +"[} c #009AC7", +"}} c #0096BF", +"|} c #0096BE", +"1} c #00A2CE", +"2} c #00ADDC", +"3} c #00ACDB", +"4} c #00A6D6", +"5} c #00A4D5", +"6} c #00B8EC", +"7} c #00A4CF", +"8} c #00A4CA", +"9} c #00BBE1", +"0} c #00A6CC", +"a} c #0082A7", +"b} c #0072AA", +"c} c #001E4D", +"d} c #00124B", +"e} c #00003A", +"f} c #01004A", +"g} c #0A0041", +"h} c #2D0014", +"i} c #0F0005", +"j} c #070004", +"k} c #000D0E", +"l} c #002D31", +"m} c #007B88", +"n} c #00A8C6", +"o} c #009FE0", +"p} c #009BEB", +"q} c #0098E5", +"r} c #008EC9", +"s} c #0093BC", +"t} c #009FB4", +"u} c #009FAD", +"v} c #009CB8", +"w} c #006C8C", +"x} c #004764", +"y} c #002540", +"z} c #002E3B", +"A} c #005260", +"B} c #00AFC2", +"C} c #00E4E9", +"D} c #00E8EA", +"E} c #008F93", +"F} c #000810", +"G} c #070008", +"H} c #004D39", +"I} c #007BAA", +"J} c #005B93", +"K} c #002666", +"L} c #001252", +"M} c #001B57", +"N} c #002F79", +"O} c #00162E", +"P} c #001B42", +"Q} c #00276D", +"R} c #002D84", +"S} c #0033A5", +"T} c #003CB7", +"U} c #004EBD", +"V} c #004086", +"W} c #005AB2", +"X} c #00292A", +"Y} c #00041C", +"Z} c #007B8F", +"`} c #00C9BC", +" | c #00B4D4", +".| c #0092B5", +"+| c #006E8F", +"@| c #00577A", +"#| c #00678D", +"$| c #00678C", +"%| c #007A9E", +"&| c #009CC6", +"*| c #00B2DE", +"=| c #00A3CB", +"-| c #009FC7", +";| c #00AFDE", +">| c #00B4E5", +",| c #00A8D8", +"'| c #00ADE3", +")| c #00A4D3", +"!| c #00A8D1", +"~| c #00B3D6", +"{| c #00AAD4", +"]| c #008EC3", +"^| c #004879", +"/| c #002A64", +"(| c #001856", +"_| c #000C53", +":| c #000141", +"<| c #000028", +"[| c #000227", +"}| c #000104", +"|| c #0C000C", +"1| c #000E1A", +"2| c #007882", +"3| c #00AECA", +"4| c #009ABA", +"5| c #00A3D8", +"6| c #00A2DE", +"7| c #00A4E6", +"8| c #00A1E3", +"9| c #0098CD", +"0| c #0097C2", +"a| c #009CBD", +"b| c #0097B7", +"c| c #008EBC", +"d| c #0074A1", +"e| c #004F79", +"f| c #00385B", +"g| c #002849", +"h| c #001532", +"i| c #000318", +"j| c #003143", +"k| c #006B7D", +"l| c #00E8F5", +"m| c #008B91", +"n| c #000807", +"o| c #005542", +"p| c #00B2EA", +"q| c #005A86", +"r| c #00023E", +"s| c #000E47", +"t| c #00205F", +"u| c #00216B", +"v| c #001F62", +"w| c #001C4D", +"x| c #000A21", +"y| c #00183E", +"z| c #001750", +"A| c #001C67", +"B| c #0033A4", +"C| c #0047CD", +"D| c #004FBE", +"E| c #004995", +"F| c #001E28", +"G| c #00131C", +"H| c #005E64", +"I| c #00D0CB", +"J| c #00A3DB", +"K| c #006490", +"L| c #004D74", +"M| c #007CC1", +"N| c #0081C0", +"O| c #006693", +"P| c #006D91", +"Q| c #007394", +"R| c #00A6CD", +"S| c #00ABD4", +"T| c #009BC2", +"U| c #009EC9", +"V| c #00B9EC", +"W| c #00AFDA", +"X| c #00A9CE", +"Y| c #00ADD1", +"Z| c #00B9E5", +"`| c #00A8E1", +" 1 c #0083C1", +".1 c #004A84", +"+1 c #000947", +"@1 c #001C56", +"#1 c #000437", +"$1 c #000216", +"%1 c #000305", +"&1 c #000214", +"*1 c #000B19", +"=1 c #001624", +"-1 c #006774", +";1 c #009BB1", +">1 c #00A4C6", +",1 c #00ACD9", +"'1 c #00ABE0", +")1 c #00A4DA", +"!1 c #00A4D8", +"~1 c #00A5D8", +"{1 c #009ECD", +"]1 c #009BCB", +"^1 c #0097C4", +"/1 c #0074AF", +"(1 c #005893", +"_1 c #004A80", +":1 c #00497A", +"<1 c #001E42", +"[1 c #000C24", +"}1 c #002742", +"|1 c #004962", +"11 c #007F9C", +"21 c #00C2D4", +"31 c #000B0E", +"41 c #001817", +"51 c #008F78", +"61 c #0083B9", +"71 c #003E80", +"81 c #00083E", +"91 c #001952", +"01 c #001D68", +"a1 c #002169", +"b1 c #001B4D", +"c1 c #00285E", +"d1 c #000C29", +"e1 c #001A49", +"f1 c #00205D", +"g1 c #002878", +"h1 c #003EC1", +"i1 c #0050E0", +"j1 c #0054AC", +"k1 c #006EC1", +"l1 c #000C0E", +"m1 c #001715", +"n1 c #007572", +"o1 c #00D3D5", +"p1 c #0067A6", +"q1 c #003367", +"r1 c #004178", +"s1 c #0060B5", +"t1 c #0086B9", +"u1 c #007091", +"v1 c #006885", +"w1 c #0087A6", +"x1 c #00ACD5", +"y1 c #00AAD6", +"z1 c #00B5E8", +"A1 c #00ABDE", +"B1 c #00B0DA", +"C1 c #00ACD6", +"D1 c #00A6D3", +"E1 c #00B8FF", +"F1 c #0098E7", +"G1 c #005E9D", +"H1 c #002E5C", +"I1 c #000C1A", +"J1 c #00071B", +"K1 c #001E2E", +"L1 c #009DBA", +"M1 c #00A6C5", +"N1 c #0094BC", +"O1 c #00B3E8", +"P1 c #00A9DD", +"Q1 c #00A5D4", +"R1 c #00B0DB", +"S1 c #00A9D5", +"T1 c #009DCF", +"U1 c #0083C0", +"V1 c #006CB1", +"W1 c #0062B1", +"X1 c #0059AB", +"Y1 c #0057A4", +"Z1 c #00539C", +"`1 c #00427B", +" 2 c #002954", +".2 c #00183C", +"+2 c #001539", +"@2 c #002F55", +"#2 c #004B6C", +"$2 c #0083A9", +"%2 c #008992", +"&2 c #005358", +"*2 c #004A4D", +"=2 c #00706E", +"-2 c #00AADD", +";2 c #004379", +">2 c #002E73", +",2 c #001B4C", +"'2 c #001A5C", +")2 c #001E69", +"!2 c #00133B", +"~2 c #000A25", +"{2 c #001136", +"]2 c #001C54", +"^2 c #002772", +"/2 c #003092", +"(2 c #0046D2", +"_2 c #004FC1", +":2 c #005797", +"<2 c #009EEA", +"[2 c #006E68", +"}2 c #003832", +"|2 c #003C36", +"12 c #00695B", +"22 c #00A799", +"32 c #0077C3", +"42 c #002C66", +"52 c #004386", +"62 c #0054AE", +"72 c #005ABE", +"82 c #0058BD", +"92 c #0097BC", +"02 c #007C97", +"a2 c #007E9C", +"b2 c #009CC3", +"c2 c #00B1E2", +"d2 c #00AEDF", +"e2 c #00AEDE", +"f2 c #00AFDD", +"g2 c #00AEDC", +"h2 c #00A1D3", +"i2 c #00AFEA", +"j2 c #00AFF3", +"k2 c #009FDF", +"l2 c #00699B", +"m2 c #00173B", +"n2 c #00223C", +"o2 c #001F30", +"p2 c #000B18", +"q2 c #001527", +"r2 c #005B71", +"s2 c #008FAC", +"t2 c #00A5C8", +"u2 c #00B5E1", +"v2 c #00ADE1", +"w2 c #00B9DE", +"x2 c #00BEE2", +"y2 c #008CC2", +"z2 c #0068AE", +"A2 c #0051A2", +"B2 c #0059C7", +"C2 c #0059B9", +"D2 c #0058AF", +"E2 c #0059A5", +"F2 c #004A88", +"G2 c #002B58", +"H2 c #000C31", +"I2 c #000429", +"J2 c #010023", +"K2 c #002E51", +"L2 c #004869", +"M2 c #00AEE0", +"N2 c #0082A0", +"O2 c #0065A1", +"P2 c #003571", +"Q2 c #001F57", +"R2 c #001547", +"S2 c #001E6C", +"T2 c #001035", +"U2 c #00133C", +"V2 c #00194F", +"W2 c #00256C", +"X2 c #002F8C", +"Y2 c #003FB8", +"Z2 c #004EAA", +"`2 c #006794", +" 3 c #00BAE5", +".3 c #00DCF3", +"+3 c #00397D", +"@3 c #004C9F", +"#3 c #0071E9", +"$3 c #0069E2", +"%3 c #0084A7", +"&3 c #007A9B", +"*3 c #0085AE", +"=3 c #00A2D3", +"-3 c #00A2CD", +";3 c #00B5E4", +">3 c #00A9D6", +",3 c #00AADA", +"'3 c #00A7D9", +")3 c #00B9F2", +"!3 c #00B0E7", +"~3 c #00A8D9", +"{3 c #00B9EF", +"]3 c #00C4F8", +"^3 c #003B4E", +"/3 c #00384F", +"(3 c #004050", +"_3 c #006E88", +":3 c #0092B7", +"<3 c #0092BB", +"[3 c #009DCB", +"}3 c #00A9DE", +"|3 c #00ACE1", +"13 c #00A9D2", +"23 c #00AED1", +"33 c #00BAD9", +"43 c #00A4C2", +"53 c #007A9F", +"63 c #00608F", +"73 c #004A90", +"83 c #003E9E", +"93 c #0048C1", +"03 c #004CC2", +"a3 c #0051B6", +"b3 c #005FBB", +"c3 c #007BDC", +"d3 c #007AD4", +"e3 c #00427E", +"f3 c #000F38", +"g3 c #000932", +"h3 c #05002A", +"i3 c #00052E", +"j3 c #001C42", +"k3 c #001D3F", +"l3 c #00668E", +"m3 c #00C3F5", +"n3 c #00B4C3", +"o3 c #004D8B", +"p3 c #000837", +"q3 c #001859", +"r3 c #001A68", +"s3 c #001753", +"t3 c #00103C", +"u3 c #00103D", +"v3 c #00082C", +"w3 c #001348", +"x3 c #002E84", +"y3 c #003596", +"z3 c #003CA4", +"A3 c #004891", +"B3 c #0079A0", +"C3 c #00C1D3", +"D3 c #00B8CB", +"E3 c #00F1FB", +"F3 c #0048AC", +"G3 c #003287", +"H3 c #0076F3", +"I3 c #0072E2", +"J3 c #007AFA", +"K3 c #00ADE8", +"L3 c #0088BB", +"M3 c #0078A3", +"N3 c #00A1CF", +"O3 c #0096C0", +"P3 c #00B1E7", +"Q3 c #00ADE0", +"R3 c #00ACDD", +"S3 c #00B3DF", +"T3 c #00CBF3", +"U3 c #00B1D5", +"V3 c #00323B", +"W3 c #005362", +"X3 c #007DA4", +"Y3 c #0090C2", +"Z3 c #00A3DD", +"`3 c #00A0D4", +" 4 c #00A9CD", +".4 c #00ABC9", +"+4 c #00A1B8", +"@4 c #00758E", +"#4 c #003F5D", +"$4 c #002854", +"%4 c #002E72", +"&4 c #002F9C", +"*4 c #0039B8", +"=4 c #0045C4", +"-4 c #0058CB", +";4 c #0072E5", +">4 c #0098FF", +",4 c #0095FC", +"'4 c #0060AC", +")4 c #00356E", +"!4 c #000C3A", +"~4 c #01002E", +"{4 c #070029", +"]4 c #03002B", +"^4 c #00284A", +"/4 c #0091BD", +"(4 c #00AEB0", +"_4 c #008189", +":4 c #001F42", +"<4 c #001241", +"[4 c #001451", +"}4 c #001043", +"|4 c #000B31", +"14 c #00012A", +"24 c #000A3A", +"34 c #00124D", +"44 c #00226D", +"54 c #002E87", +"64 c #003691", +"74 c #003EA2", +"84 c #004283", +"94 c #00B9E8", +"04 c #00C7CE", +"a4 c #00BBBF", +"b4 c #002664", +"c4 c #00378E", +"d4 c #0062C4", +"e4 c #006ECD", +"f4 c #0066C1", +"g4 c #0080F0", +"h4 c #00A2D9", +"i4 c #0079B8", +"j4 c #0098D0", +"k4 c #0097CA", +"l4 c #00ABD1", +"m4 c #00B5D9", +"n4 c #00ACCD", +"o4 c #00A2C1", +"p4 c #00A9C6", +"q4 c #00768D", +"r4 c #005766", +"s4 c #00333A", +"t4 c #001F22", +"u4 c #001411", +"v4 c #002E37", +"w4 c #004E6B", +"x4 c #0077AE", +"y4 c #0090CB", +"z4 c #009CCE", +"A4 c #009CB6", +"B4 c #007185", +"C4 c #001A2E", +"D4 c #000929", +"E4 c #000F39", +"F4 c #00144A", +"G4 c #001A69", +"H4 c #002EA9", +"I4 c #004EE3", +"J4 c #005FD7", +"K4 c #007AED", +"L4 c #00A1FF", +"M4 c #0099FF", +"N4 c #007FDB", +"O4 c #0056A4", +"P4 c #00225F", +"Q4 c #000638", +"R4 c #070034", +"S4 c #001D43", +"T4 c #002146", +"U4 c #005D84", +"V4 c #008A8A", +"W4 c #00BBC4", +"X4 c #001C39", +"Y4 c #001047", +"Z4 c #00185E", +"`4 c #00155C", +" 5 c #00114D", +".5 c #000A35", +"+5 c #000835", +"@5 c #00032C", +"#5 c #00093C", +"$5 c #001151", +"%5 c #002276", +"&5 c #003293", +"*5 c #003DA3", +"=5 c #0042A1", +"-5 c #004C91", +";5 c #00A7A3", +">5 c #00518F", +",5 c #002A63", +"'5 c #003B88", +")5 c #0062B7", +"!5 c #0072C6", +"~5 c #0072C9", +"{5 c #0082E9", +"]5 c #0093FF", +"^5 c #0093CC", +"/5 c #007DDA", +"(5 c #005EA7", +"_5 c #00447D", +":5 c #004571", +"<5 c #0095D3", +"[5 c #0097C0", +"}5 c #00C3E0", +"|5 c #00B8D2", +"15 c #009EB4", +"25 c #0099B1", +"35 c #006B81", +"45 c #000702", +"55 c #00110A", +"65 c #000D09", +"75 c #000B22", +"85 c #00395D", +"95 c #005E93", +"05 c #0084BE", +"a5 c #008EAD", +"b5 c #0094AB", +"c5 c #007487", +"d5 c #00293B", +"e5 c #001329", +"f5 c #000F2F", +"g5 c #000025", +"h5 c #000432", +"i5 c #000C47", +"j5 c #002380", +"k5 c #0040B9", +"l5 c #0058C8", +"m5 c #0072DE", +"n5 c #008EFB", +"o5 c #0092F6", +"p5 c #0088ED", +"q5 c #0067C3", +"r5 c #00347F", +"s5 c #00124E", +"t5 c #000138", +"u5 c #01002D", +"v5 c #000630", +"w5 c #001C43", +"x5 c #002248", +"y5 c #004A74", +"z5 c #0075AA", +"A5 c #0093CE", +"B5 c #00B3EA", +"C5 c #00A39B", +"D5 c #009D9B", +"E5 c #001446", +"F5 c #00165A", +"G5 c #00022C", +"H5 c #000A3F", +"I5 c #001354", +"J5 c #00247B", +"K5 c #0046B2", +"L5 c #004397", +"M5 c #005DB0", +"N5 c #009F98", +"O5 c #0076A8", +"P5 c #004673", +"Q5 c #00417A", +"R5 c #006BB7", +"S5 c #007ACA", +"T5 c #0082DA", +"U5 c #0086E0", +"V5 c #0095FF", +"W5 c #0096F3", +"X5 c #003A7B", +"Y5 c #001651", +"Z5 c #001347", +"`5 c #004D77", +" 6 c #009CC8", +".6 c #00BDCF", +"+6 c #00ADBA", +"@6 c #00A3B0", +"#6 c #006876", +"$6 c #002634", +"%6 c #000412", +"&6 c #001016", +"*6 c #002018", +"=6 c #00180F", +"-6 c #001915", +";6 c #001F24", +">6 c #003255", +",6 c #0083A7", +"'6 c #0095B7", +")6 c #00859E", +"!6 c #00001B", +"~6 c #03001C", +"{6 c #000021", +"]6 c #000634", +"^6 c #00185D", +"/6 c #003693", +"(6 c #0055BC", +"_6 c #006FD8", +":6 c #0081E6", +"<6 c #0088EF", +"[6 c #0088F4", +"}6 c #0070D7", +"|6 c #004398", +"16 c #002469", +"26 c #000B45", +"36 c #000434", +"46 c #001941", +"56 c #00284E", +"66 c #003A69", +"76 c #00599F", +"86 c #0068AB", +"96 c #0081BC", +"06 c #00C6FF", +"a6 c #008983", +"b6 c #00BABC", +"c6 c #00426E", +"d6 c #001E43", +"e6 c #00134F", +"f6 c #000C48", +"g6 c #000736", +"h6 c #000732", +"i6 c #030020", +"j6 c #000130", +"k6 c #000942", +"l6 c #001256", +"m6 c #002072", +"n6 c #00328B", +"o6 c #0046AA", +"p6 c #00418B", +"q6 c #009C8B", +"r6 c #0074A3", +"s6 c #005E94", +"t6 c #004778", +"u6 c #005591", +"v6 c #0064AE", +"w6 c #006DB6", +"x6 c #0079C8", +"y6 c #0082D9", +"z6 c #008DEC", +"A6 c #008AE5", +"B6 c #0099F6", +"C6 c #0098EE", +"D6 c #0090DC", +"E6 c #007AC4", +"F6 c #0067C6", +"G6 c #00306A", +"H6 c #00154D", +"I6 c #00144F", +"J6 c #000044", +"K6 c #006489", +"L6 c #00ADCA", +"M6 c #00ADBD", +"N6 c #00C0CB", +"O6 c #0098A1", +"P6 c #003C45", +"Q6 c #00231B", +"R6 c #001211", +"S6 c #001219", +"T6 c #000720", +"U6 c #002A40", +"V6 c #005A71", +"W6 c #00718A", +"X6 c #00485C", +"Y6 c #000F24", +"Z6 c #060019", +"`6 c #090019", +" 7 c #00053B", +".7 c #002C73", +"+7 c #004DA7", +"@7 c #006BD3", +"#7 c #007AE3", +"$7 c #0085F4", +"%7 c #008BFF", +"&7 c #0076E6", +"*7 c #004595", +"=7 c #001448", +"-7 c #000E37", +";7 c #001338", +">7 c #003C91", +",7 c #00469E", +"'7 c #0065A9", +")7 c #008DCD", +"!7 c #00908A", +"~7 c #002A52", +"{7 c #001A48", +"]7 c #000436", +"^7 c #000E49", +"/7 c #000A41", +"(7 c #000636", +"_7 c #00042D", +":7 c #00062F", +"<7 c #030021", +"[7 c #000237", +"}7 c #000B49", +"|7 c #001359", +"17 c #00206D", +"27 c #003186", +"37 c #0048A4", +"47 c #009785", +"57 c #009AF4", +"67 c #007FC9", +"77 c #0072BC", +"87 c #004681", +"97 c #005895", +"07 c #0071BE", +"a7 c #0063AB", +"b7 c #0066B0", +"c7 c #0069B9", +"d7 c #0061AA", +"e7 c #0074CC", +"f7 c #007CD6", +"g7 c #008BEB", +"h7 c #008BE5", +"i7 c #00A4FF", +"j7 c #008EF0", +"k7 c #0083EF", +"l7 c #000D48", +"m7 c #001C5E", +"n7 c #070049", +"o7 c #000652", +"p7 c #002C65", +"q7 c #00244F", +"r7 c #007594", +"s7 c #00BFDD", +"t7 c #00BED0", +"u7 c #00666D", +"v7 c #110006", +"w7 c #002529", +"x7 c #000911", +"y7 c #001C26", +"z7 c #003D4C", +"A7 c #00546D", +"B7 c #002C44", +"C7 c #002441", +"D7 c #060024", +"E7 c #010015", +"F7 c #010013", +"G7 c #00081F", +"H7 c #00163E", +"I7 c #00174C", +"J7 c #003C84", +"K7 c #005ABA", +"L7 c #006DD7", +"M7 c #007EF5", +"N7 c #0086FF", +"O7 c #0076F4", +"P7 c #0051B1", +"Q7 c #00367D", +"R7 c #000B41", +"S7 c #00133E", +"T7 c #000F37", +"U7 c #00053F", +"V7 c #001A7F", +"W7 c #0034A2", +"X7 c #004D9E", +"Y7 c #005F9B", +"Z7 c #00D9D1", +"`7 c #003053", +" 8 c #001C47", +".8 c #001146", +"+8 c #000D4B", +"@8 c #000940", +"#8 c #00063B", +"$8 c #000531", +"%8 c #000422", +"&8 c #040025", +"*8 c #000A4C", +"=8 c #00125B", +"-8 c #001F6C", +";8 c #00348C", +">8 c #004585", +",8 c #00C3A8", +"'8 c #009484", +")8 c #0065BD", +"!8 c #0062B8", +"~8 c #003F8D", +"{8 c #00428C", +"]8 c #00589F", +"^8 c #005DA2", +"/8 c #00559D", +"(8 c #00519A", +"_8 c #004D92", +":8 c #005BAD", +"<8 c #0069C0", +"[8 c #0076D2", +"}8 c #007BD3", +"|8 c #009CFF", +"18 c #004B8D", +"28 c #001E5D", +"38 c #001658", +"48 c #000445", +"58 c #010048", +"68 c #000856", +"78 c #002361", +"88 c #003C70", +"98 c #006B90", +"08 c #000A09", +"a8 c #0C0300", +"b8 c #000B1C", +"c8 c #070013", +"d8 c #08000F", +"e8 c #000F0F", +"f8 c #001410", +"g8 c #001716", +"h8 c #001A23", +"i8 c #002C43", +"j8 c #001938", +"k8 c #000C38", +"l8 c #000831", +"m8 c #001E46", +"n8 c #002F6A", +"o8 c #004AA4", +"p8 c #006CE7", +"q8 c #0076FA", +"r8 c #006EEF", +"s8 c #005ED1", +"t8 c #003C89", +"u8 c #000941", +"v8 c #000242", +"w8 c #00067A", +"x8 c #0022B0", +"y8 c #004BAD", +"z8 c #004286", +"A8 c #009AE7", +"B8 c #00C8C3", +"C8 c #00A9A9", +"D8 c #002F4B", +"E8 c #001A3F", +"F8 c #000637", +"G8 c #000D4A", +"H8 c #000A46", +"I8 c #00073F", +"J8 c #000435", +"K8 c #000527", +"L8 c #050014", +"M8 c #00094C", +"N8 c #00145E", +"O8 c #00216E", +"P8 c #004AA0", +"Q8 c #004D8D", +"R8 c #009984", +"S8 c #0059BE", +"T8 c #005DCF", +"U8 c #0051C1", +"V8 c #002182", +"W8 c #00399A", +"X8 c #00479B", +"Y8 c #00397B", +"Z8 c #003678", +"`8 c #003273", +" 9 c #00397C", +".9 c #004690", +"+9 c #0058AE", +"@9 c #0064B9", +"#9 c #0074CB", +"$9 c #008BEF", +"%9 c #0096FF", +"&9 c #005099", +"*9 c #004194", +"=9 c #002874", +"-9 c #001D86", +";9 c #001B7F", +">9 c #00175C", +",9 c #002565", +"'9 c #001B50", +")9 c #002E59", +"!9 c #004877", +"~9 c #00131F", +"{9 c #000909", +"]9 c #000700", +"^9 c #000C00", +"/9 c #080D00", +"(9 c #0A001F", +"_9 c #070015", +":9 c #19001D", +"<9 c #003A22", +"[9 c #000B02", +"}9 c #00070B", +"|9 c #00093F", +"19 c #00103E", +"29 c #002043", +"39 c #0045A0", +"49 c #0056CB", +"59 c #0064E9", +"69 c #006CF6", +"79 c #006DF4", +"89 c #005BCE", +"99 c #002961", +"09 c #001745", +"a9 c #000C35", +"b9 c #000229", +"c9 c #050029", +"d9 c #050040", +"e9 c #0C007E", +"f9 c #0010C1", +"g9 c #0047C2", +"h9 c #0057A3", +"i9 c #0078B8", +"j9 c #00BEBB", +"k9 c #00A7AC", +"l9 c #00334C", +"m9 c #000E36", +"n9 c #000C49", +"o9 c #000943", +"p9 c #00063C", +"q9 c #00002F", +"r9 c #000428", +"s9 c #030600", +"t9 c #03000D", +"u9 c #05001C", +"v9 c #020029", +"w9 c #00033A", +"x9 c #000A4A", +"y9 c #001358", +"z9 c #002168", +"A9 c #003A8F", +"B9 c #004795", +"C9 c #004F92", +"D9 c #00AB96", +"E9 c #0057C4", +"F9 c #0052C9", +"G9 c #0058F3", +"H9 c #0046CA", +"I9 c #0035AA", +"J9 c #0037A5", +"K9 c #003376", +"L9 c #002F5F", +"M9 c #001F4E", +"N9 c #001D4D", +"O9 c #001442", +"P9 c #003675", +"Q9 c #004B9A", +"R9 c #0058B0", +"S9 c #006CCE", +"T9 c #0086F1", +"U9 c #007DDE", +"V9 c #006AC7", +"W9 c #004B97", +"X9 c #0046A6", +"Y9 c #00329A", +"Z9 c #001A5E", +"`9 c #001A56", +" 0 c #001C4C", +".0 c #001426", +"+0 c #00171A", +"@0 c #001409", +"#0 c #000606", +"$0 c #0B0011", +"%0 c #140018", +"&0 c #290027", +"*0 c #001C13", +"=0 c #000E41", +"-0 c #001543", +";0 c #00193C", +">0 c #001C49", +",0 c #002760", +"'0 c #005FDE", +")0 c #006FF8", +"!0 c #0077FF", +"~0 c #0066D5", +"{0 c #005BC1", +"]0 c #004392", +"^0 c #00285F", +"/0 c #00143F", +"(0 c #00052C", +"_0 c #020028", +":0 c #050079", +"<0 c #0014C4", +"[0 c #0047CF", +"}0 c #005FC0", +"|0 c #00629E", +"10 c #00AFAC", +"20 c #00A9B4", +"30 c #00264D", +"40 c #00082D", +"50 c #001344", +"60 c #000C4A", +"70 c #000A4F", +"80 c #000843", +"90 c #00071F", +"00 c #060800", +"a0 c #02001B", +"b0 c #03001E", +"c0 c #02002B", +"d0 c #000131", +"e0 c #00053E", +"f0 c #000E4D", +"g0 c #001350", +"h0 c #003071", +"i0 c #00448E", +"j0 c #004985", +"k0 c #009D96", +"l0 c #0047A7", +"m0 c #0053F3", +"n0 c #0047EC", +"o0 c #003FD8", +"p0 c #002197", +"q0 c #0038A9", +"r0 c #00274D", +"s0 c #001B2E", +"t0 c #000921", +"u0 c #001C38", +"v0 c #00306B", +"w0 c #003A84", +"x0 c #004CAB", +"y0 c #006CE1", +"z0 c #007AEA", +"A0 c #0087FC", +"B0 c #0060BC", +"C0 c #004AA3", +"D0 c #003C9C", +"E0 c #000D44", +"F0 c #001135", +"G0 c #00051C", +"H0 c #000C0C", +"I0 c #000E09", +"J0 c #080002", +"K0 c #100006", +"L0 c #200019", +"M0 c #001652", +"N0 c #000F46", +"O0 c #000F3F", +"P0 c #00092A", +"Q0 c #00266A", +"R0 c #006EE1", +"S0 c #0080F5", +"T0 c #007DE6", +"U0 c #008BF9", +"V0 c #007BE2", +"W0 c #0071D6", +"X0 c #0061BE", +"Y0 c #004287", +"Z0 c #002356", +"`0 c #00163F", +" a c #00003B", +".a c #001B88", +"+a c #0036CF", +"@a c #0052E2", +"#a c #0060CE", +"$a c #005C9A", +"%a c #00B3A9", +"&a c #009EB0", +"*a c #00102F", +"=a c #001644", +"-a c #001857", +";a c #001368", +">a c #00105C", +",a c #000C52", +"'a c #000839", +")a c #000A0D", +"!a c #000239", +"~a c #000034", +"{a c #001A55", +"]a c #002F6C", +"^a c #004184", +"/a c #004581", +"(a c #00A0A0", +"_a c #00BCC6", +":a c #004BAE", +"<a c #004CE6", +"[a c #0044EB", +"}a c #003DDD", +"|a c #0028A1", +"1a c #0036A1", +"2a c #002042", +"3a c #00111B", +"4a c #000B1D", +"5a c #00224D", +"6a c #002E6B", +"7a c #0046A2", +"8a c #006BE6", +"9a c #0089FF", +"0a c #0091FF", +"aa c #005EB9", +"ba c #00489C", +"ca c #0040AC", +"da c #000234", +"ea c #000C2A", +"fa c #00122B", +"ga c #000110", +"ha c #000D0F", +"ia c #0C0500", +"ja c #0A0001", +"ka c #090008", +"la c #000A1F", +"ma c #00274F", +"na c #00275D", +"oa c #000E43", +"pa c #001964", +"qa c #002E7E", +"ra c #005BC4", +"sa c #007EEE", +"ta c #0091F3", +"ua c #009AFF", +"va c #0091F8", +"wa c #007ADC", +"xa c #005DB4", +"ya c #004C9C", +"za c #002C63", +"Aa c #000430", +"Ba c #00123A", +"Ca c #000E45", +"Da c #002988", +"Ea c #004FDB", +"Fa c #0059E5", +"Ga c #0059C0", +"Ha c #0075B5", +"Ia c #00B5AB", +"Ja c #002958", +"Ka c #00264E", +"La c #002348", +"Ma c #001D4C", +"Na c #00195B", +"Oa c #00165D", +"Pa c #001262", +"Qa c #000E54", +"Ra c #000A2A", +"Sa c #000E12", +"Ta c #00001A", +"Ua c #010022", +"Va c #010033", +"Wa c #00002E", +"Xa c #000944", +"Ya c #00114E", +"Za c #001C5C", +"`a c #00276A", +" b c #00387F", +".b c #004994", +"+b c #004A8C", +"@b c #00A2AA", +"#b c #00A7B1", +"$b c #0046C3", +"%b c #0046E1", +"&b c #003CCF", +"*b c #002DA3", +"=b c #002054", +"-b c #001028", +";b c #000620", +">b c #000519", +",b c #002249", +"'b c #003676", +")b c #0057BC", +"!b c #0074EB", +"~b c #0086F0", +"{b c #006CCB", +"]b c #0044B0", +"^b c #00328E", +"/b c #000424", +"(b c #000F2D", +"_b c #002240", +":b c #004F6B", +"<b c #002434", +"[b c #000F1F", +"}b c #000B05", +"|b c #0A000B", +"1b c #090011", +"2b c #00384E", +"3b c #00597C", +"4b c #00466A", +"5b c #000937", +"6b c #070022", +"7b c #0061C2", +"8b c #0077D9", +"9b c #008AED", +"0b c #0088E4", +"ab c #008AEA", +"bb c #0073CB", +"cb c #005FB0", +"db c #004B96", +"eb c #004CA6", +"fb c #003174", +"gb c #000D3F", +"hb c #001747", +"ib c #001A54", +"jb c #00318B", +"kb c #0059DA", +"lb c #005FD9", +"mb c #0056B1", +"nb c #009CE4", +"ob c #00D9CA", +"pb c #008894", +"qb c #002B64", +"rb c #002B5C", +"sb c #002657", +"tb c #001042", +"ub c #001B59", +"vb c #001966", +"wb c #001257", +"xb c #001053", +"yb c #000D38", +"zb c #000122", +"Ab c #00033D", +"Bb c #000C4C", +"Cb c #001E63", +"Db c #0046A3", +"Eb c #0053B4", +"Fb c #004D9D", +"Gb c #009FA9", +"Hb c #00A6B5", +"Ib c #00519F", +"Jb c #0047AD", +"Kb c #004BD3", +"Lb c #003FC1", +"Mb c #00329F", +"Nb c #0032A3", +"Ob c #00206B", +"Pb c #000A33", +"Qb c #00081D", +"Rb c #002853", +"Sb c #004797", +"Tb c #0070EB", +"Ub c #007FFA", +"Vb c #0073D3", +"Wb c #004A95", +"Xb c #0042A0", +"Yb c #00358F", +"Zb c #000042", +"`b c #00062C", +" c c #001F38", +".c c #004A61", +"+c c #00697C", +"@c c #00525D", +"#c c #000E1C", +"$c c #000F20", +"%c c #002619", +"&c c #00050B", +"*c c #00132C", +"=c c #001931", +"-c c #005F76", +";c c #007296", +">c c #003A62", +",c c #080031", +"'c c #00152E", +")c c #00142F", +"!c c #001B4F", +"~c c #00296A", +"{c c #0064BD", +"]c c #0087E7", +"^c c #008AE9", +"/c c #0086E9", +"(c c #004A96", +"_c c #00438C", +":c c #004599", +"<c c #00337B", +"[c c #00225D", +"}c c #001B54", +"|c c #00449A", +"1c c #0063D1", +"2c c #0065CC", +"3c c #00E2FD", +"4c c #008C91", +"5c c #002358", +"6c c #001147", +"7c c #001148", +"8c c #00113F", +"9c c #000121", +"0c c #00042C", +"ac c #000F4C", +"bc c #00104D", +"cc c #002166", +"dc c #004EBA", +"ec c #00B8C8", +"fc c #0075CB", +"gc c #0045B4", +"hc c #0039A0", +"ic c #00329E", +"jc c #001A74", +"kc c #000233", +"lc c #002A57", +"mc c #004E9F", +"nc c #0078F3", +"oc c #0082F9", +"pc c #0090F4", +"qc c #0093F6", +"rc c #008AF3", +"sc c #0056A7", +"tc c #004096", +"uc c #003179", +"vc c #001033", +"wc c #03002F", +"xc c #000930", +"yc c #001D3D", +"zc c #007F93", +"Ac c #008591", +"Bc c #007E87", +"Cc c #004756", +"Dc c #00182B", +"Ec c #10001B", +"Fc c #002118", +"Gc c #000A0F", +"Hc c #000A29", +"Ic c #001D3B", +"Jc c #0086A3", +"Kc c #00A5CA", +"Lc c #006E96", +"Mc c #000E3C", +"Nc c #000338", +"Oc c #00163C", +"Pc c #002047", +"Qc c #00387A", +"Rc c #005FAD", +"Sc c #006DBF", +"Tc c #0082E0", +"Uc c #0087EF", +"Vc c #0085EF", +"Wc c #0075DE", +"Xc c #0056AB", +"Yc c #00499E", +"Zc c #003B89", +"`c c #00327A", +" d c #002E7A", +".d c #001A53", +"+d c #005AB0", +"@d c #006CC2", +"#d c #0071C5", +"$d c #009DF3", +"%d c #00E7F6", +"&d c #00FFEE", +"*d c #00F7E0", +"=d c #00A3A5", +"-d c #00A9B6", +";d c #00519D", +">d c #002C6B", +",d c #002867", +"'d c #001D56", +")d c #001F63", +"!d c #00083F", +"~d c #000F4D", +"{d c #003A9E", +"]d c #0056C5", +"^d c #0052B2", +"/d c #00909D", +"(d c #005898", +"_d c #004F99", +":d c #004DA5", +"<d c #00379F", +"[d c #00207D", +"}d c #000B53", +"|d c #00013B", +"1d c #000331", +"2d c #000522", +"3d c #002B5B", +"4d c #0052AB", +"5d c #006EE6", +"6d c #0077E4", +"7d c #008BE9", +"8d c #0093EF", +"9d c #003E8B", +"0d c #003177", +"ad c #00214E", +"bd c #020035", +"cd c #001332", +"dd c #006E85", +"ed c #00C2D5", +"fd c #008C95", +"gd c #007A85", +"hd c #005B6C", +"id c #000E22", +"jd c #001718", +"kd c #000904", +"ld c #000925", +"md c #003353", +"nd c #00789E", +"od c #00AFD3", +"pd c #00B5D5", +"qd c #00B5DA", +"rd c #004672", +"sd c #004185", +"td c #004D98", +"ud c #00549D", +"vd c #0062AF", +"wd c #006EC5", +"xd c #0071CD", +"yd c #006FD3", +"zd c #006CD5", +"Ad c #0054B1", +"Bd c #004FB1", +"Cd c #003D8F", +"Dd c #003A8A", +"Ed c #003F9A", +"Fd c #002D6C", +"Gd c #0069B1", +"Hd c #0074B4", +"Id c #00EFF5", +"Jd c #00FFE7", +"Kd c #00BFBA", +"Ld c #00858B", +"Md c #003C7D", +"Nd c #002D6F", +"Od c #002061", +"Pd c #002268", +"Qd c #001E60", +"Rd c #001850", +"Sd c #00113D", +"Td c #00062A", +"Ud c #001452", +"Vd c #001E67", +"Wd c #002D88", +"Xd c #003695", +"Yd c #0043A5", +"Zd c #0058CE", +"`d c #0052BA", +" e c #009AA2", +".e c #0068A3", +"+e c #005799", +"@e c #00468D", +"#e c #0041A3", +"$e c #002994", +"%e c #001269", +"&e c #000147", +"*e c #000426", +"=e c #00265B", +"-e c #004BA8", +";e c #0064D6", +">e c #0077E2", +",e c #007ED1", +"'e c #0090EA", +")e c #007DEC", +"!e c #004CAA", +"~e c #003075", +"{e c #000033", +"]e c #006989", +"^e c #0098AA", +"/e c #0096A2", +"(e c #008C99", +"_e c #00808F", +":e c #00677B", +"<e c #00566E", +"[e c #002336", +"}e c #00192B", +"|e c #000713", +"1e c #001217", +"2e c #000B0D", +"3e c #001015", +"4e c #001021", +"5e c #006C8D", +"6e c #00A2CA", +"7e c #00B4D9", +"8e c #00C3EA", +"9e c #00B5D8", +"0e c #009FC5", +"ae c #00749E", +"be c #004A73", +"ce c #003971", +"de c #003880", +"ee c #003985", +"fe c #00347B", +"ge c #003881", +"he c #004697", +"ie c #004998", +"je c #004F9E", +"ke c #005CB3", +"le c #005EB6", +"me c #005DB6", +"ne c #004DAD", +"oe c #0050B5", +"pe c #0049AB", +"qe c #0050B1", +"re c #004AA1", +"se c #003872", +"te c #003165", +"ue c #0075AC", +"ve c #008BC1", +"we c #00E7FF", +"xe c #00F6F1", +"ye c #00F6DE", +"ze c #00FFE5", +"Ae c #00E7DD", +"Be c #00A1A4", +"Ce c #00B9C9", +"De c #003878", +"Ee c #002B73", +"Fe c #002471", +"Ge c #00226C", +"He c #001E5F", +"Ie c #001943", +"Je c #001049", +"Ke c #002B7B", +"Le c #002D7B", +"Me c #003992", +"Ne c #005DDB", +"Oe c #0054C2", +"Pe c #005EC5", +"Qe c #009DA4", +"Re c #00A4A7", +"Se c #00ABDF", +"Te c #00618D", +"Ue c #002860", +"Ve c #004CA1", +"We c #0037A9", +"Xe c #001877", +"Ye c #00034B", +"Ze c #00052A", +"`e c #00184B", +" f c #00398B", +".f c #0057C0", +"+f c #0081FF", +"@f c #008FF5", +"#f c #0096F1", +"$f c #009BFF", +"%f c #003F94", +"&f c #002D5F", +"*f c #000E40", +"=f c #002252", +"-f c #005278", +";f c #0084A2", +">f c #00A8BB", +",f c #009EAC", +"'f c #0095A6", +")f c #0090A5", +"!f c #007D97", +"~f c #006074", +"{f c #005C6F", +"]f c #004552", +"^f c #00303A", +"/f c #000F14", +"(f c #00384B", +"_f c #007A9D", +":f c #00A1CC", +"<f c #00BCE8", +"[f c #00CFFE", +"}f c #00CAF3", +"|f c #0074A2", +"1f c #003364", +"2f c #003E7E", +"3f c #003D8B", +"4f c #004097", +"5f c #003785", +"6f c #003D91", +"7f c #00408F", +"8f c #004699", +"9f c #0051AC", +"0f c #004CA8", +"af c #004FBB", +"bf c #004DB5", +"cf c #0057C1", +"df c #005DC1", +"ef c #004A8D", +"ff c #004473", +"gf c #0087B4", +"hf c #00B9EA", +"if c #00EFE3", +"jf c #00F3DA", +"kf c #00ECDC", +"lf c #007F8B", +"mf c #002F6B", +"nf c #002477", +"of c #002066", +"pf c #00163D", +"qf c #002063", +"rf c #00286F", +"sf c #00388F", +"tf c #0049B5", +"uf c #0052C5", +"vf c #0053B0", +"wf c #007E7C", +"xf c #00B9E4", +"yf c #007AB1", +"zf c #000959", +"Af c #00052D", +"Bf c #001758", +"Cf c #00439E", +"Df c #0075F3", +"Ef c #0080DD", +"Ff c #0083D9", +"Gf c #0085E5", +"Hf c #008EFF", +"If c #0078FF", +"Jf c #004687", +"Kf c #002B53", +"Lf c #007DA3", +"Mf c #0096B4", +"Nf c #00A3B9", +"Of c #0099B2", +"Pf c #007F95", +"Qf c #008698", +"Rf c #00707D", +"Sf c #005763", +"Tf c #00303B", +"Uf c #0099C5", +"Vf c #00B3E6", +"Wf c #00BFE4", +"Xf c #00BFDE", +"Yf c #00AECD", +"Zf c #008BBB", +"`f c #006EA9", +" g c #00579C", +".g c #0055BF", +"+g c #00358B", +"@g c #003A91", +"#g c #003C92", +"$g c #00429E", +"%g c #0044A9", +"&g c #0041A4", +"*g c #003F9D", +"=g c #003892", +"-g c #003FA3", +";g c #00429C", +">g c #005088", +",g c #002C5C", +"'g c #00E5D9", +")g c #00D5C9", +"!g c #00F1E0", +"~g c #00FDEA", +"{g c #00EFEB", +"]g c #00488C", +"^g c #002D6E", +"/g c #00246C", +"(g c #002271", +"_g c #002483", +":g c #002478", +"<g c #001C59", +"[g c #001B4A", +"}g c #000730", +"|g c #000E35", +"1g c #002468", +"2g c #0045AE", +"3g c #0048B5", +"4g c #00479A", +"5g c #008289", +"6g c #00A9A5", +"7g c #005AB8", +"8g c #00074F", +"9g c #00043A", +"0g c #002364", +"ag c #003E9F", +"bg c #0055BA", +"cg c #007FE1", +"dg c #0087E3", +"eg c #0090F7", +"fg c #0083FF", +"gg c #005FA4", +"hg c #00527E", +"ig c #00A7C9", +"jg c #00ADCC", +"kg c #00ACC7", +"lg c #00A0BB", +"mg c #0093AA", +"ng c #0090A3", +"og c #007282", +"pg c #00424D", +"qg c #002530", +"rg c #00172D", +"sg c #001B29", +"tg c #00465E", +"ug c #008CB8", +"vg c #00C0F2", +"wg c #00B8DD", +"xg c #00CDF1", +"yg c #00C8E5", +"zg c #00BBD8", +"Ag c #0092C3", +"Bg c #007EC0", +"Cg c #006FB8", +"Dg c #0066B4", +"Eg c #0048A2", +"Fg c #003482", +"Gg c #003481", +"Hg c #003E9A", +"Ig c #0043AC", +"Jg c #003792", +"Kg c #003087", +"Lg c #003191", +"Mg c #002B80", +"Ng c #003E95", +"Og c #004C99", +"Pg c #0066AD", +"Qg c #004574", +"Rg c #00C2FD", +"Sg c #00E8E0", +"Tg c #00E7E0", +"Ug c #00F7EA", +"Vg c #00D2CE", +"Wg c #0084AB", +"Xg c #0076C7", +"Yg c #00326C", +"Zg c #002C71", +"`g c #002473", +" h c #00227D", +".h c #002484", +"+h c #002175", +"@h c #001A50", +"#h c #000926", +"$h c #00113C", +"%h c #001F5C", +"&h c #002B77", +"*h c #003A99", +"=h c #0041A8", +"-h c #007ED2", +";h c #00A2AF", +">h c #00BAF5", +",h c #006AB2", +"'h c #00418C", +")h c #001D64", +"!h c #001055", +"~h c #00154C", +"{h c #000137", +"]h c #001F5F", +"^h c #0052BD", +"/h c #0073CA", +"(h c #0080CD", +"_h c #0081EA", +":h c #006FC7", +"<h c #006499", +"[h c #00698D", +"}h c #008BAA", +"|h c #009EBE", +"1h c #00A1C8", +"2h c #0097B9", +"3h c #0096B3", +"4h c #008BA6", +"5h c #0098B1", +"6h c #009AB4", +"7h c #004D62", +"8h c #001A2B", +"9h c #001420", +"0h c #001D19", +"ah c #001B1A", +"bh c #000822", +"ch c #00385A", +"dh c #0091C0", +"eh c #00CEF5", +"fh c #00C3DD", +"gh c #00BED4", +"hh c #00A3CC", +"ih c #008EC5", +"jh c #0087CD", +"kh c #0088D9", +"lh c #0084CB", +"mh c #004A8F", +"nh c #003579", +"oh c #00357A", +"ph c #003182", +"qh c #00297B", +"rh c #00287C", +"sh c #00297C", +"th c #003A89", +"uh c #0056A0", +"vh c #0066A0", +"wh c #00557A", +"xh c #0093BB", +"yh c #00E0E2", +"zh c #00D7D4", +"Ah c #00D7F1", +"Bh c #009CD1", +"Ch c #004984", +"Dh c #002E6F", +"Eh c #00296F", +"Fh c #002479", +"Gh c #00237F", +"Hh c #001A52", +"Ih c #001A4D", +"Jh c #002B78", +"Kh c #003896", +"Lh c #006BB6", +"Mh c #0092C7", +"Nh c #00286A", +"Oh c #001E5C", +"Ph c #002050", +"Qh c #000337", +"Rh c #002160", +"Sh c #005ED3", +"Th c #006BBF", +"Uh c #0073B6", +"Vh c #0076C0", +"Wh c #0070BE", +"Xh c #006DAF", +"Yh c #00729D", +"Zh c #00A9C0", +"`h c #00B3CF", +" i c #0098C0", +".i c #008DB4", +"+i c #008DB3", +"@i c #0097B8", +"#i c #009AB9", +"$i c #0093B1", +"%i c #007C9C", +"&i c #001530", +"*i c #000C25", +"=i c #001B2C", +"-i c #00100B", +";i c #000725", +">i c #003A57", +",i c #009BB8", +"'i c #00BBD1", +")i c #00B7CA", +"!i c #00AAD8", +"~i c #0093CB", +"{i c #008ACD", +"]i c #0095DF", +"^i c #00A0DF", +"/i c #0090C9", +"(i c #005E95", +"_i c #003A74", +":i c #00468B", +"<i c #00489A", +"[i c #003884", +"}i c #002974", +"|i c #002873", +"1i c #003E86", +"2i c #005BA0", +"3i c #004B70", +"4i c #00D0F6", +"5i c #009C89", +"6i c #00D5F5", +"7i c #0092CB", +"8i c #00316E", +"9i c #002876", +"0i c #00237E", +"ai c #001D73", +"bi c #001D70", +"ci c #000D2F", +"di c #002D80", +"ei c #0049A6", +"fi c #0067BE", +"gi c #0097E3", +"hi c #00B5D0", +"ii c #004161", +"ji c #002C47", +"ki c #004157", +"li c #006DA6", +"mi c #00346F", +"ni c #002E56", +"oi c #001337", +"pi c #000535", +"qi c #002C72", +"ri c #0042AD", +"si c #005E8E", +"ti c #006293", +"ui c #006AA1", +"vi c #0074B2", +"wi c #0081B8", +"xi c #0094B9", +"yi c #00AEC6", +"zi c #00B4C9", +"Ai c #00B4CA", +"Bi c #0098BE", +"Ci c #0091B8", +"Di c #0091BA", +"Ei c #007DA9", +"Fi c #00456D", +"Gi c #001435", +"Hi c #000A20", +"Ii c #000D07", +"Ji c #001210", +"Ki c #060013", +"Li c #000A22", +"Mi c #00586B", +"Ni c #00B3C9", +"Oi c #00BFD8", +"Pi c #00C2E4", +"Qi c #00B3E4", +"Ri c #00A2DD", +"Si c #0096D4", +"Ti c #0099D2", +"Ui c #00A8D6", +"Vi c #00A7D4", +"Wi c #0085B6", +"Xi c #00608D", +"Yi c #003B69", +"Zi c #003E6F", +"`i c #00477E", +" j c #003D76", +".j c #002C69", +"+j c #002766", +"@j c #00225E", +"#j c #002B6D", +"$j c #004181", +"%j c #004873", +"&j c #0091AC", +"*j c #00241C", +"=j c #002A1F", +"-j c #006465", +";j c #006492", +">j c #003080", +",j c #002A84", +"'j c #00207E", +")j c #000119", +"!j c #00164C", +"~j c #002776", +"{j c #0049AD", +"]j c #0069C8", +"^j c #004151", +"/j c #00474D", +"(j c #0081AD", +"_j c #005391", +":j c #00427C", +"<j c #002C4D", +"[j c #003479", +"}j c #003887", +"|j c #003C7A", +"1j c #005B86", +"2j c #008BC6", +"3j c #009DD2", +"4j c #00A5C3", +"5j c #00ACBB", +"6j c #00A8BD", +"7j c #00A2B8", +"8j c #009BB7", +"9j c #00A1C1", +"0j c #00ACD4", +"aj c #00AAD9", +"bj c #0094C6", +"cj c #007BAF", +"dj c #005387", +"ej c #002456", +"fj c #001E51", +"gj c #000F3A", +"hj c #00202D", +"ij c #002326", +"jj c #001E1C", +"kj c #000504", +"lj c #0B0007", +"mj c #04000C", +"nj c #001324", +"oj c #00BDDB", +"pj c #00B3EE", +"qj c #00AFE6", +"rj c #00ACD1", +"sj c #00ADCF", +"tj c #004B72", +"uj c #00345E", +"vj c #003C67", +"wj c #003464", +"xj c #002859", +"yj c #002457", +"zj c #003767", +"Aj c #002140", +"Bj c #006580", +"Cj c #00CBE7", +"Dj c #00EBF7", +"Ej c #00657D", +"Fj c #00212B", +"Gj c #00150F", +"Hj c #001A0F", +"Ij c #00252B", +"Jj c #00448C", +"Kj c #003591", +"Lj c #002683", +"Mj c #001C74", +"Nj c #00124C", +"Oj c #04001C", +"Pj c #00011A", +"Qj c #000F41", +"Rj c #002067", +"Sj c #0042A3", +"Tj c #006BD5", +"Uj c #0077C5", +"Vj c #00B7E3", +"Wj c #00212F", +"Xj c #000830", +"Yj c #000223", +"Zj c #00222E", +"`j c #008BDB", +" k c #005B9B", +".k c #004263", +"+k c #00336B", +"@k c #003471", +"#k c #003E7B", +"$k c #004C74", +"%k c #005E82", +"&k c #00B0C6", +"*k c #00A3AF", +"=k c #0098B4", +"-k c #00CFF5", +";k c #00C8FA", +">k c #009DDE", +",k c #0070BC", +"'k c #002E6E", +")k c #000C58", +"!k c #00053C", +"~k c #001A40", +"{k c #070000", +"]k c #0A0002", +"^k c #00030D", +"/k c #004F66", +"(k c #00ACD8", +"_k c #00B8E9", +":k c #00C1F3", +"<k c #00BFEF", +"[k c #00B9E1", +"}k c #00B4D5", +"|k c #00B7D3", +"1k c #00A6C1", +"2k c #00A8C4", +"3k c #0098BC", +"4k c #007196", +"5k c #00133D", +"6k c #002551", +"7k c #002650", +"8k c #002F52", +"9k c #00425F", +"0k c #00EDF1", +"ak c #00485E", +"bk c #000817", +"ck c #000F07", +"dk c #000F05", +"ek c #005473", +"fk c #00CED7", +"gk c #004270", +"hk c #004594", +"ik c #003CAB", +"jk c #001B72", +"kk c #00186A", +"lk c #01001F", +"mk c #000733", +"nk c #001243", +"ok c #003687", +"pk c #002B3C", +"qk c #000E25", +"rk c #00192D", +"sk c #002E35", +"tk c #0090D0", +"uk c #005A7C", +"vk c #004963", +"wk c #002C50", +"xk c #003A66", +"yk c #003D6F", +"zk c #005085", +"Ak c #006488", +"Bk c #007798", +"Ck c #0089AE", +"Dk c #0095BE", +"Ek c #00A0D1", +"Fk c #00AFCC", +"Gk c #00A3BD", +"Hk c #00C0DC", +"Ik c #00C4E4", +"Jk c #00B1DD", +"Kk c #008CCC", +"Lk c #0066BD", +"Mk c #00399F", +"Nk c #001A6E", +"Ok c #00145F", +"Pk c #001559", +"Qk c #001A4C", +"Rk c #07000C", +"Sk c #02000D", +"Tk c #006590", +"Uk c #007EAD", +"Vk c #00B8ED", +"Wk c #00C2F0", +"Xk c #00C0E0", +"Yk c #00BDD9", +"Zk c #00BCD8", +"`k c #00C5DE", +" l c #00C4DC", +".l c #00B1CD", +"+l c #004768", +"@l c #002D4D", +"#l c #001334", +"$l c #00334F", +"%l c #004B5A", +"&l c #001A24", +"*l c #00120C", +"=l c #00A1B7", +"-l c #005F7F", +";l c #0047A1", +">l c #003699", +",l c #002C93", +"'l c #00237C", +")l c #001642", +"!l c #1C0014", +"~l c #02002D", +"{l c #005BBD", +"]l c #006ACB", +"^l c #005FA2", +"/l c #008EE0", +"(l c #00494A", +"_l c #003F38", +":l c #004F45", +"<l c #00B0D5", +"[l c #0082A2", +"}l c #00556F", +"|l c #005376", +"1l c #00557B", +"2l c #005C83", +"3l c #005F7E", +"4l c #00788E", +"5l c #009AB2", +"6l c #00AACA", +"7l c #00AAE1", +"8l c #00A9E3", +"9l c #00A3D9", +"0l c #00B3E7", +"al c #00BEE5", +"bl c #00C9F2", +"cl c #0070AB", +"dl c #0073D7", +"el c #004BB0", +"fl c #003383", +"gl c #003886", +"hl c #00408D", +"il c #003470", +"jl c #00388B", +"kl c #001637", +"ll c #0086C7", +"ml c #007AB7", +"nl c #007EB5", +"ol c #009DD5", +"pl c #00BCE6", +"ql c #00D1E3", +"rl c #00C6E0", +"sl c #00BEDB", +"tl c #00C1D8", +"ul c #00E2F9", +"vl c #00C9DB", +"wl c #00C2D7", +"xl c #00A1BA", +"yl c #005569", +"zl c #003F57", +"Al c #00425B", +"Bl c #006581", +"Cl c #00A7C7", +"Dl c #00A5A7", +"El c #005354", +"Fl c #003A39", +"Gl c #007D86", +"Hl c #0085A6", +"Il c #005C7E", +"Jl c #005081", +"Kl c #00396E", +"Ll c #003C8F", +"Ml c #002D81", +"Nl c #000E2A", +"Ol c #0C0018", +"Pl c #000738", +"Ql c #000841", +"Rl c #003C8C", +"Sl c #009BB0", +"Tl c #006E84", +"Ul c #006481", +"Vl c #00536F", +"Wl c #005775", +"Xl c #00546B", +"Yl c #00667C", +"Zl c #007585", +"`l c #0097A4", +" m c #009DAE", +".m c #009EB5", +"+m c #00A2C5", +"@m c #009FCD", +"#m c #00A6E7", +"$m c #00A8E4", +"%m c #00B6EC", +"&m c #00C3F4", +"*m c #00C6F2", +"=m c #00A2C8", +"-m c #0083AD", +";m c #0086F8", +">m c #0057BD", +",m c #00448F", +"'m c #004992", +")m c #004589", +"!m c #001C68", +"~m c #090046", +"{m c #002550", +"]m c #004272", +"^m c #0065A0", +"/m c #0080CE", +"(m c #006FBE", +"_m c #006FB4", +":m c #00BCEB", +"<m c #00CCE1", +"[m c #00C8D4", +"}m c #00C5DC", +"|m c #00C0DA", +"1m c #00AEC4", +"2m c #006875", +"3m c #002C38", +"4m c #00404A", +"5m c #002937", +"6m c #002A3B", +"7m c #003445", +"8m c #005367", +"9m c #00B5B7", +"0m c #00B6BD", +"am c #00BDE0", +"bm c #00B0DC", +"cm c #005C80", +"dm c #003E65", +"em c #002871", +"fm c #00329B", +"gm c #002981", +"hm c #002A71", +"im c #002641", +"jm c #001134", +"km c #002162", +"lm c #004A98", +"mm c #0050A4", +"nm c #003982", +"om c #003474", +"pm c #008A99", +"qm c #004D5A", +"rm c #001D30", +"sm c #00364C", +"tm c #003346", +"um c #003A49", +"vm c #004651", +"wm c #00636C", +"xm c #007D8A", +"ym c #008FA1", +"zm c #00A0BC", +"Am c #009CC9", +"Bm c #00A6DA", +"Cm c #00ABE2", +"Dm c #00BCF2", +"Em c #0085AD", +"Fm c #0081B2", +"Gm c #009CF5", +"Hm c #006FE2", +"Im c #00498C", +"Jm c #004380", +"Km c #003D79", +"Lm c #00295E", +"Mm c #001945", +"Nm c #00153B", +"Om c #001C41", +"Pm c #002E5A", +"Qm c #005FB4", +"Rm c #0088F0", +"Sm c #008CFC", +"Tm c #006CD3", +"Um c #0066BC", +"Vm c #0077B9", +"Wm c #00C2FE", +"Xm c #00C3DA", +"Ym c #00C9D6", +"Zm c #00B0CE", +"`m c #002B3D", +" n c #001725", +".n c #001B2B", +"+n c #003744", +"@n c #006B7A", +"#n c #002B4B", +"$n c #000A31", +"%n c #001854", +"&n c #001E72", +"*n c #000825", +"=n c #002757", +"-n c #00256E", +";n c #003181", +">n c #004898", +",n c #004489", +"'n c #001F56", +")n c #003868", +"!n c #006663", +"~n c #002328", +"{n c #000F1A", +"]n c #00303F", +"^n c #002F43", +"/n c #002636", +"(n c #00121D", +"_n c #00141C", +":n c #004E57", +"<n c #007382", +"[n c #00A6C6", +"}n c #009BBC", +"|n c #00AFDF", +"1n c #00C4FB", +"2n c #009CCA", +"3n c #007DAB", +"4n c #0085C0", +"5n c #00A0FF", +"6n c #0085EE", +"7n c #0078F0", +"8n c #0073E6", +"9n c #0072DC", +"0n c #005197", +"an c #003C6B", +"bn c #002D55", +"cn c #003660", +"dn c #004C7B", +"en c #005A99", +"fn c #0066C4", +"gn c #0082FF", +"hn c #0090FF", +"in c #0077EF", +"jn c #005FCE", +"kn c #004EA3", +"ln c #005398", +"mn c #00A1DF", +"nn c #00C9E4", +"on c #00D5E4", +"pn c #00CDE6", +"qn c #0085A0", +"rn c #00415A", +"sn c #00071C", +"tn c #030016", +"un c #000510", +"vn c #000B15", +"wn c #002A33", +"xn c #005F85", +"yn c #003453", +"zn c #001235", +"An c #001D46", +"Bn c #00174A", +"Cn c #00165B", +"Dn c #001657", +"En c #002062", +"Fn c #002A76", +"Gn c #001E35", +"Hn c #003258", +"In c #002273", +"Jn c #004082", +"Kn c #001346", +"Ln c #001449", +"Mn c #004739", +"Nn c #000B09", +"On c #001C28", +"Pn c #001824", +"Qn c #001923", +"Rn c #001D26", +"Sn c #003E4A", +"Tn c #006D7D", +"Un c #0098AE", +"Vn c #00A2BA", +"Wn c #00ADCD", +"Xn c #00B7E4", +"Yn c #00A5DC", +"Zn c #0081B1", +"`n c #0079B4", +" o c #0082CE", +".o c #008BE8", +"+o c #0079D6", +"@o c #0070D4", +"#o c #0075E2", +"$o c #0078E8", +"%o c #0080D3", +"&o c #0079BE", +"*o c #0082C7", +"=o c #0080D4", +"-o c #0076E4", +";o c #0076F8", +">o c #007CFF", +",o c #006BEB", +"'o c #004DC3", +")o c #002B84", +"!o c #00266F", +"~o c #0075AD", +"{o c #00CBEB", +"]o c #00D1E1", +"^o c #00A3B7", +"/o c #005266", +"(o c #03000E", +"_o c #070009", +":o c #002528", +"<o c #003F5F", +"[o c #003558", +"}o c #001B45", +"|o c #001B51", +"1o c #007583", +"2o c #006A83", +"3o c #000F2E", +"4o c #000938", +"5o c #002857", +"6o c #002750", +"7o c #003257", +"8o c #00344D", +"9o c #007384", +"0o c #00CCE5", +"ao c #001C12", +"bo c #001A25", +"co c #000B14", +"do c #000811", +"eo c #003846", +"fo c #007E8E", +"go c #00A2B5", +"ho c #00A6BF", +"io c #00BAE3", +"jo c #00B7ED", +"ko c #007DB0", +"lo c #006498", +"mo c #0067AF", +"no c #006ABB", +"oo c #0068B8", +"po c #0065B6", +"qo c #006BC5", +"ro c #0068CA", +"so c #0062C3", +"to c #0074D6", +"uo c #00ACE3", +"vo c #00ABFD", +"wo c #009FEA", +"xo c #0092E8", +"yo c #0071D8", +"zo c #0061D1", +"Ao c #0063DB", +"Bo c #005CDE", +"Co c #0046CC", +"Do c #00338D", +"Eo c #003077", +"Fo c #005C8F", +"Go c #00B5C5", +"Ho c #006C7D", +"Io c #00192C", +"Jo c #00061A", +"Ko c #0D0012", +"Lo c #0A000D", +"Mo c #11000A", +"No c #080300", +"Oo c #002C2F", +"Po c #005E7D", +"Qo c #004D6B", +"Ro c #004A70", +"So c #002448", +"To c #001137", +"Uo c #00265A", +"Vo c #002756", +"Wo c #002B54", +"Xo c #001F47", +"Yo c #004F7F", +"Zo c #007F8D", +"`o c #009BA7", +" p c #009EB6", +".p c #001C3D", +"+p c #00183D", +"@p c #004C69", +"#p c #004D66", +"$p c #00B6E3", +"%p c #002C24", +"&p c #0D0002", +"*p c #000A11", +"=p c #060009", +"-p c #000E1D", +";p c #001D2B", +">p c #005868", +",p c #0093A5", +"'p c #00A7BC", +")p c #00B8E1", +"!p c #005E91", +"~p c #005592", +"{p c #004D9C", +"]p c #004495", +"^p c #004D97", +"/p c #004D93", +"(p c #004F98", +"_p c #00509E", +":p c #005DC4", +"<p c #00A5ED", +"[p c #009AE9", +"}p c #00A8FF", +"|p c #006DD4", +"1p c #004FAD", +"2p c #00479E", +"3p c #003B97", +"4p c #0032A7", +"5p c #003377", +"6p c #008CA7", +"7p c #008E9F", +"8p c #003A51", +"9p c #001C32", +"0p c #000312", +"ap c #070007", +"bp c #0B0500", +"cp c #0C0800", +"dp c #060900", +"ep c #030B00", +"fp c #00160E", +"gp c #008CA1", +"hp c #006684", +"ip c #006184", +"jp c #005578", +"kp c #004166", +"lp c #001B3E", +"mp c #003559", +"np c #003F60", +"op c #005D7C", +"pp c #007EA0", +"qp c #009BAC", +"rp c #00C8D5", +"sp c #00A9BE", +"tp c #006E8C", +"up c #001339", +"vp c #000B33", +"wp c #001535", +"xp c #001029", +"yp c #002E4F", +"zp c #004163", +"Ap c #006087", +"Bp c #005878", +"Cp c #006786", +"Dp c #001917", +"Ep c #000B07", +"Fp c #0A0000", +"Gp c #100003", +"Hp c #0D000F", +"Ip c #150011", +"Jp c #150013", +"Kp c #090016", +"Lp c #001428", +"Mp c #008094", +"Np c #00B8D5", +"Op c #00B8E3", +"Pp c #007CA6", +"Qp c #005488", +"Rp c #004F9A", +"Sp c #002F80", +"Tp c #003A85", +"Up c #003C7E", +"Vp c #004188", +"Wp c #003F90", +"Xp c #0096EA", +"Yp c #0075C2", +"Zp c #00488D", +"`p c #003574", +" q c #00326F", +".q c #002C6C", +"+q c #001762", +"@q c #006678", +"#q c #006F80", +"$q c #001B37", +"%q c #001133", +"&q c #000203", +"*q c #000908", +"=q c #000900", +"-q c #000E0D", +";q c #004851", +">q c #008493", +",q c #007180", +"'q c #006C80", +")q c #00829E", +"!q c #007B9E", +"~q c #006E93", +"{q c #005985", +"]q c #004972", +"^q c #001437", +"/q c #002040", +"(q c #006886", +"_q c #0088A0", +":q c #008397", +"<q c #005462", +"[q c #007CA7", +"}q c #00AEC2", +"|q c #00B9C8", +"1q c #00B5C7", +"2q c #004479", +"3q c #001238", +"4q c #000A26", +"5q c #003652", +"6q c #004663", +"7q c #003E60", +"8q c #00638C", +"9q c #0072A1", +"0q c #007DAA", +"aq c #008BB5", +"bq c #007591", +"cq c #006C87", +"dq c #00070C", +"eq c #000408", +"fq c #000E10", +"gq c #001519", +"hq c #0C0013", +"iq c #21001D", +"jq c #00253F", +"kq c #00647B", +"lq c #00B4DC", +"mq c #0077A3", +"nq c #00558F", +"oq c #00257C", +"pq c #002176", +"qq c #002E74", +"rq c #003271", +"sq c #00A4EE", +"tq c #00A6EE", +"uq c #0095F8", +"vq c #007BCE", +"wq c #005089", +"xq c #003267", +"yq c #00244C", +"zq c #001733", +"Aq c #001129", +"Bq c #004F58", +"Cq c #00404F", +"Dq c #001239", +"Eq c #040027", +"Fq c #000906", +"Gq c #001314", +"Hq c #001413", +"Iq c #000602", +"Jq c #030E00", +"Kq c #006F83", +"Lq c #008AA7", +"Mq c #0085A7", +"Nq c #006B9A", +"Oq c #005482", +"Pq c #003458", +"Qq c #007C9A", +"Rq c #0093AF", +"Sq c #0094AA", +"Tq c #0099AC", +"Uq c #00666F", +"Vq c #00668B", +"Wq c #00AAC5", +"Xq c #00C4DB", +"Yq c #005486", +"Zq c #001D41", +"`q c #001735", +" r c #004F6A", +".r c #0075A9", +"+r c #0092CF", +"@r c #0091B2", +"#r c #007592", +"$r c #00566D", +"%r c #003E55", +"&r c #000512", +"*r c #001317", +"=r c #000C16", +"-r c #090017", +";r c #002445", +">r c #003755", +",r c #004865", +"'r c #008AB1", +")r c #0078A7", +"!r c #005AA0", +"~r c #003589", +"{r c #001D72", +"]r c #00166D", +"^r c #001E6E", +"/r c #002367", +"(r c #002B6C", +"_r c #002D6D", +":r c #002C6F", +"<r c #0046AE", +"[r c #0062D1", +"}r c #0074D5", +"|r c #0083CF", +"1r c #008EDF", +"2r c #0075D5", +"3r c #006ACC", +"4r c #0059A3", +"5r c #003B6F", +"6r c #00214A", +"7r c #001431", +"8r c #00191E", +"9r c #003D40", +"0r c #003342", +"ar c #000329", +"br c #100024", +"cr c #00181C", +"dr c #000B01", +"er c #050C00", +"fr c #080A00", +"gr c #003851", +"hr c #009BC4", +"ir c #00A9D7", +"jr c #00A1D6", +"kr c #0083BD", +"lr c #0072AD", +"mr c #0067A0", +"nr c #005A91", +"or c #00507E", +"pr c #005C8C", +"qr c #00709A", +"rr c #0086A0", +"sr c #00A1B4", +"tr c #007780", +"ur c #007775", +"vr c #00B3D7", +"wr c #00AAC3", +"xr c #00CEF9", +"yr c #00548D", +"zr c #003768", +"Ar c #003B5E", +"Br c #008CAA", +"Cr c #007B9C", +"Dr c #00769E", +"Er c #007BB4", +"Fr c #00A3E4", +"Gr c #00BCEE", +"Hr c #00C6EF", +"Ir c #00ACCE", +"Jr c #005D73", +"Kr c #00080F", +"Lr c #000304", +"Mr c #00060B", +"Nr c #00091D", +"Or c #003052", +"Pr c #004C6E", +"Qr c #0074A0", +"Rr c #005673", +"Sr c #00658B", +"Tr c #005191", +"Ur c #00347E", +"Vr c #001B6A", +"Wr c #001561", +"Xr c #00135B", +"Yr c #001458", +"Zr c #002262", +"`r c #002965", +" s c #0048A3", +".s c #005FB9", +"+s c #0067BA", +"@s c #006BC2", +"#s c #0057B6", +"$s c #003E82", +"%s c #000B23", +"&s c #040026", +"*s c #210036", +"=s c #000D19", +"-s c #01000F", +";s c #001333", +">s c #00C1FF", +",s c #00B6F9", +"'s c #00B3FC", +")s c #00A0ED", +"!s c #0089D2", +"~s c #0077C1", +"{s c #0072BF", +"]s c #00599D", +"^s c #00578E", +"/s c #006799", +"(s c #008FC2", +"_s c #009CC5", +":s c #009EBD", +"<s c #008BA0", +"[s c #008490", +"}s c #00716F", +"|s c #006996", +"1s c #0088AB", +"2s c #008EAA", +"3s c #004A7B", +"4s c #00C8F6", +"5s c #00D2F7", +"6s c #00C0E9", +"7s c #00B6F7", +"8s c #009DBB", +"9s c #00354B", +"0s c #000D21", +"as c #000818", +"bs c #000D0D", +"cs c #000922", +"ds c #002343", +"es c #003E63", +"fs c #00385C", +"gs c #005F7C", +"hs c #005777", +"is c #00416E", +"js c #00336E", +"ks c #002675", +"ls c #00145A", +"ms c #001255", +"ns c #001D5B", +"os c #00265E", +"ps c #002D68", +"qs c #004492", +"rs c #0057B1", +"ss c #0053A8", +"ts c #0052A5", +"us c #004CA0", +"vs c #003C8A", +"ws c #00326E", +"xs c #002353", +"ys c #000714", +"zs c #000E0B", +"As c #003D39", +"Bs c #000326", +"Cs c #1A002C", +"Ds c #000C1C", +"Es c #000B25", +"Fs c #000D28", +"Gs c #00457F", +"Hs c #00AEF6", +"Is c #00A4EF", +"Js c #0097E2", +"Ks c #0084D0", +"Ls c #0079C5", +"Ms c #0072C1", +"Ns c #0062AB", +"Os c #004C85", +"Ps c #008DA5", +"Qs c #007E8F", +"Rs c #008488", +"Ss c #0072A7", +"Ts c #0085AB", +"Us c #008DAF", +"Vs c #007193", +"Ws c #00577D", +"Xs c #005364", +"Ys c #001626", +"Zs c #000809", +"`s c #001223", +" t c #001F34", +".t c #002E48", +"+t c #00263C", +"@t c #003853", +"#t c #004262", +"$t c #00466D", +"%t c #0071A0", +"&t c #002E85", +"*t c #001F5D", +"=t c #002458", +"-t c #002D5E", +";t c #00437D", +">t c #00519C", +",t c #004199", +"'t c #003789", +")t c #002762", +"!t c #00031E", +"~t c #001526", +"{t c #002C2E", +"]t c #006D68", +"^t c #002A2D", +"/t c #00122D", +"(t c #0A0019", +"_t c #0070B6", +":t c #00B2F7", +"<t c #0097D7", +"[t c #0088C7", +"}t c #007FC0", +"|t c #0073B7", +"1t c #0067AA", +"2t c #005D9F", +"3t c #00538C", +"4t c #005587", +"5t c #0080BF", +"6t c #00B4F9", +"7t c #00C7F7", +"8t c #0098B8", +"9t c #006C82", +"0t c #007BA9", +"at c #007B90", +"bt c #0085A1", +"ct c #006F9B", +"dt c #006088", +"et c #00B7E5", +"ft c #002E3C", +"gt c #001B30", +"ht c #004C68", +"it c #004467", +"jt c #00709B", +"kt c #004E79", +"lt c #00347D", +"mt c #001F58", +"nt c #003866", +"ot c #004E85", +"pt c #0061B1", +"qt c #0050A7", +"rt c #002C83", +"st c #002459", +"tt c #001E5A", +"ut c #00073E", +"vt c #001946", +"wt c #002349", +"xt c #002946", +"yt c #003648", +"zt c #00656F", +"At c #00B3B0", +"Bt c #004849", +"Ct c #001E31", +"Dt c #0E0500", +"Et c #00081B", +"Ft c #00161F", +"Gt c #008ECA", +"Ht c #0093C6", +"It c #0080B7", +"Jt c #0078B1", +"Kt c #006BA3", +"Lt c #006299", +"Mt c #005D8D", +"Nt c #005B87", +"Ot c #0080B5", +"Pt c #0080A8", +"Qt c #0093B2", +"Rt c #006987", +"St c #007AA3", +"Tt c #008AAE", +"Ut c #0095B1", +"Vt c #00779E", +"Wt c #005078", +"Xt c #0086AC", +"Yt c #00CBEE", +"Zt c #00CFDD", +"`t c #00E2E2", +" u c #00142D", +".u c #000219", +"+u c #002236", +"@u c #002F35", +"#u c #003339", +"$u c #005466", +"%u c #004960", +"&u c #006390", +"*u c #007CB0", +"=u c #004F85", +"-u c #003C78", +";u c #001F55", +">u c #003162", +",u c #004B7A", +"'u c #0066A2", +")u c #007DD8", +"!u c #003DB0", +"~u c #002884", +"{u c #002561", +"]u c #001F5B", +"^u c #001054", +"/u c #00125D", +"(u c #00256B", +"_u c #003175", +":u c #00336D", +"<u c #006B97", +"[u c #007B78", +"}u c #001E29", +"|u c #0A0700", +"1u c #0F0800", +"2u c #000D1F", +"3u c #001E10", +"4u c #002627", +"5u c #00C6ED", +"6u c #00ABD5", +"7u c #0099C1", +"8u c #0091B9", +"9u c #008BB8", +"0u c #0086B5", +"au c #006993", +"bu c #00698F", +"cu c #0090B8", +"du c #008CA9", +"eu c #00A4C0", +"fu c #005984", +"gu c #00658C", +"hu c #007B9B", +"iu c #008498", +"ju c #008EA5", +"ku c #0088B1", +"lu c #005378", +"mu c #0099B5", +"nu c #00959F", +"ou c #00A3A4", +"pu c #00293F", +"qu c #001225", +"ru c #001011", +"su c #002A32", +"tu c #003438", +"uu c #004446", +"vu c #005054", +"wu c #003F4A", +"xu c #00576E", +"yu c #0097CB", +"zu c #008FCF", +"Au c #00609F", +"Bu c #00407C", +"Cu c #00215C", +"Du c #00346D", +"Eu c #003F76", +"Fu c #0067AD", +"Gu c #0072D1", +"Hu c #003AA9", +"Iu c #002887", +"Ju c #00215B", +"Ku c #00296D", +"Lu c #002C7B", +"Mu c #002584", +"Nu c #002F8F", +"Ou c #003E8E", +"Pu c #004B8E", +"Qu c #005DA1", +"Ru c #0082C6", +"Su c #00DDDD", +"Tu c #00E2D8", +"Uu c #005357", +"Vu c #000F11", +"Wu c #020300", +"Xu c #000913", +"Yu c #001B18", +"Zu c #001C20", +"`u c #00505E", +" v c #00AAD5", +".v c #00BCDA", +"+v c #00ABCB", +"@v c #00A3C6", +"#v c #008CB7", +"$v c #0086B6", +"%v c #0078A4", +"&v c #00668A", +"*v c #009FBC", +"=v c #009FB1", +"-v c #008CA4", +";v c #005F7B", +">v c #005668", +",v c #006B83", +"'v c #006B87", +")v c #006983", +"!v c #0098B7", +"~v c #00B1CC", +"{v c #00D5E9", +"]v c #002A30", +"^v c #002F31", +"/v c #00202E", +"(v c #00373C", +"_v c #00292B", +":v c #001E21", +"<v c #003A41", +"[v c #008096", +"}v c #007EBB", +"|v c #003775", +"1v c #0054B0", +"2v c #0065E3", +"3v c #0051CF", +"4v c #003DAF", +"5v c #0032A2", +"6v c #00289B", +"7v c #00279C", +"8v c #0034AF", +"9v c #0041AF", +"0v c #00439D", +"av c #004B95", +"bv c #006AAC", +"cv c #0093D3", +"dv c #00F6FD", +"ev c #00FDF5", +"fv c #00EFDE", +"gv c #00C0B4", +"hv c #003933", +"iv c #000C0B", +"jv c #000011", +"kv c #0B000E", +"lv c #080009", +"mv c #004460", +"nv c #00C2EC", +"ov c #00D0F5", +"pv c #00B4D7", +"qv c #0091BF", +"rv c #0083BA", +"sv c #0074A7", +"tv c #006688", +"uv c #008EAB", +"vv c #009CAE", +"wv c #00919A", +"xv c #008A8C", +"yv c #006E74", +"zv c #005269", +"Av c #00657C", +"Bv c #00809B", +"Cv c #006478", +"Dv c #00B9E0", +"Ev c #00BBD7", +"Fv c #008080", +"Gv c #002D2A", +"Hv c #002045", +"Iv c #000842", +"Jv c #000F28", +"Kv c #001928", +"Lv c #001920", +"Mv c #004D4D", +"Nv c #00D0F9", +"Ov c #00C5FC", +"Pv c #0087BB", +"Qv c #007EC9", +"Rv c #0063B1", +"Sv c #004999", +"Tv c #003A9D", +"Uv c #0039A9", +"Vv c #0031A0", +"Wv c #002A91", +"Xv c #001F86", +"Yv c #002691", +"Zv c #004694", +"`v c #0092DA", +" w c #00BCFC", +".w c #00BEEB", +"+w c #00D8FC", +"@w c #00CAE0", +"#w c #00D8E7", +"$w c #00FBFD", +"%w c #00E0DD", +"&w c #00F0E7", +"*w c #00AFAB", +"=w c #00161C", +"-w c #000310", +";w c #001E2F", +">w c #00445D", +",w c #008DBA", +"'w c #00CFFB", +")w c #00C3ED", +"!w c #00A9D1", +"~w c #0096C3", +"{w c #007CB4", +"]w c #006BA4", +"^w c #006898", +"/w c #006589", +"(w c #007B97", +"_w c #008293", +":w c #00687D", +"<w c #006880", +"[w c #00A5CB", +"}w c #008BAC", +"|w c #009EC1", +"1w c #00AACC", +"2w c #00B8D7", +"3w c #00746F", +"4w c #004143", +"5w c #00061B", +"6w c #001E26", +"7w c #004D4E", +"8w c #00827F", +"9w c #009563", +"0w c #00B785", +"aw c #00D3D6", +"bw c #00DCFD", +"cw c #0099C7", +"dw c #0071AA", +"ew c #0075CA", +"fw c #0069DC", +"gw c #004FC7", +"hw c #003BB8", +"iw c #0037BF", +"jw c #0036D2", +"kw c #0035D3", +"lw c #0034C7", +"mw c #0039A2", +"nw c #003C8E", +"ow c #006AAA", +"pw c #009AAC", +"qw c #006273", +"rw c #004E64", +"sw c #00A0C2", +"tw c #00E1FA", +"uw c #00C7CD", +"vw c #007273", +"ww c #005659", +"xw c #003D42", +"yw c #002125", +"zw c #002829", +"Aw c #003C39", +"Bw c #004E4A", +"Cw c #007F79", +"Dw c #00D4E7", +"Ew c #00DFF7", +"Fw c #0099CD", +"Gw c #004353", +"Hw c #007597", +"Iw c #0092BD", +"Jw c #006D82", +"Kw c #004364", +"Lw c #002749", +"Mw c #00294C", +"Nw c #003757", +"Ow c #006E7C", +"Pw c #009A9E", +"Qw c #004222", +"Rw c #003813", +"Sw c #004925", +"Tw c #00A26F", +"Uw c #0087BD", +"Vw c #0074BA", +"Ww c #0065C2", +"Xw c #0060DC", +"Yw c #0059F2", +"Zw c #004CF2", +"`w c #0043EA", +" x c #003FDB", +".x c #0048D0", +"+x c #00579D", +"@x c #00CCCD", +"#x c #00A7AA", +"$x c #00414A", +"%x c #001424", +"&x c #001230", +"*x c #004D71", +"=x c #00D5FA", +"-x c #00E6EE", +";x c #00AAB2", +">x c #00848C", +",x c #007C83", +"'x c #008F95", +")x c #00E5DF", +"!x c #00EEEE", +"~x c #00DEF6", +"{x c #00B0EB", +"]x c #0090CC", +"^x c #007EB6", +"/x c #0073A9", +"(x c #00719A", +"_x c #006288", +":x c #005572", +"<x c #0085B9", +"[x c #009DDB", +"}x c #00A4E2", +"|x c #0069A7", +"1x c #00635C", +"2x c #000B00", +"3x c #001000", +"4x c #005F4C", +"5x c #008FCC", +"6x c #005CA8", +"7x c #0063BE", +"8x c #006AE2", +"9x c #0062E8", +"0x c #0055E6", +"ax c #0057DE", +"bx c #0069B7", +"cx c #009BDB", +"dx c #00C2BF", +"ex c #007476", +"fx c #00152D", +"gx c #000125", +"hx c #00C5E1", +"ix c #0098AC", +"jx c #00ABBF", +"kx c #00C6DA", +"lx c #00C2CD", +"mx c #00F2FD", +"nx c #00D6FF", +"ox c #00AFFB", +"px c #0085C3", +"qx c #0070A4", +"rx c #006F9F", +"sx c #00739E", +"tx c #006E94", +"ux c #0071A6", +"vx c #00415C", +"wx c #0093D2", +"xx c #00A1E5", +"yx c #00ACEF", +"zx c #00BCFB", +"Ax c #00A9D9", +"Bx c #00A0E1", +"Cx c #0090C8", +"Dx c #00A8D3", +"Ex c #005552", +"Fx c #000E13", +"Gx c #00151A", +"Hx c #00494E", +"Ix c #00BAC0", +"Jx c #00DDE6", +"Kx c #00E0F2", +"Lx c #0086CF", +"Mx c #005FAC", +"Nx c #00469A", +"Ox c #0062B6", +"Px c #007FD2", +"Qx c #00C2C9", +"Rx c #00717F", +"Sx c #001132", +"Tx c #004866", +"Ux c #00C1E6", +"Vx c #00EBFC", +"Wx c #009CC2", +"Xx c #0098BA", +"Yx c #00C9F4", +"Zx c #00C7E3", +"`x c #00C9D8", +" y c #00CCFB", +".y c #00C8FF", +"+y c #00AAFF", +"@y c #007DBA", +"#y c #00729E", +"$y c #007094", +"%y c #006282", +"&y c #005271", +"*y c #00507D", +"=y c #0087C2", +"-y c #0098DC", +";y c #009BD9", +">y c #00B2F1", +",y c #00D5E1", +"'y c #00AEF5", +")y c #00B0F2", +"!y c #008EB4", +"~y c #00B5D4", +"{y c #007D82", +"]y c #00132D", +"^y c #00092D", +"/y c #001B39", +"(y c #005774", +"_y c #00BFE7", +":y c #00C2FA", +"<y c #00B9F4", +"[y c #00BFFD", +"}y c #00C5E9", +"|y c #009CC7", +"1y c #003047", +"2y c #008496", +"3y c #00FCEA", +"4y c #00F7F7", +"5y c #00B9F7", +"6y c #00BEF9", +"7y c #00C0F6", +"8y c #00B6E7", +"9y c #0092C0", +"0y c #0081B7", +"ay c #0096E9", +"by c #007BA8", +"cy c #00506E", +"dy c #005784", +"ey c #0089CB", +"fy c #008FD3", +"gy c #0093CF", +"hy c #00ADEB", +"iy c #00ACF1", +"jy c #009DD8", +"ky c #005D82", +"ly c #004971", +"my c #005477", +"ny c #00E1FC", +"oy c #00ACE2", +"py c #0089B7", +"qy c #0096A9", +"ry c #00E5E9", +"sy c #00F2E6", +"ty c #00FAE0", +"uy c #00BCF3", +"vy c #007DB5", +"wy c #0085C4", +"xy c #00B2FD", +"yy c #00B6F6", +"zy c #00B4E7", +"Ay c #00ABE5", +"By c #009AD7", +"Cy c #006CAB", +"Dy c #0087CE", +"Ey c #008CC7", +"Fy c #005772", +"Gy c #00415D", +"Hy c #005F93", +"Iy c #004A6E", +"Jy c #0073A7", +"Ky c #007EB0", +"Ly c #0089B9", +"My c #00B6E1", +"Ny c #00C4EE", +"Oy c #00D6FA", +"Py c #00AEF2", +"Qy c #0097D0", +"Ry c #0087A9", +"Sy c #00E1FB", +"Ty c #00E4F8", +"Uy c #00CBF0", +"Vy c #00F3FD", +"Wy c #00E6E5", +"Xy c #00FFF6", +"Yy c #00BEC1", +"Zy c #007899", +"`y c #0083BB", +" z c #008AC3", +".z c #0090C7", +"+z c #00A2DB", +"@z c #00A7D7", +"#z c #00B3E0", +"$z c #009DDA", +"%z c #0088C5", +"&z c #0095DA", +"*z c #0079B0", +"=z c #007EA9", +"-z c #005272", +";z c #00759C", +">z c #0090BE", +",z c #009BC9", +"'z c #00C7FC", +")z c #00C9FD", +"!z c #00A5DB", +"~z c #0099D3", +"{z c #009AD8", +"]z c #0091C9", +"^z c #0087B7", +"/z c #007FA5", +"(z c #007794", +"_z c #00839C", +":z c #00B1CB", +"<z c #00CBDB", +"[z c #00CDD0", +"}z c #00FDFA", +"|z c #00F3F5", +"1z c #00F6FB", +"2z c #00EDFA", +"3z c #00D4E9", +"4z c #00AFC6", +"5z c #009CB1", +"6z c #009CAF", +"7z c #00A4B4", +"8z c #00B2BF", +"9z c #00B9B9", +"0z c #00D7E4", +"az c #00EEF9", +"bz c #00E8ED", +"cz c #00CCD7", +"dz c #007B8B", +"ez c #006D8D", +"fz c #007EAE", +"gz c #008DBF", +"hz c #00A9E1", +"iz c #00ABDD", +"jz c #00B0DF", +"kz c #00C6F8", +"lz c #00C4FF", +"mz c #00B9FB", +"nz c #0092CC", +"oz c #007FB9", +"pz c #008AC6", +"qz c #006F98", +"rz c #004760", +"sz c #006B91", +"tz c #007199", +"uz c #0091C5", +"vz c #00B2ED", +"wz c #00B2E2", +"xz c #00B2DD", +"yz c #0094C0", +"zz c #0082B0", +"Az c #0085BB", +"Bz c #0080B9", +"Cz c #0077AD", +"Dz c #007AAD", +"Ez c #00709E", +"Fz c #006D96", +"Gz c #005C75", +"Hz c #006B84", +"Iz c #009ABE", +"Jz c #00FFF0", +"Kz c #00F7EB", +"Lz c #00D0D2", +"Mz c #00AEBA", +"Nz c #00A3B3", +"Oz c #007C91", +"Pz c #008DA9", +"Qz c #00C4CB", +"Rz c #00A3AC", +"Sz c #009598", +"Tz c #00D0CC", +"Uz c #00EDE2", +"Vz c #00E0E5", +"Wz c #0076A5", +"Xz c #004164", +"Yz c #00648A", +"Zz c #00688D", +"`z c #0083AF", +" A c #0089B6", +".A c #008FB9", +"+A c #009DC8", +"@A c #00B3E9", +"#A c #005287", +"$A c #007BAB", +"%A c #00667F", +"&A c #005275", +"*A c #004159", +"=A c #003C52", +"-A c #004863", +";A c #00587D", +">A c #00648D", +",A c #007092", +"'A c #006C94", +")A c #006E9E", +"!A c #006393", +"~A c #005C88", +"{A c #004D72", +"]A c #00496C", +"^A c #004664", +"/A c #004660", +"(A c #00B8DF", +"_A c #00E0EB", +":A c #00F6F6", +"<A c #00C7CC", +"[A c #009099", +"}A c #009AAD", +"|A c #009AA5", +"1A c #008384", +"2A c #00C8BE", +"3A c #00F7E3", +"4A c #00E8D2", +"5A c #00EEE0", +"6A c #00EBE9", +"7A c #0089C0", +"8A c #003B6C", +"9A c #002C4C", +"0A c #004F6F", +"aA c #0077A2", +"bA c #007BA4", +"cA c #0086AE", +"dA c #0083AA", +"eA c #007290", +"fA c #006A87", +"gA c #007BA3", +"hA c #0096C9", +"iA c #00677D", +"jA c #005A6D", +"kA c #005B85", +"lA c #00354E", +"mA c #003B56", +"nA c #00486B", +"oA c #004362", +"pA c #004661", +"qA c #004965", +"rA c #005476", +"sA c #005478", +"tA c #004B6D", +"uA c #00486C", +"vA c #002943", +"wA c #001A34", +"xA c #00213B", +"yA c #002D4A", +"zA c #003452", +"AA c #004165", +"BA c #005173", +"CA c #007495", +"DA c #009CC0", +"EA c #00AFD7", +"FA c #0093B0", +"GA c #00819A", +"HA c #0091AD", +"IA c #009A9A", +"JA c #00B5AF", +"KA c #00EFEC", +"LA c #009BCF", +"MA c #005785", +"NA c #003867", +"OA c #002E62", +"PA c #00285C", +"QA c #00102C", +"RA c #00233D", +"SA c #003554", +"TA c #004469", +"UA c #00496E", +"VA c #004E71", +"WA c #005576", +"XA c #004F68", +"YA c #004358", +"ZA c #004C66", +"`A c #005577", +" B c #00486A", +".B c #00304C", +"+B c #00273B", +"@B c #00192E", +"#B c #00274A", +"$B c #002F57", +"%B c #003860", +"&B c #00456E", +"*B c #00557E", +"=B c #00B7CE", +"-B c #00A0BA", +";B c #005F8E", +">B c #003D6B", +",B c #002C64", +"'B c #002D72", +")B c #002770", +"!B c #00112B", +"~B c #001C34", +"{B c #002736", +"]B c #002532", +"^B c #001620", +"/B c #000D18", +"(B c #000514", +"_B c #08000B", +":B c #0E000F", +"<B c #08000D", +"[B c #000826", +"}B c #001C44", +"|B c #002B5A", +"1B c #001041", +"2B c #000B3B", +"3B c #00153E", +"4B c #003051", +"5B c #006AAD", +"6B c #00487D", +"7B c #00316C", +"8B c #002F6D", +"9B c #003478", +"0B c #003278", +"aB c #002B61", +"bB c #000C1B", +"cB c #00050E", +"dB c #000718", +"eB c #0B0002", +"fB c #0B0005", +"gB c #00011B", +"hB c #001234", +"iB c #001B41", +"jB c #00133A", +"kB c #02002E", +"lB c #09002F", +"mB c #000D31", +"nB c #00233F", +"oB c #002B47", +"pB c #003C62", +"qB c #002855", +"rB c #002452", +"sB c #00245C", +"tB c #002B71", +"uB c #002A7E", +"vB c #001F50", +"wB c #001126", +"xB c #00060D", +"yB c #050900", +"zB c #111100", +"AB c #131100", +"BB c #030100", +"CB c #0E0C00", +"DB c #130900", +"EB c #000B29", +"FB c #00102E", +"GB c #001E36", +"HB c #060002", +"IB c #050006", +"JB c #001123", +"KB c #001845", +"LB c #001843", +"MB c #001742", +"NB c #001C4F", +"OB c #001D52", +"PB c #001A47", +"QB c #001A4B", +"RB c #001948", +"SB c #001C5B", +"TB c #001865", +"UB c #000D36", +"VB c #000C2D", +"WB c #000722", +"XB c #050100", +"YB c #000301", +"ZB c #0A0800", +"`B c #070600", +" C c #090400", +".C c #001830", +"+C c #000407", +"@C c #000307", +"#C c #000317", +"$C c #000934", +"%C c #000F45", +"&C c #001752", +"*C c #00184D", +"=C c #001649", +"-C c #001957", +";C c #001155", +">C c #00104F", +",C c #000A45", +"'C c #002443", +")C c #000E18", +"!C c #000508", +"~C c #00072E", +"{C c #001342", +"]C c #00103B", +"^C c #000B2D", +"/C c #001C31", +"(C c #00172A", +"_C c #000209", +":C c #00051A", +"<C c #00072C", +"[C c #00092F", +"}C c #000F36", +"|C c #00122F", +"1C c #000E2B", +"2C c #000B28", +"3C c #001C33", +"4C c #000614", +"5C c #000B27", +"6C c #00203A", +"7C c #000A12", +"8C c #000916", +"9C c #00041A", +"0C c #00071E", +"aC c #00080D", +"bC c #000709", +"cC c #040300", +"dC c #000003", +"eC c #080200", +"fC c #040009", +"gC c #02001C", +" ", +" ", +" . ", +" + @ ", +" # $ % ", +" % $ $ & ", +" * & & * = ", +" - ; - ; > , ' ", +" ) ! ~ ~ { { ] ] ^ ", +" / ( _ _ : < [ } | 1 2 3 4 5 . = = = = = = = ", +" = = = = = = 6 7 8 9 0 a b c d e f _ g h i j k l l m = = = = = = = = = ", +" = = = = = = = = = = n o p q r s t u v w x y z A B C D E F G H l I J = = = = = = = = = = = ", +" = = = = = = = = = = = = = K L M N O P Q R S T U V W X Y Z ` M ...+.@.#.$. = %.&.*.&.=. = = = = = = = = = = ", +" = = = = = = = = = = = = -.A ;.>.,.'.).S !.~.{.].^./.(._.:.X <.[.u }.|.1.2.3.g 4.5.6.%.*.*. = = = = = = = ", +" = = = = = = = = = = = = = = 7.8.9.0.S a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.X p.q.r. .s.t.< u.{ v.w.x.y.= = = = = = = = ", +" y.. z.A. *.x.B.C.D.E.E.> ; * F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.S Y.Z.`. +.+++@+#+p $+E %+&+*+=+6., = = @ l -+z.;+>+ ", +" ,+m '+)+ !+~+{+]+^+/+(+_+u.:+<+[+}+|+1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+u.&+E.s+v.6.= t+u+v+ w+x+y+z+A+ ", +" ,+B+u+C+ D+E+6.&+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@;@>@,@'@)@!@7.:+~@{@]@^@/@(@_@:@<@[@}@x+|@'+1@ ", +" 2@E.3@_@4@, , 4@5@6@7@8@9@0@a@b@c@d@e@f@g@h@i@j@k@l@m@ n@o@p@q@r@s@ t@u@v@w@x@y@z@A@B@C@D@E@F@*+*+G@H@( !@7 I@J@K@L@M@N@O@P@- ", +" Q@R@S@T@U@V@W@X@Y@Z@`@[+ #.#+#@###Z $#%#&#*#=#-#;#>#,#'# )# !#~#{#]#^#/#(#_#:#<#[#+.}#|#{ 1#-.2#3#4#5#6#7#8#9#0#a#b#c#d#e# ", +" f#g#h#i#j#k#l#m#n#o#p#q#r#i s#t#u#v#w#x#y#z#A#B#C#D#E#F#G# H#I#J#K#L#M#N#!#O#P#Q#R#S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$ ", +" -$;$>$,$'$)$!$~${$]$^$/$($_$:$<$[$}$|$1$2$3$4$5$6$7$8$9$0$a$b$c$ ^#d$e$f$g$h$i$2$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$ ", +" J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%#%$%%%&%*%=%-%;%>%,%'%)%!%~%{%]%^%/%(%_%:%<%[%}%|%1%2%3%4%5%6%7%8%9%0%a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r% ", +" s%t%]$u%v%w%x%y%z%A%-#B%C%D%E%F%G%H%I%J%K%L%M%N%O%P%P%Q%R%S%T%U%V%W%X%Y%Z%`% &.&+&@&#&$&%&&&*&=&-&;&>&,&'&)&!&~&{&]&^&/&(&_&:&<&[&}&|&1&2&3&4&5&6&7&8&9&0& ", +" a&`$b&c&d&e&f&g&h&i&j&k&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z&A&-&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&`&,& *.*+*k%@*#*$*%*&***4%=*-*`+;*>*,*'*)*!*~*{*]* ", +" ^*G%/*(*_*:*<*[*|%}*|*1*2*3*4*5*6*7*8*9*0*a*b*c*d*e*f*g*h*i*j*k*l*N%m*n*o*p*q*r*s*t*u*v*w*x*y*z*A*B*C*D*E*F*f$=*G*A&H*I*J*K*i$ L*M*N*O*P*i$Q*R*S*T*U*V*W*X*Y*Z* ", +" `* =.=+=@=#=$=%=@%&=*===-=;=>=,='=)=!=~=Z&{=]=^=/=(=_=:=<=[=}=|=w*1=l*2=k*3=4=5=6=7=8=9=0=a=b=}&c=d=e=f=g=h=i=j=k=l=m=n=o=p=Y+ q= r=s=t=u=v=w=x=y=z=A= ", +" B=C=D=E=F=G=H=I=J==& ***w*}%K=L=M=N=O=P=Q=R=S=T=U=V=Q@i=W=X=Y=Z=`= -.-+-H#@-#-$-%-&-*-=---;->-,-H=c='-)-!-~-{-]-^-/-(-J=A&_-:- }&I=<-[-}-|-1-2-3-^-4- ", +" 5-6-7-8-+-9-.-5$$%J=A&4%}%0-=&a-b-c-d-'%e-f-g-h-i-j-k-l-m-n-o-p-!&q-r-s-t-u-v-w-x-y-z-A-B-y-C-D-E-F-G-H-I-9@J-K-l-L-M-N-O-P-Q-R-S- T- I=U-V-W-X-Y-Z-`- ;.;+; ", +" @;#;$;%;&;*=c= $*0-|%*;=;P$-;;;>;,;';);!;~;{;];^;#+/;(;_;:;<;[;};|;1;2;3;4;5;6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;[=k;l;m;n;o;p;q;r;s;t;u;v;w;x; y;1=0-z;A;B;C;D;E;F;G; ", +" H;I;J;K;L;M;w* N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>+>@>#>$>%>v*&>*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4>5>6>7>8>9>0>a>b>c>d>e>f>g>h>i> j>k>l>f%m>n>o>`-p>q> ", +" r>s>t>u>v>[*w>{= x>{&y>z>A>B>r>C>D>E>F>G>H>I>J>K>L>==M>N>#*r-O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,3=3=I#&,*,=,-,;,>,,,',),!,~ ~,{,],^,/,(,_,:, <,[,},|,1,2,3,4,5,6,7,8,9, ", +" 0,a,b,c,d,e,f,[,%& g,=$h,i,j,k,l,m,n,o,p,E p,q,r,s,t,u,$*v,w,x,y,z,A,B,C,D,E,O@F,G,H,I,J,K,L,M,N,O,P,Q,R,S, T,w>U,V,W,X,Y,Z,`, '.'+'u+ @'#'$'%'&'&'I#*'='-';'>',''')'!'~'{']' ", +" ^'/'('_':'[>A&l* <'['}'|' 1'2'3'4'5'6'7'8'9'0'a'b'c' d'e'f'g'h'i'_ ( j'k'e>l'm'n'o'` }.M p'q'r's't'u'v'U-#%w'x'y'z'u+z.l A'B'.'C' D'E'F'G'@%*=H'I'J'K'L'M'N'O'P'Q'R'S'T' ", +" U'V'W'X'Y'Z'`' ).)r=J= +)@)#)$) %)&)p,*)F =)-);)>),)')))!)~){)])^)/)()s#_):)<)[)f@})|)1)2)3)4)v 5)6)7)8)9)0)a)b)c)d)e)f)y.g) h)i) j)W=k)l)|%.-m)n)o)p)-#q).=r)s)t)u)v)w)x) ", +" y)z)A)B)C)D)E)F)G)H)I)J)%% K)L)M)N) O)^)l'P)Q)R)S)T)U)V)W)X)Y)Z)`);$ !.!+!@!#!$!%!&!*!=!)>-!;!>!,!'!)!1)!!~!{!]!Z%^!/!(!~ _! :!D <! [!}!|!1! 2!3!4!5!6!7!u'8!9!0!J;a!b!c!d!e! ", +" f!g!h!i!j!k!l!m!x=Z'n!o!p![>q! r!s!t!u! v!])w!x!y!z!A!/,B!C!D!<+E!F!G!H!I!J!K!L!M!N!O!P!Q!R!S!T!U!V!W!X!Y!Z!`!u# ~.~+~@~#~$~| %~ &~*~=~ n--~;~>~ ,~I='~]%)~!~~~{~]~^~c= /~(~_~ ", +" :~<~[~}~|~1~2~3~4~5~-#6~7~8~9~0~ a~t!b~c~ i G!d~e~f~g~h~T@i~j~@.<+k~l~m~A Z n~'>o~M.p~q~r~s~t~u~v~w~x~y~z~A~B~C~D~E~F~G~H~I~: (+J~ ..K~L~M~ [!W@N~O~P~ $*Q~R~S~T~U~V~W~X~ [%Y~Z~ ", +" `~G~ { .{+{@{#{${%{&{[-*{={-{;{>{,{'{){!{~{ {{h) ]{^{/{({_{:{<{[{}{+.|{1{2{3{4{5{6{7{8{9{0{a{b{c{d{e{f{g{h{i{j{k{l{m{n{o{p{< ~ q{}+r{s{t{u{v{w{x{y{z{A{B{C{D{ &=E{F{G{H{I{J{K{L{M{N{O{P{Q{R{ ", +" S{T{ U{V{W{X{3-Y{Z{`+`{ ].]+]C,}'@]#]' #]|# J-$]%] Y)&]*]o,=]-];]>],]'])]!]~]{]]]^]/](]_]:]<][]}]|]1]2]3]4]5]6]7]8]9]0]a]b]c]s#d]Y)e]f]C,g]h]9]i]j]k]l]m]^'n]^! A&o]p]q]r]U$s]t]u]v]a!a)w]x]y] ", +" z]A] B]C]D]E]F]Z-G]H]I]J]K]L]M]N]j'O]P]Q]q{R]S]T]U] D.V]U@W]X]Y]Z]`] ^.^+^@^#^$^%^&^*^=^-^;^>^,^'^)^!^~^ {^]^^^/^(^_^Q>:^<^[^V>}^|^1^2^3^4^h]5^6^7^8^9^0^G$a^b^c^ I#d^e^f^g^h^i^])j^k^l^m^n^o^ ", +" p^q^r^ s^t^d+u^v^w^X*Y'x^I]c!y^z^A^B^C^D^) E^F^G^H^I^J^K^L^ M^N^u!O^P^Q^R^S^T^U^V^W^X^Y^Z^`^ /-^./a;+/@/#/$/%/&/*/=/-/;/>/,/'/)/!/~/{/]/^///+'L^(/_/:/ </[/}/|/1/2/3/4/5/6/7/8/9/0/a/.%b/i=c/d/e/f/g/h/i/ ", +" j/k/l/m//'n/*@o/g@p/q/r/s/t/u/J%v/w/e'x/%]y/z/l~A/B/C/D/E/F/E.G/H/I/m'J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/`/ (.(+(@(#($(%(&(*(=(-(;(p/>(,('()(!(~(H^{(h)F ]( ^(/(((_(U$:(<([(}(|(1(2(3([=4(5(6(M@7(8(9(0(a(b(c( ", +" d(e(f(g(h(i(j(}$k(l(0)m(n(o(p(v) q(r({(s(r#t( Y)I^u(v(w(]+F x(y(z(A(B(C(D(E(F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(+(Y(Z(`( _v)._+_@_#_N@:=X>Q@_ $_ %_&_*_=_-_;_>_ ,_ '_)_!_~_{_]_b ^_/_(___:_ ", +" <_[_}_|_1_2_3_4_5_6_7_8_9_0_a_ b_c_d_e_f_d~ g_h_i_~ j_@]k_l_m_n_o_p_q_r_s_t_u_v_w_x_y_z_A_B_C_o+D_E_B@F_G_H_I_J_K_L_1;M_N_O_P_Q_R_S_T_g#U_V_c/D W_X_Y_3_Z_`_ :.: +:@:B!}!l##:$:%:&:*:=: ", +" -:;:>:,:':):!:~:{:]:^:/:(: _:::<:[:}:|:1:X@O@c>2:3:4:5:6:7:8:9:k;0:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:A:B:C:D:E:F:G:H:g#I:V_J:K:L:M:N:O:P: ';Q:j=)!R:S:T:U:V:W: ", +" X:Y:Z:`: <.<S++<@<~_#< $<%<&<S@],[ *<|#=)3:=<-<#~;<><e$,<d$'<)<!<~<{<]<^</<(<_<s.C t.:<<<[<}<|<1<2<3<4<5<6<7<8<9<0<a<b<o)c<d<e<f<g<h<i<j<k<l<]*m<n< o< p< q<r<s<t<u<v<w<x<y< ", +" z<A<B<C<D<E<F<G<t'H< I<J<K<X>L<M<N<O<N)P<Q<R<S<T<U<V<W<X<Y<Z<`< [.[+[@[#[8.$[m:%[ &[*[=[-[;[>[,['[)[![~[{[][^[/[([_[}=:[<[+{[[}[|[1[2[3[ 4[ 5[ 6[7[ 8[9[0[a[b[c[d[z ", +" e[f[g[h[i[j[k[l(Y' l[m[n[o[p[q[r[s[t[u[v[w[!<x[g&y[z[A[A[/&B[ C[D[E[F[G[ H[I[P]_ c/J[>;d%l$K[L[M[N[O[P[Q[R[S[T[U[b/V[W[2#X[Y[Z[ `[ }w' #~U#.}%< +}@}#}$}b[%}&}T *} ", +" =}-};}>},}'})}!} ~}C@{} ]}^}/}(}_}:}<}[}}}|}1}2}3}4}5}6}7}8}9}0}a}b}c}d}e}f}g} h}i}j}y/k}l}m}n}5}o}p}q}r}s}t}u}v}T[w}x}y}{_5'q,J,z}A}B} C}D}E}F}G}' .'H} I}J}K}L}M}&}/^M!N} ", +" O}P}Q}R}S}T}U}V}W} X}$.Y}3#Z} `} |.|+|n$A>@|#|$|%|&|*|=|-|;|>|,|'|)|!|h/~|{|]|^|/|(|_|:|<|[|{(}|||2 1|R]T)2|3|4|5|6|7|8|9|0|a|b|c|d|e|f|g|h|+._)i|Z>j|k| %%l|m|(/(/H,n|o| p|q|h{r|s|t|u|v|w| ", +" x|y|z|A|B|C|D|E| Y)F|m'G|H|I| J|K|L|s_ M|N|O|P|Q|.:R|S|T|U|V|d;)|W|X|Y|Z|`| 1.1+1@1#1K,$1(/%1],&1*1=1-1;1>1,1'1)1!1~1{1]1^1~%/1(1_1:1-@<1(_l- ![1}1|111 %%21G>31=<4151 61718]819101a1b1c1 ", +" L~d1e1f1g1h1i1j1k1 g=l1X}m1n1 o1 p1q1r1d+s1 t1u1v1w10}x1y1z1A1Y~y1B1C1D1j&E1F1G1D~H19 M<<{s!I1J1K1X]L1M1N1O1P1Q1S|R1S1T1U1V1W1X1Y1Z1`1 2.2D_A m:+2@2#2$2 %2&2*2=2 -2;2>2,2D~'2)2r:!2 ", +" ~2{2]2^2/2(2_2:2<2 [2}2|21222 324252627282 9202a2b2c2d2e2f2y1g2,12}h2i2j2k2l2m2n2o2 p2q2r2s2t2u2v2z;[;,<w2x2S1y2z2A2B2B2C2D2E2F2G2H2I2J2I22_K2L2M2 V%N2O2P2Q2R2'2S2z|T2 ", +" e@U2V2W2X2Y2Z2`2 3.-m=.3 +3@3#3$3 =|%3&3*3=3-3;3>3,3'3)3!3~3{3S=]3w}^3/3 I~(3_3:3<3[3}3|313233343536373839303a3b3c3d3e3f3g3h3M i3j3k3l3m3 n3,( o3!>p3q3r3s3t3u3 ", +" v3w3o~x3y3z3A3B3C3D3}(E3 F3G3H3I3J3 [&K3L3M3^%N3O3P3Q3R32}S3P{>1T3U37%n] V3W3<(X3Y3Z3`3[; 4.4+4@4#4$4%4&4*4=4-4;4>4,4'4)4!4~4{4]4U2+!^4/4 {= (4_4 :4<4[4Y.,>}4|4 ", +" 14243444546474849404a4 b4c4d4e4f4g4 h4 i4)~j4k4,313l4m4n4o4p4q4r4s4t4Y)u4A!v4w45,x4y4z4{|A4X%B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4R4$:#:S4T4U4@_}% V4W4 X4I.Y4Z4`4 5.5+5 ", +" @5#5$5%5&5*5=5-5 ;5 >5,5'5)5!5~5{5]5 ^5 /5(5_5:5<5[5n4}5|5152535K$h=y/::455565(/75859505^1a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5A5B5 C5D5 N:o+E5F5j{n~4)v5 ", +" G5H5I5J5s~K5L5M5 N5 O5P5Q5-5R5S5T5U5V5W5 X5r:Y5Z5`5 6R[.6+6@6#6$6%6$~&6 *6=6-6;6S#l->6~*,6'6)6=$H!~2!6~6{6]6^6/6(6_6:6<6[6}6|6162636v 46566676869606 a6b6 c6d6 ^F4e6s|f6g6h6 ", +" i6j6k6l6m6n6o6p6 q6 r6s6t6u6v6w6x6y6>-z6A6B6C6D6 E6 F6G6H6I6J61{$!K6L6M6N6O6P62:^@ Q6R6S6m~M<T6U6V6W6X6Y6R#!6Z6`6$+` 7.7+7@7#7$7%7&7*7.7=7>.-7;7S4'/>7,7'7)7 !7 ~7{7]7d}^7/7(7_7:7 ", +" <7[7}7|717273784 47 576777E(879707a7b7c7d7e7f7g7h7i7O#j7k7V}l7m7_|n7o7p7q7r7s7t7u7(/i_v7 w7U#u.2:x72:y7z7A7B7C7K, .D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7f3)!T7U7V7W7X7Y7^# Z7h! `7 8h5.8+8@8#8$8d %8 ", +" H+&8[7*8=8-8;8>^>8 ,8'8 )8!8v:~8{8]8^8/8(8k[_8:8<8[8}8T5>4|818Z:28384858687888U298N2V3c_08a8 b8c8d83:e8f8g8h8i8j8[|k8l8m:9( m8<#n8o8,^p8q8r8s8t8u8t3E4N i3v8w8x8y8z8A8 B8C8 D8E8.5F8G8H8I8J8K8_ V# ", +" G}L8d@[7M8N8O8<]P8Q8 R8 */S8T8U8V8W8X8S(Y8Z8`8 9.9+9@9k@#9$9%9&9*9=9-9 ;9>9o~,9'9)9!9~9{9]9^9/9 (9_9:9 <9[9}9 |919S7(_ 29>[394959697989P.9909a9b9c9d9e9f9g9h9i9 j9k9 l9:4m9J8n9o9p9q9r9E ~@s9 ", +" !{t9u9v9w9x9y9z9A9B9C9 D9 E9F9G9H9I9J9K9L9M9N9O97#P9Q9R9S9T9U9V9W9X9Y9 Z9`9P 91 0.0+0t;@0}@#0{ $0%0&0 *0<{ =0-0;0 >0,0F3'0)0!0*/~0{0]0^0/0(0_0u<:0<0[0}0|0 1020 85304050l6607080v590F}G.'+00 ", +" a0{{b0c0d0e060f0g0h0i0j0 k0 l0m0n0o0p0q0r0s0~2,]t0u0v0w0x0y0z0A0B0C0D0 E0F0E_ G0%6}:H0I0A'z.J0K0L0 31g M0 2+N0O0P0 Z4Q0y8R0S0T0U0V0W0X0Y0Z0`0|4 a.a+a@a#a$a %a&a 56*aK8=a-a;a>a,a'aD4]))a ", +" L+!@~6_0~4!a~al7M0{a]a^a/a (a_a :a<a[a}a|a1a2a3a7 7 }+4a5a6a7a8a9a0aaabaca daeafa J@M@ga3:ha iajaka O@lamanaoa 5p9v9 paqarasaV5tauavawaxayazaAaBaCaDaEaFaGaHa Ia&a JaKaLaMaNaOaPaQaU:Ra8( ", +" SaV]r+TaUaVaWaXaYaZa`a b.b+b @b#b P8$b%b&b*bB|=b-bA ;b.#>b,b'b)b!b~b&/{bT+]b^b t#/b(b_b :b<bx([b< }b3@) |b1bV@i'2b3b4b5b.8&~J26b c[S t87b8b9b0babbbcbdbebfbgbhbibjbkblbmbnbA& obpb qbrbsbtbubvbwbxbybT7 ", +" c~3.zbG5AbBbg0CbqaDbEbFb GbHb IbJbKbLbMbNbObPb_7a S#QbRbSbTbUbV5%9VbWbXbYb ZbM `b.. c.c+c@c#c$cF7 %c5@&cH@}#*c=c-c.|;c>c4)Ab,c .'c)c!c~cya{cbb]c^c/cu-(c_c:c<c[c}cM!|c1c2c!5==3c 4c v0,55c6cZaZ4347c8c ", +" L@9c0cQ4acbcccYbdc-^=( D*ec fcT+(]gchcicjck6kcz 75{_lcmcncocpcqcrcsctcucF_vc]4wcxcycn-zcAcBcCcDc7 Ec Fc[+Gc^)[)HcIcJc9:KcLcMc~aNcg6OcPcH6QcIbRcScTcUcVcWcXcYcZc`c d78.d+d@d#d$d[,%d&d*d=d-d ;d>d,d'dt|)d!dZ58c ", +" =~0c|9~dq3~.{d/]]d^d /d (d_d:d=5<d[d}d|d1d2d(_3d4d5d6d7d8dV5M59d0dad#!bd1<!2cdddedfdgdhdidG0@.E7G!jdkd5@&]i'ldmdndodpdqd|}rdu#k{}c!c):B~sdtdudvdwdxdydzdAdBdCdDdEdFd=!GdHdu=|%[,IdJd#&KdLd MdNdN!OdPdQdRdSd ", +" 40Td5bUdVdWdXdYdZd`d#3 e 61.e+e@e#e$e%e&e a1.*e=e-e;e>e,e'e~#)e!e~e2)Pb{et ^;]e^e/e(e_e:e<e[e}e|eG|1e2e#03e4ej#5e6e7e8e9e0eaebecedeeefegeheiejekeleme}0^dneoepeqereseteueve.)weS=xeyezeAeBeCe DeEe)dFeGeHeP+Ie ", +" A .5JeR KeLeMeNeOePe QeRe SeTeUeVeWeXeYeJ6;.Ze`e f.f+f@f#f$f +f%f&fv5*f=f-f;f>f,f'f)f!f~f{f]f^f(,F,3:* /f(f_f:f<f[f}fA:4|[5|f1f2f3f4f5f6f7f8fEb9f0fBd(]afbfcfdfefP(ffgfhf {=c=ifM&jfkf lf mfz<a1nf].ofpf ", +" .t (|qfrfsftfufvf wf xfyf/<o63{zfZb`!Afr BfCfDfEfFfGfHf IfJfKf</=_LfMfNfP[NfOfv]PfQfRfSfTfg' 2[UfVfS|[%WfXfYf_*Zf`f gx:.gO.+g@g#g$g%g&g*g=g-g;gT+Z1>g,gZ' 'g)g!g~g{gHbs& ]g^g/g(g_g:g<g[g ", +" }g|gz|.+1g]>2g3g4g 5g6g 6=7g64>a8gE0#:9g0gagbgcgdgegua fggghg;;!'R_igjgkglgQ{x]mgngogpgqgrg sgtgugvgwgxgygzg3>AgBgCgDgF(EgFgGgHgIgJgKgLgMg64NgOgPgQgl3Rg SgTg UgVg WgXgYgZg`g h.h+h@h ", +" #h$htb%h&h*h=hX8-h ;h >h,h'h)h!h~h$#{h]hW8^h/h(hdg$9_h:h<h[h}h|h1hb2Q'2h3h4h5h6h!_7h8hN)9ht!0hah5:bhchdhehfhghzghhihjhkhlhx@mh bnhohFgphqhrhshqathuhvhwhxh yh zhAhBhChDhEhFh hGh <Hh ", +" ;b/b.5Ih0gJhKh;^LhMh C(i@NhOhPh`]QhRhz3ShThUhm&VhWhXhYhR'Zh`h&> i.i+i@i#i$i%i#4&i*i=if]+0-in|=):);i>i,i'i)izg!i~i{i]i^i/i(ir1_i:i<i[i}ig1|i.71i2i3i<(4iA& 5i 6i7i8iO.9i0iaibiP ", +" K@ci$h]2Rhdieifigihi iijiki limi]anioipiqiriZ(97sitiuiviwixiyiziAiM1BiCiDixh]~EiFipf` GiHif>k}IiJi~ Ki9(LiMiNiOiPiQiRiSiTiUiViWiXiYiZi`i j.j+j@j#j$j%jk]&j 2~*j=j-j 9e ;jsd>j,j'j!]>9Z5 ", +" )j2dZe!j8]~j{j]jG#U3 ^jj#p+T6/j (j_j:jX:<jh+[j}j|jrdU$1jO52j3j4j5j6j7j8j9j0jajbjcjdjejfjgj)!{_hjijjjkj' ljmjnjn,q^oj9}Vfpjqj,|rjsjb!)|K]tjujvjwjxjyj/|zjAjBjCjDj EjFjGjHjIjo( 3hc6JjKjLjMjjcNjBf ", +" OjPj .Qj91RjSjTjUjVj Wjp'XjYjZj O_`j k.k{*</+k@k#k$k%kM37-I).>&k*kA4=kn<-%-k;k>k,k'k0.)k!k)!~k =<{kv7]k^kN@/kR_(k_k:k<k[k}k|k1k2kM13k4k85m95k6k7k8k9k 0k akbkckdkD^ek fke!gkhkikLjjkkk7c ", +" K+lkmknkibok#3bbD; pkqkB rksk tkukvkwkxkykzkAkBkCkDkEkV-FkGk.|92FkHkIkJkKkLkMkNkOkPkQk Rk]@SkF O~TkUkj&VkWkXkYkZk`k l<%N-.ln^:}+l@l#lHc$l %l&lg~*lF|P; =l-l:1;l>l,l'lM})l ", +" !lc8~l&~8] b{l]l^l/l (l_l:l <l[l}l|l1l2l3l4l;15l6lP=[;7l8l9l0lal[%bl3(cldlelflglhliljl M~!(A kl`_llmlnlolpl0-qlrlsltlulvlwlxlk|yl.czlAlBlCl DlEle)FlGl HlIlJlKlLls~4{MlNl ", +" Ol<|PlQlRly_M(dble SlTlUlVlWlXlYlZl`l m.m+m@m6|#m$m%m&m*m=m-m4*;mfg>m,m'm)m8i!m ~mkcN,Oc{m]m^m/m(m_m;*:m<m[m}m._|m1m'f2m3m4mX>5m6m7m8m 9m0m ambmcmdm>0~:emfmgmhmim ", +" p{jmK km4+lmmmnmom pmqm<brmsmI$tmumvmwmxmymzmv[AmBmCmDml>*|EmFmGmHfHm TjImJmKmLmMm!2NmOmPme3QmRmSmTmUmVmWmXmYmB&Zm}hXl`m$cn,X[ n2#G .nN@+n@n |l#n$n(^%n&n hm62< ", +" *n=n-n;n>n,nN!'n)n !n~n{n]n1[^nd5/n(n-)_n:n<n{;[n}n{||n[&1n2n3n4n5n6nHf7n8n9n0nan6^8kbncndnenfngnhninjnknlnmnnnonpnqnrnfasnM<l_$. tni E,unvnwn xnynznAnBnCnDnZ.EnFn ", +" GnHnd[InJni:KnLn@2>~ MnNn=<G,d>i<T#OnPnX@Qn;)RnSnTnUnVnWnXn==YnZn`n o.o+o@o#o+f$oRc%o wi6=&o*o=o-o;o>o,o'o)o!o~o{o]o^o/o9(L@{{(o_o *+(@&6}9:o 1/<o[oT2}oE5r:|oBnn+ ", +" 1o2o3o4od}5o6o$8;[7o8o9o0o aou+* > bocodod>d>4:f>X>eofogohoiojokolomonooopoqoro*(soto uo vowoxoyozoAoBoCoDoEoFoe-GoHoIoJoKoLow(Mo Noz.u+5@n|Oo PoQoRoQ#SoToUoVoWoXoYo ", +" Zo`o pvk5k[.;0.po++p85@p#pTl$p %p}@m &pv7 *p^k^@=p/+L<-p;p>p,p'p)pdh!p~p{p]p^p/p(p_phe:p <p[p}p5n|p1p2p3p4pi.5p%j6p7p8p9p0p{+P]apw.E+bpcpJ dpepx+fp',T] gp_~hpipjp`_kplpmpnpe[oppphp ", +" qprpsptpupvpwpxpAjypzpApy,BpCp)| DpEp%.FpGp d]j_HpIpJpKpH:LpD!MpNpOpPpQpRp<]SpTpUpJnVpWpH_ {#XpYpZp`p q.qCn+qyjT;@q#q$q%q],B.* &q}|*qu+'+`,u+=q}@45-q)a;q>q,q'q)q!q~qK|{q]q^q/q_{(q!f_q:q<q ", +" [q}q|q1qa|2q3q.~4q5q6q7q8q9q0qaqbqcq dqk}4@E+E+eqfqgq3:%+hqiq `bjqw{kqlq(&mqnq3foqpqJhqqrq q>2 sqtquq>4vqwqxqyqcdzq..;bAq`mBqCqDqEqu.Fqe8f)GqHqIqt;x+Jqu+|@f){(G!umKqS<LqMqK]3,NqU{OqniPqx)QqRqSqTqUq ", +" VqWq)iXq;%Yq qZq`q r8,+l5~.r+rg&@r#r$r%r&r<{0>& * 2e*r_n=rL+-r ;r>r,r'rs&)r!r~r{r]r^r/r(r_r:r<r[r}r|r1r2r3r4r5r6r7rJ,V]:+&+(/8r9r0rarbr S]=<crL):@drerfrt+i_3^W=grhrC1irjr^5krlrmrnrorprqrpprr{;srtrur ", +" U4vr15wrxr yrzrAr*>BrCrDrErFrGrHrIrJrJ$#.%6KrLr<+G^Mrunm'Nr6 g+OrPrQrRrSrTrUrVrWrXrYrZr`r^g s{0.s+s@s#sba$s~>/_%sV]#0@ l kj08J^Pn&s*s un=sX@ w(-s6 ;sl( >s,s's)s!s~s{s]s%@^s/s(s_s:s<s[s}s ", +" |s1s2s%% 3stj4s5s6sf27s 8s9s0sas$~L^bsT] 3#0scs dsesfs`2gshsisjsksVrlsmsnsospsqsrssstsusvsh{wsxsg5!6ys[{Lr_@n|zsAsF>BsCs #cDsl_Es 0@Fs[|Gs 2$HsIsJsKsLsMsNsOszkcl |%PsQsRs ", +" Ss[qTsUs VsU{Ws3=H=** XsYsp,0pZs Y6`s t.t+t@t#t$t%t _}6,!$S.&tA|Na*t=t-t;t>tlm,t'tqi)t6a5c1<g5!t>b~t*]&6{t]t^t/t(t d#Nrx| m~:{|)_t i$:t<t[t}t|t1t2t3t4t5t6t 7t8t9t ", +" F]0t0!a2atbtctdtetw*w* ft_)O)}^ gtj)z}e#I~e'htit jtkte+lt3+NamtZ0ntotptqt74rtNhstB~ttut9gvtwt30xtytztAtBtCt: ,+Dt*+$~Etq+ Fts0j;Gt [>|,Htt1ItJtKtLtMtNtOtPtS3Qt2(Rt ", +" !=D$StTt.mUtVtWtXtYtZt`t @c u.u[{ +uwn~n@u#u$u%u&u *u=u-u`aZa;u>u,u'u)u1;!u~u{uZ!=e]u^u/u(u_u:uZi<u [u}uV]|u1u@ U#as2u 3u4u&l+{m35uG*6u7u8u9u0uUkm>aubucudueu4/&j ", +" fuguhuiujukulut>munuou puquru V[sutuuuvuwuxuyu zuAuBuCuDuEu#,FuGu1pHuIu1gJuKuLuMuNuOuPuQuRu SuTuUuVux+Wu}|XuV@i'$. ,,YuZu`u vJ#5s.v+v@vK'#v$v3&%v&vr7*v=l=v:,-v ", +" ;v+~>v,v'vf/)v!v~v{v ]vx!^v J@/v(v_v:v<v[v H= e,Y+}vR$yr|v841v2v3v4v5v6v7v8v9v0vavbvcv3=l*c=dvevfvgvhviv8@U#( jvE@d8kvlv/+ga.0mv]| |%nvovpvO>qvrv/1lrsvtvuvvvwvxvyv ", +" A7zvAvBvCvDv Ev FvGvc_/vHvIv140 JvKvLvT]Mv;, P%l*NvOvPvQvRvSvMeTvUvVvWvXvYvs~Zvd7`v w.w+w@w#w $w%w&w*wBt=w$]}+2#g _ ga],-w;w>w,w .-|%'w)w!w~wve{wU*]w^w/w(w_w ", +" :w<w[w}w1ht[|w1w2w 3w4wf]5w;i[#;sq'Ys6w7w8w 9w0w awbwcwdwewfwgwhwiwjwkwlwmwnwowjr@%we&%pwqwrw:^sw tw2=uwvwwwxwg_1eywzwAwBwCw DwEww*}%>|FwvewiG{w=%t5~7i ", +" GwHw%|h(c|Iw0:=& JwKwLwlpMwNw/kOwPw QwRwSwTw ,~-&UwVwWwXwYwZw`w x.x39+xW-P%#%@x#x$x%x;b&x*x =xP% -x;x>x,x'x(4 )x!xu,~x=={x]x^x/x7!C;(x_x ", +" g<:x)r<x[x}x|%0-*= |xTe 1x^92x3x4x %dc=}%5x6x7x8x9x0xax0fbxcxv,c=c=dxex#cfx+!gx[o0l.-c=we hxixjxkxlx mx5>nxoxpxqxrxsxtxF$ux ", +" vx&uzuwxxxyxzxi$ AxBx CxDx ExFxI,GxHxIxJxKx3!c==&b=LxMxNxy_OxPx^# c=c=c=QxRx4^6)SxK8TxUxVxc=&'|%WxXxYx=&Zx `xwl y.y+y@y/s#y$y%y&y ", +" *y{q`n=y-y;y>yr=#% ,y %% i$'yb=)y!y~y {y]y^y/y(y_y.-c=c=&=%%I=4%:y<y[yi$@% l*{=}&}y|y<oF~3o1y2yc'3y4y ;y<xo!5y6y7yJ# 8y9y0yR*ay05byK]Cpcy ", +" r)dyeyfygyhy-{r= J= $%&={=[%<-iyjy`<X~$* kylymy[;&=$%nyc=c=x*,~p*w*&'}& oypyu1(wqyrysytyw'uyvywyxy6tyy#*zyS1 AyBy;*,'CyDyEyx%y^FyGy ", +" HyIyJyKyLy9yU|MyNy *#%Oy=&A&^#Pyl$Qy0/Ry'(]} SyTy%%[,x*p*2=$%$% P%{= @%UyZx&&VyWyXy&dYyZy`y z.z+z7l@z3}#z&=#%0-r=$z%z&zJ**zC;=z-l!/ ", +" h^-z/';z>z,z)|'zl=.-)z!z~z{z<5]z^z/z(z_z:z <z[z}zc=c=|z1z2z3z4zZhVn5z6z7z8z9z DwP%S=0zazc=f,bz czdzezZ-fzgzhz|,izjzB1kzl>lzmznzozpzih3,qz5~Ws ", +" *$rz-lsztzuzvzwzxzyzzzAzBzCzDzEzFzz^GzHzIz JzKzc=w'LzMzNzOzPzCl QzRzLdSzTz Uzc=H&Vzk* WzXz.%YzZz5(`z A.A&|7}b2+A@A1&%t#A$A_}%A&A!9 ", +" *A=A-A;A>AE$,A+|P|'A)A+}!A~A{A]A^AT{/A:xh((A_A:A <A[Af(}A |A1A2A3A4A 5A6A 7AYq8A{79AQ>0AguB[aAbAcAdAeAfAgAhAKyO'ApiAjAkA ", +" lAmAnAoApAqArAsAtAuAXzmdvAwA uxAyAzAAABACADAEAFAGAHA IAJA KA LAMANAOAn8PAQAI@RASATAUAVAWA!/XAtgYAZA`A B/39% ", +" .BEt/)O~+Bc#V[q%i8l<@BH:O)7 7 .uj8#Bi]$B,@%B&B*B|f =B-BDvP';B>BL9,B'B>j)B(_@]r+N<cs!B~BL${B]BW#;68rt!^B/B ", +" u!J/(B2#nji'#.])F H.],_B:B<B< [B}B|Bsb1B2B3BPc4B&$~q 5B6BEuM_7B8B9B0B42aBF_( w.&+G!J-bB*1cBH^:@u+epepu+u+z. ", +" 7.dBm~H: c/=)d>&+' eB&pfB$0gBhBiBjBkBlBG5mBj8nBoBD8pB qBrBsBtBdiuBKe/g*tvBj3=}wB> {kx.v(~ U#xB3@z.yBzBABBBBBCBDB ", +" EBciFB GBu!xB/@6.x.HBIB~@$~p2JBY6Taa0=~A M~To$#2_KBLBMBNBOBNBOBPBQB{7RBr:SBCb!mr3TBUd*fUBVBWB7 ( ; XB%.* - }|3@* YB ZB`B%. C ", +" f5Gi.C ~tV]x7}|& = = & +C@CxBU#j'7.h #C*~K8(0$C):gb%CF4&C*C=Cib.+P+'dib(|-C38;C>C,CZ 1.2d.uV@4.V]; = = = = = = = = = ", +" )c'Cid$c3^)Cd]!C = * }|1#cocoF,u.4.$..uB 9 ~Cg3>.|+Mcnk=7E5hb)lRB`0g3S7{Cu3]CMcM,^CG73.0ph)&+}|* = = = = = = = = = ", +" .prg/C(C}'P)_Ceq = * eq }+~ u.],_ :Cs.9 <C[Cq ']}Cgj{2T2^q(b&x|Cc]c 1C2CgB6 M@dBI@ G.G.z.= = = = = = = = = = = = ", +" 3CYsk_){P@+C& = = }| doF,u.4C-~@.2.8 I!Hc.!D45C2C<)U_W@g L<m~g J,])N@ z+B+= = = = = = = = = = = = = ", +" 6CT#7C&c+C& = 8Cd#( G !@3.3.9C9(0CM@Et){!,!,aCV#d]co + = = = = = = = = = = = ", +" dBR@$~u.h)7.c~i i h)&<G.$ F.bC = = = = = = = = = ", +" i_~@~@) ~ {,5.= %.cC = ", +" dC* E.5.*+, *.eC ", +" = 6.*+D.6. ", +" ; { ~@fC ", +" G@~ j_ ", +" i gC ", +" o: "};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/tools.cpp Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,31 @@ +#include <iostream> +#include <wx/wxprec.h> +#include <wx/wx.h> +#include <wx/textctrl.h> +#include <iostream> +#include "tools.h" + + void IntToString( int i, char* in_pszbuffer ) +{ + // permet de copier un int dans la chaƮne buffer + sprintf( in_pszbuffer, "%d", i); +} + +char *wxstr_to_charbuf(wxString s) +{ + int i = 0; + char *str = NULL; + + str = (char*) malloc((s.Length() + 1) * sizeof(char)); + for(i=0; i<s.Length(); i++) + { + str[i] = s.GetChar(i); + } + str[s.Length()] = '\0'; + return(str); +} + +void charbuf_free(char *s) +{ + free(s); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/tools.h Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,13 @@ +#ifndef TOOLS_H_ +#define TOOLS_H_ + + #include <wx/wxprec.h> + #include <wx/wx.h> + #include <wx/textctrl.h> + #include <iostream> + + void IntToString( int i, char* in_pszbuffer ); + char *wxstr_to_charbuf(wxString s); + void charbuf_free(char *s); + +#endif /*TOOLS_H_*/
--- a/examples/Makefile.in Wed Jul 25 18:01:14 2007 +0200 +++ b/examples/Makefile.in Wed Aug 01 13:48:03 2007 +0200 @@ -30,6 +30,8 @@ ifeq ($(TARGET),unix) $(MAKE) -C TestMasterSlave $@ + $(MAKE) -C DS401_Master $@ + $(MAKE) -C DS401_Slave_Gui $@ $(MAKE) -C TestMasterMicroMod $@ endif @@ -40,6 +42,8 @@ ifeq ($(TARGET),unix) $(MAKE) -C TestMasterSlave $@ + $(MAKE) -C DS401_Master $@ + $(MAKE) -C DS401_Slave_Gui $@ $(MAKE) -C TestMasterMicroMod $@ endif @@ -53,11 +57,15 @@ install: ifeq ($(TARGET),unix) $(MAKE) -C TestMasterSlave $@ + $(MAKE) -C DS401_Master $@ + $(MAKE) -C DS401_Slave_Gui $@ $(MAKE) -C TestMasterMicroMod $@ endif uninstall: ifeq ($(TARGET),unix) $(MAKE) -C TestMasterSlave $@ + $(MAKE) -C DS401_Master $@ + $(MAKE) -C DS401_Slave_Gui $@ $(MAKE) -C TestMasterMicroMod $@ endif