# HG changeset patch # User jlarmour # Date 967231042 0 # Node ID bd1a71e3e47647f642159970f8e66abc5f45ddbb # Parent a0f9581a3a09a1383276a01371a17b9b224e91c5 Merge from eCos master repository on 2000-08-25-19:22:58-BST diff --git a/host/tools/configtool/standalone/win32/res/Splsh16.bmp b/host/tools/configtool/standalone/win32/res/Splsh16.bmp index c817f195cc7374d6e7b3a1987a987e1c8ee5c7dd..678443fdd50ee2cdaac5f32030bbfb8969b9028d GIT binary patch literal 166438 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 diff --git a/packages/ChangeLog b/packages/ChangeLog --- a/packages/ChangeLog +++ b/packages/ChangeLog @@ -1,3 +1,7 @@ +2000-08-24 Gary Thomas + + * ecos.db: Add FLASH driver for Intel Assabet. + 2000-08-18 Nick Garnett * ecos.db: Added CYGPKG_FS_RAM package. diff --git a/packages/devs/eth/arm/ebsa285/current/ChangeLog b/packages/devs/eth/arm/ebsa285/current/ChangeLog --- a/packages/devs/eth/arm/ebsa285/current/ChangeLog +++ b/packages/devs/eth/arm/ebsa285/current/ChangeLog @@ -1,3 +1,26 @@ +2000-08-25 Hugo Tyson + + * src/if_ebsa285.c (i82559_ioctl): A little further diddling; have + a bool to say whether the dot3 info is filled in. + +2000-08-24 Hugo Tyson + + * cdl/ebsa285_eth_drivers.cdl: Do not export a symbol for the + device info file (include/ebsa285_info.h) since nobody needs + (portably) to include it now. + + * src/if_ebsa285.c (i82559_ioctl): Handle new ioctl calls + ETH_DRV_GET_IF_STATS_UD and ETH_DRV_GET_IF_STATS to get loads of + statistical information out. _UD means update. The nonUD one can + be used instead mostly, if we find the performance hit too large. + This should allow SNMP (a) to not explode, (b) to get useful info + out of other device implementations than this one. + + * include/ebsa285_info.h: Remove all the macro cruft for feature + detecting of lots of individual statistics; we now just have a + catch-all struct that SNMP uses, defined in the common ether + driver environment. + 2000-08-15 Hugo Tyson * src/if_ebsa285.c (PacketRxReady): Put back the check for very diff --git a/packages/devs/eth/arm/ebsa285/current/cdl/ebsa285_eth_drivers.cdl b/packages/devs/eth/arm/ebsa285/current/cdl/ebsa285_eth_drivers.cdl --- a/packages/devs/eth/arm/ebsa285/current/cdl/ebsa285_eth_drivers.cdl +++ b/packages/devs/eth/arm/ebsa285/current/cdl/ebsa285_eth_drivers.cdl @@ -65,8 +65,6 @@ cdl_package CYGPKG_DEVS_ETH_ARM_EBSA285 "#define CYGTST_DEVS_ETH_TEST_NET_REALTIME " puts $::cdl_system_header \ "#define CYGBLD_DEVS_ETH_DEVICE_H " - puts $::cdl_header \ - "#define CYGBLD_DEVS_ETH_INFO_H " } description "Ethernet driver for Intel EBSA285 with PRO/100+ boards." diff --git a/packages/devs/eth/arm/ebsa285/current/include/ebsa285_info.h b/packages/devs/eth/arm/ebsa285/current/include/ebsa285_info.h --- a/packages/devs/eth/arm/ebsa285/current/include/ebsa285_info.h +++ b/packages/devs/eth/arm/ebsa285/current/include/ebsa285_info.h @@ -187,108 +187,13 @@ void update_statistics(struct i82559* p_ #ifdef CYGDBG_DEVS_ETH_ARM_EBSA285_KEEP_82559_STATISTICS #define ETH_STATS_INIT( p ) \ - int _tmp; \ update_statistics( (struct i82559 *)((p)->driver_private) ) - #else -#define ETH_STATS_INIT( p ) int _tmp // otherwise do nothing +#define ETH_STATS_INIT( p ) // otherwise do nothing #endif #define CYGDAT_DEVS_ETH_DESCRIPTION "Intel EtherPRO 10/100+ (i82559)" -//#define ETH_DEV_IFTYPE( p ) // handled in if.c - -//#define ETH_DEV_IFMTU( p ) // handled in if.c - -// 100,000,000 or 10,000,000 - or twice that if duplex -#define ETH_DEV_IFSPEED( p ) \ -(_tmp = i82559_status((p)), \ - ((GEN_STATUS_100MBPS & _tmp) ? 100 : 10) * 1000000) - -#define ETH_DEV_FULLDUPLEX( p ) \ -(_tmp = i82559_status((p)), \ - ((GEN_STATUS_FDX & _tmp) ? 1 : 0) ) - -#define ETH_DEV_IFADMINSTATUS( p ) \ -(_tmp = i82559_status((p)), \ - (((GEN_STATUS_LINK & _tmp) ? 1 : 2)) ) // 1 is up, 2 is down - -#define ETH_DEV_IFOPERSTATUS( p ) \ -(_tmp = i82559_status((p)), \ - (((GEN_STATUS_LINK & _tmp) ? 1 : 2)) ) // 1 is up, 2 is down - -#define ETH_DEV_IFOUTQLEN( p ) MAX_TX_DESCRIPTORS - -#ifdef KEEP_STATISTICS - -#define ETH_DEV_IFOUTDISCARDS( p ) \ - (statistics[ ((struct i82559 *)((p)->driver_private))->index \ - ].tx_dropped) - -#ifdef CYGDBG_DEVS_ETH_ARM_EBSA285_KEEP_82559_STATISTICS -#define ETH_DEV_STATSALIGNMENTERRORS( p ) \ - (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ - ].rx_align_errors) - -#define ETH_DEV_STATSFCSERRORS( p ) \ - (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ - ].rx_crc_errors) - -#define ETH_DEV_STATSSINGLECOLLISIONFRAMES( p ) \ - (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ - ].tx_single_collisions) - -#define ETH_DEV_STATSMULTIPLECOLLISIONFRAMES( p ) \ - (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ - ].tx_mult_collisions) - -//#define ETH_DEV_STATSSQETESTERRORS( p ) \ -// (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ -// ].) - -#define ETH_DEV_STATSDEFERREDTRANSMISSIONS( p ) \ - (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ - ].tx_deferred) - -#define ETH_DEV_STATSLATECOLLISIONS( p ) \ - (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ - ].tx_late_collisions) - -#define ETH_DEV_STATSEXCESSIVECOLLISIONS( p ) \ - (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ - ].tx_max_collisions) - -#define ETH_DEV_STATSINTERNALMACTRANSMITERRORS( p ) \ - (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ - ].tx_underrun) // TX UNDERRUNS listed here - -#define ETH_DEV_STATSCARRIERSENSEERRORS( p ) \ - (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ - ].tx_carrier_loss) - -//#define ETH_DEV_STATSFRAMETOOLONGS( p ) \ -// (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ -// ].) - -#define ETH_DEV_STATSINTERNALMACRECEIVEERRORS( p ) ( \ - (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ - ].rx_overrun_errors) + \ - (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ - ].rx_resource_errors) ) // RX OVERRUNS + RX RESOURCE ERRORS counted - -//#define ETH_DEV_STATSSYMBOLERRORS( p ) \ -// (i82559_counters[ ((struct i82559 *)((p)->driver_private))->index \ -// ].) - -#endif // CYGDBG_DEVS_ETH_ARM_EBSA285_KEEP_82559_STATISTICS - -#endif // KEEP_STATISTICS - -// This identifies the chip (as best we can; there is no number for 82559 -// yet, so I claim to be an 82558 pro tem. -// This is { dot3ChipSetIntel 5 } == { dot3ChipSets 2 5 } == { dot3 8 2 5} -// dot3 is { transmission 7 }. - #define ETH_DEV_DOT3STATSETHERCHIPSET 1,3,6,1,2,1,10,7,8,2,5 #endif /* ifndef CYGONCE_DEVS_ETH_ARM_EBSA285_EBSA285_INFO_H */ diff --git a/packages/devs/eth/arm/ebsa285/current/src/if_ebsa285.c b/packages/devs/eth/arm/ebsa285/current/src/if_ebsa285.c --- a/packages/devs/eth/arm/ebsa285/current/src/if_ebsa285.c +++ b/packages/devs/eth/arm/ebsa285/current/src/if_ebsa285.c @@ -78,7 +78,9 @@ #error "Need PCI package here" #endif -#include CYGBLD_DEVS_ETH_INFO_H // some state we must export +// Exported statistics and the like +#include +#include // ------------------------------------------------------------------------ @@ -406,7 +408,8 @@ ETH_DRV_SC(ebsa285_sc0, i82559_can_send, i82559_send, i82559_recv, - i82559_poll); + i82559_poll, + i82559_int_vector); NETDEVTAB_ENTRY(ebsa285_netdev0, "ebsa285-0", @@ -426,7 +429,8 @@ ETH_DRV_SC(ebsa285_sc1, i82559_can_send, i82559_send, i82559_recv, - i82559_poll); + i82559_poll, + i82559_int_vector); NETDEVTAB_ENTRY(ebsa285_netdev1, "ebsa285-1", @@ -1776,6 +1780,15 @@ void i82559_poll(struct eth_drv_sc *sc) eth_mux_dsr( CYGNUM_HAL_INTERRUPT_PCI_IRQ, 1, (cyg_addrword_t)p_i82559 ); } +// Determine interrupt vector used by a device +int +i82559_int_vector(struct eth_drv_sc *sc) +{ + struct i82559 *p_i82559; + p_i82559 = (struct i82559 *)sc->driver_private; + return (p_i82559->vector); +} + // ------------------------------------------------------------------------ // // Function : pci_init_find_82559s @@ -2390,6 +2403,88 @@ static int i82559_ioctl(struct eth_drv_s return eth_get_mac_address( p_i82559, data ); #endif +#ifdef ETH_DRV_GET_IF_STATS_UD + case ETH_DRV_GET_IF_STATS_UD: // UD == UPDATE + ETH_STATS_INIT( sc ); // so UPDATE the statistics structure +#endif + // drop through +#ifdef ETH_DRV_GET_IF_STATS + case ETH_DRV_GET_IF_STATS: +#endif +#if defined(ETH_DRV_GET_IF_STATS) || defined (ETH_DRV_GET_IF_STATS_UD) + { + struct ether_drv_stats *p = (struct ether_drv_stats *)data; + int i; + static unsigned char my_chipset[] + = { ETH_DEV_DOT3STATSETHERCHIPSET }; + + strcpy( p->description, CYGDAT_DEVS_ETH_DESCRIPTION ); + CYG_ASSERT( 48 > strlen(p->description), "Description too long" ); + + for ( i = 0; i < SNMP_CHIPSET_LEN; i++ ) + if ( 0 == (p->snmp_chipset[i] = my_chipset[i]) ) + break; + + i = i82559_status( sc ); + + if ( !( i & GEN_STATUS_LINK) ) { + p->operational = 2; // LINK DOWN + p->duplex = 1; // UNKNOWN + p->speed = 0; + } + else { + p->operational = 3; // LINK UP + p->duplex = (i & GEN_STATUS_FDX) ? 3 : 2; // 2 = SIMPLEX, 3 = DUPLEX + p->speed = ((i & GEN_STATUS_100MBPS) ? 100 : 10) * 1000000; + } + +#ifdef KEEP_STATISTICS + { + I82559_COUNTERS *pc = &i82559_counters[ p_i82559->index ]; + STATISTICS *ps = &statistics[ p_i82559->index ]; + + // Admit to it... + p->supports_dot3 = true; + + // Those commented out are not available on this chip. + + p->tx_good = pc->tx_good ; + p->tx_max_collisions = pc->tx_max_collisions ; + p->tx_late_collisions = pc->tx_late_collisions ; + p->tx_underrun = pc->tx_underrun ; + p->tx_carrier_loss = pc->tx_carrier_loss ; + p->tx_deferred = pc->tx_deferred ; + //p->tx_sqetesterrors = pc->tx_sqetesterrors ; + p->tx_single_collisions = pc->tx_single_collisions; + p->tx_mult_collisions = pc->tx_mult_collisions ; + p->tx_total_collisions = pc->tx_total_collisions ; + p->rx_good = pc->rx_good ; + p->rx_crc_errors = pc->rx_crc_errors ; + p->rx_align_errors = pc->rx_align_errors ; + p->rx_resource_errors = pc->rx_resource_errors ; + p->rx_overrun_errors = pc->rx_overrun_errors ; + p->rx_collisions = pc->rx_collisions ; + p->rx_short_frames = pc->rx_short_frames ; + //p->rx_too_long_frames = pc->rx_too_long_frames ; + //p->rx_symbol_errors = pc->rx_symbol_errors ; + + p->interrupts = ps->interrupts ; + p->rx_count = ps->rx_count ; + p->rx_deliver = ps->rx_deliver ; + p->rx_resource = ps->rx_resource ; + p->rx_restart = ps->rx_restart ; + p->tx_count = ps->tx_count ; + p->tx_complete = ps->tx_complete ; + p->tx_dropped = ps->tx_dropped ; + } +#endif // KEEP_STATISTICS + + p->tx_queue_len = MAX_TX_DESCRIPTORS; + + return 0; // OK + } +#endif + default: break; } diff --git a/packages/devs/eth/arm/edb7xxx/current/ChangeLog b/packages/devs/eth/arm/edb7xxx/current/ChangeLog --- a/packages/devs/eth/arm/edb7xxx/current/ChangeLog +++ b/packages/devs/eth/arm/edb7xxx/current/ChangeLog @@ -1,3 +1,8 @@ +2000-08-23 Gary Thomas + + * src/if_edb7xxx.c: Add new function which returns the interrupt + vector used by a particular interface. + 2000-08-21 Gary Thomas * cdl/edb7xxx_eth_drivers.cdl: Add configury to set ESA. diff --git a/packages/devs/eth/arm/edb7xxx/current/src/if_edb7xxx.c b/packages/devs/eth/arm/edb7xxx/current/src/if_edb7xxx.c --- a/packages/devs/eth/arm/edb7xxx/current/src/if_edb7xxx.c +++ b/packages/devs/eth/arm/edb7xxx/current/src/if_edb7xxx.c @@ -114,7 +114,8 @@ ETH_DRV_SC(edb7xxx_sc, cs8900_can_send, cs8900_send, cs8900_recv, - cs8900_int); + cs8900_int, + cs8900_int_vector); NETDEVTAB_ENTRY(edb7xxx_netdev, "edb7xxx", @@ -149,6 +150,12 @@ cs8900_dsr(cyg_vector_t vector, cyg_ucou cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_EINT3); } +static int +cs8900_int_vector(struct eth_drv_sc *sc) +{ + return (CYGNUM_HAL_INTERRUPT_EINT3); +} + static bool edb7xxx_cs8900_init(struct cyg_netdevtab_entry *tab) { diff --git a/packages/devs/eth/cf/current/ChangeLog b/packages/devs/eth/cf/current/ChangeLog --- a/packages/devs/eth/cf/current/ChangeLog +++ b/packages/devs/eth/cf/current/ChangeLog @@ -1,3 +1,9 @@ +2000-08-23 Gary Thomas + + * src/if_sc_lpe.c: Add new function to return interrupt vector + used by interface. Also, handle interrupts from interface even + if there is no kernel (CF callback). + 2000-08-03 Gary Thomas * src/if_sc_lpe.c: Ensure DSR locked while initializing hardware. diff --git a/packages/devs/eth/cf/current/src/if_sc_lpe.c b/packages/devs/eth/cf/current/src/if_sc_lpe.c --- a/packages/devs/eth/cf/current/src/if_sc_lpe.c +++ b/packages/devs/eth/cf/current/src/if_sc_lpe.c @@ -92,7 +92,8 @@ ETH_DRV_SC(sc_lpe_sc, sc_lpe_can_send, sc_lpe_send, sc_lpe_recv, - sc_lpe_int + sc_lpe_int, + sc_lpe_int_vector ); NETDEVTAB_ENTRY(sc_lpe_netdev, @@ -583,5 +584,12 @@ sc_lpe_int(struct eth_drv_sc *sc) sc_lpe_BufEvent(sc, isr); } } + cf_clear_interrupt(dp->slot); } +static int +sc_lpe_int_vector(struct eth_drv_sc *sc) +{ + struct sc_lpe_priv_data *dp = (struct sc_lpe_priv_data *)sc->driver_private; + return dp->slot->int_num; +} diff --git a/packages/devs/eth/powerpc/quicc/current/ChangeLog b/packages/devs/eth/powerpc/quicc/current/ChangeLog --- a/packages/devs/eth/powerpc/quicc/current/ChangeLog +++ b/packages/devs/eth/powerpc/quicc/current/ChangeLog @@ -1,3 +1,8 @@ +2000-08-23 Gary Thomas + + * src/if_quicc.c: Add function to return interrupt vector used + by the interface. + 2000-08-03 Gary Thomas * cdl/quicc_eth_drivers.cdl: Ethernet driver package hierarchy changed. diff --git a/packages/devs/eth/powerpc/quicc/current/src/if_quicc.c b/packages/devs/eth/powerpc/quicc/current/src/if_quicc.c --- a/packages/devs/eth/powerpc/quicc/current/src/if_quicc.c +++ b/packages/devs/eth/powerpc/quicc/current/src/if_quicc.c @@ -85,7 +85,8 @@ ETH_DRV_SC(quicc_eth0_sc, quicc_eth_can_send, quicc_eth_send, quicc_eth_recv, - quicc_eth_int); + quicc_eth_int, + quicc_eth_int_vector); NETDEVTAB_ENTRY(quicc_netdev, "quicc_eth", @@ -515,3 +516,12 @@ quicc_eth_int(struct eth_drv_sc *sc) scc->scc_scce = scce; // Reset the bits we handled } } + +// +// Interrupt vector +// +static int +quicc_eth_int_vector(struct eth_drv_sc *sc) +{ + return (CYGNUM_HAL_INTERRUPT_CPM_SCC1); +} diff --git a/packages/devs/flash/arm/assabet/current/ChangeLog b/packages/devs/flash/arm/assabet/current/ChangeLog new file mode 100644 --- /dev/null +++ b/packages/devs/flash/arm/assabet/current/ChangeLog @@ -0,0 +1,31 @@ +2000-08-24 Gary Thomas + + * src/flash_query.c: + * src/flash_erase_block.c: + * src/flash.h: FLASH support for Intel SA1110 Assabet. + +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== diff --git a/packages/devs/flash/arm/assabet/current/cdl/flash_assabet.cdl b/packages/devs/flash/arm/assabet/current/cdl/flash_assabet.cdl new file mode 100644 --- /dev/null +++ b/packages/devs/flash/arm/assabet/current/cdl/flash_assabet.cdl @@ -0,0 +1,82 @@ +# ==================================================================== +# +# flash_assabet.cdl +# +# FLASH memory - Hardware support on Intel StrongARM SA1110 +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): gthomas +# Original data: gthomas +# Contributors: +# Date: 2000-07-26 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_FLASH_ASSABET { + display "Intel SA1110 (Assabet) FLASH memory support" + + parent CYGPKG_IO_FLASH + active_if CYGPKG_IO_FLASH + requires CYGPKG_HAL_ARM_SA11X0_ASSABET + + implements CYGHWR_IO_FLASH_DEVICE + + include_dir . + include_files ; # none _exported_ whatsoever + description "FLASH memory device support for Intel StrongARM SA-1110" + compile assabet_flash.c + + make -priority 1 { + flash_erase_block.o: $(REPOSITORY)/$(PACKAGE)/src/flash_erase_block.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_erase_block.c + echo " .globl flash_erase_block_end" >>flash_erase_block.s + echo "flash_erase_block_end:" >>flash_erase_block.s + $(CC) -c -o flash_erase_block.o flash_erase_block.s + $(AR) rcs $(PREFIX)/lib/libtarget.a flash_erase_block.o + } + make -priority 1 { + flash_program_buf.o: $(REPOSITORY)/$(PACKAGE)/src/flash_program_buf.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_program_buf.c + echo " .globl flash_program_buf_end" >>flash_program_buf.s + echo "flash_program_buf_end:" >>flash_program_buf.s + $(CC) -c -o flash_program_buf.o flash_program_buf.s + $(AR) rcs $(PREFIX)/lib/libtarget.a flash_program_buf.o + } + make -priority 1 { + flash_query.o: $(REPOSITORY)/$(PACKAGE)/src/flash_query.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_query.c + echo " .globl flash_query_end" >>flash_query.s + echo "flash_query_end:" >>flash_query.s + $(CC) -c -o flash_query.o flash_query.s + $(AR) rcs $(PREFIX)/lib/libtarget.a flash_query.o + } +} + diff --git a/packages/devs/flash/arm/ebsa285/current/ChangeLog b/packages/devs/flash/arm/ebsa285/current/ChangeLog --- a/packages/devs/flash/arm/ebsa285/current/ChangeLog +++ b/packages/devs/flash/arm/ebsa285/current/ChangeLog @@ -1,3 +1,11 @@ +2000-08-22 Hugo Tyson + + * src/ebsa285_flash.c (flash_hwr_init): Add + HAL_ICACHE_DISABLE/ENABLE pairs around calls to RAM copy of query + function - this is necessary to get reliable operation on EBSA285 + and similar. Otherwise, what is in the instruction cache might be + run instead. + 2000-08-15 Gary Thomas * src/ebsa285_flash.c (flash_code_overlaps): diff --git a/packages/devs/flash/arm/ebsa285/current/src/ebsa285_flash.c b/packages/devs/flash/arm/ebsa285/current/src/ebsa285_flash.c --- a/packages/devs/flash/arm/ebsa285/current/src/ebsa285_flash.c +++ b/packages/devs/flash/arm/ebsa285/current/src/ebsa285_flash.c @@ -64,8 +64,12 @@ flash_hwr_init(void) _flash_query = (code_fun *)flash_info.work_space; memcpy(_flash_query, &flash_query, code_len); HAL_DCACHE_SYNC(); // Should guarantee this code will run + HAL_ICACHE_DISABLE(); // is also required to avoid old contents stat = (*_flash_query)(data); + + HAL_ICACHE_ENABLE(); + if ((data[0] == FLASH_Intel_code) && (data[4] == FLASH_28F008SA)) { num_regions = 16; region_size = 0x40000; diff --git a/packages/devs/pcmcia/arm/assabet/current/ChangeLog b/packages/devs/pcmcia/arm/assabet/current/ChangeLog --- a/packages/devs/pcmcia/arm/assabet/current/ChangeLog +++ b/packages/devs/pcmcia/arm/assabet/current/ChangeLog @@ -1,3 +1,7 @@ +2000-08-24 Gary Thomas + + * src/assabet_pcmcia.c: Add hardware function to clear interrupts. + 2000-07-16 Gary Thomas * src/assabet_pcmcia.c: Remove dependency in generic I/O package. diff --git a/packages/devs/pcmcia/arm/assabet/current/src/assabet_pcmcia.c b/packages/devs/pcmcia/arm/assabet/current/src/assabet_pcmcia.c --- a/packages/devs/pcmcia/arm/assabet/current/src/assabet_pcmcia.c +++ b/packages/devs/pcmcia/arm/assabet/current/src/assabet_pcmcia.c @@ -46,6 +46,7 @@ #include // IO macros #include // Register state info #include // HAL interrupt macros +#include #ifdef CYGPKG_KERNEL #include // Configuration header @@ -123,29 +124,29 @@ cf_hwr_init(struct cf_slot *slot) int_init = 1; #ifdef CYGPKG_KERNEL // Set up interrupts - cyg_interrupt_create(SA1110_CF_DETECT, - 99, // Priority - what goes here? - (cyg_addrword_t) slot, // Data item passed to interrupt handler - (cyg_ISR_t *)cf_detect_isr, - (cyg_DSR_t *)cf_detect_dsr, - &cf_detect_interrupt_handle, - &cf_detect_interrupt); - cyg_interrupt_attach(cf_detect_interrupt_handle); - cyg_interrupt_configure(SA1110_CF_DETECT, true, true); // Detect either edge - cyg_interrupt_acknowledge(SA1110_CF_DETECT); - cyg_interrupt_unmask(SA1110_CF_DETECT); - cyg_interrupt_create(SA1110_CF_IRQ, - 99, // Priority - what goes here? - (cyg_addrword_t) slot, // Data item passed to interrupt handler - (cyg_ISR_t *)cf_irq_isr, - (cyg_DSR_t *)cf_irq_dsr, - &cf_irq_interrupt_handle, - &cf_irq_interrupt); - cyg_interrupt_attach(cf_irq_interrupt_handle); - cyg_interrupt_configure(SA1110_CF_IRQ, false, false); // Falling edge - cyg_interrupt_acknowledge(SA1110_CF_IRQ); - cyg_interrupt_unmask(SA1110_CF_IRQ); + cyg_drv_interrupt_create(SA1110_CF_DETECT, + 99, // Priority - what goes here? + (cyg_addrword_t) slot, // Data item passed to interrupt handler + (cyg_ISR_t *)cf_detect_isr, + (cyg_DSR_t *)cf_detect_dsr, + &cf_detect_interrupt_handle, + &cf_detect_interrupt); + cyg_drv_interrupt_attach(cf_detect_interrupt_handle); + cyg_drv_interrupt_configure(SA1110_CF_DETECT, true, true); // Detect either edge + cyg_drv_interrupt_acknowledge(SA1110_CF_DETECT); + cyg_drv_interrupt_unmask(SA1110_CF_DETECT); + cyg_drv_interrupt_create(SA1110_CF_IRQ, + 99, // Priority - what goes here? + (cyg_addrword_t) slot, // Data item passed to interrupt handler + (cyg_ISR_t *)cf_irq_isr, + (cyg_DSR_t *)cf_irq_dsr, + &cf_irq_interrupt_handle, + &cf_irq_interrupt); + cyg_drv_interrupt_attach(cf_irq_interrupt_handle); + cyg_drv_interrupt_acknowledge(SA1110_CF_IRQ); + cyg_drv_interrupt_unmask(SA1110_CF_IRQ); #endif + cyg_drv_interrupt_configure(SA1110_CF_IRQ, false, false); // Falling edge } slot->attr = (unsigned char *)0x38000000; slot->attr_length = 0x200; @@ -236,3 +237,13 @@ cf_hwr_change_state(struct cf_slot *slot } } } + +// +// Acknowledge interrupt (used in non-kernel environments) +// +void +cf_hwr_clear_interrupt(struct cf_slot *slot) +{ + // Clear interrupt [edge indication] + cyg_drv_interrupt_acknowledge(SA1110_CF_IRQ); +} diff --git a/packages/devs/serial/arm/pid/current/ChangeLog b/packages/devs/serial/arm/pid/current/ChangeLog --- a/packages/devs/serial/arm/pid/current/ChangeLog +++ b/packages/devs/serial/arm/pid/current/ChangeLog @@ -1,3 +1,8 @@ +2000-08-24 Jonathan Larmour + + * src/pid_serial_with_ints.c (pid_serial_DSR): Remove accidental + OVERRUNERR check duplication + 2000-08-01 Jonathan Larmour * src/pid_serial_with_ints.c: Throughout, add support for line status diff --git a/packages/devs/serial/arm/pid/current/src/pid_serial_with_ints.c b/packages/devs/serial/arm/pid/current/src/pid_serial_with_ints.c --- a/packages/devs/serial/arm/pid/current/src/pid_serial_with_ints.c +++ b/packages/devs/serial/arm/pid/current/src/pid_serial_with_ints.c @@ -388,10 +388,6 @@ pid_serial_DSR(cyg_vector_t vector, cyg_ stat.which = CYGNUM_SERIAL_STATUS_BREAK; (chan->callbacks->indicate_status)(chan, &stat ); } - if ( lsr & LSR_OE ) { - stat.which = CYGNUM_SERIAL_STATUS_OVERRUNERR; - (chan->callbacks->indicate_status)(chan, &stat ); - } } break; diff --git a/packages/ecos.db b/packages/ecos.db --- a/packages/ecos.db +++ b/packages/ecos.db @@ -134,6 +134,16 @@ package CYGPKG_DEVS_FLASH_EDB7XXX { on the Cirrus Logic EDB7xxx platform(s)." } +package CYGPKG_DEVS_FLASH_ASSABET { + alias { "FLASH memory support for Intel SA1110 (Assabet)" flash_assabet } + directory devs/flash/arm/assabet + script flash_assabet.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Intel StrongARM SA-1110 Assabet platform." +} + package CYGPKG_IO_SERIAL_ARM_EBSA285 { alias { "Intel EBSA285 serial driver" devs_serial_arm_ebsa285 ebsa285_serial_driver } @@ -1161,6 +1171,7 @@ target assabet { CYGPKG_HAL_ARM_SA11X0_ASSABET CYGPKG_IO_SERIAL_ARM_SA11X0 CYGPKG_DEVS_PCMCIA_ASSABET + CYGPKG_DEVS_FLASH_ASSABET } description " The assabet target provides the packages needed to run diff --git a/packages/hal/arm/aeb/current/src/plf_stub.c b/packages/hal/arm/aeb/current/src/plf_stub.c deleted file mode 100644 --- a/packages/hal/arm/aeb/current/src/plf_stub.c +++ /dev/null @@ -1,312 +0,0 @@ -//============================================================================= -// -// plf_stub.c -// -// Platform specific code for GDB stub support. -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): gthomas (based on the old ARM/AEB hal_stub.c) -// Contributors:gthomas, jskov -// Date: 1999-02-15 -// Purpose: Platform specific code for GDB stub support. -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -#include - -#include // HAL IO macros -#include // HAL interrupt macros -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -#include // HAL ISR support -#endif - -//----------------------------------------------------------------------------- -// Serial definitions. - -// 38400, UART1 -#define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0 -#define CYG_DEVICE_SERIAL_RS232_BAUD_LSB (13*3) - -// This is the base address of UART1 on the AEB-1 board. -#define CYG_DEVICE_SERIAL_RS232_16550_BASE 0xFFFF0400 - -// Define the serial registers. -#define CYG_DEVICE_SERIAL_RS232_16550_RBR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00) - // receiver buffer register, read, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_THR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00) - // transmitter holding register, write, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_DLL \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00) - // divisor latch (LS), read/write, dlab = 1 -#define CYG_DEVICE_SERIAL_RS232_16550_IER \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x04) - // interrupt enable register, read/write, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_DLM \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x04) - // divisor latch (MS), read/write, dlab = 1 -#define CYG_DEVICE_SERIAL_RS232_16550_IIR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08) - // interrupt identification register, read, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_FCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08) - // fifo control register, write, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_LCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x0C) - // line control register, read/write -#define CYG_DEVICE_SERIAL_RS232_16550_MCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x10) - // modem control register, read/write -#define CYG_DEVICE_SERIAL_RS232_16550_LSR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x14) - // line status register, read -#define CYG_DEVICE_SERIAL_RS232_16550_MSR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x18) - // modem status register, read - -// The interrupt enable register bits. -#define SIO_IER_ERDAI 0x01 // enable received data available irq -#define SIO_IER_ETHREI 0x02 // enable THR empty interrupt -#define SIO_IER_ELSI 0x04 // enable receiver line status irq -#define SIO_IER_EMSI 0x08 // enable modem status interrupt - -// The interrupt identification register bits. -#define SIO_IIR_IP 0x01 // 0 if interrupt pending -#define SIO_IIR_ID_MASK 0x0e // mask for interrupt ID bits - -// The line status register bits. -#define SIO_LSR_DR 0x01 // data ready -#define SIO_LSR_OE 0x02 // overrun error -#define SIO_LSR_PE 0x04 // parity error -#define SIO_LSR_FE 0x08 // framing error -#define SIO_LSR_BI 0x10 // break interrupt -#define SIO_LSR_THRE 0x20 // transmitter holding register empty -#define SIO_LSR_TEMT 0x40 // transmitter register empty -#define SIO_LSR_ERR 0x80 // any error condition - -// The modem status register bits. -#define SIO_MSR_DCTS 0x01 // delta clear to send -#define SIO_MSR_DDSR 0x02 // delta data set ready -#define SIO_MSR_TERI 0x04 // trailing edge ring indicator -#define SIO_MSR_DDCD 0x08 // delta data carrier detect -#define SIO_MSR_CTS 0x10 // clear to send -#define SIO_MSR_DSR 0x20 // data set ready -#define SIO_MSR_RI 0x40 // ring indicator -#define SIO_MSR_DCD 0x80 // data carrier detect - -// The line control register bits. -#define SIO_LCR_WLS0 0x01 // word length select bit 0 -#define SIO_LCR_WLS1 0x02 // word length select bit 1 -#define SIO_LCR_STB 0x04 // number of stop bits -#define SIO_LCR_PEN 0x08 // parity enable -#define SIO_LCR_EPS 0x10 // even parity select -#define SIO_LCR_SP 0x20 // stick parity -#define SIO_LCR_SB 0x40 // set break -#define SIO_LCR_DLAB 0x80 // divisor latch access bit - -// Interrupt Enable Register -#define SIO_IER_RCV 0x01 -#define SIO_IER_XMT 0x02 -#define SIO_IER_LS 0x04 -#define SIO_IER_MS 0x08 - -// Modem Control Register -#define SIO_MCR_DTR 0x01 -#define SIO_MCR_RTS 0x02 -#define SIO_MCR_INT 0x08 // Enable interrupts - -#define LED (volatile char *)0xFFFF1C0C - -#define LED1 (7<<1) -#define LED2 (6<<1) -#define LED3 (5<<1) -#define LED4 (4<<1) - -#define LED_ON 0x01 -#define LED_OFF 0x00 - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -static cyg_interrupt gdb_interrupt; -static cyg_handle_t gdb_interrupt_handle; -#endif - -//----------------------------------------------------------------------------- - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -// This ISR is called only for serial receive interrupts. -int -cyg_hal_gdb_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) -{ - cyg_uint8 c; - - c = hal_aeb_get_char(); // Fetch the character - if( 3 == c ) { // ^C - // Ctrl-C: set a breakpoint at PC so GDB will display the - // correct program context when stopping rather than the - // interrupt handler. - cyg_hal_gdb_interrupt (regs->pc); - cyg_drv_interrupt_acknowledge(CYGNUM_HAL_INTERRUPT_UART1); - } - return 0; // No need to run DSR -} - -int -hal_aeb_interruptible(int state) -{ - if (state) { - cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_UART1); - } else { - cyg_drv_interrupt_mask(CYGNUM_HAL_INTERRUPT_UART1); - } - - return 0; -} -#endif - -static void dummy(void) {} - -// Initialize the current serial port. -void hal_aeb_init_serial(void) -{ - cyg_uint8 lcr; - - // 8-1-no parity. - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, - SIO_LCR_WLS0 | SIO_LCR_WLS1); - - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr); - lcr |= SIO_LCR_DLAB; - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLL, - CYG_DEVICE_SERIAL_RS232_BAUD_LSB); - dummy(); // FIXME! - GCC bug - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLM, - CYG_DEVICE_SERIAL_RS232_BAUD_MSB); - lcr &= ~SIO_LCR_DLAB; - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_FCR, 0x07); // Enable & clear FIFO - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - cyg_drv_interrupt_create(CYGNUM_HAL_INTERRUPT_UART1, - 99, // Priority - what goes here? - 0, // Data item passed to interrupt handler - cyg_hal_gdb_isr, - 0, - &gdb_interrupt_handle, - &gdb_interrupt); - cyg_drv_interrupt_attach(gdb_interrupt_handle); - cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_UART1); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_IER, SIO_IER_RCV); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_MCR, SIO_MCR_INT|SIO_MCR_DTR|SIO_MCR_RTS); -#endif -} - -// Write C to the current serial port. -void hal_aeb_put_char(int c) -{ - cyg_uint8 lsr; - static int led_state = LED_ON; - - do { - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr); - } while ((lsr & SIO_LSR_THRE) == 0); - - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_THR, c); - *LED = led_state | LED1; - if (led_state == LED_ON) { - led_state = LED_OFF; - } else { - led_state = LED_ON; - } -} - -// Read one character from the current serial port. -int hal_aeb_get_char(void) -{ - char c; - cyg_uint8 lsr; - - do { - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr); - } while ((lsr & SIO_LSR_DR) == 0); - - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_RBR, c); - return c; -} - - -//----------------------------------------------------------------------------- -// Reset board (definitions from watchdog file aeb1.cxx) - -// Register definitions -#define CYGARC_REG_WATCHDOG_BASE 0xFFFFAC00 -#define CYGARC_REG_WATCHDOG_WDCTLR (CYGARC_REG_WATCHDOG_BASE+0x30) -#define CYGARC_REG_WATCHDOG_WDCNTR (CYGARC_REG_WATCHDOG_BASE+0x34) - -// Control register bits -#define CYGARC_REG_WATCHDOG_WDCTLR_EN 0x01 // enable -#define CYGARC_REG_WATCHDOG_WDCTLR_RSP_NMF 0x00 // non-maskable fiq -#define CYGARC_REG_WATCHDOG_WDCTLR_RSP_ER 0x04 // external reset -#define CYGARC_REG_WATCHDOG_WDCTLR_RSP_SR 0x06 // system reset -#define CYGARC_REG_WATCHDOG_WDCTLR_FRZ 0x08 // lock enable bit -#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_MASK 0x70 // time out period - -#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_17 0x00 // 2^17 -#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_17_P 5242880 // = 5.2ms - -#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_25 0x40 // 2^25 -#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_25_P 1342177300 // = 1.3421773s - -void -hal_aeb_reset(void) -{ - // Clear the watchdog counter. - HAL_WRITE_UINT32(CYGARC_REG_WATCHDOG_WDCNTR, 0); - - // Enable the watchdog with the smallest timeout. - HAL_WRITE_UINT8(CYGARC_REG_WATCHDOG_WDCTLR, - (CYGARC_REG_WATCHDOG_WDCTLR_TOP_17 - | CYGARC_REG_WATCHDOG_WDCTLR_FRZ - | CYGARC_REG_WATCHDOG_WDCTLR_RSP_SR - | CYGARC_REG_WATCHDOG_WDCTLR_EN)); - - // Wait for it... - for(;;); -} - -#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -//----------------------------------------------------------------------------- -// End of plf_stub.c diff --git a/packages/hal/arm/cma230/current/src/plf_stub.c b/packages/hal/arm/cma230/current/src/plf_stub.c deleted file mode 100644 --- a/packages/hal/arm/cma230/current/src/plf_stub.c +++ /dev/null @@ -1,277 +0,0 @@ -//============================================================================= -// -// plf_stub.c -// -// Platform specific code for GDB stub support. -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): gthomas (based on the old ARM/CMA230 hal_stub.c) -// Contributors:gthomas, jskov -// Date: 1999-02-15 -// Purpose: Platform specific code for GDB stub support. -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -#include - -#include // HAL IO macros -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -#include // HAL interrupt macros -#include // HAL ISR support -#endif - -#include - -//----------------------------------------------------------------------------- -// Serial definitions. -#if CYGHWR_HAL_ARM_CMA230_GDB_PORT==0 -// This is the base address of the A-channel -#define CYG_DEVICE_SERIAL_RS232_16550_BASE CMA101_DUARTA -#define CYG_DEVICE_SERIAL_INT CYGNUM_HAL_INTERRUPT_SERIAL_A -#else -// This is the base address of the B-channel -#define CYG_DEVICE_SERIAL_RS232_16550_BASE CMA101_DUARTB -#define CYG_DEVICE_SERIAL_INT CYGNUM_HAL_INTERRUPT_SERIAL_B -#endif - -// Based on 3.6864 MHz xtal -#if CYGHWR_HAL_ARM_CMA230_DIAG_BAUD==9600 -#define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00 -#define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x18 -#endif -#if CYGHWR_HAL_ARM_CMA230_DIAG_BAUD==19200 -#define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00 -#define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x0C -#endif -#if CYGHWR_HAL_ARM_CMA230_DIAG_BAUD==38400 -#define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00 -#define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x06 -#endif -#if CYGHWR_HAL_ARM_CMA230_DIAG_BAUD==115200 -#define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00 -#define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x02 -#endif - -#ifndef CYG_DEVICE_SERIAL_RS232_BAUD_MSB -#error Missing/incorrect serial baud rate defined - CDL error? -#endif - -// Define the serial registers. -#define CYG_DEVICE_SERIAL_RS232_16550_RBR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00) - // receiver buffer register, read, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_THR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00) - // transmitter holding register, write, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_DLL \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00) - // divisor latch (LS), read/write, dlab = 1 -#define CYG_DEVICE_SERIAL_RS232_16550_IER \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08) - // interrupt enable register, read/write, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_DLM \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08) - // divisor latch (MS), read/write, dlab = 1 -#define CYG_DEVICE_SERIAL_RS232_16550_IIR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x10) - // interrupt identification register, read, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_FCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x10) - // fifo control register, write, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_LCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x18) - // line control register, read/write -#define CYG_DEVICE_SERIAL_RS232_16550_MCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x20) - // modem control register, read/write -#define CYG_DEVICE_SERIAL_RS232_16550_LSR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x28) - // line status register, read -#define CYG_DEVICE_SERIAL_RS232_16550_MSR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x30) - // modem status register, read - -// The interrupt enable register bits. -#define SIO_IER_ERDAI 0x01 // enable received data available irq -#define SIO_IER_ETHREI 0x02 // enable THR empty interrupt -#define SIO_IER_ELSI 0x04 // enable receiver line status irq -#define SIO_IER_EMSI 0x08 // enable modem status interrupt - -// The interrupt identification register bits. -#define SIO_IIR_IP 0x01 // 0 if interrupt pending -#define SIO_IIR_ID_MASK 0x0e // mask for interrupt ID bits - -// The line status register bits. -#define SIO_LSR_DR 0x01 // data ready -#define SIO_LSR_OE 0x02 // overrun error -#define SIO_LSR_PE 0x04 // parity error -#define SIO_LSR_FE 0x08 // framing error -#define SIO_LSR_BI 0x10 // break interrupt -#define SIO_LSR_THRE 0x20 // transmitter holding register empty -#define SIO_LSR_TEMT 0x40 // transmitter register empty -#define SIO_LSR_ERR 0x80 // any error condition - -// The modem status register bits. -#define SIO_MSR_DCTS 0x01 // delta clear to send -#define SIO_MSR_DDSR 0x02 // delta data set ready -#define SIO_MSR_TERI 0x04 // trailing edge ring indicator -#define SIO_MSR_DDCD 0x08 // delta data carrier detect -#define SIO_MSR_CTS 0x10 // clear to send -#define SIO_MSR_DSR 0x20 // data set ready -#define SIO_MSR_RI 0x40 // ring indicator -#define SIO_MSR_DCD 0x80 // data carrier detect - -// The line control register bits. -#define SIO_LCR_WLS0 0x01 // word length select bit 0 -#define SIO_LCR_WLS1 0x02 // word length select bit 1 -#define SIO_LCR_STB 0x04 // number of stop bits -#define SIO_LCR_PEN 0x08 // parity enable -#define SIO_LCR_EPS 0x10 // even parity select -#define SIO_LCR_SP 0x20 // stick parity -#define SIO_LCR_SB 0x40 // set break -#define SIO_LCR_DLAB 0x80 // divisor latch access bit - -// Interrupt Enable Register -#define SIO_IER_RCV 0x01 -#define SIO_IER_XMT 0x02 -#define SIO_IER_LS 0x04 -#define SIO_IER_MS 0x08 - -// Modem Control Register -#define SIO_MCR_DTR 0x01 -#define SIO_MCR_RTS 0x02 -#define SIO_MCR_INT 0x08 // Enable interrupts - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -static cyg_interrupt gdb_interrupt; -static cyg_handle_t gdb_interrupt_handle; -#endif - -//----------------------------------------------------------------------------- -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -// This ISR is called only for serial receive interrupts. -int -cyg_hal_gdb_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) -{ - cyg_uint8 c; - - c = hal_cma230_get_char(); // Fetch the character - if( 3 == c ) { // ^C - // Ctrl-C: set a breakpoint at PC so GDB will display the - // correct program context when stopping rather than the - // interrupt handler. - cyg_hal_gdb_interrupt (regs->pc); - cyg_drv_interrupt_acknowledge(CYG_DEVICE_SERIAL_INT); - } - return 0; // No need to run DSR -} - -int -hal_cma230_interruptible(int state) -{ - if (state) { - cyg_drv_interrupt_unmask(CYG_DEVICE_SERIAL_INT); - } else { - cyg_drv_interrupt_mask(CYG_DEVICE_SERIAL_INT); - } - - return 0; -} -#endif - -// Initialize the current serial port. -void hal_cma230_init_serial(void) -{ - cyg_uint8 lcr; - - // 8-1-no parity. - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, - SIO_LCR_WLS0 | SIO_LCR_WLS1); - - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr); - lcr |= SIO_LCR_DLAB; - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLL, - CYG_DEVICE_SERIAL_RS232_BAUD_LSB); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLM, - CYG_DEVICE_SERIAL_RS232_BAUD_MSB); - lcr &= ~SIO_LCR_DLAB; - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_FCR, 0x07); // Enable & clear FIFO - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - cyg_drv_interrupt_create(CYG_DEVICE_SERIAL_INT, - 99, // Priority - what goes here? - 0, // Data item passed to interrupt handler - cyg_hal_gdb_isr, - 0, - &gdb_interrupt_handle, - &gdb_interrupt); - cyg_drv_interrupt_attach(gdb_interrupt_handle); - cyg_drv_interrupt_unmask(CYG_DEVICE_SERIAL_INT); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_IER, SIO_IER_RCV); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_MCR, SIO_MCR_INT|SIO_MCR_DTR|SIO_MCR_RTS); -#endif -} - -// Write C to the current serial port. -void hal_cma230_put_char(int c) -{ - cyg_uint8 lsr; - - do { - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr); - } while ((lsr & SIO_LSR_THRE) == 0); - - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_THR, c); -} - -// Read one character from the current serial port. -int hal_cma230_get_char(void) -{ - char c; - cyg_uint8 lsr; - - do { - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr); - } while ((lsr & SIO_LSR_DR) == 0); - - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_RBR, c); - return c; -} - -#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -//----------------------------------------------------------------------------- -// End of plf_stub.c diff --git a/packages/hal/arm/ebsa285/current/ChangeLog b/packages/hal/arm/ebsa285/current/ChangeLog --- a/packages/hal/arm/ebsa285/current/ChangeLog +++ b/packages/hal/arm/ebsa285/current/ChangeLog @@ -1,3 +1,18 @@ +2000-08-18 Hugo Tyson + + * include/hal_platform_setup.h: Initialize the world if you are + blowing away previous state rather than only in ROM start. This + makes it possible to create a standalone RAM app that will work + with either RedBoot in ROM or old-style GDB stubs, or any other + loader you might find. + + Incidentally I now understand why Gary found it necessary to force + PCI reset (2000-08-07) - with RedBoot in ROM, the RAM app was + unconditionally reinitializing the PCI bus when it was already + initialized, without resetting it. We cannot play the same game + here as with hal_platform_setup.h - I tried - because otherwise + the net cannot re-initialize itself; the scan for devices fails. + 2000-08-16 Hugo Tyson * include/hal_platform_setup.h (CYGHWR_LED_MACRO): Use an address diff --git a/packages/hal/arm/ebsa285/current/include/hal_platform_setup.h b/packages/hal/arm/ebsa285/current/include/hal_platform_setup.h --- a/packages/hal/arm/ebsa285/current/include/hal_platform_setup.h +++ b/packages/hal/arm/ebsa285/current/include/hal_platform_setup.h @@ -73,8 +73,24 @@ 667: // divided into further macros to make it easier to manage what's enabled // when. -#ifdef CYG_HAL_STARTUP_ROM +#if defined(CYG_HAL_STARTUP_ROM) || \ + defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) || \ + !defined(CYGSEM_HAL_USE_ROM_MONITOR) + // Dependence on ROM/RAM start removed when meminit code fixed up. +// But it re-emerged when RedBoot's desire to live over RAM app +// initialization asserted itself. +// +// The correct thing is to re-initialize everything if any of: +// o You are in ROM (duh!) +// o You include your own stubs (ergo rule the world) +// o You do not cooperate with a ROM Monitor +// +// [The latter two probably mean the same thing, but this way also lets us +// support a standalone RAM startup app with no stubs in it. ] +// Hence the more complex conditional above. See comments in the ChangeLog +// and plf_io.h wrt initializing the PCI bus world. + #define PLATFORM_SETUP1 \ PLATFORM_FLUSH_DISABLE_CACHES \ INIT_XBUS_ACCESS \ diff --git a/packages/hal/arm/ebsa285/current/include/plf_io.h b/packages/hal/arm/ebsa285/current/include/plf_io.h --- a/packages/hal/arm/ebsa285/current/include/plf_io.h +++ b/packages/hal/arm/ebsa285/current/include/plf_io.h @@ -65,6 +65,13 @@ #define EBSA_CSR_IO_PCI_ADDR 0 #define EBSA_CSR_IO_PCI_SIZE 0x80 +// Incidentally I now understand why it's necessary to force PCI reset +// (2000-08-07) - with RedBoot in ROM, the RAM app was unconditionally +// reinitializing the PCI bus when it was already initialized, without +// resetting it. We cannot play the same game here as with +// hal_platform_setup.h - I tried - because otherwise the net cannot +// re-initialize itself; the scan for devices fails. + // Initialize the PCI bus. #define HAL_PCI_INIT() \ CYG_MACRO_START \ diff --git a/packages/hal/arm/ebsa285/current/src/plf_stub.c b/packages/hal/arm/ebsa285/current/src/plf_stub.c deleted file mode 100644 --- a/packages/hal/arm/ebsa285/current/src/plf_stub.c +++ /dev/null @@ -1,135 +0,0 @@ -//============================================================================= -// -// plf_stub.c -// -// Platform specific code for GDB stub support. -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): gthomas -// Contributors:gthomas, jskov -// Date: 1999-04-21 -// Purpose: Platform specific code for GDB stub support. -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include -#include -#include CYGBLD_HAL_PLATFORM_H - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -#include - -#include // HAL IO macros -#include // Hardware definitions -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -#include // HAL interrupt macros -#include // HAL ISR support -#endif - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -static cyg_interrupt gdb_interrupt; -static cyg_handle_t gdb_interrupt_handle; -#endif - -//----------------------------------------------------------------------------- -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - -// This ISR is called only for serial receive interrupts. -int -cyg_hal_gdb_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) -{ - cyg_uint8 c; - - c = hal_ebsa285_get_char(); // Fetch the character - if( 3 == c ) { // ^C - // Ctrl-C: set a breakpoint at PC so GDB will display the - // correct program context when stopping rather than the - // interrupt handler. - cyg_hal_gdb_interrupt (regs->pc); - cyg_drv_interrupt_acknowledge(CYG_GDB_DEV_INT); - } - return 0; // No need to run DSR -} - -int -hal_ebsa285_interruptible(int state) -{ - if (state) { - cyg_drv_interrupt_unmask(CYG_GDB_DEV_INT); - } else { - cyg_drv_interrupt_mask(CYG_GDB_DEV_INT); - } - - return 0; -} -#endif - -// Initialize the current serial port. -void hal_ebsa285_init_serial(void) -{ -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - cyg_drv_interrupt_create(CYG_GDB_DEV_INT, - 99, // Priority - what goes here? - 0, // Data item passed to interrupt handler - cyg_hal_gdb_isr, - 0, - &gdb_interrupt_handle, - &gdb_interrupt); - cyg_drv_interrupt_attach(gdb_interrupt_handle); - cyg_drv_interrupt_unmask(CYG_GDB_DEV_INT); -#endif -} - -// Write C to the current serial port. -void hal_ebsa285_put_char(int c) -{ - // Wait for Tx FIFO not full - while ((*SA110_UART_FLAG_REGISTER & SA110_TX_FIFO_STATUS_MASK) == SA110_TX_FIFO_BUSY) - ; - *SA110_UART_DATA_REGISTER = c; -} - -// Read one character from the current serial port. -int hal_ebsa285_get_char(void) -{ - long timeout = 1000000000; // A long time... - int c; - while ((*SA110_UART_FLAG_REGISTER & SA110_RX_FIFO_STATUS_MASK) == SA110_RX_FIFO_EMPTY) - if ( --timeout == 0 ) - return -1; - c = *SA110_UART_DATA_REGISTER & 0xFF; - return c; -} - -#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -//----------------------------------------------------------------------------- -// End of plf_stub.c diff --git a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_stubs.h b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_stubs.h deleted file mode 100644 --- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_stubs.h +++ /dev/null @@ -1,13 +0,0 @@ -// eCos memory layout - Mon Nov 22 07:37:20 1999 - -// This is a generated file - changes will be lost if ConfigTool(MLT) is run - -#include -#include - -#define CYGMEM_REGION_ram (0x1000) -#define CYGMEM_REGION_ram_SIZE (0x7000) -#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -#define CYGMEM_REGION_rom (0xe0000000) -#define CYGMEM_REGION_rom_SIZE (0x800000) -#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) diff --git a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_stubs.ldi b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_stubs.ldi deleted file mode 100644 --- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_stubs.ldi +++ /dev/null @@ -1,25 +0,0 @@ -// eCos memory layout - Mon Nov 22 07:37:20 1999 - -// This is a generated file - do not edit - -MEMORY -{ - ram : ORIGIN = 0x1000, LENGTH = 0x7000 - rom : ORIGIN = 0xe0000000, LENGTH = 0x800000 -} - -SECTIONS -{ - SECTIONS_BEGIN - SECTION_rom_vectors (rom, 0xe0000000, LMA_EQ_VMA) - SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_fini (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_rodata (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_rodata1 (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_fixup (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_mmu_tables (rom, ALIGN (0x4000), LMA_EQ_VMA) - SECTION_data (ram, 0x1000, FOLLOWING (.mmu_tables)) - SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) - SECTIONS_END -} diff --git a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_stubs.mlt b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_stubs.mlt deleted file mode 100644 --- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_stubs.mlt +++ /dev/null @@ -1,13 +0,0 @@ -version 0 -region ram 1000 7000 0 ! -region rom e0000000 800000 1 !This is ROM bank 0, physical address 0x00000000.When running eCos, this space is remapped to 0xE0000000. -section data 0 1 1 1 1 1 0 0 1000 bss ! -section bss 0 4 0 1 0 0 0 0 ! -section rom_vectors 0 1 0 1 1 1 1 1 e0000000 e0000000 text text ! -section text 0 1 0 1 0 1 0 1 fini fini ! -section fini 0 1 0 1 0 1 0 1 rodata rodata ! -section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! -section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! -section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! -section gcc_except_table 0 1 0 1 0 1 0 1 mmu_tables mmu_tables ! -section mmu_tables 0 4000 0 1 0 0 0 1 data ! diff --git a/packages/hal/arm/edb7xxx/current/src/plf_stub.c b/packages/hal/arm/edb7xxx/current/src/plf_stub.c deleted file mode 100644 --- a/packages/hal/arm/edb7xxx/current/src/plf_stub.c +++ /dev/null @@ -1,158 +0,0 @@ -//============================================================================= -// -// plf_stub.c -// -// Platform specific code for GDB stub support. -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): gthomas -// Contributors:gthomas, jskov -// Date: 1999-04-21 -// Purpose: Platform specific code for GDB stub support. -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include -#include -#include CYGBLD_HAL_PLATFORM_H - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -#include - -#include // HAL IO macros -#include // Hardware definitions -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -#include // HAL interrupt macros -#include // HAL ISR support -#endif - -#if CYGHWR_HAL_ARM_EDB7XXX_GDB_PORT == 0 -#define CYG_GDB_DEV_DATA UARTDR1 -#define CYG_GDB_DEV_BLCR UBLCR1 -#define CYG_GDB_DEV_STAT SYSFLG1 -#define CYG_GDB_DEV_CTRL SYSCON1 -#define CYG_GDB_DEV_INT CYGNUM_HAL_INTERRUPT_URXINT1 -#else -#define CYG_GDB_DEV_DATA UARTDR2 -#define CYG_GDB_DEV_STAT SYSFLG2 -#define CYG_GDB_DEV_CTRL SYSCON2 -#define CYG_GDB_DEV_BLCR UBLCR2 -#define CYG_GDB_DEV_INT CYGNUM_HAL_INTERRUPT_URXINT2 -#endif - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -static cyg_interrupt gdb_interrupt; -static cyg_handle_t gdb_interrupt_handle; -#endif - -//----------------------------------------------------------------------------- -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - -// This ISR is called only for serial receive interrupts. -int -cyg_hal_gdb_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) -{ - cyg_uint8 c; - - c = hal_edb7xxx_get_char(); // Fetch the character - if( 3 == c ) { // ^C - // Ctrl-C: set a breakpoint at PC so GDB will display the - // correct program context when stopping rather than the - // interrupt handler. - cyg_hal_gdb_interrupt (regs->pc); - cyg_drv_interrupt_acknowledge(CYG_GDB_DEV_INT); - } - return 0; // No need to run DSR -} - -int -hal_edb7xxx_interruptible(int state) -{ - if (state) { - cyg_drv_interrupt_unmask(CYG_GDB_DEV_INT); - } else { - cyg_drv_interrupt_mask(CYG_GDB_DEV_INT); - } - - return 0; -} -#endif - -// Initialize the current serial port. -void hal_edb7xxx_init_serial(void) -{ - // Enable port - *(volatile cyg_uint32 *)CYG_GDB_DEV_CTRL |= SYSCON1_UART1EN; - // Configure - *(volatile cyg_uint32 *)CYG_GDB_DEV_BLCR = - UART_BITRATE(CYGHWR_HAL_ARM_EDB7XXX_GDB_BAUD) | - UBLCR_FIFOEN | UBLCR_WRDLEN8; - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - cyg_drv_interrupt_create(CYG_GDB_DEV_INT, - 99, // Priority - what goes here? - 0, // Data item passed to interrupt handler - cyg_hal_gdb_isr, - 0, - &gdb_interrupt_handle, - &gdb_interrupt); - cyg_drv_interrupt_attach(gdb_interrupt_handle); - cyg_drv_interrupt_unmask(CYG_GDB_DEV_INT); -#endif -} - -// Write C to the current serial port. -void hal_edb7xxx_put_char(int c) -{ - cyg_uint32 stat; - // Wait for Tx FIFO not full - do { - stat = *(volatile cyg_uint32 *)CYG_GDB_DEV_STAT; - } while ((stat & SYSFLG1_UTXFF1) != 0) ; - *(volatile cyg_uint32 *)CYG_GDB_DEV_DATA = c; -} - -// Read one character from the current serial port. -int hal_edb7xxx_get_char(void) -{ - cyg_uint32 stat, val; - do { - stat = *(volatile cyg_uint32 *)CYG_GDB_DEV_STAT; - } while ((stat & SYSFLG1_URXFE1) != 0); - // Need to read 32 bits - val = *(volatile cyg_uint32 *)CYG_GDB_DEV_DATA & 0xFF; - return val; -} - -#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -//----------------------------------------------------------------------------- -// End of plf_stub.c diff --git a/packages/hal/arm/pid/current/src/plf_stub.c b/packages/hal/arm/pid/current/src/plf_stub.c deleted file mode 100644 --- a/packages/hal/arm/pid/current/src/plf_stub.c +++ /dev/null @@ -1,274 +0,0 @@ -//============================================================================= -// -// plf_stub.c -// -// Platform specific code for GDB stub support. -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): gthomas (based on the old ARM/PID hal_stub.c) -// Contributors:gthomas, jskov -// Date: 1999-02-15 -// Purpose: Platform specific code for GDB stub support. -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -#include - -#include // HAL IO macros -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -#include // HAL interrupt macros -#include // HAL ISR support -#endif - -//----------------------------------------------------------------------------- -// Serial definitions. -#if CYGHWR_HAL_ARM_PID_GDB_PORT==0 -// This is the base address of the A-channel -#define CYG_DEVICE_SERIAL_RS232_16550_BASE 0x0D800000 -#define CYG_DEVICE_SERIAL_INT CYGNUM_HAL_INTERRUPT_SERIALA -#else -// This is the base address of the B-channel -#define CYG_DEVICE_SERIAL_RS232_16550_BASE 0x0D800020 -#define CYG_DEVICE_SERIAL_INT CYGNUM_HAL_INTERRUPT_SERIALB -#endif - -#if CYGHWR_HAL_ARM_PID_GDB_BAUD==9600 -#define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00 -#define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x0C -#endif -#if CYGHWR_HAL_ARM_PID_GDB_BAUD==19200 -#define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00 -#define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x06 -#endif -#if CYGHWR_HAL_ARM_PID_GDB_BAUD==38400 -#define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00 -#define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x03 -#endif -#if CYGHWR_HAL_ARM_PID_GDB_BAUD==115200 -#define CYG_DEVICE_SERIAL_RS232_BAUD_MSB 0x00 -#define CYG_DEVICE_SERIAL_RS232_BAUD_LSB 0x01 -#endif - -#ifndef CYG_DEVICE_SERIAL_RS232_BAUD_MSB -#error Missing/incorrect serial baud rate defined - CDL error? -#endif - -// Define the serial registers. -#define CYG_DEVICE_SERIAL_RS232_16550_RBR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00) - // receiver buffer register, read, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_THR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00) - // transmitter holding register, write, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_DLL \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00) - // divisor latch (LS), read/write, dlab = 1 -#define CYG_DEVICE_SERIAL_RS232_16550_IER \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x04) - // interrupt enable register, read/write, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_DLM \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x04) - // divisor latch (MS), read/write, dlab = 1 -#define CYG_DEVICE_SERIAL_RS232_16550_IIR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08) - // interrupt identification register, read, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_FCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08) - // fifo control register, write, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_LCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x0C) - // line control register, read/write -#define CYG_DEVICE_SERIAL_RS232_16550_MCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x10) - // modem control register, read/write -#define CYG_DEVICE_SERIAL_RS232_16550_LSR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x14) - // line status register, read -#define CYG_DEVICE_SERIAL_RS232_16550_MSR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x18) - // modem status register, read - -// The interrupt enable register bits. -#define SIO_IER_ERDAI 0x01 // enable received data available irq -#define SIO_IER_ETHREI 0x02 // enable THR empty interrupt -#define SIO_IER_ELSI 0x04 // enable receiver line status irq -#define SIO_IER_EMSI 0x08 // enable modem status interrupt - -// The interrupt identification register bits. -#define SIO_IIR_IP 0x01 // 0 if interrupt pending -#define SIO_IIR_ID_MASK 0x0e // mask for interrupt ID bits - -// The line status register bits. -#define SIO_LSR_DR 0x01 // data ready -#define SIO_LSR_OE 0x02 // overrun error -#define SIO_LSR_PE 0x04 // parity error -#define SIO_LSR_FE 0x08 // framing error -#define SIO_LSR_BI 0x10 // break interrupt -#define SIO_LSR_THRE 0x20 // transmitter holding register empty -#define SIO_LSR_TEMT 0x40 // transmitter register empty -#define SIO_LSR_ERR 0x80 // any error condition - -// The modem status register bits. -#define SIO_MSR_DCTS 0x01 // delta clear to send -#define SIO_MSR_DDSR 0x02 // delta data set ready -#define SIO_MSR_TERI 0x04 // trailing edge ring indicator -#define SIO_MSR_DDCD 0x08 // delta data carrier detect -#define SIO_MSR_CTS 0x10 // clear to send -#define SIO_MSR_DSR 0x20 // data set ready -#define SIO_MSR_RI 0x40 // ring indicator -#define SIO_MSR_DCD 0x80 // data carrier detect - -// The line control register bits. -#define SIO_LCR_WLS0 0x01 // word length select bit 0 -#define SIO_LCR_WLS1 0x02 // word length select bit 1 -#define SIO_LCR_STB 0x04 // number of stop bits -#define SIO_LCR_PEN 0x08 // parity enable -#define SIO_LCR_EPS 0x10 // even parity select -#define SIO_LCR_SP 0x20 // stick parity -#define SIO_LCR_SB 0x40 // set break -#define SIO_LCR_DLAB 0x80 // divisor latch access bit - -// Interrupt Enable Register -#define SIO_IER_RCV 0x01 -#define SIO_IER_XMT 0x02 -#define SIO_IER_LS 0x04 -#define SIO_IER_MS 0x08 - -// Modem Control Register -#define SIO_MCR_DTR 0x01 -#define SIO_MCR_RTS 0x02 -#define SIO_MCR_INT 0x08 // Enable interrupts - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -static cyg_interrupt gdb_interrupt; -static cyg_handle_t gdb_interrupt_handle; -#endif - -//----------------------------------------------------------------------------- -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -// This ISR is called only for serial receive interrupts. -int -cyg_hal_gdb_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) -{ - cyg_uint8 c; - - c = hal_pid_get_char(); // Fetch the character - if( 3 == c ) { // ^C - // Ctrl-C: set a breakpoint at PC so GDB will display the - // correct program context when stopping rather than the - // interrupt handler. - cyg_hal_gdb_interrupt (regs->pc); - cyg_drv_interrupt_acknowledge(CYG_DEVICE_SERIAL_INT); - } - return 0; // No need to run DSR -} - -int -hal_pid_interruptible(int state) -{ - if (state) { - cyg_drv_interrupt_unmask(CYG_DEVICE_SERIAL_INT); - } else { - cyg_drv_interrupt_mask(CYG_DEVICE_SERIAL_INT); - } - - return 0; -} -#endif - -// Initialize the current serial port. -void hal_pid_init_serial(void) -{ - cyg_uint8 lcr; - - // 8-1-no parity. - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, - SIO_LCR_WLS0 | SIO_LCR_WLS1); - - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr); - lcr |= SIO_LCR_DLAB; - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLL, - CYG_DEVICE_SERIAL_RS232_BAUD_LSB); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLM, - CYG_DEVICE_SERIAL_RS232_BAUD_MSB); - lcr &= ~SIO_LCR_DLAB; - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_FCR, 0x07); // Enable & clear FIFO - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - cyg_drv_interrupt_create(CYG_DEVICE_SERIAL_INT, - 99, // Priority - what goes here? - 0, // Data item passed to interrupt handler - cyg_hal_gdb_isr, - 0, - &gdb_interrupt_handle, - &gdb_interrupt); - cyg_drv_interrupt_attach(gdb_interrupt_handle); - cyg_drv_interrupt_unmask(CYG_DEVICE_SERIAL_INT); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_IER, SIO_IER_RCV); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_MCR, SIO_MCR_INT|SIO_MCR_DTR|SIO_MCR_RTS); -#endif -} - -// Write C to the current serial port. -void hal_pid_put_char(int c) -{ - cyg_uint8 lsr; - - do { - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr); - } while ((lsr & SIO_LSR_THRE) == 0); - - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_THR, c); -} - -// Read one character from the current serial port. -int hal_pid_get_char(void) -{ - char c; - cyg_uint8 lsr; - - do { - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr); - } while ((lsr & SIO_LSR_DR) == 0); - - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_RBR, c); - return c; -} - -#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -//----------------------------------------------------------------------------- -// End of plf_stub.c diff --git a/packages/hal/arm/sa11x0/assabet/current/ChangeLog b/packages/hal/arm/sa11x0/assabet/current/ChangeLog --- a/packages/hal/arm/sa11x0/assabet/current/ChangeLog +++ b/packages/hal/arm/sa11x0/assabet/current/ChangeLog @@ -1,3 +1,10 @@ +2000-08-24 Gary Thomas + + * include/pkgconf/mlt_arm_sa11x0_assabet_ram.mlt: + * include/pkgconf/mlt_arm_sa11x0_assabet_ram.ldi: Expand reserved space. + + * src/assabet_misc.c (hal_mmu_init): Increase ROM space to 32M. + 2000-07-14 Gary Thomas * cdl/hal_arm_sa11x0_assabet.cdl: Add rules for building RedBoot. diff --git a/packages/hal/arm/sa11x0/assabet/current/images/cygmon.img b/packages/hal/arm/sa11x0/assabet/current/images/cygmon.img new file mode 100644 index 0000000000000000000000000000000000000000..677fdf44c813e500327d7d9ffcfdf00f0323b0e2 GIT binary patch literal 136656 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%0A|c`>8^^5k05Wzws_+f!46b5o&! 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 diff --git a/packages/hal/arm/sa11x0/assabet/current/images/gdb_module.bin b/packages/hal/arm/sa11x0/assabet/current/images/gdb_module.bin new file mode 100644 index 0000000000000000000000000000000000000000..2308287afcbdec4fc6cde2350e89b1e8111160f7 GIT binary patch literal 32200 zc%1Eh4RjpEm2UO?NMmViwSEjj)`qq%h%q9xj9yS20fQ}qgPbt_!8qV0V_OjCJugwf zB+f2*8T}Z%UYR3oQQTu!O8B)JLm1wIdyuv`c~DgTeoiAd+S!Iesq^tUy=m={NEk;y*@0GZz8ou zL~<_@zdsli$u!c^kVw|lIr)tj?(#yjd-KLcy?J5vcz2((%exzS{JsADyS(pT>L9<* z>(+T|k=JD*Z*Z$;Sc}~^3x$S-`r870GiE9H#Z^_WcA&0G!s6Q^ybIyvnAol<+kK|k zZX;j~^J-U!MS0d~;$6a+S7#&E{X-G^{vl!adi*WK;{0y`!+H)~;N$;{tS37a_2@Q_ z<9AH|4p;MezxPh5qQ=QTeu3)CG$Bq!fb17`@7^856OY|-{WS4x>ul?+!}GkR=`-r_ zyzZgv9%{t%z2P@MZ0T}M8h)03Hskr>j`QZ(cpiS@@DmsgXXzbF?-2TL7VtGSzD@WY zp6=vBM|yG>mWdJe^+eP7zD9uSr%llEeB;&7sG@C<#(SE48Y}qYb*gX2_#Es3zc~5B zb)?b#NNM@L0`If%J`3;lc-G_DhG!d|jd(WV*^XyBo^d?mcsAqNjHijGiKmUH&H5x= z)81O(Vc~i5vR&TE`AAE4c~P-67Zsu+V$XLYi4Hd+zU4*4V>17D7+dGXUEWdPBStUE z?ZodF^zQ-u{%8HWAHQGJzs2Y$b8GRwz7}cbF4>omSdWEt|6BN7x%cZot3w;c@=IP3;`*E+E_r2ghV-t= zoi8%^T9KBpllMBg6GwM>lf})sun?OLhltP3fD=0^k2tx7M?T^fsy3fIU+g?-2{VuW zheC;tns%|-6Xs^naIJpRZThlp*d%ed@ zv{!xq@PihfE4K_!vYcF1*2$GY9{fl3b;_u!hfmUx&(RG+jQ%y!LrDEXbn_i)4StJn ztCad2)||A;i{SZdq@f-u>SX?{^FMW`HP;f?-F3Uw@&Rj(ZQEj~&Jht28GQ49l*eLt zipRNID$H`0QQi zwpEIeIiTb3!58B3X>x2v@ohQjhwsAP;)S}|-z9m-`G$@J)>0d?7;-6`;y8#3BkANh z2BdR*bQ}0HnXgawPpudI(Z)o-TL#$IAZrX8vctaD8$~4>VDq{9lFRt4cqbR5QQCer@kE}CNQl~&(Ogt>< z6Uz*u%!>S!Olh4dfr)rsz6jqdU)7XZ(+>GhR|B>)KQ(jQDxoY$u7il6pXm ztyq@-Gt_U}4|uG5GU{89+Te8{B@!Flg?MsYUpK`_o7mt+Oea@fEk=C!u-*5~`7M|~ z_6Bc-&MQY9-6*#f<=5%*!zkaS%d;->frT>NKEM5o!Zm{VF9w}_U3$<9fwx3*yVsQ1 z=r#@Zdj@&XdC*IUjqX38j<~(en$CLb=zCG3rEvt8*K$!pwsLcDCGu5pdT zy{<5S;>C*mu|v}CjY6R!f;w5YEUEbWSB1j!t&mv{qkg|GA#TWDjJhIdFK%x04AJLe z%H?7f`P>O(TICvmgX&X%v7I>DvFvR{n#{uQsNI*H1(-U~?>>z-m>0Hhm3d7X)&*X| z-Y)ZneGl{nC*NfCLtp6k!h_j-jCvShiHr4y0dFnF@2@o7%RuX?>~rcK$cHa_ zYpo4#vsDS1@Uh$+A!bL5^JWL=b!eyzGMI3L4~xZ=1#_VTo)W2hJpsBk0e8}l{hN;b zE76XuH;HQtrvz3>(CH?lNK?K17PDC7Hx!)7iIfpsNWwe zj>Ao8%cuRzkWp+mESBZ4P|m$T)2*YFZa=-`6{GQLm-@M!M~;&ZgHClR@GZVKB|(?; zb}yN@$2Fn98^7H3#cgQ!WE`_^vPkw%5y??J7vOpN4@iwDL;PxiE9AnasgMh!U!V3$ zJbRB@CBApEO6)l)?1w?q0k2N#&G&krC7n^GO7Zs&Q_J9ZW*ck?j7z3R${O-$#8UJO ziPc%?h+0;r_eSgWq(w~u^y{8Tv9e$Mc!99%_x3T`2G{V{aK)o z4S_!X9lmWs3icr)^?cH81Ll&NE9U5fm;(=#;H~Q4U&MQZm&R|_yNh{fbE=cgSCBWq zu6Wbba(_W)7s?J|4TH|lakj9gK>x#f4IbZ$Z<2>9$U`RNuv(M0V7?~vQxn-*S$85U z*L8mHG1NLes@ISv^v|Du@gC z-5>SGFRtOpmti}d4cn`-VKbG*x14FQtg}Ca-&hl$vbxnc-7RT7CMQmSU!p}CZ!gMZ zj;{#Ffi);M8dy7*+JjyaGz**0Ncpp`?3Y|132GbQg4sfCDQI< zj+4L6{gWD-WHRjPTDC`hfVSG` zSC!s^_Ao!N&LV{YhdFtQ^O5tC^fIg^F6eU;`OUCb<9$Bfm*pUnzd`vx9QZASwJ8Gr z6690!0Z;O>)teR8M$mDQ?&pT6q1*Q9l(f>W1szf86T$xX%Kp~``|s;x=z9}nmOCuwcJK*wB&@mM%SVLRAaRUY_sM*W zQ&!5hqRhWf;j7!X{r0)uqkoDgwtD1cpD(7cUCp}@lYG|;zFV0Mi&a_jnu$Erz2CrZ z^z|v9ho~R@bP9B%01rhWgX_RYY?F9IMc>JBI-mYlXKj`CdCcrB>Tg_QSU10SaD8?_ zqii<62097#?z-+l+Og;d<^k55SX!-HSXXBo;^m>POs87`I>zLD$J#4urCeEKPxB@N zudsD^c#S#DGt3@$jalifv8F+WBM;xn?`-F);&^f{-H;=H#mR4&PjT?&8mrT-`aSf^ zY|@o_X{ul9qL4ACSPx}DICW2UO}5gbo@HP?Ck=m$wUuy$_vMzai^R~^5a)vZpp;kC zM-1pAF)3e`=59d$E^<0uySvk+?7YbAbSW!s;A;aPL443}$~KYM=+QrLk$p3G{D;Gw z69(*&n5fAo&=2NUppWMP7Wh9O!*9xF8)YVIUibo@SQi>XiKQ;^nGgNuI?k5}=y@r= zhjrV;B@NrN95j0V&B6%vn-JQ$ka`lH6}D4*k=;4fFIy$)`hXmlGPWP6r(M_cBCcE{49Rbc<33Rx4(cGCN!PDoOjw@v z_rg&N)=R&mU(PSX@mynTyPh(K@&juKdA@`4PSLob4YmfyCy_+ma^2{Ip1%RSx+IU< z8h!-Y%|bmQ(dSjt2P0wTOBkVHUIGm3h{L|O(Ei4KV>mQv9IV7HFARQ=z62rWDx0Bh zNc%izvpoF+T>&3~pd113N;?^J41=f3s+Iqe{cR1L6Q0MKyTD zFr9p1ijcC1vayczg55qz^A_iXg|_OD=#w!6IHu5U3h*h(CuoD~g4yRSMZWT(q`if# zPv^(1Ubkvaw%C^|3^B49ZJXy;zglJXNPjqg8x1}AuzqJ>BO*E&Ly9Ar(x(&|^l|8C z{g&dF8?`rY*3#_J)cYHHY-;QS zSUc35VgKG8zHdVKN;~16&-H-w9y92CTevJ2L;0GS)X7wt`T)&>vc{Kbsrir#*N0x^ zI$>TFewF$($JDsU$$y4+E`CRw@lKw|U|s&;0Bo+lyfL>g7i#GrHblbZ8f{>V$xD!1 z&!>S0b^6F3P{wFhWzr~fE<0+5PVhf9s`V@O#e!KBVax;<|qp@L?Z5?&Ona0dHJ9Mt|!p;A;Zo zHJUjK{B`|CrIXK`1$=lKZ93rc2k=~2w-GE8d6zO%0(^S5?ND}#gvbahGqyHDb{2qd zydn=A8$ulQ;;C)kDt@C~ zC0_JC9#j6IGT5Bu93L~AkI6P(9Hvi#>y=?080PoWSj!BJmmD*VYthfG?SBC~cTIYi z*96#W$v@DoqlupkM^n^|m*%8j4Q(dyjXq1*-PtmHFC@b*{cf0#pudxE!}kk9$A{mK zXO$gw!{YexW%#`qboc`3aWTfo11#-zpO0y04N|YbI1SiZx3T&ZADDw)*dfm>%E4}W zS-|dE3q03qU4XjcdD3nf^p=|31CsXP4rN2s<|7H%+_ayxj>Y}ih_aJ+aJ}W)kGxvg zt>I?qNW$b^vy=N=g&5(OH|-YUAm+|2JZ&Ut16nW2dYY|H)VV|ImrWQe+8+_If_~`T z&8beeJG;xP0A1HYXDt&ahK2dCXU%yDJhgvFSYL#mbf3hZe(Nf%}OEdcFAMJg|utZ^gF2K5XZd90KZMw<4ylucdy>x8}veh^cyY7-Nb#47CqMHQOOJC z;Dx1VdlY;y%6@1+m#O*SZ9I^4!tBpJp9jd>s5`1*Bo8FP14-(QkSFYOf-p;SkSn|U zQ!KZgb8m?IAA8>bl z^Ihorzs7l4!Y?bxFJi!3F7^JjoMY58lL3AanqLwn{L=pp{PKBz(>&t$sgy^2{Z+|D z-_B6$+2b0<$CLX+27PF$4bp}zlY0yg$o(DZ^O=**NqdoNG;B$Q*U_SXl=OQ4Tgp!} zS}5!;(|88k2xZlNlt?V1{ta5o^#$Xd@j_b0mfQEqu`aj!zIh*~g!9i4R`I~L~}G1luiE}3oK6vz;{hd`f<+=oMdveaL1q3zd@B=2Moc&1(p z4e{T>8%t^{X@B#Zy|uV^=+_aJaRFH_4lA(nLG*EA?@eYu(^|y<@%ZXiz;PnV}4cKh2OU#eGhzp zt=wO7^68j*cH+5!G6s4>nLm%@oKb!DX-s`7DfeBrdtNUQJa+Y%hvaJK_6XmCrf0Vs?kB4h~nHgxeTk314nBP(+MmmJ@2by+=OCMX9`~z7A z*}Ey0aio5ckn+oszFB`SIF9)b9rvlYna-AFNjvlZ)cAM0KCmh#o1ty57;eLvTBwwBvYpCRtduZP{L_Q>W#AAe?ud5lvlSNy#r zmfS!+_f#F|Q;*;0L2to$yzK8C_;iX(--?rO=q8RwhPV&ignlQ{-*cr-+Ud?RJKdiF zANu{tdrcO7)JKO3cGzvQD!nVz_%zH)AiulcrT=-Ivcl%dzJc(-) zX`N)>ZphVR?V-GBMq6g$8qj-bzByIt`7~(~)4Vd<$!!51&E_=8FGr%(Tb9c8ugRX~ z#Xx(G-+IUjzSrZOKJO;_ThYca#$;9rUf~JwQhdIj@vEoqMqNdkVa^CH<-(wZ|qk16}U z@i5zTJuKf^0)OItZ!bSl8rAKmn#b~-=J7B>*BvjZb0gsDC%`|LIskJ^T#R%gEs->Q zPU^W~>p9P<+2tkXV6K5@7%w30JezR?&%p+G&O2f#KYIvvu7xr;lmAs6!#~8gt{RTp z3!aQ+0Db??;JAVB?Ozth?W+duqkgwHBu1Xrzp+@2d`H*)8tVL?%-3=hLbKsFh8T&L z)cwT?>fVBKk9BvtPLlf_{jLL^A`g~>kIvO=Dfd;Kz}#>!H=0rYJ&ch7?Bn3=xQ0FN z46ux+c?|r`xMQvpkAv?qxkrSVbjhm@-XB9b(&m5tzA(by4tTv6IuCJjy^dIgSG**xA@68kRcNzM7+8htJXacx}hLV?*qbJd~TkyUIG-7{Ar#--F zFZ%tDdS7T7`miU^?>)NTQ#FnD0rr4~rH;Fo^B#5YlVzNInf}&ch=vs<_+2yseoer~ zE`d9L0=NdiHGM_d5@{sP`@Kl}kho?%8R*lK=+o1{^C6APe*>OR2Kw}*?$fQhPZ_}8 zr(sis6@)#aU?FR1|K23+-y8E+;(LbUrR=PVooH9SCn)ci=BgRr1A6%FMeO~&a-W3d+J{~5IM@gpxKYsb^}ka#<757164f&1PBaNhwO@yY11K3CI>cEZWh`9DGV zucG|H61c}EfZGK)rvz@t1aJ??xR`$TAo_j~J;sMH##4ds zK|TLIsOKNbM*00PzE2M9jUEOMOsiBn(Fe-ZGlJ(KF-^v3aGe!1#`Ld9iEc)iL!vTz zC^=2)Qj`s_m6_*#O^A{I4%|0SRyrBWuGTu?Uf7_kr-LwZ7RKkvgb)Yq1)E=3vq&bkkIG$;z`-`H20Xb>?I9nm(hN9a`S&zko$3? z0bgZZLi=F>drnlvFns`Uv=J!xe7Ls2zLU0>cmD!{s?=}TVU$AZy}yCtbUg~6l&=irq4qp?(-N65aBzXwDFZ6WI*mE z6JHa^XhC4`HlwnD?1J zw}01HI%SMu z#2#=PAqOnTfo;E2^WsB{K@7;NMlG)x_rfwwfcbsKA@EE_?(ZvK z0DaEngT2~ziJpb+a-o#38(iwr8`)0kS&zPQk$86ae0*z^dI0HmWN0Dd?@j4Pl5ses zL8aVB7pIaKL#`iFXoqS!^BnZi;ClqJyF$NnU#r^Ce!Q=!v81e${HWny!`$zFJQ#;{ zM2<_h)?c`1M7Vi|k_|Ea{)>nx&Tqf$8Y}HG23*AhirGAu7qQbr%=;Z2=z?vyGiOjPXNIaw1N1#1{d;m> z&ffzG#Pdj*Nq=Uyle3^>F&5ck3>B;zYe~lXr(h7B% zsSR!!Z2p*x$9rk$x2Fpust+#>y^i0JP#V8~FhrQwv@RT6FXcWV;F}=Zp5^*i@8k;T z&olg8r+$B*`+SLrTvMMesI@dWZj_<)-B1RIvAviIzO#S+oIQm3eJJ5PS}-H-Zn=lX z@$PW7ukYoEtmCC2=FODxJxgk5+fG>06?2t)u%$f1w#`J^rB2UzVVExsZ7nDt4(COX zcetlVSt!eKPGIbOf6~?MY&$b_^(@K?JX_VfFf-%Nx6k0dpHd$1 zd7R@>kMdVa9$qSCZ9QauR`ayKU+~kn6rR$*RrG;myx{m!kMY+r%5TlWX1)uSLt?*mQqg?)5k)PgDN` zZKjYGQm<8KwTSlMujKCp{q5^ijHt3p8$vRUmp&E$ zEJCG>TV#FrX1P;`jIDVf-J;b4b ze2PAF>ak?3l%?b8*xucMo21+R9DZ{xqyM~q-TzI+|q zi}Buwd_EUT|MAUUQjZ&98KWE1^V#1U&~(cGCE#YEjg0~Ln1*jEf#>>sJK(6t-5r28 z0beP3Y+7;uhVUlfR{_ofe0N~pAN~ErJk=eLgOn+j?~_VN9YWI0A79#@e;XdJXT^iI zov}s6WuE98AAeK)Ufuh)@05-8fZ^I#ui+RkqxPz{$n}7ST#K=ufGveH0Y_b>6qaW! z>a`tJpOJcR-ar3Yr_WUe;k)%dvcGqAu9PKeE-&}@zI{K3+An_ImuI{Oz~9r8_Y_d4 zESBk$Wen|0U>ilB3*h>}+u6Q9ypNOzq}ycb(|TR#0o9hCFT|AH-(>oGo!jNU)%AgQ6K!0d zX8$ox-Sj2im^%maJ@&{h?=<>eZXX?HnVIum9;V!oc6RdR;Ye{WQq>s^yhjonvxRiT zWvoFoxiQPS3u(r|+(3r`X6yrufx~!S#B*S$hA7XU z5b|*L;SQ`J-0vxg3y||GK|60uFXQ~AY%$CqOI>3_iQYzAH@K(Xu6f(9i*WTx71L9$ z<$>xi&jYFNhInp>b-k|Z@_A{Bz-ec6{qN-3YmUd)>~ zbsurR7it+C4z&ynGftpF-C^=FV}hD(rU5S@@68zSY`nMPy;a`3G2pe~y&dmttKH@u z90M-Tqja&1=#{bAhFDBJbGJMXnb;8UVRBsVlQG-JA+P2$b_%~=!f(b~32~2%ld$w! zOTQQQc>VZw-`0>mHk30!GsZm&3+=S*92PCTat>7}-<0mpPNW|6WheU7gTCxUpL)=j zo#;~!`mz&!>hZep-fk&-Y3MEGOJciLplzSN<9t@&H;!++sq_x|(Aq5JPin>QR-G@; z9_ajL-)E$KO!V<(KO~a$?LB#|NOEsGeT_(RZ@UZmlshZdjQO-$1AF&DnN_Cs&?`X8 zI>6Lv|1o5Hw9f90N_)Cr@%zaVIhL@u7Ud~rPf+fSlhqT@pft~)J8``aKbd0%zT>`L zB&GJ4mumgxnvj$G{BOAa9h5OFQty)Q&ke29Fl)3f6p}Xkb34OR4%DLy{Z`62@ zN0;i~te@|*s2kE=ka4+{Qs!7_@6UBTejOju;o78qSl0*3X?-fV zek;2^nHSJ~dA_OsI`GAZq5C2oL@GUFKtGSl+b`dzo?l+P^Qbh{0d`8r$%h)!u4N4Z z?-qGK%{f)&ukNTib2-*I_59cwznfLnuUcjD9)-90f&IQvPk$VJNg}0?)?KIi;-8(U z*8PZ^svqZ|&G;XQuf)d~j}LkE2Jw7Yi7`N}eeE@S92-?WcpziIE! z5+)>dm;sM#m9+I_%;dvbx4BQo&JdTM7JYvk^xCK7D9`_Fd_wu*20E4eu>Es9pa;+I z)T7@#1Ik!7_WwK5o?}c-Dofpy<^6J{uzz<3*t3-r6Xmg;ZtVjP>UUG5Uwyp(BeD-b z#_`Pk2Cv?HSgvvP7U@D5F>bvV;$hFkIPhHSSbUW_^L-NZBmM(Vj9+KsC3+!od~@IU zb91dahRHvl^$!K#9_sfR1F^dyeXgAOzbX_?nYymhHhr6a{8?2$cAfr)18=`$Wr8xn z{D_$z=g;%^E9g@*v>$}~n~c|{{l8Q8;h5|b*71sG0{*SDZL_q!NcKx!Eb%4K|4UwF zV&Ejt*b%m#_a#uD$n<;W1UQDpwv*BST^Ld8=r%8G&|iQ5@GN-`&f=VmgGYX&T3d(d zKQ=ip@LME$hgm1@`-$BklDzMS_x=R&{o$_)Bc**fGC|%?O7dd<8V-G(`GbLRWXyrw zXX2d<9DmD?vy*#04gNWUP>CI~4Rr+TY1M7mkV)lY;G|zyX+7MJjceW9uZ#6;J40RJ zcc?4!2iEmYct!sM>neYjx-6{ch4!#(wfCtx(}ed~AveS`X7Rq>MQ#5Bl=7ue>cb6 zRdlMy_tHF{X5^J-eTSFS!4pbnhy?24-3M5irOabpuo+MJ<*Acgg|+P0uwUNOF`X0_(89FBgn0SFzy7r2I1MUrXKQw}G=~T9?Sv_job)UTB}$ zn`QY95x6VlU&i974HZW%?|N8hS9%MaPVmx~r2m)oTZ2y69&~Dr!K*Qk<-L}>McT?|X_(Va>kC-S*hpkihLr}t>eZRNL2mx+-z@_hA+!!h&uVL#u8V?A|@ z@6mX%zF+X3BH$F`9$VUZWT8DRu&=Se4O=e{Poi#i9RtROt25 zFvfh1McW%RZZ<2um*u`o(mmG@4UdI)dAAn|(r5TNJRijSf5nsML|5S1OrN;1b@&eQ zP@-SPVq;#sybf?F?i(1eUlKp|E>L?nGS1?o>dfOQj_1YP|4Y2)ao@rQjF7wm9K)A<8PkO|mI36x?~>w=Uhb5HB)DRoy*^Z(l#US_`tC{WipDkX)@t34XK)|H`dKmPX^s3B)57uw5q!z-Y1-Ji*Ra}u`TFo)KM-FY9EbqlfSRm zwE75Pa!=3#A0V#|dE6Vc@LrGiM!Yk& zsvhqa-kb1VXOm|tJ?^JI^VZw#w2i+XpBLsGD=IF5y6X=5W+tgSe{%F2`s=3uZkUIM z{B=|61sN6ZVYK$-!fk!%i;Sb+5wQn`{A9}eNCt+glnmP>V-0j3+Xr84BHtJN0Oo-q z|Gx6^xF+QKAJM)s@<8{Wi=>~{>r|n2l#qT#OLUgtUS5Y#dvie_x;$g1?T@!kkI^e= zcb|vv|Hf~apG_ZCx=aK(@jgNO7Lja6>Oe{&Ek{Zrtwmaov=M11(jKJ4NIyra|F}pd zkQN|Wmy*^YcRu5NE~S51oO0f$@~+gs*>?xu=8{LPZ0;-geL3MZTx;?7443b`H>zxg za6_TRjAyAeEGK-ipEqMM?+>YcFWx835GuA+pGTYo_^{Wu58(2`o!j~T8HE9bTqs^PiExP~=Cn4gA%ErAOWr;zmRIr3~OX-(a-G>(Km^ePc` z|3=3#nPRHcBd@$7>K+KIb8A)csB1->TrXf!Hu4#Nrq@f(^L?QE(?|!A4kOhi6y00# zgxo*1G@dtrW>MtAGQZ$7jIKn)7U4-yzt*{w+aUjKhj__q$bdqi$8jlKf(P+dF5Mw-@kX zJ1Xyi`v~_ZV(2gI^ADX?e)CXdD(7)Sv;uZJlJreV|B*OVNT9CvsQc(;PHx?NC-!$w7J?Dbih*C4WV_FU(#*zU%JF z&Xn)BWv9#MJz4S>X?h-TcBUvlbi}?VE4ur#_4->);9Hs9CGX?I+EZRobnJL9a_W)!~$57@+$(l%II=Oh_m?Rj!Ls(03*h@1T?MqWZlowK~gq zQNmH~`r|c^;{{lbm!Ee9_0$yaB-}1z{X*-ey7InX;CK``h9*tTA0e(9zXKECSDsP2 zIpeQG(Wo0XquE7s)cR&*25PwfIR)}S?iVtKVC6lg%NWDdhukdIJMKsQy*{_~ZM0Qr zeKsGi23>*wRpB1!4e6Sg;H_u<*->dns@Qw8a4E?8eGFNZ0Uan*D2&k?}5G52R%&PTT59uup08U>z&h+fcZI66MlzK?;-Sc2IvvCL)mL1>JGj2 z;1$Pka)0@{iZ3CrhT1R(B4L+j{AVt3a-Y}zw0J(-j<|h-cfr)<)0Nq32WgTn6AIVn zXQB@n_l6#fDd!SljmqkLx&p9B5sX6^yv_bl7G60mnkd^!SHq;J|k z&KY(%+b7bw2xEFJmg~*?XXu5vx8Tb|f8AQ}x|-jd57)d-`^A*;K9oy)%_F%-!8;pm z<@4g*fK^f_RA-In>wfz1v@KUaxBJmsD!w);W9`MM1=5ev@5(z|>HkkKcBD?0qkq@1 z4(9iYqq$jt-zyHF-DjjsRDS<$UcHR>?}Lq~?sPNzh2VeM_}=#lg+qAqel&kgR`45I79TyGPjecQpb*RX-0bll1M)#6v02__607e5Xqn~+>cLFwn43qP1_=4 z7hywG#I&4KcloJ%4U2LGxOZ4%@p3vYvVr!8A>&2#J%9MlZ&>duR9u@L`@mT!)-9gj z@j=#4+~vLpWT?Cz(`o6m zRi2P>5lQfE!g>VHNAS#Bz0;=~$=q}!VXdCtJN*&-egwbs_{}p^Y-{G6z17n(hOc7H zo-(6`c6G(ijT*qE&9!(=$Mfd`?;>qRGG89zTq1t_zaf$ACEgE0`u@uFcTWcWXS~;o z_e1mU-)6>lq?Wkf2fZr9jk$T;w~yUOJ!f_S_H#@)eW+ur)a4^L@?OT7rf@Dx)b8@; zSX|d%80KADmbjC5;8&d6O~2eU*t99P1v+Vi)0e9@m9MV+K__?7gDT$ly&Gj*Y3|b@ z^}kk_$9JBwp}z1?St!eTrejTxEa=0UApeiiYy-MWd14!MJ29Jic%M_A=(i(@RoRHH zV?{{a-QmB#iTV4GQ1uz8ZzfW7IqSTE@@zKeLwWLntRd^Xf#Wo%>`*%QuiA$Y*1mME zm9J2ClXjpH@49_AI@Q;_oldlqY`YSw;3q^YeW6y$_31Wuv6E|o4(HR1^dqf&+Ua=Q z+)Pb3|NVd%qucC1f@W1EGpCzH*UqTIg4|P2NQ!PNhC8k{tibG3Mu_`f~5Y2N!~#WzaKc%u?gt zYE^oZ@ZB-Sc!BQ;(4dv)wbM@S!O#T!kY3=H1?iezFsCd)SJv@20lM=2VqNE8=*&D( zR>Biy;EC8F#S_iY+24yYqW*9$JnIL!`$JQ*tZS=bWCz3HtYL1+8f|?ujFS&%r?)){ zJ4)W|wTZMC=UWiB&`#fBWOzps=m;9LXDU6$`X{VTw@t?LZ+V6OIm++z{n!*OgU|Z| zit5LuLp0@ZEUuSgEYB?{wQikHw(DIjd2>l*_B#c8nusbA2yla}Dz=y$?%S zw``oOlYR!`c9wHs=^5IOrEe20z=7?y+nsLA+A=2zOU1D#7g*D z))SBw7>8HjRo%Q8!{<>^CNj&rNN6J{;(1kMYr@py1AlKUa4 z^&;7>`$0JJaRT)xQ2zbk<#X@u%bl|pytBy3&1rFRHO=@tt>k;d?LX4N2KhHK zZYJdBg@-6N59H#ro-4}Dos^sLxRRTP29(@9v?m)AE2P|Pn?P>z{;V?VmTYs$IH&$JCVIgU$fW?FG<;$q;W&ASlA)|0-xy->?r z%1+3>mOr(Qj5duk>Bzn;HpG}LX5OV;w|?f*H7nP4eRAa|_)qQR`?__X^WS4uOiZrO z`2n~K?yL~{_2YNmy6)qvKXvaJUFlmA%HZV}ga>i^w$ zZO1(8&UJUKx)YVGy6cl`*I9vodo1tj zdGkB2`Oum2+UKq8vTpm-9e=TM9h$%6led3jF2huWHCKo$fq47vcdcD}C7vJs)H-Wr z5yV~(m@7#iyKOm3Twu>xF3VXe&c(VLd8>uEo1Hg8p)md;`Y&4YSN1M{<^RsV*#G6f z|MdMADt`4pQxgCG@BjI~CnrIKSBm7CxJX8-VB_Jv3(o~6v;(B>YCMsw8j(DV^mMIA zCZ~$zlSu97h~#pl_2-Q7N*%PWlf6Q``H&DbcsF!@>`%}aOFuK0iKN*&o_`Ak?*5GZ zrLG?P&hur#zat$YS$~a4HqIBx(RrZFHD^B;;-68l$3X*2(`8nl`u6L)L~;lz!m}Wt ShgE-Ec#@Av<;cO zyt;^k8`_mJ!ga~_#>dN-=(0s9GiE6G zy28R=)B;yNVNtdm&qBl!yx49?w)PCJK7~(m6zD@sg5>I?G@aQ&Q$GuBrpfT^rW*DmDBJoz6shZSC3f zAquf0PaSy*!x3B2wW7y7|A4WLy}B>;3g{81E=cUf{mc4(5cmJC?+0-Is=gPeHYD2dyrl%! z^nJ1~F0nk}VjE)HDDNp(O&)Rbil8{j^49?idBW9~szh2z+EE_D^`AnVe1ClWgpL23 zxX(ZE^`Dla4P*7iZwaw1VTg<0nlwy)7beaX!y_f4Pr^<*5KFxI%D&VjadW~g#N9_+ zq~~V9i9Pv8V~Hh4uTPE_-gEq1vG;gbghtSRmn%|RJXhS45}|v*%X?B0>z-6ij(#~sT8ed95bf2(znq#Yz6`#8IYk*8FZ}ZHf>Q?)<^=tLzBqB}=!f_7 zRYyP1q%Z8pq@h?M4>Z0C`b8v`FmWHA#yPw_^>_&F72P-Xa2RRR{bPCISfVf1(c6gR$Sz@#_1{-G%z4tdhzaOc1+z0h*4wVYmQ0xvvv>4iE3RjzU~l4MQ3I5`V^{4dCbcw(v?n^P!TP5z-=Sofz~ zo$PP@2=sh;Z3MQ|f-Z($ayN1uM8Jr~MmPrKbMVw|$Y*q(10Ev~z4b^gH;_IFL<`z`ftv3mm&7o}d+j%!u+Ii1-NUqphP36XJeZjyVzV zTf0(0-M%=5db%IEIL$v3rC3 z2jUF=nK*+vIEm}-@$r*(UMJg$Vy-kkpvG3L8uv(JCaL~ za$J8K5+`fKj-(liC45EVqz&)3`u}c073Pn%Beh27!DkC}qFy`d_vrd#sNbUN6Bp$m zj5?jRy!}kkYGVG2q1Z@i-%!d0*%HwQQ31rj?&Eq6?Grg?PhgT$nT>cP2&X$0>hWKK4l7{ce0bU;-!WdZS9d ze>Fb-5`5Sbj{?7qONf;t7Xg=v_JX0^DMR!pG365eFy%bv#7fpj}Tv=g>= zr+G31_a3W1J_9hNVjy`CZ7|PmwaUCo4VwgA!g^5V3+oQ}3$c;P@BsXUfs}hFKH{ez zMp)7k{_&_g{Op)v^(Rf>V82Z;bg<}74VLb|-4yH<_ z-+X84R`MBj3YC2C327Z19Nvw!1jc1}o76RwQ8TRg=@QLx_=s9p_8l;-ZM0w~Ouz;s z52XANmaWir@Qk_7Ize5>M4ce&tVW$6U{^8K`k@|mDj-`@FBFQC&*O5Z$7Bb_WJmHh zg`67-{#}fTA8nX;=2*Us=PM;XHD;eAzUV-bGWRO#J%!7jcl4(XEngh#UlvlX)Ywyw zC@1@o$GSf(F1MgJ202j zTnU|e7<1r(9J&?$XVY}=NcG{Kc=s_6ZBCBGM*@`1uPfOMX}!N_cpvHx!G^)-=QxL9 zQ{ex>UPH!rp-jq9fHD+<9#%H#e$3bC$mB@8MB$lyjg_ z^=&%mWhZ4%&&|*)W1h6`eNf6rrL?b@pCWs{!VV|=odX_w{DK;ea_P4E;%;kg+#PC+ zqbv~$vu^BJ7w%ybzZ33Mz3+4xCzAp#wwp5GgOV)9mY&-XFYHXs>zNFDezx4sB zUpc4T)W2dN?jMGnaJ)o&{F*5kYdLoC1FU(nJ^BM&tDX9)@>|dz<_GL7E;ryXCr@xb za$b^OMz}r+{@g@)GpuGjFTnGv1a$H@s2@lJ%UrNcCge*{PD2l*q%4QG$3=K2__$p6 zbBD*!ZQFc`hWnCX_=w7%aQ1(@?0>Pd|F%DdzE?tL8T8$UA5FQU%J-oT4GNBLbfgG) zf++J_kN$m7G#~JX9)*p35OM+^2{spU`4u5{NE-d&du2YxDK2$eTIb)Z=+*68cKfvV z=%12_T`9`4Ef)oBSIe#$qTFqV+%?7BVr`tV7D66yKWpF~ef^FtL-db+QUKq`AwwSM z;8MsD+aw(x(SJP4=hJ1S;azfl?hkEG`){-{#LesIk?^AXQcJ)F-yfNA`yf_&EAN_K^!}f|2saM*psi{ez%N;&4))tzYGD6#uZK3>B zTX-sTIPy?Vd1pJHOphn$(#izoD@b|6dJh5rTrG9FDzzqD~c`l8S=Cy0kS zz}`c2&?B0E!z4_si~3>p8y80Un6^@v{-k3`T9<_FNn zvjGeGU-ILgy4gaVNm>@Zh!l3A+!a}o1U(Dj-(1J}VuGKSqTH?9CM|tfd-}kmm);vc zN&m)$c0Ni!32DHJm0Vygo^01Glze?aj*FM=JMhfac%A_sjM)k11wzyT3WjChK-mT1 zn^Sq#0OxdyeWeT)(oSy{Q9mxbEspy{IAXv-K9jFs!@z{QjJzt`*C73fKrEz6X zTGIA=|^;qdq2_;ZiomwpkIhL;R&! z|M&&gGVvIF3~8_YIrged+>bT}k0bBI*NGQ%xxltnuADWcW6segG7moJNzO@U*|;#I zKUV>rm0M=}$&Q`VK!nkZW3u|W!up+ce!p>ly zE!vbpTthNu2;T|mU@F9C+!N2^{aDj;{k|vDw+gJ$D?*G1-LG+|m?QBr?r7Ju>u@~V zEWNI$&Y}K*4WZ1}Qr{^am)Bse!SRVifm_;*e)#!2AglEwz*hc4@NNe1h)91bpD`E- zvp~WK4f7gch$D#geHiWUd^$rzrKTYq*_U!d9%L**h&gJ_P&%q(o)@w{;{z>@7=fT3 zf$Yk4GWh6*OnZw|{F42xcJP`o@Begs%sEbFVfN{M_`}e*R{w~Mp#!c*C_5DtMxQN{ zjDf7?m~vejxgYfuZ;PzOu&?v6=8DPs#I<{pIO!6l&@CcR1Q{_xv61ltA$1XTV=4KC zb$gzcEzXHB+A77xm`un)V9(t_|YhducgnU{JS+0|@l@jT@<)iOv{xUA^j@xB!sT2E>Q`I_r z4`~VGnJM#qA~f=IuEo-E56@5;V_)x%7uxh)h`RYA_Iznb?{Da_DYl-6?ND=u{rlta z{S(6HTao0sv+FP|9xw}AIvoPm#>0esV?3ZDJwJOlW(4*19!z&AVKLuUYg z_9Yn}#h?A-@U53-;18Suyi4=bMZ13n@NOGE7#oS60laZhhX3I+fG>88*Qwz%pkL!R z@?#^zX8`Y>$~7Hm`4eQ$t=n+cG5<)N0*9QQX*<-NA|i%GcsOGlp*zPxZ<)5qrZqH* zb=oNRXklA!;yhhZE21GsJUj@U2mc9pUmdgOa*M;Bgu}|#svF<*i*ly*Z{O8@eH zxIcq)9Qc}`OFXoTA!WDdE8T#85Y`GulH-;unWudy$`kYF={knA-bxQ%A?9W27khnB z3j0(Fn^YNDoU9P}saIfo*{&(&llDgH*>c;)Fb>SMS15W+_hqGACsYD%hK^;1tV5|_ zbO3(e0M>>JWPFjaIRmg~0cJX2y>cy};-aL*u!hH6;CU!~C^dyXAM#!K%cZ^-8YlbG zDfzWqt@-7eZ2-On*V)^WLEQVK@4Qml4))_~jA6StHwRMgG@h8mgLTQsbPe|vz{%KX z_!#jfNHf>Ww7(Yvz8z!r=J@!Di*Uceui^wQ>y^|Ty|*F6E2&`P?$lbAaa|=|O*Qyc ze8`J6r;p(RjGlDY4EV1s6dr>|fbtf5j!+Zq)VJf!u?7PLPIHcj54!4fpyax0_(1J z(Alni0s4w(%XQ08YDI{9KyrP!N39`BM$8D-++06tAB+35rdlWOp}nQ;M_vimt?rrd zkwl1l&9TI70dbOJUiqXDhcI_$AhmGGHDLHviDzbbF>vmY{$(Y`it7(ktYIAb$(fCd zlb!K>sQ~!e4xiO4-W(I5M^oWhuR*4s9Tnk+;3wTH>1W)!5VqVMMp+nT#3{?9B%w!e+*rqE!j zMf&L5ls^Z*e2vs2^-^C1G3EjAY)M3|u{hs2H+E6x<^0&4@~9YBfO1G#8kA)Z$~h;j z=YZ=$DPyFCysOmwJEZjx$Gp;jyiL>N&G=mBcD=thlyVI*Zd9MRiTfN?daOgQNLlbf z7FM9`Q;>sG?1zqXg|r-;CIiu!oBes(mI2B(aC^gE`=mEV4re-LvGe&9+hE;7xo@U;hI5R{!5UpE$t1z(6$0b5l!` z+qf_J`~k*J-SFE>4Do5|;}Z1C?GE2hngip*!Q@P-BZfx{!@;D>dTq>wKFD_B%adG# z*tFUDQ`%kF)t%0DbUX&#QJ1K|Sod&ThIgk5phM&y0%J0A9}fMA(|`Rm*M8+u%1-?G zR7l%GLwo_UQD2hJ^*76`UFp3;8;4t-J5cM%vh)}|Cvj9@eSH+;bQo6%_ec6Ou@y;^ zW!w6Ctb;_Lg>4M)O7H!ww$vFRHTUhkL&`PVIFy>Jaj?GB@eUeIxhL(QQP&||q=$4> zXqrM#XJqLats`u@WDJpObB$-OE_cS2DU;A0a{b(lHFtE9w4aHMg=(#h`4#BJeJif- zLhi4T`%AHrKEFyABV9xt1HZv*&m%c!RG)1g(_f0peU}GQ8QLC9(?*#%i2l5b{yc+p zzpZPvjjyDhxV<(8ha1j&?hxzjlK8RbFwjR;YMj$f`{;#^$E{ zK$k)H-t8ZbN&g}u^;b;BX6?P;Am%@O-0uWKeR1!wEW_M+6Ta{KB<-Ogy5xC5A#RXk z@8P~a%5Z-+{1%MI8}{CT&8MJ@t;9ykJ4xfwQSL)mqTf;U_blm?E>6w} zEl&Ov^f2yE*{cjQM*Yg@xaCe(hVxTbs_`kG5kY?EK$7w29w|Gor2HYZw|{}86@9mU zCC8JrR+86I_HAXN47P{*W+vJSMHYhJD@JBE=BI3)REnu7uN6z&4?1Rsrb>A^>Y?AV zLfXGdYii05-gEr6Kv(d&49|>tS2Es;HpVa}Gjiy1Pe7NF^JjT}^~6@-O7jeJ=Gb(l zcZL<;64I7qUdr-@N4X`V(EJbo-4nGkLL@*)T%m4(8z83AnNe=yzVVfcbP# zoLr2nUh?oo>F2t`FQ#I}`%;lvm}`(3o)?hoJd5WBUc?&U#ne$l#o1k0=Y~<|X3D?9 zG4=zLwG?yQUQWrg4B+qI8XPysz4f2zar>&l_0d3byGxursPAE{PJUbCeg`=Jf%#gG zLTQ%&#txWGu@4j)7zhGDR8mL5|MSwv_v-F~{79VQ$Ps{d0Im z2Cz>+wu2h>><@tDd78%|-#m9rJMjeM9+Uf|2t|{W)fk>1M?Lc9U;k_TB=2L8_3iL^ zNK;Ify&`cL)^^vi@$o=R?gc6ThkFJUMcMtmd4m3~LVw>4Wy39>0B(t)^d*zf4~e%%>O9x~$d^ zc73+Q~t z(Whs0pIUXFh5>u8hHWIQAnZ{E3th|g?@e<3d&9_8C?Do{sdZLhFWQyQ5$gLDi6Wlw z0YB{aOzYV(yUp8`J}YN_*yet`m;u&i@JOe--r)<-k2Y0o*>o#d6^GOaS+QJQp*NJcParphxKw6o&8 zjQ?fk_-2GTEb={vqf@0XMcsh4GV@Yj6XN6-K>IzDluyRG&DtkCfHmk^xmUDZ`jhp* z-3`CjtNU?2XdD8}5Z9rA`AU%SE9%nN$T=t@os%@ZuX~6;KGK5n7QJpIeLVY5_)jB$ z9bj%0N*8k;FTON3as)bgMNZx~khctZM}^X_N5SJ`;Mwqdif8Z-0!JNl?5Lh&#aiC^ zyg>UQ$H2qY9z{3rqqu(}M+clU!FZodxyXSlodAw|ysv9IUk9CUg3bpuom@XO=HPHo zfWwX*6f;hT_2#NSjGufHw0_6Uy-nqJQ1?8;6uxcgfDmtT4-)>|0i@JT2f4?rbuW2% zp_l9DSYp8+#^rw8DMzfbG@|3MfSuw|XP9OKj%x(!JsYmZvG1hU%TN9X{P;@NN1gBe zeq7f5j+SMf<3wBE#CSgz(y`adJs-UP%jfyv)e%#iWE^n4J99pT<=lH;ZTnx+cX&3v zPn+={-qilXn~WjBe|Q$_w^+jS2X)rg*5fwL8u)xQa!gc=Sj7$0do7H;Ridm?uBW!i zwkmSg-#f8RAHY?OD~QQ8i1b*0WWoWUY@hT;N_1?R`=6^j zF;0DwPYHJg&ktd&5}5bH{mE@yuUO~BSqE#MZ>W8vXp(0Mc@Ci}rW_p5YZuQMtX)1T_3Mr#ed(QSr}2dpW91_9 z!q~YetB`&G`F3=43D4h$WE@GJ!yymy3LcW)0T79F;`vcF^INDjLV^|i~-17bi~-4=is;x1m2H~$r#}PmMc4w)(600%{uZE z4d-{j>V?=;(3FNKQYGdU<%XFl2zgZ_4+FONx?e|}uemv=Njd4Aotai^TT03B$uY_)Uf%dN~mKaBWp5uL~y8j;c`68yYsRzfEEp?6?btq#u z)Bz&17Zcz!`)AMD!jzLEtyPHH*jT<;Nw z(N>w(?@w!ax1h7XrrUJOcS@$JxuwrsasK4WfGy)3k22K1O3LsGscXxi^W$2k?frtE zyszk#@vU?WWH{v#r(S}cI?;)Ho}r|D3ZT6Tq*X{S zl=}upQx}7Nue5nbQ&n0A`={AL%Vt7;o=UXGGPywA>}n@iL}jzl)GB&n*()y*d^e)@NhgI=;sDIK?ML zbmvtf`Y^6zxa65JORZh#&qqN6{U(mzXMu+_lv7U8hsAmoWRLp{Il}I`5QcbmeC(Bp8z?o*B3*<$GdEZfn4c`5YV0H?)2C`)a;b>*s%Qt8s!~ z7Wk~}^9!S$k~c4m*63L95bFT;pODrtJ`rUsU!U#8c<)3$(>fVHzBv`u<3?DX(e>;3 zZ0`+dK8<`1a5K=xP6xbS!&m0O(>`wk9R0Yh4)_q@^QDYUP4C|jJ_Pu+fC~e@(=qQ~ z`LBs(s?(tdsZ+vsOsY}(5Rz~9_;T&}*Y0dTE9hL?8TZR`nQ!)IpT9|$7i~YSoVu|L zFtmMT8jj~>)Lzy7(jM?7*YsIWz~;h*07qXX7nbi>l<9R;*|79`N9^}MOZ9t|PWVo} zk8JNC0tq4tYkvh^9i17Ppz$?p`Cuf zEKCeX21d+N7bI$peW{oIYTaKMviCY4l>1i89M2)Nv8<2%$2fH|mUu&A3g)~2EBjLK zqVGQIl`+J7Qhj=nKwruQNhPLJc+jO>h$_nAqaHSk1t#)*5pkLO@+pq}`S z#OI)a>*N{5ua0>|2FFg+EwubezNh5O&%BrQVCn*~IK_7bF4Ft47wGf7KCQpuhXrc% zn!Ofdr^Zr^btTraPx6e9MV{p)hpp#%1`gwS0p9~VF-m>@l=|?=ky_Xg?)T)J3y||G z!gXH8FXQ~AZZSeXlD@`{9KVfgUFV+qTrJx+F2a>X)tMfj)(5J;d>=@a8{)-L;`*(| zWy?~5z~Ai zP~R|lgJ*(fTD%5R5&7MW!IXvPYCKoV?`{mHYVbT4&unY1#cyy7Ciy-}3+ssO@@%#t z>gZ=aDc^^T>~O>|IWG6gGuy92UoGI-Dcrw?d!Dxv;tqLEBCKsK<6hk3wa>5HYYiD= zLp=jLr7+7(=TGt9Vj1?yGgaeD^@-&$MGkI>y8p zU;JtjWo+-6YebZL+kFc~lzZDP$fw>})0T;8RXg_XojS{_{m?7H%TmCU>i98qyQkFJ z?vd;10VVIpbM#om+LhL))ICnUm!+#G;6ZMlJ$Hh7AASbWlcD=zHSl^9=fi zTrbFTx%pD(gwfuoG#(qr)w&*eu;4e+e;$!@+fuYv>KN8CXFcstIqkPv*GESLd|$rb zRCXQY;#&B=xDMgUeaC=t9+mg3e4c!+Fa6D<+^ZC@1+LhLtGq864iACuD*1hyDTTgY z>?!=l4_hYE{+5%$XOD4Z4tw);Xq{R#9XimMS<&vmLV_PY~Bx*x%i>cQpmGl_d^iWohVy+z3G4dnBcKmlRbqMo9?(Orep!CUhr_5m$f8%?|W}JDC%5!*F zGwgATB6)7sEkg7Q%k6W|)KAolB7ASENUpo~%K6GVhOT4iI)7&!jsKnXY@9GI>B9`B zXshH}Po9~4RQopf%Cj@1nd*s&^4LzNj)6P zCj0%Ye;&8jLj$P_$Jt$%ey^PQzZxGu5z@GF+qBpG+3%{_XV)2Tc>eTntV~eHnQw;r zvf_F6eg$J{hK_@9f0O66x&GfP`*2M533fd2oFl$?)8-0?-{sq)*-ur!-=O_w_!mi`NZIH8&@tK?#BkTZ*Jovp4}gS%l#p^ z%s&y=htcKvZ^Y&MBe=q_=i_tT$?)8MHD@aEJj0cA@g1{Ze`2D&NUo(zVSk5o42yBS zkeHe}!Dl~k`ZMv$v`kvrI>>omm)~d;!abBbSAH=*o_L_IO#iKON6E^*fEckAVkI=ylAQ;wt?BT#x7Aa>kV9+C}ayy*Bz|?jt+aJipUA zbfP*=IL1qybq(>tXl{My`@sL?5vR???;~&AVZ%RYP4q!~&>!|p-+DYGlBGG{RdA=* zr;1NyD9_Eac}7{8slVYReej6#8B7Nre)|BHS?WCE!kY1fU7tS5Ct=Ip#`^U=$kwT- z!u9h;6`wOi{}|t;;`a*qKGo~PYR!9yd$*zfB;)G+v*`EoJZd(qu$Cu(gSAnS_7`HH z(^6;2M@q3)+imeZ@EvarA%BSLg76OL(;afH&U4pcJoB4VeYmf%)HkN=Z@iU-9+2;= zw6pJ6=lHRn;#udG@IL)s^|sU+i|dkY{O&_)2Clih#E#?>@Td80vqAlBs+r5-6M`QR zq?AYM@Gzd^Q4uXg-tIaP9Yp##($|p&kuJg2f@>?T%5|CblF)G%xmTz5CC1$PeQSFT z5aze?TyE|>jgFM*v8)LXO%Bl~)O{Y*xLWj9>hwA9k%!7oM+3`S@2_0e;L->(zp4&)}MSTCk?-YS1Klj-BVqaNeO?B*REK0h=Z;a*9x9N)+OXOMMm&W8? zL*F8~=XjjoY!GjZ@%c+qSFa}Dp0r~@(%w6G#r_+^)NA+1SfvXz20`OfIDztqxj7+RCz4iu=XNK}qZ^(U@X!0yWlt1p?m)bNwE@OtbA$=InpFzs^ zMAsml$(XpYYpjbh6d90bu`w^+=mA_K_YDlJUm`zBov-$8Yc|E9M6lm{}*{D z#eEA4Fha@(WW=hKd(9Y=yM0x6#{2p048U2P3zAltWp#|3?P*tMy31L{dm|KceuVNpE%n3`OPBw?*H(05Z9KQu-?A$&&RR*rqlDn6Xg9*w{M?0o+r;lOmKzUW~B~FkUirPl{)G_F+?l z$oN|4bxFRP#yR&zwBan{J~?$d_wn9?UMjs+M9Xkh;Htz`b1TQ{Sc?0ZwvLx;OMNbi zHY@;qzL?U_<+`0#z%$>7U6*dBM2^i3BQxchi))I{jl|p{x+}G^T74_x5)pG(iCD=h zwgq2}KFaw*?W0j|@_w1-)%Apt-z5Bzr0F;BXWp?Z)c#qi-dm@x4u-#k@%>Ut?g@q= z2goZ$9`^>rcrL?p1)h1fstnIzJXhkm)S}Gfr?{W`-211m({}z>cAlHxSW)K^=)3M= zY$i{A^C!W$p=~$qXCriE)V7<_FBn$mJ&fvY33p9D`XbNK?=h{xQTqzX?~x3S7AhTf zw>)d0^VmM*;%>@)It~zee$@V6c{Z&PY5z?f8>0+#eo92`Ym2@D+DCEe)RW`0IQQ~u zh1#2Q#?a+EW_tbc{<|4|IoI81qx_dF!~CpVs(cv}H1T_a)~7{uF0NW!QCzEWHR5W= zwFTEsTzhft$8`kP&vBJCh-d`YB3$81$!k|~0nhtf%J{H25xYd?U8V2Y_ZZ6NP)5V? z#9!k63c_o+>h%42Nj~$tQQq@J(&eh-d6p6*9CKe}=bcx_?}wCp49|Jz33awrzmJ#) zcy~BfMEG-cx#7x`yNpcvSuCHW-f_)y)t9J#oR_p=<=hUtiuvASP{SH7%uhqX=D@i~ zlS{_-V)ETo@|wP7?l}_1&eQ%Fpfe&khGdXmq()q87&K~FMl#uD2B(`X@| z=g+jgd_X@ zVVRu+$-+6FWMQCwqz+{VX6;KI0KD7s$nU^i&;1EM`iu4X)$gjfxyzi)d0g%ZVBL;O z#wKO_NSqjt0M}ek^0CWeiJk?q#5tGaehzu6=$p;?3YvnrN^w=-s>C%D*CJf)xc28< zL%1Hs6~pxeF0<1cr+k^6AB~?+x$A6+PnXZ@;?rb$N1XCSo}LYwV+AS>ZCZE4MQ4A! zOqUfq%Dh&K{2m`{Pm$5Nz*VSW^0Ml$%YyN$w&eaMzp*RdY3zJ4A-^Ho8Bh3xI_uUl z4eJ=qPeZOr29nG-ypv_j&*ne(G7A@Zl9k}~$=}je^(71a@ar05MefF!VSw*bs6UbN zoe-C2vb2jH@OL^ceuGY)7uC<+#^yNBixQ4{*B-C=9529fyzIOy>8CdGn}iR_vwp6g z$w~RWU(ompXmsUG9yv-{HGR)dK%Z||`Q|)-?ech%?vN+Ge3r6r#_(V<_dg4u59EF! z&k!`-5lZrmVdK@wIP4wwqrRoz+xmO7HD3L~h`R`U1^u6NZ-d{^SL_%3>e)d2lw3!u zv-hF#OTpIfVaN&%_&~1l@yy!ZD2pX{rf%9fJg=d@V@nyf?!bDhAAXqnZY_1;U^Db< z%ZFdj0OseoDsk@u-oxnYdEkfJa>cJP)i?CEKvrT#Eb+PDs`Dk3RaXt>fay;19slWz zVu{;zKf`=K+cJ~=g5QEE9qG%D7sYVp={hcV$;fo{0pni24P(l=L|7xgXrwOySX?H? z!427Ff2a$uni?M=ZAOhNJ{|2D?&6U?6R^1c&iYZpu-x%}(U&lJrZ>!b+ehqo=!Lj* z+}4M--CFcpHNQC@7XFs&mykT~L%nn$bTsi8WM`+PVqW|U?cfp0yVz7RflqKvI6gmGS=w&yJMJdW`QH;X@+_#4CvzfIlFfN4w8Sov7me zyHjQIynjE|i0Yeep#dTIpEkbx-SP3mNcnv<+a{~;y5l}%@53s8oclwZCwzDHK=>8# z>DiG3;pgSNF0=O+cwSeZ%@>Y#4(IMId`R5O=IgKC89y16v_!dQR$}lQV~kOiW!}NJ zVaMLdjKSzTY7AVFfnqZ<;F2)l+y8ne`)urhKA+L2V_G8gfQpaFvxdv5i}=ocVy;l% zwiEijNVf6AcQWH_SOYSC#r^jK*0IFX)(eRP;X_jI@yvmG*O%X-<#$T?Et=TKPv2GV zFn#r16?ftJf}?sooMX|VzgyHO&lc>}yxk`E8;bN^oma+M22&Brff&Y^98EkOK9V?K z4J#T@rf3)f4TJLABW(MhGz~ko-}ON>wA=d&`a1!Je$QWiJBfHh+?RTGgyST?odP+b zZ~3(KiljmMpo~3ICemj)Vg-I~60Rth@{S@8PP@-ve~U zQrJhr-~T&xW{&rF|1LYePC2Up?uWyfcRq$3-|X;Ew$bi`<&f>-SWyLh^-_IaERh!* z`L@CL$0A973y}K?eAkp`qFAo_wJnve_wq#ao)o`hKshiY_sDOV_^o?npQt06v3{NV zJGD=G4N~Se|4yGPMgRECLlc)D*W2jx>$u)tFQU#^xP3lNtqn@_*|huR*+r}&0)DOM z)VKW9cMa2e1+>?OGw0>>xyW*^KMZ+ZM1SWGcG#9V!-u<+L2B}`g4J2(HAm@zdXvhMEdxDL(KTasqee=_bdDU>9{j~#_xLZ`_TOM z?@XTWXsl0u5Bv&<8xr%mZ|}c>e$IvCSU>wktRFabNnhT)f!}4E9ul$3A|?A$v%<9N zFOTtCTVc`7Z{P>c>SSDQD%P}($tw7y<+1)mQAow=d=JMG7d))a`+jVvJXf0dtV{i` z73T4o@7T~^c*N_96VEi*WOGqJY=ZnhMi(0JU3`(<@a@Ef%)|36Uu3{CBWvTP#<9kw zzTIIzzlZtzh*0wl^my8-ot%~|D|IHZXHXft$d5R zo4f;$_^sPN#;3C4)A_`8l4a$?684C?JCT+gWsf#75;KSKGBmc-Nn|Jy=ZeqIT zoBjN}$nfpLKZ9q5IXrtx^DL0VFOP#?E(gDS(H)kztuNt;t&Lla6OZ*fM)p`gDE`mK zI$>nfz3tB&>x~$tJ34leev9J_RDWY zO-*^lP5chleTQ;!~A`vGVZxvCF{}mYXDUJP!50itBf}dXandi+=<6a%k zPvxOJW@Kc6&k^vTn(u4(#S#y@CXk1|MM6U=<}s|J zbXoS))Z|44XovPPcgzyB@9=cvEWwa=z#9ennm zpto(E?S`(l_4Z>9y*=Hbw;#j3Q)hGkg7FSp7q=J_>tgOhaleS)r>TK1wuToctI;3P zS)Y7Jeg|7;xcTE3mK%{s?KMz;CfqjC6i zuo#}=(7pwi>{5= zMDtT}{$uSA9UI`g8goI%WpiVRMcm7P{;9>7{{_a+51Y?#=q-Zm)%NAfITRGdZ&42K z;P{@Qom-u&|Mb`w$?uL$P5H#?gcmvx_2zho>*Kz@!*Pytwf-hdJLv??i^AD-a4(Yk zA&px^bgu3P;V8!u;E$mG<&fpGw)Q8cv_p25#}c!uVu|9JxM!?=5cU&#(`WMzeC1v* zby}Us)|6&7WwT)OES?^w=3eT}U{LAJ!-Gn19^N1Ki#1Yj)=Z!``TZaTR2Rye+Hhmoif`7)x+ms)whh$0jHSk6Zi}qS$rZ*0&$k z`j)yAy07Yg+DAs4#s~Sxwk|eAMi(>h(w5fEm$o&vw`^!y&wpwspL=?4v!DH8znB!z z`3|`Ay8}W$Hgvc4G&FZ?TDJiu^_{(48#;Qs!`E)=Y3=Ij?d+L0ZCd!^@aER$o{p|L z;qzN&hFh9?nsB!zz)wI{&AP1m!s?t$cq{Unh1kl@8!nd{KU4oaIX~|o`T712fByfMfB)C_U#Rn||2JLY|Ns4e z{`X8CRCvCKwgpAhEW{cQ&n-w7h2S0F>MTNvD_kt1M{pf15z**m5q$>N+$kcu8rPO7 z8CfZX*L8fm5br%AM6po+yPQA&|3F{DIvu`DL_^it@;g4x-Ji^_abBjJ@0U4$M{7m2 zY@vu&ED+IC^TC^iXFeB#n-%Qq;6YgPWk$a$d%IUeM{${a7X-ZAkBk4SR@MXG`__nP zrQrXR=g&<4Z+HG?`aqB4d4+^q;LC;MZxGia!1w59tRuuhJhM*7uhJHsKBH6nr`mtN zC>Jm3D|I~gNVvPs&4r`<@PFA;uC`$CDO)v2DPMchG0IpY+ebP|Iw4~;x|Fq}NGWd? zpON+vA9&R6z`sPc`}W6k+a*84NcZcMvU-aBhP>`Z`;^%>(luGNXa8y?zMHPe#TUZZ zg@hVI@_nvODeuHjnV;c+ZS1PV2||FXZAqRHo?WuTiJ94!Rbd z4LyPM_}Oaw%F0!`s9g1%zjtwMEmwTCf7Pe|JOQ`Woq_S6lffhVZ?N7Kf0bKr z?m23F)@b-4q-&7={2aya8RsgwjD=NyDyKo;;d$qIB05C6r=uTuex_2D&pltw$ws6t zQdoKswps%_{ z@x}g`lCR~5a{1a>laW)>vA0I`=TMEJV-zXnVa9BgAJyrW*@~XmXDhgOXDhjwF-Ot6 zb&i@Jhml4!ezxQP1je8I{Dgvk`V$KOyGU!0T5~h=&#u?0Q^K#FtLFRgT!lY)rJDCG zNS{C-gP(+tgS0e)azojJ)A{hDALsI6?>yCygF1b4o}w=}U-74AzItv$x)bRsoljfx zw4rPZ$AR{RazNX{`N(&TIWBzHnEmFv$mH|eS1Uc6CIavodSRVbFUjbgn$!3&|LuwN499iRl8j!k>o3x& zEyv{RktJ##om!&bDY#zsn?I(jug};wrag{w%KxCFoP2-cdL=K%ZMdZ>EnAw=6QpO! zQZ;Y+`%~^gB0o>M3RK=7Alj^MQ2zd}%iQ{$*;Mqsx^1?bYdVo$|-D zI;x)gqH0|BN3-?ZUfJ$_g}Lpj|e^4aj$;0th#YetNLmCdRQ}b=fdX*ksujZBgQ~u1ot+{k^Kb!iH z-!LG52iugMSiM2v-@PHjFa9bdo@1Rhp2MFJ(YMXq^4mUZm#^qVe@-js??tZ=ZuGeM zw)G9&JxyK88@XNB{_8&mWSC2qZ|G>)uxUe&xX_(`Ztv*0rMFXjJ(F{5*M^=};WN`2 zU9C+mqA~NlJ`>|QlF4;OzVN$I*p6<&Bq6>E0voPbvTXjmB@LHcdr9?d%d#$MxV59} zmRSw0&CT)xj^>Vy8#^{NH1~FOwQlNZ=3N#yf|?H%7TMTlQc zb`a6Ep{c#0xv9N#hTti*fbz+(t+{u%{vDy%tOr z;@9OO9p~H7p=QxRVf&?Ag1v&IbxU(=XU_(7qpfLEOM7dVcv6oJ>Vo~7J8o$uqq=*# zdKm}o7QZ$m-iD^G<~ESGuBo@Zr(r{Pmssjj1si~-p{I@G(9qOO++rt+)*|DUPVlEk z{3RY68e~R8M`v?KORM-dUAet`?S@S)ty{!7Zk4go&fxD~gze{!mp}_?N@N$M95ghy zHFas$iL0H(k{Vs`n6p4i*so3lB_dJjny>+}Qs+1KbhS6L?+VM7+-&h1ugd9e+T7X# zARSnxS|SZpV7I^?H$dx$Sm|?!{=JXcveAID}-7s zFtYP78Mf-IYwMP$NBM_3FGJJDrtVvW%axnmyGa&&;Ig4)#G-Lw{!<}audpT~1&`??$! zU4p6&Qjqxjnaf@d@XOK%IGY=KI@%ya6)0g$n)mNZDQs#{gAIU&PV@;ZywlBs&fXsV zJZSQHW9!CQtoB6@pKvz|IfBPq*q@fxwY}>bdb*lAy9JN@N{AI5*FxIwm5=EDijGC7 z-{+I1avU1c(@%WcrzmSsp=*rX`VHOSShx6w5y}JwY%G9+QpBZ@GTh2uJ+bVln?P9L|HbV)O%O!I?)EXRZo!G<~H%a zd`|Q$I&bOGz#Ce`B3qKBO@`T2C1RJIPiRNJ5pd+&7Nvc|=2o%ISpt4iv{aq^d`Ag# zRdzerAu56s6>ZqGu0#BzT_m+;cXL~7OE1-=hk{Rmhd#4O5S4c3`qoXYT^N6z&)-!p zd!^W3q1N*3t34j#-@ts%p>#%>OJ-!I#qBOxC6n=Omo5Bjn|fOsx@b9`^JQ#wwk!(% z&q2x|raeSfDWvIsH6s^kohce5kTMv1{Av6d3;n7F*x0eT)tO(ICoOmHhW3_*9$Vx5 zB+qV=J_4s!a}ziy2Bmu9o}te8R=&cDVdV7eZd%tWf3W zO50tL4M!KMqh0E?=58^wB1=W3tulXax$HIeIMnkOUD_keSXPc}C)7L0Z>X)W>lT0O z;_%w#C=t7~f85fwS-K~bYVrM?%-&5h`z=Ryiw&D+W@l>HiyYY-dwXCpr1gF1wCt8v z@VDbO@ycl>5>JIEH@m0nHd*qS(@J#HkDpf1)e7y}-70?OC;^*W6ixNsoLrlv!Q6sd zn*jb?ZmynAzt7EI+ttz3(%b}f@^PPopPAu-KwyR*pRlk6B%|;`|3rmNJw2Eu(!rUi zrYt-%VWITU^71As((c=$2@9Pr+~9-|88`0agyqVOn;pmqJGux3-R1CXUW6D^hHP8c z+|kSWQrQ1f*nyNNbi@B6l%CQGHEnstKblzu>HJ?Kzh&)uJG;55vuW*ycDNp`-NN#y zGKW36)8hn}HX+~Z%#ya?vpOqnAuy}OFLh?OGjpR)XQu51|6@=0txcVm%@R}mx$R?R zBs<+E>?qEwrC8IO+CN_BSdip-vNIivkDi>O%yQ*mrbHs)Z>g{&GUpenI7@nM*R7S; zTaL_LERl5fMfT#yvBcx=m%@(KB(b9X8KW0D6i#;OJW0jHt}FfI>bb!X)>>u09U+T4i-de(_zpU%+FAMxwwmfnq>Fk$P&jsC1gK=u#kDeOZUgnRSF zpwY|O9#*vi-CRkcBg_MTlLf518_*sY0KRdU09nP}G=i$jh5605BtTn7S5G#HE}xBtU{8l! zX)sypNn?TSF#mx>+wjczRu-j~R}1sobuOC~r}M*~Zj7Mcxjh?HLZ}869}Z@)OY4k| zKA)z*&N-9=#BRKp4aKbQ=YWy=A7q0u>!lnp(s_hk%78KJpKrIbntD1mZfF+fvFk8H zgB+*8f*Y@Cn73lt_17*C=4;HBIX5h;s}<%OA93mD`8TduD9nF<&~TKK&^LeV%ppxb zN!MWxoBwIV&Y4$RTeq;jUYPNZII~n^3Fb{&3uU^*(_GLZJga!`nl1{~bqdc7EOkwv zSr?6>QlL&_3QwcTs4dt? z*e3O~NEB{DyL<=*L|_r@T0J9=b?Ie^r}?K~Q$7{kXS5Z>l-!F-g-_Tu3q?SSp>d_` zEAd>rtf6ksCfrG}Nz{hXL^2Dsky` zSvsHrL9F4NF8+o`F2pu9ZG`V;`sb9?SwfW5RSBb{ZkBMB)LkarC3P5*lDdxzPf6Y7 z!dp^zh47Ws)nE}n?3dqM#(YKopi-ZHZ9H)m5UX zW_=bC0AcArj%TLg*Xcc>P1-z{+ulWHbtcK+NmJ1vpGQX7BGU)N`suYgc{W~-CqEmxxS}O z-3NaG&Dr7zEyl*#2koEX` zmQnU~FKvw9C|NLX!J>r?OP4K+f}84L;nI2Ymn;-^S?#s;^4X=IuU@jUevxpCe7Rt zf0lFXC6V5tp^wL4igBg!l2AXMwK8sYZ-Ug$R}Q02m`e3} zJSKPkyg#A2O`BI%@UfSMb0f^S(V($BC=I4x=iNjwkNenmm|HyF{5{rMAxv#=zo&hs zme$QZO=}y_$*$W(g=<-WaxGlZSEQ(kKuaqeQ<=3~WtjmTmFO0(y0fHy@dsp+uKLU5 zV=$n%<6NuO$&63{zV>F}x}jY@mIid}*|mC;%qW9^TA(MN=t8cA0kwJOn*AM@B0{dx zTyx)WDFPf@cdp2|Cc&|D=c=uAOG1G61s>zzT0;)TB;M)PJSH_yu%2c7GpW&~0Vcg7 zeX#{#&%&;*r5$oKSl}^d<8Og!PUL9>znsRzyGi@_=dambf$1^-3O9uwb3aeFIW4-+ zWA>AbH?k|Yrz?BRVU~|)m+#L7;yV{Xb~_hnp99E)^3dP7GvcEM%IJ}`_&cUWl|ycH zO95TsRwIsQS$7rXsh0xex^IoYJM+-!?}CyxHcOU9{lw8AW&2hsI`_ck^+h_46b2jcx1#D8leKH@;^kU!&DiJqvR$wogc(SO=~ODjC-;r$A|Y-?DyRj1k- zmTlFut>ve%t;pd?|0@BqJ?Ww>Px_Pu zn8=eZa(dEddDCFZlP=2gq)Bv<)057kRC>}kdToA8|Px{LqN4fN*f9lMUo^-lS+LOM<&dGSvmCh{fNvpiHM)oXA_YRXp@0#`qZ-jG8 z^`@nz3%0!lxxV!;`*dy^($_Z0uk&D>I-rDZWA27Zn;XibX5MGgc^pgT+>&nm+WIUfWAcNYz&y&}%e5$%5 z94>rYSwH`*JeYOgT>%-S_T8z$0}@L3cCr|j68iRazXOSkR0IC5Um`beI4@@pK~(te z59pPIZx<;fPMbZ#xBCjeGQbS5_#PO}Qb%gJsmwn3eZ))Ar(;y)p zIg+QWKZCwf{Dg1MJtF_U0?3lf@-h=t)8~sZbMl2cu1w~`;`Fw|dp3Rl zI7O~6khf^w(%K~pYlV@{Suk(O5{?3V#3JqWKx}$s+!?B2;S2V7I^7|b+(=L1tPN;z zK|r1jJG-HwcHycO^X4}+2-l}Rg-pZ9jNK4Y}IPDAS*`~b9< zPl#4xaQk}NHW1`-LxyPmCS&1w@~_|A$4CHg1BA^#hvxIY=>V89mo_{s?Rb!mD0#xH z3S5)EkUl(FAnk|YD$E#a*XAqeg*ps%p*Ga6Czq#7a_n(Pn`>8@(My<|;=+uHb{}{! z3qYIb!nBEYf8$#O$Trbw1W^3$Z@w-8CNj}B8iGANo&i%PI*kR!!u<~<)P`rqw=RYI zS)jY@u+;8vFLK-6p2$+$I0*Wk?rczHsSDGV+I^6X6gn-n`}s5>cFv(3Aok|PY$#@Z zKL?DR_(3)pvtG&pBb`SUxt(Cl`sZ#tOIvF9u?W1y7jZP z)b4-Z;c}Fd&^KRn=8&eJr0Zx)?f&WIc8+bS-SMC^OEs2Id6~7-vUKm9mf90}4@4H5 zg*mp`yMEZz;2Epl_P(9xu+`oTK^t+}R(n5_&eOKqdrP``Wvjg#d*PLo+=V}c^>8@k z9|fdLwYPH*gE~)noB$3er$zQ|eGy=;TOB*Xc9H4bI$0WY@8>U35un0L8Z6=c9BWLu z7&RP<)w@+G*2@4=w}5{IaYD!4&cxHtAj^~+@K@s4ngx0L>5!XqAhTeo-AF{9{OdRG z;^&Tdo9>?W6})#nP7~eY*tgate(znArTgK%Q+IB%azDH~Z|N>3R>>|@2{r-pKEuS*>0=jaee6P&gmyrF=5)yB9LOvfc92Bm$-jPcGylH;Z*9e( z-3xDQh_>)8|7m`aH#S-OMc!Rkc~oc9evx3}>O&{YUlZo|=`hYVUkY%9$(KC&*KZ1bIa3ZxZ*Zb`r0>SbG7{yBvYdmGjz{{I zt1NSJIv(k(ds`2Sj7R$FzZ_I^PlvgDtDXz0*(c+Xz8l^%)y&iJNZ;z^Djw-h$!BXJ?cG9wTr+w;~B4pmQeosDQx`d4`^JS5Xfp=<5ndfOhR_e4<+GB zP6obeu3z*}99m;=rSOc3`te+=FmC4dn6Xlr*BEJFmTYQm7h7F5o^^17h3oe38gkxv zGB1<3zOY`!(LETO1{InA;zkuk_t+8iz77@2_o&GJwttq7VNVCoLol-F+Wwl%ssx12 z=~p>X;WgO-^Sc?sBr&C~*`Chco@U|ttB{Hh9_2)OlZ5c_B2*12sPOuEG`dI2q`=N&yMamW}%0hAX17Oix$yW}P+v zkWaNK52rG}tM#+Ob)M;v!$S7#((K67 z8%e&~A}r2R?V@>t-J61t?r8QJKa0qQ=Jh$wqm-sDze<4*Ki_0Y62&S&=L9d z1lX|GB=USR-85$h;ZrPKd3{6u!n$j**q=XdWo^U9En!TQf5pdzYoh$BDoeO0EV!(? z;p4)bun3KKCMuX^!IPh;;4&2WCMvib1^x-!Ag;U#OKMOOn6UY3l;ls?KHCXSR8mcB zlP2UCDJYnzWHzxCPDoodNeE3?G@JN}CZw*0wTdSk&MVkf$;2b~abhf;kQ0|#L^)aH z-!4UEbq-Mdie*u(KXN5SWjCBIDzab}H`Y0kO|v1VJUXxL+7&l8EM2yAAy%vtmMvVh zaOr6c>au0EwWl?yi>{wnxA-&x)n)b3c?%W__-DH$QEfR;T~{5HNvkZYI?JD5>=>CaE%Q2nP0)fq(kYP0#0LOe-k-{Z!w$GT@_J@ z6fm#gmp%#fh@A4b%fBzN0!@;mg2wd+7STKz%&;5g8Q#Kq*%kPRBHB%_ITH^dPhQ&o z=}pet4d&Tj({XIzZRN7Zh`Qy;8)Iu}US>0L>r_6hDuNgAg#)-PR_6bU()_P3mX_7% zqpdY=DrOu|7~81fjFrU_+4g^6{Tqt8;6yLjZzEbPEw(Z61D35QmfN;FNSkq^$aC&{ z`%SM|&S<>Xl#+13KJK06rhAroq)+aN{%fAn$Z0p-vs`7Fp0u0psjF6Qx^gZ&_0fQB zXQZ3%S+zN!jEr~fA_7SPKCVpnp3oGraWo*l|hOS9To|DLR3e-_Fi%-_ut=I?HF?5uxR3iAyV z=HdU%-n)lcQCw@|UERI!y=V5`v)Qv}7#N0IP*72cK|>S~6cun7hKoWRhM7S|ff;82 zK|S7sl4v4|CK{7)j3#RQju;7olEg&3#``^rMvW&iiO1-PCf=f7y=zr>SNHCjlRUrt zaemM9`8dt)s&%XC>guYuR;|(+^DlTTs~Yn!RbwXhd#U*@QZ0KAwd@6|`QE2D-}_bb z9rAx1&rp4#J}1atH-wc~TypKL7Hn{dmd~pN$}i@Y){~BELH4(l$o^`<1*nw;$P1L9 z%q1uYD#C&?G1Um_9F~;HvLY!KCzZXyvlt@C^!a6X@GMH4(pu&^s1;NRi|THbrD@0- z&EJxLsPrGk`cEz^@-MQGW~2U)T%|o+tof#ZA(!gLw3>ki zvcL>9kcB2Ska=#iSY)bZ(cmx5#n&B^bGve$vNWirx%e&kXf?P#H1W^CJWMUh#mnN{ zoIdyA-oJrnaEXl|ZSX&DiES6U34DM1ZZHSe<2?EU4>1yVyi5d9>v66akZrf~9vQF4 zHE5%+#17cl;7^e$+yo%M8-HP7jjuLR^El5SQ5POIOQoiF-W@ z+>|{bA{68PAQh4x2$8}1hk|5CdN@P|J0C%jd@>|Gdb*pW7UB}mV20VCt-&Rp^-^eA zEb(GKukL9LF7eX0b6P%Z-1{p%1?If$@u)Sp#4D5B6n70S@oHXAVr8#!nm3M1p5PTs zUxQ0c#kZ{?v;t?Hva6s{JxXiE`)-=H0%vvS-HPy5;H*=K3&&H%Jj1}{#&K&v$i5}_#?%L6%gxgr(y-fOVL(98Y&k#VlyyQ zbu)BWHg;l@o1?l*Z&NvzF;4(8rRNg-wyb*%9N_IGz)bX92CR_P^>3jp4Z1@9D$IHH zeC)JD#@Ze;WY5~=Ugp^tpEQIpPjfOr#|9m6G!F$J*bok<122eXAaIT9g{X+PBaVA^ z2!_NKf|NGkYd~%nm{Wv!I1Z0E6pu>MBcNwP$m=J)l-@G$_T?ERY3MRE2xE5apM{#& ztQp8-{-48{pOOVMe{QH~K?E{y5V&_^j>-YOY$1kNzkojVHqFJvncro9*q8zr;|n7F z$gL9+H2brf-(vhZ;Y|pwxtwGtya}Pz!s{-{1Q}w@V}RO8s0pF9;9B-0PmmGT!mT_Z zOsEN=wdi`~N1n7Fz>Eb(qFf+H6Q=#Uj`&gnh&SDc!*B2mTi51}V2{{KiAgDE2^L9k zn>42+APa+chFHzRUQxVUcW&|*IoUSSb}WEeBy9u|%KQyZ=V~6BLWy(Mj0Dd^twUd7 zSN8SJkzcIwaeNl;Vaa*=PGyi zjc?KPqMAp8mq49r_M52L%Wie6&3Y7|^KDY&hCJ5hz}M~-+8p@WC$%~7wXj>XR?9c; zI*3y$zC$V&+N}J$#J|YqY47)bAnB~l-#XV`wqZ?Ie_Q|B4n(t9zILU`6Z7r%jx}p# z2gatYfg;XXVDkiQ>m4NHx^rzgC;9iE+w@XX&h_Nmev(advF}q;Ia$3)F&!q)feC;4 zBMh&B18qs#NHxC_R((QZpU<7WBp?ccx>1h8PJkrm0mE9=j}J2`nN9dzTV@Rbm^#QSw_@ zY}-KrV%3M1yctmJ_IV%(&VW1ta&R5HV+|2R&464nAlv?JpNwZfC9Nlq?SRoG|DA~4 z8L(82&||w^PPo+)H3M>)L3$Ss42XqiKqYSm6x;1fSM#0Ny`BYb%AODrigACC3P}%y z$YA|LK{6yg93q3AkGvcpL(-!#y`;^6V$VD)Q_6TwC2blMdltzhZyFSP@g|pora`fn zni5(*4Bfj-Pk~J@-=wEN{VTun^r&f2?A4p}Bv$qsr+Htv_z7O=^l4CHDqh`EXd09} z1rA81z%(eiVzZm3O@or%H@Ow$O@orBdTDAJlswH-&eNdesw83;3aJGaXb+u{PUtw^l@k4(g5DtY(NipkW_h{;r`ax!Jjz_ScEHKau$5$-y3WO7?&L-N*{b#3}QKDA_Dsi<>aGlSMW$` zE#h~kc1g9l)Y%Dbbttu-drl+atq!F&aFU(SR)JE8UOsVD+OtVWBhzNafeMICf$!dd5!70eAJg8^i0}-Bmy_KGQ>%yLW>w}(s&sBQ%y;9-X_loD)hl1D-4D8ug7xe5qAj-3^ zIm)wdM}%kJ4$rd>^Ylb-q-WobO3%I>m7aZ%Mtk;sI)G>2j%d%mPY3Yq+u?ckJ<6Va z&jmgEGC|M2L&BbY8zVjYhK4-*t_yqiZ47$$Z47w!eJ9}A_nm-e-}Momeb)y)`)&?; z_B~nQ+2=MK*R$^r6`p->d!BulMtb&LuX*-88T9Nk?4V~~%vPR#e+YW^DLNw!YtnzI z@a(&k9DE==bIAYm?E8P7egBwe-^PEjXW!8Ojh=ni{qOSZ+d+PO&Fo-z3+BU*dMQWS7Ue0|7Ud~- zQQGw@`XW5#U@F({NOmu~5~=qh6_=_fQYx!z9DyAA3Pqf1FK*wQ8pvTTlXm6cR~1gW zttzHzp&)M8q{)*JEkAC*3$=#@$x%&A9=AupHLfj~56%G5R1jShLF6lr+gYf)^AWw_-*O)Q6(z-TYO6UbmIAek-NIm$s>N3`{49g{3OK-zm9s7;1TapQSxs*IF7qqLA@8yD*vDWu;*^;UBaw#b< z7m#Y8Z(`e}mXGDY%jL;Tg_nzt@h0y0@6146E*i$0*k0#^yj*mQH?adYY8Y?g&VXU$ z<+9ir%*#c?coTPRbRxW5e2h1-+n4Tnxp)?MUM?Xb@^T4Mk(Wz|jJ#ZeWaQ-%A|o#s z6e)o5CLZ1BCV5^i7;WkBZsJ)lMR~c5b#!<)@zSF6T>O z)mO`l0CClE@>dlU=I(q@^W$UM?7_+hg94=RfU(! zq$=IZ<&0|G%jMsy170qutB{w=h1Hc_E|VSiqtaW2j_+!^ZmPznn=1dU^1NJ-SbnYg z|AUuH1TY($@kJM;ukdoY(p|QQ^m4&0Z6I{aUUEo0n5%iYYz$?Ey4T#j(XWsy%row#&Gy77|eFn4cQl$F~rnz+kxzCu( zkIKvTEJ~i|4Df>xIYT|>ERQ z>!m^cMrPUdt_QUe(cRy>vVDV*>Abzb@6OuQ-KVehj=Z9wT&C-Go%u}lA1Y_KDs^tX3+;gh! zgd^Q^ddvw2yXW+{6Nq=ui3y{jp%@6n?-obCI;;BS)bj9Q(s=i78i7-4k%KD}b;Qr_E(v zh4ZnTrK&y4CWs~C$nBKZ>J9LfqiNWklBEi_G7C+(w5-3^ zJ;X%z1KC5j5ZATfy3OOF3#>LWN0(%+XQw)CZAYCjd-hSSauPkG6_ayW5b zW9Q6krO(1N`bNms?&r14n0>;68D5s9v$f3iBHh}dbQKUc2K*Yhuov^TV->!;*`+8# z2{Dt`b@##fhN;}|P0aK3GxC5TO0s_H>HI7{WI$$|`O6Y* zOD)0cse}On%{=h43L^@c_lEpkpfQ%uPw$RoKVQ^>Bq6WWO|@=ilL*|pB0}7lnt=P_ zBZzxOE!@RwJ>{U*$uS)P`DLq#d<~Rc1ac7aL)A;|1r5$_`5rOc2!^|Z)}av$CpPN( zmdjyRUq6lyl59K@_OrTisGeWt54&}#vb)xI_?b_HGSRBN5ncAViDhcGLjp8(4w+B1 zHou~EAfeXJTh`MqhbV5YoD2rD<;$){3)#59ORML3$J%joH?mo=vJM9K z$!qlmb^3c9W^^meWvwCB5RpDOlQebWS0w&Pi2q$ce1#4?Q@2!&;Zo_{n9Lt5P7aog z4!%Op1o5SMXgo?@8%1s9^Y#X@dK<(dULECD?@b4_M zBi?D43ohqHwD|H~!(4bB-Asu0%bP`fGcmrh&oEEqn@RCrIgC1qZzjhn9>2MSZ>Pk& zCD)hvW@=o`yUeAWFg=cV{AN4f%`_4=3{T<~f2p()IOZW?{ihqsaG>K>#kB&ZdzDI< z={3YnzvtpPB4Pg*R?BS2$l~BR5qU1F_=$jSNN~zjPs(VqotWm?-17LYC49C)!n(v2 z9dWX&c#$F)<|vx9&BGP(>+5)7vr1@3$B8!u)Q=z&szvDhSMjdcV{#WwuU@65?KF@aRBMLHe znJJd?kAkEOnbmlZnZ4VW?!{8}Ebw9}hlnVaa*&E*DTl}?mU57cVkw8nD3&sc zFw{jZP*Cl7awowyt_K56>Ww%h&&mJ*T zVjCj$?Uol9o2oYIqD~Z{f`v~MiJt+M`p^N5VmfvIqCV<;MKPm^!UYbslLyEjcthnZ zyq^0*$vbZpWoNv@g}t2Cli}`b-Ebi~T<|4(T>%Lrv!Z8Zr%yY-lW2`=n^5dtb#UU=W9xfw>1A3oIKg?b&1K2TtLR51gW3IB*JQ z2hf32NHJnI&T;S$oWda)2_%^@p&vMfJ3ep<{Cwb4jMn(LKThEoa52a+;pS@kf=%VG zj{NSgf)?4$XTA~O)K3sM&lKMf{JB`^@om^ce9oHgRb4&s%sA_tyqP5K?xE5?6R9@> z!r8^;t0Z#`NpzO=$#Kiqh-{w2`Ip9o7e6f?7)PW=n-#XQL(CqMIoh-GUb3>)NX<8+ z>%}l168>k{k}MC>@g`Xjapbvqlo0r$&!Vq-)r+o7{|I#RI3Z97Q0(DvzdL3+RuFx2 zHM_N_+qpTZ@_0JM!`$4H!#RuQEPABU>Ud~u5;)cX)$Jc;kg^6iDNH-x08+K{4W?L? zCxyA^8-O%$zCm|@IO2SRuUZu+g$2(y_>ncxNnwHW4W9DJx+BgvfYE{T4FZ(g8~D<_Z?b2B_e~BF(Kk6rMc?EQ8GVz3Wb{oAkHy_&W6r6@QAc;GSZ5r z!M@2uqQ1!`|C?M2e3MJsH@Ou2CYOTW-k6a;Fhra4k8a8D%*iiZA>PA%YXi zay}Ga#5WVmay}G4k#8oI<$Nf965mWN(|jntgm0&m<$NgqWxknOcBAJm<%H>F%!lIb zd^gjm`+?MpoBFhoj~FAwJ5V(ReT)!KiDzV5-K#EVwJ|hmjL^WRHp)b8*3JiNnMa7> z6hqiDw$T|n?zt0{hm_GH3m(M zM46W+Qd3h5AsfREPY$*;ky={zmnKr}i`nzB99o)4EsOCs)^ccRBGrjb-W=tWBbFvo zU7VRK2bLyM%Q?Ad6cNU^Vo@S}U@5dHQ5s-Tq7=C(QHorYC`B$xlm=LoC=IYEQHorY z82sVj7mXE*66rb5BVAjRNVhhmWs1KjkzPCv3E@SF zbo+&H7O90?J3X!Jx0Cdd53%QsQTse)9#cj$OCNo=n+y$3dQRD2lt>@XO~5FtMTzt* zrnbw0MTzumPEH!Nuqv5uW!WuCcA45;dfvTiYf$Zlq-wEhSw?!1OXw|1q)%kkcG(|% zr%(EYtLAPJ(C!I1*%d&G66rRVnHD9|OI1sjFDDxN2s>uuU5eRwyYdyw66xi?N4R18 zzvQ*aBtLM;KN2t1NZiUSG~#@4St4`jFu0rBqvW+|vd2Xi*lmn@TqfF?silZziBiO} zL}`#^iPFH!5~Tr_B}xM_c2D`JWr<8bik`1r zmdKoWJi`ClbLDmPDTpRal{6ARN1~gQd8_2_1br?mmL)Rhf0fuTm)E9S9JjJb#4VbL z5Vu;E$Xxs&aU=fm=->FtL9LUkWr@sXezF47-FkfmdNnPW}sz>%)@S7Ml4HYo(N?ImL)RJ?IMGcnE*|2St7GHlpS7{$h`g; zN%>QdEVwL@c@sqW0hc8*Z%?m+5O|V|UR>qXJm~HN>AJuT4Dx z@fA9>Wr<8`(VDiERmTY?kA0p$m>{9_y?9HG6#`Sg+Z1jGLuC^4pK+T z>*)P+?sKg;MawzmQumB8&tuA20fz7?T2A+G+|jz%Mx9f=H03enoaPPS*<;FCb)yv4 zbQeqj@yONk*GMSPPtkIE5hrQ%Yh)-<+-kdIwI5<5k#jbGOq{bEKB}Se6fNg$@Yhbx zVdDRnFDF&+`C{roPTMFOBh#%=5c)uK6#bD3*P{E9csGE%v*L z*<0vQ-bL5HNXnYle8nkR&Q>HAk1s^{T{-{gDO%o9!1P!vkMGS+#+bI4tkI9}%^p_5 z@x3J+-&?}*y(JvqTf*_ZB^=*d!tuQ&9N$~Q@x3J+-&>;NdrLUJw}j(+OE|u_gyVZl zIKH=p<9kauzPE(qdrLUJw}j(+OE|u_gyVZlIKH<;$M=@#_};vBd~f#HK3NaLE~yC~ z-&=Kb**m_sYUc3;eu&=jy;a9?l3n(W@2#4}1Lb5{?cb@I!!%BrXB$-u9_9fyIzt@a zTeb6j?iq1VZ`Cfm+n@Vg4Ij{3(huk@1rO*gg%0Q~1rO*gL>$n2y%cL~Lc23=$^7&1 zpE~sZA6N(cClSD-_LU|PGUP$4>`#A`04OxGju!deHC*@z?=?}#j+o+obPy)Blvj9q zWe45UX^3U-GEx_e!ebpJ0%E9JMbslmn9dU16|nUz!IQ}Ma}8@=(C%pl{FF5`wuM){_!?m1&+SLZ2R zSndPo*+K4KyWCGyaRXhV8(?H&Cejw@y}a3+p3Io zlHtR~Hi9(c!-v+kn*+oOKFoOVp>;csR}V!x@dVJ>Yk#r^igebnVffCuM8~~2wH5UeVY>s1TFH-!~#K!d^4#)&?4VV zE+}Y`Z>JOpTI8Fl1rJ)}gy{u_7Wr5VSZEz}^&>v)ah` z_+DblY-FA&FK7hCgfZm8NPI7GM1k?W#MEOIzBi}fw;B;?MohW8`3M#zT_MndRwcZ zeaTkr0IT)UzU1Nqkq}1vlI?vo#e!TrIj!Kgn&go?6|9%PpE8drpwT6dzQs+31}8bE z;G=!Xt{XEC*12%vq**|#VdE`K0}0%~R1ElPHQT48eDj}_XN?;}-s_lZ0_9ai+=Bl}c1hjhsPId)w#G*Ernb5xEQq`_yQ$*7*+j09s+Ny_l zEmMK^C6_-((ew8rK+?O|g9rZl{ba+ff0uXOp%G_-XkY43Cxfhlyw-g#<8sjjb{j)~ zh7odVYAyop%SE7lxk1pr+`wpGZUD3|Hvrm~iA4KSOHqW(fM{Q8svkwqRHA*UGY@lUpCcl!E&$+0l~j+P_2?UA-V*tH7=7I;(7x398;Jc}K#tcq zZe^2*YcvrdZiV)xF20kve+uP~`N~19lPk0@b=mKT{4FT^1mqy(hnk5(`%+tKvtSq| zuXP7!1J@)WdFFMxcGECqkJ4v@iACO=QsDf;2(2FSR$69Y*_7 zufI)FUd#kF1<=0Kn;^;zi1wx4KA1Ld9f}w`fc#Y5lixrEn}_zL-UC}E675TU1PRUn zXkW?@p==-ROT`6VT4xZnFO?N4m2j@mmc z`#*yb3TOxb5-#}gk0TNxDTAUCf0R>s^ZA(T4Z3Qr0wsPRFqupa=MDaAmdVD^FXyj6 zB+^#9+YmS5XKbu|2%vmR{#i2hk+)*BrTSF&=UnSF_h(CNjHG^0QsU3*?CO_;r$_#R zta(z@=`s^yMhs<9kNTn>^+i3ZMDZOu$sW0krPgIM{gqUqg)Dym_Cwx&) zC{c)-e7U5&+!ytPC+a&g6JlOfqMr0cJ?V>jQi-}wQr{yf@9{-F>4|z%WKvH~ zF}+IEGrp*2d{NIRQ8?SGSyDFpqMq?YJtQ+BW~&nQtS{j$sZ8&pc3_xFX|;< z)Jsa#SLHu9NXi?0Q7?I-o|8Wy<`X4quPj^FLV{myA>rIB(jIK0Ee!7OZ z0<6j2_EWleBxQ&zZ$?Ugm)dTyR)qFpm$ znIV?3^kKM_kE(-j8$1&`Ibo=7Vi%iOt4y3|h~-RGLJCd}I)#-K6~%$_Q%NaFr?M2? zl;dzI;ENGeik2DkX0$ArFV{ylw| zn==ZL=i9l4`2d)ES1u1PI=nCNZJ)y5_r9K0hWLO;5ex-;Q9h)*xp+lB;+Mg2>_?Ms ztLIjp)p2BGW596S`=UmQeBdf#2 zzegs*xu6l05=II*LljJ0bYbG>mA^s?PCtXe#6=w@eooa`1x)-FiAxqMVB%dA&c!K4 z!o-}JD~4cVPAM${glMyg6z=320OuQ870hsv4Y8tNiF!8UDPze(|aBHc7Tst|fsKdl9 z>{w#dETzn2iVPD^cax#PNzN(iFflg>qv*lJOl=oKFfk`5jT*8l*~+q8l?S6T5^OOw6k7q7D-u=c<`b0@^(RC%Xa^Ozbi%m{_%I*%ZwHrREM8+=o@9;UvVxRecd8p;+g_T>g2V2aKWu?5`kM+M2OpiiRTjcLU|p! zqTne9wNCEA#OD$DMku=)G7=^Z zWrkqlX*DotbC4zs6Nj=ZVd6_j%9?yoQwSyoQFaiR_)!w_w7d>|qsFUy6upv7gNYvv ziVeWTkWe)+OdQG%z{EcYFetUJ9etUKK;toOTH zSaHwly(v+X4`78U*wM+CYn9R*fjNE%>&~?;0I`6rT zS~K6{bN%w3>!@`cC)s(=b<~=*lU+yi%5~J5!!%BwT}Q12KU1!wanGGGeY!=p+1|-p zdS$h`CYY~LaZ!S;BfR3iMhwjvm+1BLao?Inq>Aa1>=OA`;NhBCCt!eBQ0O+ydj8#9 ziB809R6@-k*bwM;)x^bF>^dMCPiVeo;R*=h_q z%{C0$w||g)nr$n(R`x>PuY`bxOGeTW&WGTsq^m{eLA zR~|*xAhVFn?Wjm$4otqATU5ojs0R=&azeO)LlhXM&1v(DA^kDbf|Py`A{e-}P;Uw- z*g2YNVTuCHv|4B|^;#HaLX4_~;bu)ttA$2ZH6OL0ez($-7-7Jw`=V z1{r267a5jJ8RI^AB&#A5(fm-67eo|!pL@x^++5Fk7ZjvCMYX|HJyOix zNnQ5_$rP`2cefMuILcPqA~m%3%tRBol5K$GnU9tCLCpG#nqk0x)Vyn++zw@QT!ZPa$5Il`4PC6 zIp-Go@Yde1bQ%q7R}UcMx2AxATS-XGE-ta!4dR8gFwBok0g{Wxfvg~38ftAHtLA0Y z{4S|F=eFfNeXH8nXmL8sC6)l+t^4>jw%FRq?Gk?b=r+D=apTPXrxbL9q~0p23!Q6M zt=cfXU6y2-1r6rrsRe-0hS_1Eeyz>B&n>JYiJdI584~f9$XT!1#X=Wmw@Kc2q|iwa z+Ou3X;j=hvNkKlvVRNjIyK7ID6dp0cPwcURJ#{E(q+TP)Q9AV9-as*(#`{>{Sd zPC2N1L8_T7)zI_kG0bmK^_rU(4ZBn3ULpx|GIx^vYrKxySL2QJj*t8g`Zj0ZkW@2e z?zbR=!FlsWC8IUTPv{3^moY4rW{EdR+PwowtiQC1KS6TV($(MZeFyKcs4qvAeCuFt zPb%l|>H>tIWI=%v931RZ0J%*mugDR|jJMww#^6Au~VNPnsrs zA?mk3QO$erIY^>6#7%nP9DdAyCneVASI^1fM7>3l{St_f?Ivk+k8BKEn_&xXl{ruB z7j40?YZcKm`>_>KL`L>ON%e`$b@oRcskS(ZG$p;3IGXN_Y^x(XG)cI3e-w(|*a zJb+xIjI-#dmp<1R@~bKwkA+QwUQcAk1bU!*xEFHkN5oX0GHOV*VYt1Q_94y2r~?CA zZc>2NQLIUIqK8>U2}aGFYU&C}f7kkMj&%WoCfby0w1RDM(M=uUno$2TGh$$a=}h-( zI!0;|TY&#QVNRZ59vq_~%ZYN_ww^kngIUnr;xaxlO5L~c3-S3F#Cs#nLpXC0-VXJ9 zenEbNzYwE|&gOYW8Hd@!cJhbnpx}I7&y(% zs>#lcsZL*h>RMtn9cnSk0Mgy>>xDUYDnk>`dEn}ZX)DXJ-el4;CCI2hJg-}ZdXofv zK9*l`Z)vPOG5*dq7n!h)>Z6D1z}!5G?e2>mo_9UvU~GR(eTs>AjjFutmn6{y`SS*P zX{ec7JGc2%RTxV!f5F1XU)yR1)_ASYy9#RxqPRtT`iycx7-Fb6s_zT!uFJ1;u1BCcyC?*TK&Un0aBQtx*}~3o)ATfN1CENxV$%fa@SXt|C2+=VLUd z#pqQE{xvt9c}C5q8ug;C3F-cjOSqLw$Ra;rkqdFV4!1O)S%Ajzk$Qi!Kx)w(E|-5v zQZ3?8jgPz;=V9QmR!Q`v!Gv;3Z#4cVy`>}G<_10NV(b)^`a6}N#v*N()5f)Pd0gAV z<61fEFzO$u@w$#+QL5qshT^}OesP-dB4pz{=P^coS+<{!zK(+rGR%>20sv5(*B#{xt9vc_1YSLu3>@?X8&W!W$xiecM>EDyN z+rEHd6&BriQXJ>^eW^Egn6FZn6nfV7wNV)sD3gZ$t;ipnPATM)FGP=avjwSXi_FAd zQjYfId(#=`cQJc}%!36JC#xc@ivNs66#CaLBa2t7mLQ9`K`SDmdl$zA3fHR@aHAq8 zG~^NzW{lB~f&c1|p#RGl?-+Q%4rBad;9=od|NM7!zhl&S@5mbCySK!);W3Qyyjfzm z|9MD-H_I5!nVVRN0G+p z-Yl_4Z*Y^mEV+kDZj^r`g@$S=0>Rui1{@4&LpN@C`R8OJf-8~-fc=uD> z6#sbl>3Whn-W_Scvf6+87h*I}(!wV?(|p_sX>L<1S~lF~$q2 zKxGa4%OnnePttzwU0LD#L@mOMiCTn7opw91%nC z^q95hLRlfyqB)>~wX?P!7~L>=-ETk8Aaj4}8pm*$1#8z~L^4%g4-gZ5$iNTCDj&8S z#jIczw?ai){tl4JQ8iIr^L3`$2CDsnRPLCG2(MM*V2Ms6`;K-+@@+-3{X!za(1;v_1xql*bR0M=lWNt&eO`l(J(7i)BR>gQdR>k;WtcvlWSQX=gu`0$! z#Hu(~ian6@A-T;B6gG*qR{LW{IbXOOi81RYS^RRn91>zFtuAL&%PB$!qo)5pu>lmF z>x||^mHatTjwgHEgM#lMnKA1g@Govq}q8_tP z6ay^bICt;@b)>pY!k_9Ybr>7U4`7qsK#NTP?dxa|=}%Y~925_N-k)GyN;? z;=y>f(F}04148*Oae?EFAlG+Xu1h?wwX2DbMzyz44T5Lfp~Qz3Si`)TxE7?BcXzGq zbY~+se@t_!OkdX;ni&6x?py8E-OH$%-bxRn>H(=pslY-aR^uTJ@|!&!hPi`O%ug$L zX2%0GHA4(G2+3HU5VG^9Bm?~GH5t2uGIlE&RYywh?tWTa-9rTg(+kXq$;rL<3?Qp5tIu*>$!?m2gwBUlyGJjklLS5pNvvab0#P&JDCVCvj_`^q(N{xq97cVS+= zP9yn#L0(!viZ!+-H@Lrz8nFM2!(+s37*a^bR8`WmKbXyc3CSObtGXh2Cn$M&LMP@bi}SM2XkoGzqp(k0Y4RULH|v6)?V7F?t}f85a36!J^;1=Q zz+*xFX<{E*#D-6itn48O-%K;?o;KeT-8@qWX!wA&fNulK^{ROT8$CBK$E>mpXR+Ak z(lzoQu)ZMw^4+peWx9FtaegARJRML-kM$Bk6i_vB3aKLtE>`;TO5Y}yvqb6ps?rA) zUsI+SwJWf^Ox>_nmaBw-;6*H)`{6BaX{aOK;?|iIb~OuY$#+oJH(8Ht2F$4Ln~mz< zK^Lo8)xHK#_4`~B{5O@G7V~TkD7)TOChvL;^9B~!ng^|ae==;j(Jiz4E~^BoeWte_ zPHm)BHUzDq-03&+UagVuaNB|!A)7nJE^mKze)%d%vP%`;sJ__KK<9OPuIq;Rh!Duc zf9i-EH|J53XKr2*z;|l%DbLu`f}(yc1fI)1Q}k}-Ik!E#AFt=#K26@OYG02IRXrqE z&WlQMXOcFO(V+=1aUB%8Qf{+rlaqjTvMv1=KPYH*zT~y=x7-%(3VquxO`hD>%|8o> zGB-CHWsx3iw}rK|&fjfewUd-lMqOyPg|&?O;ZaGK*xfl{b>2l8PF=)q3#*GWb9I5; z7S?i3E*iDxr}f$nmi!YTP~y%n>Gl1gTfJ_5f8_S-Zhe33)^~4T7g7A(ZAos+{8W8Z zRv5LJOyFs+Xa^jxs&up|pxZe@*WYA@p7%&Iq<@sD^y4{=G1aq{cU{Z7S7QJ@)>Pj# z0v$hRqI)%J8ywvdZ^s9DjG7mi0%jDa>ZY6Px+6J)IM$UTQ$q59+P#=3r|zi7PT+fb{*TtONI%HpGJU~@qN{0Hl^cmSoN5^`FQ-ic#$Eoqrt=Dks?b!;P zx;}tYKbsv0r>@s=>QAyEoVq@MQ^Ur39j6W$MmY81RfFNw^*T=7T@`^-*K0VnFWtkb zJqtXXIz&V`b&!g1>JS;>)Il=BsY7IhQ=>@rL7ckVP4aN+L#hpxequ4QNfB zp5?7v!z#cq^CWsRVphX;H=A7B+gExNixov#QVf4MM;Lh>F!G0aYgHX#PH}03*Lpmb!dRA?SymKDy3xv`){=@iFFg zo*#PpI8L(bJU{gGth>}0Mxg`gIZWf!u^)PR!96@&!3kqP+|xUMPyp6*tGtffjpcVV zyHPZ7u4lwOz3U+&d0bvci<+0^Kc^!6G~@g(y0Y#`FpDud;7&4n@#h*dFXWPB|7*=uU>^}PpJ@)`1HUK^;d z!4O~@4Wv|rqZJLn?yjo&$FVy)spem{HRbqaQonrrHPjAwjM~vJpmx7B6l#YQgbp`! z)DD$D`BVC&QdCkcbcdZu;n_=?JgZqg0sWC_par zYoWh;)?p6bJqPcegLlutyXWBDbMWptc=sH(ow1@D1J@;7 zG#AKPvcCcd7b|wnspT{QR%aT6S#qBLK22V#+Vt&shPmntK8m&a6zn;Xf4M}((PuFm z@>9D^egK-14fKehWHKoVOFv6V&ziiU1D+|guZ?}=E*4;0!8RgYj$X;kmaw2rBxs3| zUtkd&!HWakgjc;IAmJUBqK;wuGl^-gYSUK|`q%dNcCGHjeBj;p>8*MdhoKFF8v#_^mTugnMSdl&g=D}o`SXAsd(7iD?FN7!EB+@Gu)*+zLZYc+UG$H#UV`TEz6#li+ zFu&wM6xFZ?H@OaOo8j-Rov4Nx=vs0)BT+AZmk^$)qJC*}v3zfYK;@Qage&+YuHgAH zjV3cE35XF3vF0xDNjs9mm}tE+aoD8zNO z%avO1iLBr!0+0?S6ndkSs!x+)_6w?b=smAOcb~7DBPH~SUUDX~>y4p_1cLTVbs{#T zI}sbwok2FFI|FY>cLvyy?hLRYz0@Ji3U3i{SFsKAG9ggR&ZAM(x@D5~JXP`{x>wnE zwi)IX0z$-+Vp})eakqod6*|GvFQYW@Ih1z@0nx9r_+KDS^U%A~)~fwW4+#P46~};McpDVJ(wQm}kzxKu z2xRU&Ms4HJR=ZzST|p9uxevc0Nxd{5V_?Qi0hTwIO(yrOaXg#Cs%KqSfOj9}1)noh(z46w91QGUe2ty#o*A+y#gdV;-dPmek!R z^+7WJihvNlL^93IoppP(tmLvT$u`@BdBtU20Qt;0tbGZMh#rXwwbU>(Z5Zn5;z)LC z(->pQVJp`J3N-FGDpX(B>1zo)?l+08xu`yTYgtco-7zw`EQ#?~q;b(ElX?-^3P)U; z=JBtikAI!u_}2-If1Tj?x8WT&m$sWLJFjFrVdKt_omYhH+~V5#XPJDHB)-YB^M|JU zwv^7xz)QBXhnG&t`|&Q>DnWicKU^T@yQrpR7uE?)>TYh6{OlX%@6AgkWs>$TQuf^@ zgmMCL@8$%8MwsNM=C}P6qWKx6$S1ckGXVM%v;RFa5DwFTI6u_J+dIkYsK0%=tb%vB zwosB+xiqBx9g{lbd0aMiH@8Nid+(@LY&0xmp&T#6m-;D7g+ynTUq^p8RX0yM{vMM0 zcTeiiS*qJJsUfuTR!v$w-ji}iuxwg3NLci?G}jQUuI}d6tZH9>0w<`>wV^&6C7gPc z42y=?Nt)<%Ky+FYtrA?(>mxrhvb=>^lU(SHY`2sN+13Lq@%}<@X9Y*w2VI) zq_VQnebiXoL)GXG`86zUZn4chD|Cp3<|J!jIqxk zZj?e9V`b4)Rf#f=B)Bb3gX)p~Ff_gmJEnsV*Hths|{l`Jpc_)j6aLy zksh8HfAKq2>Ynh#_)A}^((+;G-c@=EYlEY&#o?E+c)T%9pN!`F`aq(G?ji0yCz)H04ew1zVFl7AsMCy)k>6~g_%wzAE^?@WC6#@HUWHZtS<1^8g4_Oh2zY!_f@kAEgWY$xji{!BNmP`U7VR4 z8(28bEa&8+kvV!uL|{JWKqnNK&lw;vpA#9F&xs7o=R^kPa|Q^^=L`^-&xs7oxBqX4 z3>KKrIs5=WFrPCG#0OLa=5vlQN;177FrPE07U^1GKBsjFQvASt&f*J@5Dv`ewBIX} zjWLjGJJZJc?Zi1UQOm7kOf6*|GZxLvIr`(0N`?lO~4qd0`obunA#p2 z2+Zfq=H#R?2394VR+inOWRInG=gbqe9GGv+y`*ZfYFUP}$R+dw^EoH7YJ05zra33w zYbiA!lYn+lz{#!vK47!WWu^sNXQ^t*^7TYxkJ+!&74O!_im-gn@-el@9WSr@POWvj zIJ{EhaVxXXghvL$^4W(jCa!jHt*g~L#__Nky<zavxLlGll5S(-u?j0Xrc9-kkbNd>yI&#y0oXN0`&dsx{upZI_xRq&}0 zclO0C#J5OZCwBX~z7!%?A@1zU&L{GVq2`+)2Vt;+0wM0~Ek7oPonUw@Xcua^-l%?2 zrs5-r_!Jv0`op^^f)%;an z_st9qyp&Y>QEgE{@9f5~{lTDj_E<3{SOz!fojpNx1+5w|*qwb48KaR_1iP~*i)}+; z{|XJJqkvo5+VG(ZV7H^W>nuBatxZ(<*Y zHX!s)2Q|0x#6M;^7a0b^C#g*(JIv*@-Q*IfVl>7|#>d!PZyZqi$JZKhka2r&_rGST zaYT<)|8r?aZ%;p;Q!M6c2eVqTresp{EI!h+XJuy_r?j;2l2{Bmp+l6-E8=SUVP4tI z$D75yLzK-e8~Eg~csGTrxrYx9i$k?}^;>l3#2GXH=6};|F76$oY+hqhc(r2OKSbHQ zHcM$`BVnT?$>^nvB&_ti6u#GvzP1yottb;NX_%e<4^%`luB4K|GM@sDl zE3@ql@w!u4(B3bUecG~L!cI#2ou9i5N>|KWBa?aaem|y5odTH3BZRAD`(@q=`4fLO zKay_Hi<51x6>(~o9O1QRc3KPLxw4+lbTw9qz{BHL4XbyU7)+nnBK2ONZJ((AyGgLO zOD+iwv6%>FssROogp>zMCm417*rzDYYZ1kT$9xu+-uKUNsbm#!TWtEt-T)A*&4W5Y_2CRgW$` zN8vKWOT;mSIDCpuPvYAGkMkXRq``bw!p8!+Q)d&H)?sUQ@qy@k{J}^eK(c5yhpVGQ z&_$Cti`<=!+*uT0@9a4H>Ya5y`@zbRL!h%!UXo#yyymG&UGR+V>yd@tUr@QqR4!ND zey+M9Rj~?IF3cB&KpxCo6EO8K=AFkcfI4N~jtx1rQqr2f4J_<<7KZ;C0)`x?3@Itc zM=^^DYi_8N=2r6(Az;y^0jn0fC93&NC1+okoL=J$snfVJaseAo^;pNmHC8%*o*&tI zA)xIh)`$#4oFQhDQ@bnW43;w2$RRyxZi>@!_vXdw3C5YuyyPsKrws`k>S`{n(CIz8 zjcn}*wwBd?MX5Dvep$gt3dJ{tfT3^d#$L@_twzm96W$)rUUCQS(nJe&ne3sb2`fqbS*k11f=p5Q}SZFVc> znbFMdDd*>!0<13t+0XIVFO6mooOS*UQ-J@ipp373GX4}TLp$;OdQ*Q)u7vL@2}N}@ z`S(of1LqcT==s0%O^Z=;XgX57V!9(z^p8WLe{6D#HEK4x(lAVw&8S<>*R%*!;yzRF zm^cda9&;lv4|03oWBxY_OL~B~oha*0+22pAMLe}iQuZ9Qf9mCggRA-u+OMVQ^aL>0 z`F`3s1Tz_CQhwUtDC>UO_&Sv}KkZ4hWEfaM@#x7ndfZNSgJk5V9U>z?Z4}8TBR}mwxJjO$HaVV%GZOPuFHH@A%+tJQbnLtqB&@<* zgA%55Lht=RId15Kr5 z+RP*8OrJGlx~v^HXMZ zx#E!?V8tUnz=}sYa>XO_I=-eTt%GtpxHYmi&bO;Vc?Vt$F%Pfy7emZxUz5bu6^kL} zF*hN-Vll*=^K+zYiy>yKE!$?bzZhaJ-WLhs#SpXoG>c5c1IR(TZBEPkOCsixTh&}K z_jAfTCQn;=kG{uJ$J!-8Y2iuZnE6Z+C zvemYCbSNN}dr@#<9c>*2B z=ynwys;d|>5yN5aT?iN<=V+fA`n2BaSSAP2E4C_d;bNCr+rBI()8K)=W~H;e4=r3y zq3^8zAs<*9ObC;q;&l)ON&WWCQfS$u{`PzQ$#OmOr~%^zIH*eCUCWNzJ6Er{CAKMQQThG;tLbpYS|*eTu8;;kK0CR@xzG zT(i<1^R=%^DDC|L?bmw`eHK4-UHkVcv~LY*|97Q*WrDTizp3(%w8wqzuX)6yNb)|c*0&pZpf=~;+~re{Ganx2KoXnGbTqv=_QjHYKO zQfM3PCO65Oo-L4bhKAcJw$UP4-$uJnD!7gIj%0Wn?QiuInxlC<-W+X~o8r&W_R*8n z9F5ZSZM0~x^%af<=5ovwc{Ea|=fYWBOgSWjVe{p;f#hRZoVqpqwK@Dvii)-cUQp>N#79dF#DU)Z>JkD)g1Aw?Ze;&0r;iBSm(P5T!^ z-?;Y|SJ0>6=Z$+v^EU1sKs)Zp%l8Ca#8|O6G&XPt*yK7^tRP~hS~KO`UGa-agC6{T^BK!RApDM?&-x+^SW+q zky=F}z&@2kI3FM|SYS~bfonhnf=gXJ?Cc;1YG<;d4E8;&l%t6*>I}`ZksPzO;<-C> zOqQvyf*a=7Nh&11P$BiQXsO>|sW(7s>bn@Vla*>q(~SaxoEBG@yS?WIDm&_ewmsbN zT?!nXRU36>QfjQpuszOw$e9oLzGLgc#<_0_D2FEnBZ)?)6HwTAkvw zms;IiBlV`o-l^DsFTlE8WB*+R`|lKcjo^NZx1jNksV@it<~<~!*n)wwPQ>0%96ocF z5Fm5rfpmzh?&JA{uel|6>)ULxI!1j&Ey8!V{#Pnu2?0$OHynif%) zC|W&DC%Kx6BjUasF49UN!1=9K>d6{qK5n)OjPM-< zs7K-z8wKhDj0rF-Kj&jN286(XW>RFI0sQ6VxKM+M1f92Fv?aTJPF7aT{O?Ti+q^Hn0%H#3IQPbTNe;n1MC#i81(i#?}2En?AMPc3l zfWn& zX|Bx>9F$u27lwlxLvT>4^T(9oG)BNdsV>gUH3s0I)N)QP8Vy*`slZy(|Gzu-y=kK} z7@(Rye54Pkrl)~;WCfs_KIZ$5x1~S>RMT_rLb?X1rdvOAc=L&yuoywIMuq{^bo+9d zYz&87J3Xz@Zzt&^Z&5*khTlb*$26jurH}run+y$3dQPJcGNq5_CSWuwC^bEcsqMx9 zl$xH+$w^~4tV*U^S$2z(-AL^&J?{o)HipAUC%w4QjnKWwCG;Sc^ogw6ZuFtl^hp;9 zrRKXNpxqO2vMYd)l60HPOi)RBscOk`V2Z{bv%f-Dyjyh@lfd-y2eZh1OkPL*78?S= zJsPjnXxz#yG~v3Sce!=wr^IDfNv^somy0g2+Ng{4F1MCqm{~WVce%9^100t(;9YL@ zL#~$PdY4;gZmNPQIGTRUjWC5Q7>y~xXmmn4lkzUN&i^U#U>$DM%bxkfhcSKypYkrZ zE`Fc*K87x*+S7%vkWQ|=%dN{sW8KQ$S6)XQ267MvD=6SyZf%)Q42!{VdUe1q)N;FXAU2gFwe<1I2>tVN|BfQJ4CqkJ4?{e$8VvZV2Hb4{f zF1PlEvculx*6XWdK^+0_a_h}dcF4QjdixqO;(PKsW?RmCMl^Y^VDr4ot@psDo8^0# zTOUC}{Q%zOmLWpfzIVA57kE+hys&q>+e#SG30Y@)evilDCl!; z)rp%){B01wCm_B;hvsu`HHJ$S^f|Z2iU)%wbA8UO31TR1xNDNv&x!iVCtcxtZXHBM zX`~gt=hkF#I!Qf4UdLQmaG$GD=k1EbOFJ%ViM#g41@+Q=kzbmKC2sTZAJB$8eyRH1 zH_1GLCU&AOYRNit28|jkH%~f~F*a$qqec(P+tTSAJ4~85;^1O%OK0}zMsG`Jb|&f?-x_aAXZAQwvKzfE zo!MDGR--4ir87H+X`Dvh(wSYrCwJ%Yiecksb|;!{9dFUh?m~;%XLFI`Hx%^v4TWI* zhC(QQLm?Qyp*~_G<7_Fm_RgYe0vKCn_}e5O{_3ukh-P+kkxs_|2-QS81m+F>=OE2h z-TfW^8c?%*f$JCGI-B9-RX$K;wm=4^=g-g--NK+-%zB2`#wd`gnDshC7PdDLv|};* zMS!4c;%oEtJKiBQC2M83;i_36AU-*tRIm&Ad?Id6w8?&@k?~1qkdAx?yXRHan396B%ci+fJpk7{-&6=nXBY2CAxGBr0@SF!sq+I%vS*NQ zVXMX7fP6PU<@!x;7{;f^SNWKUweAY|0ce;>mBLJ{TW?x+^UGeOsag$#J=nGASq)eRsO58+n25o68m1y0ykw( zhzP~FKS+h72SQ}9{-Gclk{%9`!Olleq$(XVu^)ZiO;VVN{mgB)91`L=RcV-s{VbBJ zd=JwXFK{UcGqGR#*wpf2=-w%omI9kzzCcfb`d4oB^eD{4e)R%9iIu%ZX%T3F*@1Vd zT1N}alsH{}T%CWD7qDfkjVd1zh)wxAGOxu2nF%AmCl-YW#E!@?A`qK;EB6yderbF# zL?E^_<0AsGcIZd%5<&!G%U%3hgCPR(!-x2YKztgAhg2W} z@nc>`dIcg7pYtKoHAEoZdbs>}5AhL!_~K3^gb{&w`;CavpN3pJJ}u+7llYN;N^dU)9v59;w^8@5OtceI|1W#*16TJ|-j9DS_Y&@f%m4p`kV`@m($bWsw564{Bq0fD zX-X5)(v}K@3xSn{E8MiS%UE2FYa^R=RD^*=RD{C-%oOwou%Y3J4?xz*;z{7d}k?n zlbxmHO?H;z!Y)-r)lm}SHeITSYP~61WC5*Z-W(~Lr?_y-7Ev9P^tg@77E#Zhm8&ux zbWq^+bW1=gDT9m|)Ed%~1}&7z)_TJVM%1fErT350s_AUBQnnN^tBDBljdhHu=l)&# zrpL~*95H6##I3Vq9V6vR|uG@HQJoa^r zsD%*c&~=Qc=O2_(#IVs8l5I63YKfTQHeJn#dSO5cd8hcz`heHWDN6cAZ{})7)arm; zthSmF^)r$XzsYJwl;H?*wpKHuwm7JY$6sbOBP!N$Sgs7-A4|*mv3e^I>M>+BBPv;X zjlbM#MpUL_Sc<3B-Sp4c#BT^gTg`~t9-1oqYDUy}Zuz+v!F1SH`J)4gVT@T=>`6sfs7j3gaf*Q=VC0xb3NAYkMl$ zwmp@sZBHfJx2KZr+f&9rZKp}{-)D!JB#W}rUT;4_-%@{OUqfeS*x9j-ohQaO-WYyr z>?->M5$fl}F!B&xwV)fp)_y#vTtuhJNnho5v;`X5#Xz~;cej{v)e800*6zP;Q-3E8 zUB=P)oP1v0^?4$ZU!g@OXB(L}_d!8kcW|HI5Zso}ULm*#E*qSb=!^e9_x`PC&_28Bg;* z!|~RS;(2au))*OUo6|+bybvOm-hFnwn<6vI5fXyl{Q}R(V{Nnk82V_2?o~dzdG7pK z!!bsF7amsrI`=JFUv%gd3J$ob~+S9t?X&o;KVk!SfpruXR4jh`Ebn{KtYJ@zdg`L_~-F6a0o_ ziewsAdc?%e9TlrB6eW>d5|zB2xs<{pJuaCWbuN3_WwIA2$qA3BWG}GVkn9DSjv6GJ z(MdDW3-(0A*+}_kIx#Pwd!~g*v&4L7gI#Uyk;+3228p2<^l~idy-LS-YPnRX1(xs1 zuxjFkdcG%}9!mTt5lo5j;urr3qFntTRw^jD0QxMox^uZaKj7Q+$anC83Ni60b{Y`sEEx(F}J!F4Ecly00? z!$B!$yFmp#{{%L3RIpoa;hhldjXR>WZTQKNEM{AaWZmwOyv z6d|O`w+caF%hbCD|0*#H;Bd|Y@Es%v!oSk{zudHAx);iQA(r_uv-1^5i3 z>U4TC#e|O;iF8hY1S~(ULVi7me2R4b2FDBBmdHkKT-e8ktT)EuAg7Cx5*xZE6ss+| z#fDpEi?uD{M5fk6sUo9F%%3}`v~+7F=Feq`iFmUsGo8!K2OQ*0l$nfr!|_2!Cv7_> z(dYc=KRL>X4Lum{+8XUf%@9q!Tt}&Wx+U0L+t$=X2S^>?b8PBJRpnH}sg^4Ge4Sww zQ$O%{T7dkJP*ISnW;jS!jz`kC_QL5=Qt1*G<5N^{VSY&HHo>j6DDqADG;r!Ts$q;TKREZ(B@kcE-UI@+6`W@%T&4|I`uP6s{ zw5Htoi9hk!N^;0TsPas#pZu!wEEVLOw1lC_cYe+cP}xj}Fj1`k*3Ly%e;2|=k^Q`# zjjX;9!bZ`Wr4(3fWc4L8rdaoM&b>y=sC<+yIoi6X^B>4M$6WVxezVB~EZ04q-}+~_ z=1vh^@Od;Fiqp57bQ=o(pI)zQ)VinhQj>1Qf&GiLtF1kA?tDY-Q}ulH)Ky1iJjaCJ zP7|})oG^={kqvZ>KH|KXvxRZ3h-}F98<7u_bHq*~w<%ymKGGx)g%#v>2vE(SFt@ec zhSE^^D4M_SF^|kyRAI z9XE;?XanoW1|C@7Dp*b&qF>|HUO9Gsj!5Ji#jmmBl=zi08f=`;ZR8AwaN2l8!$`tq z!x$|_tP~-S{B^tDDjcH8xLsdgj`TQ2g+tPW@)mFG3^%>X2{*mk^0drRYdt!u`RjJ=5SGzoj97@j+&X+zbFQ@xA65TT zl<$yr_^8vPH%3Qb@-@8c1*~%t;0t(v2}`*CeF4zX~rzEXtM~5 zS=**=#)3R><9c3RL0^g|efG!m{%Uv+6y9})_58-LzV!=)Ws^twwPMIw=3 z&7}75?-Hp!yhVoc5`^%@jUhxNU3~~P|6*=nZSS}bF3_Xnx6v2e+(&b%wR9g@$YhPZ zJ;|=IqgSP|{Z~xSe&czL&yq~f3o<=FmFd|pLwN~8SlSpuQS#M?VDnEJ3*G;6A5Eb% zQiCamD0s(nt&J!5{oLjmx!8DeSFk=^xwefb_XBM0-tphbb~PWrDmCAFMJ3#7{FD>% zqEtd;7Ac`Fg_Lls4CN&V;l+(1{K++hVDm53ykR@hef$BTojr@GqCs<4arr!f@|i1J zK=(;%{DgXU&{N8~9;>cOk40BZWs#AP#XV-0>~Uo(M^Y)3MKY9^AcVAyA^ht#gkbY8 z^r&sWx~s-ThU__zP6hRGbi{_cS}D=owsb$r1=p2pZCkn@dxWmhPpg66X2NOkwdn}q6bJgajC4Ik+WAbTVS8c2 z?t#L)&afWe7}oSJ5SC3I4eqGh_Q+qi>l>N$n69*-fw ziV=dM*+}h!NB)ZOKUuSpind4ox?OjYH5(~oJo4A=sw8VReo6-aDH)$LWKG7L4d)Zw zO+8t}_y+O2_g&(LDnsP|rK9tdG$Y4;Fu`-@$0YkFi2X~7UH(wRMAP;#2LL>E|0Y=T z-nNy#)fMige9!&6!W?AS73LtruFD)`*tPjVhFzN+WZ1RIL57@74=Z?DX_+x6+yMno zhg_rBctFAP?7wX#t^H8^-r&lHvLdC4X4AqcT9~8%+3p?Z6FjfplT9o)iQm0PvY~S+ zfff{5Le7SR37+R(F1`81?+rmS&=t3x8|M-{Z|sxYZ=pcmBYr3@_B^#6OYjU#O8(Ch z|2J%rqP)(OzBZgQ@bI$NX6Fn%Ur-7RbI!nXF~re!&cO5aift4hD#AINoip$(ggA$u zGw?kB7AZw#aoBSPo+V<++4P)&=Y?-bA>S6iH~e6mQVXSgqc8KAfoJs_cB$Gi1JBP$ z!uCy$8F&mwh_iLfz_Z0c6?Xe&jv07j9na-ZeBUU3_YUT0bvo2v$SDI)vh=zAa;FSD znU3#B>E9>mFY3}a1fd-=@N5rFll_o^XSburo-TFBz*FFOc)QF)@q6R;t2kre*)JF1 zw_oOrfv4E<0V(t&;`fHh?W$_TH-yTcVaF(qqzuX`R3H34RmGaNM894=6MUV+Ox-eoh#-%Y)|f zkUPI%(zsW?5FCkDjGFGCL+7W@H#N~aL}!l3H#uDOt#XN69%L69knfAvxXz!m+qdlH z7d*DOqIgRvO5I(La=Yjmh$!p}MA^5QqqK)!-7X5!qi;me3GgUwqse1#O1#!|3E2Vi zsMFmMFH+j0t&NM1lb29#Ufq8kv3m4PjeoTiE{7%E+~qK1VD55+ zFv(pGJD1$$2w{`E9CkLj%MrpRcR46Y9{VoGCzO@B%ker<5o0KyJhoj9vi4}Z9FIl- zW0&J=4$WQeawJD+HgcEaQQb!Fa&##hYnS6u-3q%LWasU7ZF=O$H5(i5$WfeiovJF(`n?)Sx zB9ryt5FvhWNSf%uA$n3sJ~%`+V#M^JajidwH^9WMvM?dch+pojZzee z8IhvA?;y|AL(zqra}Khd=0M2e>^u1Vp)DKlzqz7f|I0yNwC|{Wng%nCosA9W={=v< z${Cs&;_S)hmZl(m_4#uS z@=Ai&S$GGz7!jY9LQch%q(Ed73pX#z#&O%4tuLGrxG(Ip>7OjL30XXjIi zDza~3i%K`u8|jB_HhK9ZDaIvBq!_oIX>H{18b*BD;h-3lG*T=QDVV=zsa0;iiS-!? zlYb!MG9nn4#DAiwdosAcLyU~%Xd!x4IMIJ17r?Kx;|aq^dWZw2PcF9Gga22DgMuEE z!6#SJDI#H{e@IzkDJKmhMf>Ks^?_~?i=Q|gL}gT@k0`$2{y0k|q6VXaIrM`i4gJ#mEOE93;Nt zj2Xmn4x-XXTL|^3fBD>qIKx^XuNN)vP0D+!&8zf73YCSji@lP!Rp~WdzaN(s@}^L_ zc|VR+mTp~zBN-XiRXA!F({c5UoYM8HZ*Ae83rg3nzV&Z>E+}0a9JxM5H7(s52D!#R zyCvjdpmbgHAD7Y5FS*&`BrmzSF8eT0x-|@Pee&jT4+EuZm)tDr<|Q{X2IeKV5GHxa z&CVq+xrMOFOKx^HdC4t=ODnc?uP6>& za(np}&0St{d$(>QFS&h1w~?3Jer$$gUUK`2ZiP#3WS5mfPxM4KY^9?aDf~pwR(Ukz zD{^VJV5>Zu!Ju%fJet9vXsbM$!Jv36j%F|{*(#4_Feu$>9?f8jvaNhHgHgGWO$S&A zY>PJ1!=5YYr^^B%ha!&C4UET>&v+xmQ03Vv2ZQN+VczqJWO>1c?&ah;cG((U z{WHT6`y%Mu4~|G@N{`4x60tkvbHR?~I(f$?(nW=7&tJsw9ekgD2j6GEgYOHugYUE7 z!OsYD2cPcoq+5q+qD%f>SY-dR_@S!3Ey~FCc*7m0iN1F$AEt>e{VxaK)60Fo_i~3y zqU*L=hf1RBKg*vW-WqbKB>MDEkt-pGN}~OoUEZx>4wXbV;uV9fwnHV+O>CWF#L;)7 zseZ_@#_v;u%P8@U1=phb*`T@l=F7&pq$jJ0q(I`lNt0J0rxiv#*)6vq*}$Dqh7zwF1L*o!awF)Z=Q zFZ(el^_pMyV~a8`f7x%J`C0;fF2(lHYAm_Ye_V9PP}9?;o=)IQwtpj(-j^iBk<$8D zaoko$v_8Uc|bi0@>zH%R5?g%@zjE{5L z#fvF7Uf7&)klX>5EwbpZ5F^jSAzrBCV=vP(G2~@UdP@kloNa77Pcu*H=|lp(_zF4t zXf{!QK9g7z%_lP{DT&tWnB+OhdL8rK&W*2QCgOEWVokJiDN^1$*)ZHqG>5y9AECKg z$Z$7N8}3GaEY7vr95K-v1V@hF<_Z}ECu(IP^5YcgL~9Tn`B%1>%GWWUc3o}|oM;V# zBR~0GSC~O?qB#hToV28yuVb1qFki(d>u1{O}>svNlMfQ z!I58jud*^<$7~bRt7OWjMBD3_WSywJj(N}pjMp(g<<#8e>zM1hjeH%`^kcq`*{E!+ z*D(+3R(Ks#+J*fV5w!zJA>SgR$6sUb7C+=IF5XBq2c4!I`=IkQeOmE{^xkdQuNH+L zbV^y_2Ax!0QjbL02c2m&=uD$QXBrJU(`e9{MuW~Y8g!=7pfimIooO`aOrt?(njCbd z(V#Pp2Ayd%=uD$QXBrJU(`e9{MuW~Y8g!=7pfimIooO`aOrt?(8Vx$rvI@!wQ)dro@JiPImgHGo0dexxw3m9}JszK-9M^Sh9 zkMwNkztLS5Dy*5Zk4sd8&YwsYntEk9wjOlzNHI+xDW=&+ifJJu#Wed!F)7SQ@xP-~ z;kP=t=rdFh61jWDr@o?_A9KS_`_xx-%RyCn%nmd9_e?u{>MQz5vnKMVzM{{5l_pBx zrOPM8ocT_Ao|FP$F8=;kbl^XQO?E83ZNMDyk%}#57d>te-R0#c8GpYm5>JuH-8SuO zVbNXWKgLfVL5P06SAOv``Z=(B`4gkjy?&lX2yK&GQwY8-7XA7XdSroamZQm2AA^p5 zi|VGM-}+8|62fbKe=~ZZhaaHu(%>ZeZL!f@M(Bf^(SMvA%>_gbNuuBWLm8t4ulX_P z=yzmFjufx;G3e-bR>?2dWQd4P$>RavmA~5sXL7g4YR?hB=pnL9eHszBeg7=_Q)wH% ze`eZf-#<$TS@|l-quG*kUJOa?PADrz#N7dklyj9hNEjAbAB&Vj@HNxgv|6X(Z39&h z;|)8t;jO>%skT~c;CZ^e{#--z&1b}bx3%T8Ap5NWtr({VMPch8*UOGt-y?&0`!73~ zh}zoo{+6fCw)y=nMTX;34ySY2kPDGy?Qgl&aC|dj=J$-s$u=6IxXuVig2MtD21oL% zzs5*PI}yn*MN|ch%7XJ|BnkS?QzRXU4ySvodzU*oCV?8eeGW&m(|uRW%VPF;k0txW zM9>*&u*ESts$8Uj$ao`08n)yK+nAVp1b5VKgKXU3izMLLXWZ*mLK7WHj#5$hqSG`< zF=-mR_ckdaHd#a^CWcr<=ND^o7Yonv4&g>j3AqNnt&x~4oJ;7ciA%;`c}vb0_SwRa zl5De2O%;$5C>q~L8CrU(u}ApNaH&9PZ8p(Ry19~~RH`&(MF{A!6k{oiH55exHmb#4 zWE0@A$2;1th8SH%UMo$poTfMmQYdS;$ngYwa8`^H^?XRu^C6k@A%*1%rP+0xrgWRG zG9!aCBhyO4ypapPzb#5xQF?)LbJ{$XI-)tzF)qE>sc6TlauUb+ z6>pWtgz%LmQEyC=>yI#;am#(LcuqQmyQuh{nrbXE^&8;%cqi0$)XIczvE=-$1dX3i= zpP;I5B3Iv}@Y+tcYdb~PcB)<5X}SW_bp>W{0m@WGCCjeRt*R_#>m_X4wW#^GxBPRC zakY;f5jcx~0XdcbB$mkZ7+4N%oSTtY=P& zo;j&pbkgj3lr9U;7QOLTBbltw?Ayx4@mDio3!8n>_Uwz_=S%@iDO zS8#$|!B-xw*cF_r6l{%F^g@?mFLarztYvXo+p01n+lmEOfo=BoB*$Krw(C{N$N83P zH3vJmf!L`xBYCRz*hMvOHy7nS_R(l)t=pJGS6T10F2-#6Hp|S=0jWLTLW>5nDMrsG zubxe@oK11|Y>HRel%TRHQO~9%dp0GjY)av5O0{Q3nmsep^~}iN%*eDdBa1U*tDYIz zDl@im<*>Des!W8dh+%TXu0DHpv_>U*g|tWCtw(?J=|D_OY>YQXP73Uq?NvD(tLI6a zo+t5~CkggENmO}~r1B(L&yy5;o}{WgN#i_8XGLdNiq2$3XX%RGsuZ2girz+w&S6Dw zSBmz9wuHIYHtu?f+C)xJ^k(%WRPEur{8%f?lQDWe zqeyb>3_mE%%a!k8?$V3)ZoO#l;i8?dm)yOoVBKIZ@HeV*UJ%;a-(;2IeO!uf<}z9s zS`u#wEvx%4+l2qJ`tB?B+(jG9>c*z)G6SiwWjlVeqLE-Pfr<8FyV-mrw2=>6ZmsH+ z9=`Nv*lSRxy#{6J1!t>XaI(4JY?yoG=q1T&qU9fH1t*US&aTjMvisLk zPQvAGXj!o*&6@6nFEnxXqP1b6E?nun<{77K$GAOC3s)@C_33;@G=O~>fO;Bxr@vY8 z-4?E8%L!lH)F466&0H0ML=o-|y~OR*OI#k8xLtYy+ifqddsKPLx0mX@p{3~ttK8kl z<*p#KAm0?)$nCR_J8ss;9fhi&zMiRf$ohso>YGmctkUbT5);jdiBZu}OT~Jx8g`Nw zwyY-Ts!miTHHk~=HT0(83Qd|`*V64pH$yK2nR*!ryB-ai&0_5 zry-fewJLIBi?c;n4Rlp!>8jq!s?N3-u5GGv*t=wVDe>7$MXtTD?a&L`POFUO zaT(pEnwj09m2D3<^ZBYa?!8j)9j+u^&0bOXN*je9C5Czww_cn8_ zReAW$-EOjHc&wG-TCcU)Oi<6|M62#^Xa+;Jn#{VWSJ5l)pvZ1YZ-X)^53)G>wpwE@ z5r#R}(;L=pYBMcIFIC(1Qsv`Pm1{4RJHl?2?NphZXD@WSRH55#FLZnKa-Xl4z`bgx z?grkeyD`3#%&1%42K4MpsF+u96s5iPxUUSXHp&RBC^t<_F;y&@VTq z3^St)nKgu;5M0GPa$_fyY}J*NaD7**ZmA6uHXGQb>$#Vq=Uyh~UY1_=w%SW~wyLe$ zxVGk~a=qQ22sT4uZ2VrM)0 zVApc2(sCSYd9&faz0h5GYe8k!rUxPHnH6U3lQV0po)y{F)XE6E#cyq}MfyVeFS8+c zZ8KEMd;LDo(wTH)KYj1c@st0EHiQ=GAfscG2P)(xP(d47&-)v1Zg}R5yn-Ola?>q^ zX1XbGb>D&{{`R)BitcNWUfTk}o9UnvjzP7yoTj5tHxaFGKYLSSYtzl)4n&zT>InM% zjZIoSt|A3^c7yKJKND!YHoq$MbTR(=e73Y*r@wQ-_G|ZP-t)g^pJy7+HMX}j++_I{ z^*cf*qTobE6hs-7u82dzR4h!Xf|dxHCTO{!g6CWExs)F}!WTI0?Uc4~rKY8=gX{)~d%w-A;87c*( zFQ8CyNde8HJA71pfGY&0VpI)W1L_A~CvZ1iUpnuA$p=b4djw4uv=^LxW*n$!whCG) zD9Nf4G?BsrZbnh=7BoZ9e&7L(QV16W^$I#H=ypLz;XcVlAE|v#P&x>mfz&1-wS)^p zQmdzuXe(#{sSavsBmWoRJ_I}hET7zXl43xwY7_{15iWD47ATgZ#DP@L3z{V80#bJg zsab*+*1_j>vwebFrIJijg8JOdQQ&4tg>IHq1Ro`CmQ)G8I@tS7No1O%^nxSk=A7vS z?uO(ZNbZG%en=h$-#F|iOvz+g5_B3IGmtzBJO|11kh}m1i;%nqKDUSMy&fs~-{|h8 zF>>9_8{N*5pMd&ZQ+2IP)%EoUVH+jN%m)R{5Hw!UY-BP~%6uPZ_M7QGsPTK744!P6 z%@^)$nT`Bsmuv3R;O$qYGY;=sbLn@T@2{c{rQ+B|?JSCEp`g^$6#b)+&ehB=d;2#H`@R+TxF!fVwD`+;gwt~h{ zZ{*?Db`Fx}J>0r3fL=mHTm;_|{I4LSbu!hUPQ69tnUPTP&X(d9c5_B7t2|=B&APF@HyH3zt(iOrC zg7!h;Am|wAxS+RD-UCm8PJ_;X&QeG<6w*c5EP}3ry1Y#DK=VNhyj&WJKubW&y_|+B z@Kt+xTvi9{2W|E$Es@FjM-gNUz;madF@kn^S#jN7F7!QK3^^dA54az6z{`rf;AOQf z!G0C|>%a-Ij59#9V>u(Tf%9Y8e<5g5ELVZzSoU86zB14%&}z^+P(S#aK?AVw1nmXw z104Xp0RBPHp;*?#DBLGNCqbt`XFxB4E+hUc@V^dwcN_*#pc$Y((0tIsI1axUxCFEe zv^W9Aoa3^Rt?0e$SsKI^^bO>||bOLl5{w@N~gI)q%g8MS?D(IS^dnny- zH{wyK<5l4!lk+W3If9PolA03FGm4COF45V)S@@fS@Oj`%8YRsy0WT+V8@~$vHBcjosVj*!;Z0&qWWYW<37Sq)ktdULPDZ{E zOhxcilEi_OCUG`Zz`YJann7EWII#iXPS9@9UdZd?Kwm|x^hVP!HYo`PpSk84iSYBg z>A`R2gg0dJ_Di3TP*LooN{ym@A&FbKK@{boB(876D8eHs`lDvOA=5jlro&|-iJOf{ z;Hf0;Ag7bK`f#9e@q z%>G@;EYF+F{0X4>$t80a|MC*ZE=WU@** znP}1MVlwM!4nF3Sxm8?9=3Kdyj7e28>uwbxtb^Z`f_?-v1vCRRJB9i4fb&z>Ujc9t zXk7}A68yl;pq-%Ip#6|H06GYNLvSAf9tWNRodKN(U4Z{Z#Ag}yt10L&Q_)|7rlc~z z4>UiO{T0H!IF(Cl8Qja^UIBMS#Se0TOwJxTji^cGX+&KrE8CyS#i}`#i(zXj52*sF z+@%D;--*C_AiOV?i`@Y5Am|YIMnT75KVe3OOwRYq$V@}{Y%159i(sBh#k3nj7C@Ka zz5=`kybkP2!}K%_bs7bMy{dUgMI3uFItd%l;lAG)TjK7HmUeyyDZE?=5Cs1&Ai)KH~y!&H#QZA&3=5quPbmY6=t z^ei=Ha4AniQwCfKT5b9u)2peyLRAldBM91Qa+2xw)SSbm7qa_+`$31;2YsPE!g%Es zcS<&Wvz`=qwxy%t+FFP(JNCbAb&>7HK zxL*XG16?)?3z?p#J{d0Vbc{99xqD1VN1vQ-7J6ZN6%~586o9i3xCpoyxB|2ilB?3W z_Yc6n6ZT!e1A^`rbl41$Odq7wr}L7@n4r!8xs1bR8Zu_nIlXfT>OSH!E)SfrsUC!s2*p(-b#@km1zmUGz<8E=G)^i5N2cjHhNsXVOR&2@YUqz)}LoHedb!UpvWxE_`3DYiW zH8NRp3aBp=%>-z9ram5g>I&_9y4E&lqn%WTEY{K6=!iA%S|6-q8WoIUNVg8ES~oLMjJyhwpM*?7zfIQ??1;H7|Q^oG$*>HCz7!?ps|klhH^8o(y(erlwL+ zbVYoMhFB<^l{q}HtTF3CjpX@)F!{mL3Z4LPXATc+x>4{I?S(s0dBDq**)L^&liCLG z3`6E9@EGU>=nUvZ(1jdq&%)obDSKJU{+=+cqC&3a@Zj0lj$zbxEE9v~ZRhyqZ&xzN z|z8A>a|vG4PKAPar;1 zz_W0_2>Sx%3<4>kK5dFh?xZY6vRyf6Eo z@_-9=;IJQX3EWG8%Xje9r)meze}lgUe08AB;17WIfcEZCY9o_S8=r+7fb$^eFz6`g z7=jt!!MQa7JO#Q4zU3V_MGX6OP-7>%XY4fRRXb(y?~uX!c5-U+c5>|Vck*(0RXgB2bfcC-P0O&aAM4owSBu}dE8&ZAKaGnL7 z16=^UgkTo)P}hK0KvQ<1Q0~G?#x9&3f_=#@bAx)94EEn;u;p;B0If6G>X_{(lC2fa zfnA)q;4aRT&Rv`-UAs6_xm0I?f{`{*uK_BimQMyYB~0Z*IJn&xP| zC6d4#oaYhDCD0|a=Gl#9VDQ(#-M`yB*}Ypv z?{hMGf!(Z);BKz)oxokYS!>-8*SnjecLCx?Abt#V0``;On}z)X>{o!-AunZ*iVm4X zbe@;d$=-t^v4@LLK5*e4q#C$-4{o6V2jJcf+z0mo*pHgQjdE~5mBEb*u#;lFM_q53 zg3Sy(&h5cE9`G{g3g{{VH1b(*-h4E``P_h~<7hs&WaAJs3-R-y3y9VV+*cvTwHGbXUM^iJ zf;xZvi~~m5)`Dj5#a=yd(O#@zk(W2fSQde$1T58{HN^50DYXVxb?_b7%LO3_ubpu3 zg*#E_b5i;cScp1Lkj;oN(IW(-d(GV6E0y-GN$2iW-oWXvk2qjUYv&mo(G@n z223|^Kve}z5Y**x{=>6UJvSiZZ{TJn8@NcLA|`((%V9AjDq0SSMCpV<)eY**K{aez z!O;mH7l@;kI0l7@cDaU3n-PxJS7f|K5&jtBH4Z!rx}Z@JzbP5NOE;J&8QA(WQh`ed zeE9|(l0~G}A;Wbe+q-Xs!U|ZS2?Z!R1?UJ0aEJr;#RV9v1D6(HtO`stTfF`H5YKgTY-BtDpK|xnc&_6u7>@PG=P{70uKQX0gr%=YLwh35c5fn$+|4# zQwVVyF_{6rq)`!*Zds}qVYvv&OOUt>ovk9Iikq+ud=tCZ-NgLOz@4DIu<)&6k-Si>b?b|a?tEsa77ci_!e%Z zN^e1<4tM`8D5c=*gnbYA`e5G=I&cg3%|pN=pyRi2jh%+SS;(CSUI5=E$X|k-71*!A z-q?>R@P4$;z#02dD1d#yg}_Do(JBL%!+$yWD)!?JG2FYr-vitSdI9!B`(@7kai=_W z2O%T-Ip;=!r!`9DP4+`G>~lc+oCU{4_?!b?)~N9Led%)raacjzSHQH2xUa+Ad#eoL zIT=F2t!RF3yzGQZsl}dyp@OdbHEGmb_uar1YQPR1zm@`s|aPKNMCWM zE+ASzj;MB=X{TAPq+=&foiHrMPM*HAC`ZAz{bC{ZW2RWy{tFrp@r2ceWj4goYClb8 z^0A?*2bXGW+{i35tb;(QhJ8a*uBAeL(6HVNB0OkV@9a=P7)El{dpl!D_BiY(z&8mz z4Zd0M(FP~A7z+q@QQP2@H5PO|R6SoY)uYZuDecEYEve9cx?%12t20>z2#(Z54P6nE zR}5SVHJ8J_(y%{A)EpX}=c65l{U~d)VZG^;4KaD3MWNn*D7_PV7T7n7b(%&C5sWHR zDpS=ibshK=RhiidEp;K4-G;SWtv?jik3uzocwGPjp7$CR~K+RA>#m5EJgeZ%U{V-)&(PWnvVnh|0H`s5m)oVB3vOrBuYag zF&;J&>JUe^DZP}Xe^RoSLwZ#aPN)@eBUFb_0&wpv!V)uZH{1uzSPZb(FG;b3U>gD* zhWAl;8v~wz`y}WLf}cfVS55J&EdCo({5oQ5+{UfF`!+1K0w(}x+=j(D;4;t(&>FZ0 zK!dlTTfB{<*A06`dtl#p8#Z4cXW%v-jtqit5OOAN3(2Fk7*&nbp&!)){4oj;3&gGyZq$QBEcC;MoVX`i*4yA)S`(^ydNGlZ7meN}0 zP-sDZqxW(}Eyb`7yz9x+8yD3IU`g{fnYqJK>@1Xb5z3weo(En4UV`!!U4i{NGQoR0 z#z?ngW%+i_q=MTy^9parF`nCb%tn;tlz_hs{;O}tiZgIC+*@zQEbeyRSLlWN0PKm% z{R7w!-mVG*nM87DWO9e$JOZ)fz>^TOdOPlbLfks|Tz6n1eg~dv1FpUUn~lK!JLE9w zZTybH9h}D2JGi0*fO|pv?~pNDlCAv!EQcUz7<3f&W58n?mJ@5xsXJKV)4+@1TYNj}S z5O3p7)bl$rS-+G0dSRac`)ptzXdY<(o#s)3JJs=t;ydLVr6ph~2dy+&D<$hiVX9+R zKUe~wohECiWc>zd7H)laa$DLDJODZjItn@tI*k;}!r#0pdtSs=5R01hI!PT(#xm@W?H-7=Uyi0g;A0pLM+8-ds{&)JMT{Fe6vH0iY(F&u4yHHmNYHkVdzj{khb4z#`D<8N3w6Mf{ z*Y=DZp3o&fKJ z)o_#s))cy$LaS>|br=|{fpj2L{1?qwskyM41Iy8h$zIKApO@^dC7d(eP-QRD+z&bo zIs!TlItl(MQ#VsAc3Fy@E5Q;s*w?_mUc$xCbvL`a@5bWU-AW9ZgqWX8F}}NH8<_|0 zqPwx22wDMJc{dmCYDlXC^_x=tEcJbS3;^B&cXMPq@8;stbvKWkyW!q*Hy)pX_)&-* z2b}=lMc_-oE1>Rsus?qf51D=Upg4k--oxdr9Jm7fRrg?j9@r1udk@ER0Q?v3!2&4w zrhsSQei3vI;Vb~Jg5S88`Q7&-6Ye!L;a*-xlp9^XdwHWc4{Z7Osz=WX?&TM63gJ== zS_Z)tz*V3%_i{q&?&XHu5BmUU5VQ-l4{`?X(2c4l9waG0O*errBgRW|H z2PM4}Ek!A^sMI`bP%4xDWj!Fv&S!Q@?#ysxC% zkJ`Hoo)!36J%F5+94K`eMosHlkomdzM_2yUBn^oGKzqU4?zi_bs8mc z&EV@sFpBoWeF*%+hp?Lm`$^bOA42DkXwM#E?OlYNdGIfSu7a)~;z5s5#)A}B8SWnf zdx2BR_*t>MGW7MJm1Rf=a4T>(XkQt}s}J}B=q&hW;eN49sgq1}YE7zh5zZ@RoSaqQ zHF(cBY#!r1%-g-vo9{5@>W5idg@-YMJj`N>4`V6{zB=G$Q(QBP`>_-kJdCx~!?^um zvUM|CpB%3CLRud}?FSw}=ov@&<(TXvYP{k*!Z&#Hk6=InT5<$WeICIO@Q68*J;HNQ zes&kmv!HYEe#vCN#Oza&eF<#KM{qF6WLssn8OgQ|HrG*%50ByzQ{aT77&IMaF&V(w zM>%xgQJf?P&Oge@FF48zMTNjcf;#2qK=Dx?Vm2Q&)qhk*h#%k$AmC0!qzkz3D4x1I z%4Ky30gfEyL(dbYxQV0M5%Vc{pMkhp#AgoP7mjj`Uo^chviCoe-q%d)HMSm+*4}cn z^(>dxAL0Y$6ldW|CMTPK88*L>;quG06Yac4VrNukJNqlvA?|g zP*(3Vm#*&9j%XKwt@1t$h{0Y58~_c1j@-v3at!{)!9QV&pJ4Hykm9GnJ`MJn`_x7D z+55O5n1|p6a9p~NvuzQ09RXzA&)My}AL_mzyAH6gf_)wA{lKlDo%dtz3)*)-reJU% zxnCuKOdd7W?;`9knc^<7xc`#kmf*Y$Z!5s7z-th*4tsBf zS@$Ya|b&FcBk*%AyeJJOAhIL{@cuR_+NzM3G zy;2uuYN8$my7ujs>wQh=cW>KW;cYuI_)!2d4eL;fI{Q+J0#Jq(HvKIiyuVPvZ`V~; zpe?V!UMR4?0?Pp!mG@DAyTI22+6&qb_hHZp*iXa%tgR%!%?P*eLWW_uP(!F*Kq^J* z%59wA3eiJ`VSfw6;(Q^D#?%^jkzswRjeSr|oj>3$i3;qWBT*}6BFN#F@KpVPu1?%O^dc?#>Mzz; zNzx}JQ}YAd$p-BbzF$GKJ%AII1lwDdR*RvhQDP!3@g z$88E(wJAh@D2JJd-PtV%AvMQ2!G1wY1RXq%F_vB8q)SP>3(ZF+nh$0ocIOL{Y4SKO zc_MDprX(^s|64L$JkI)`1Jk_8L?-8(WS6=Kre%9v-V>?fk{vd6lIf!+)7H(IrcEZb z%_SV~lW(a!aoxS5wj!feRDOX23D^Ig$8YwbhE2P#Cyc8(fk#Dxx~WxEj5Sn@bzt{{ zdXecetW&lmOP#XKvB@Mqe@Gk;Vmk1k`esvxFclN8X_F^RcTgiuHc!a;;Dgxcf$uVK zRGKj%(;riQjZA+b=nDDy>sQHE?LmGMYz>|SYo+tk(kY{o<>gmm1|n!R zHCvUs*8dV(cYf?us+!ennVBK0sdOqd?86hH4F;cF#;8|FrUMZr6p0T=Pov1C=r^ZbEIZvKWUaY?3UP-A$+08zBOr_+Q`z z?sA}ia0q32!tbp};`9T>wB zA>*S|jUjUaVN3!~0Z#+ZnqiWOhGL7S&|RM5^9#$sE5NJ3Yo~Z<>UtR0ksrp=A!xzF z=GrP zBk0&4Q9jAEM$OVA9Ea>j@cJk?^BzI7^a%EnAHgw1@Rh?~#Uren>PNVl^25I${<=VW z&5+6Dd`^z3hQK_kQDPnko&=pnWM+ZqK^H-nL07=H0y(Ro?rL13ti}>Qa7r~!9aM8- z^59+wT3n3`t;TzGz!mUc1-@#~8o1Yi`XP7vQKaKhWF+wHqgZ7HU55R72z5V(@fc|K zW6bY+3@7?wpAUOQ3m@b3l>k?QFO*h2hRr14I$%F=EBpr_F9_U;@H@fR3;RC!?}z;W z_y*v90q%pqLy$WRJOVuW7~ZvkoEf;!!v5l8cvk@K3vge8{N=~EaC#rd+CHf7aTIdk zO3(o8`++AwCm-j-AybcYc+-z#a}4<6<9L}E{L64(g}k-LvDH+AakfU~c1;c5zNj(J zfeDjyg!dk5cw$`yPsKGHnUWec7%7EI8E83ZMGYQl1FizC2Cad69k3s?8MGDd0pK8_ z+g+o#+RpEqmj%?`Hl@Xf^;~MWNjK^uy?Py?6#Ny2{Sz#8hIJ=FmNC!^u%7_cUo()i zNyC2OeZjCUyvsd6Q1z;T%Yn6Q2kuHZ41EitPi}{7w%~2;(2*{jZPS0*~YUSjlusp@4kl}agdg3saX*89%>dyp%2SGUYKs8 zhM|U67RI69X;hq9l+=qTsq-kQ3pIEa33L(sOW<3s;X(K+Nm3b-1$ z2DlEm8MqZV2;2$W1KbOI0eBF21b7s926Ps533M5B1vI4=i<-4K9}8Ln`%>UC;Bw%K zS{ycneO0Z}A(>neUl%4n+yd~^3EU0Z1KJPwanK3aPXbQ?PXo^Y&jQbZ&cl8gbOm&^ zmdn!`@VXh-bs1Nht|Zjqyl)+zJ*mS`2ecCQRls$1$S2?)&_2*X&>_%a&=Jrv_;=M~ zCQ*-(8*l<}3UCH+Hn0yk4>%vV0JsFW4742f)xgc5t+4L`?gQTyOC{+B`5L0zY@77v;N>N|~e0~dl8ftG+)fUgp`?lk9b z^J$)L24LTL8h1-iqpg9zKF~q%4FM0I<{88Y>_>se;D7Qow=FZkv*5c3|8v0epbH3p z8Sbl~>!7X%l#2!)oF_COzZ=XmzzuRU;Z1U|T-3ngN*nkjcR9RQHgNL$8n77!`*F|- zxK9C3Hy|0nbD#^LOOUe+x(<7{AH^2b=f}9kkLm^cQs4^UYTz1Rzu(-5^2_8+@=ahk z2mBnpAaECGj~{y^2zCheBfz7;lfV~2=izS&cnNqFcoqKE5bip#(TH4X#4rxn3!2b~ z+6$ZwJ|A!%+)El&a>+zbkICegfvpnWs(@?Y&96~enZXwT4uW=quLrabbkGcTkc0gX z8SDt0M@{EZcK#V3rGxXN={(8KujA*{5$FseGYhB1#TS6B2(-9~XVxW6T;NK9%ivxPS_!e$z<%IX;2>}paCZ|& zzZdp>p#7i&;JX06A=nQ$;odgzcnF;_lQqN1`Z6Dx z4{#so0O$qKA@GfWj=_EcbPDzt&1hWYX#8A8V;*dm5RFCPRc3#+JP6qOE0`s1^3~8l zYtwb!{rw-X(fGe;uB2aw2s=kwJ)`c@x|%UQY(~Xw#?Co#9%w-`I@o4R{Nb-0?iHXl z&F0mlW(woA)V9H`8M0e}1E8ItU7$UX-Dk?`ld}4$#y0afWl+#)YTuf9yfr51E!3_F z>O3R6k!D_cnQF#!_04#H1)*F5T|}&wfme~jb@1o4@JO|w1v8NrjC5O6?8xMb_@Xe? z!L7N4o4;1zZqNbK&p?ZM*l4f?Z=|>I40E^zGt3t5IY!|=j_@ZzFM`g2e;)o9fEVGe z=o-TQ-QP?1x3A-wv%&h)f(F}}HY=0A@$~sKqRp&7cc!sJ!NB>`=jzW|ShQ(vChO_b z?Tt?<)Y@{c(b(7CcDDAZ#)e>9yYLch>G({MQ>sRPsi?yF&PG z9yE-ccE<+3BO!bb#6=h}c^lw3yCx||#3y;_r3_sr(<-f)$CZ@x;t_i21S z`WJlVnnHb`AJx)fbQ{K+NLaJW;!{T2>TrXvxyLX_&ld_Uz68)jB@2JeUym?89VUK6 z^_cs<86hK;B+Ri64wqzlLge{=7GZR6-6-#Jf6fptrx6i?ogvs2f+Ll&lJOP^%1q3q zkIDgKcL?@KO!>t)It0grU@xcD3_q3)-3rG^O8LMzJ|w;gAviGvCrORWy@vJd5b`L7 z6CR_o(;>eSY@`WX7-Lix1Mi^lyhi0<1Y^4M=8C7oOpK{s`#fC#2%iwtFWeV_PYYU} zKvw`5w+lKX@I~O)2^vT=Dhq-Cgxm%02L3R~Pog9GjA_fw^;#|?6#p*^IxE~);7(g_ zlgUQq0OJ2IlzFK}Wi#A~Zz9!-&x?ZgCDHCCW4G`(s^MgTSKgsC7;o$qI7Nh?g79w_ zxFn5^5;FfGfveLj|CIuFrqPi@#tj1Jzm~3@u>YXI>ze%kBd|}C_XdFz(rEa=_+0`I zzt+mX4+}h$MwdI-{qHD)-)YI46L>j|4so*kzmt5;{bvG?X!5p*e5UvFE5V;3a6*w4 z{!W4YPtov%_&r8}!1TFICI2pg>2sDPz;rr{z9Z;Iew-rw7gqT70_SV^Nr4MB{H(wQ z8txI8zHm1Ld2bVV=C!KLi!(+9p4ISY1iq-HZzQ?7?uV`irdO-LB zh_z{521a`;Nt?*V~WMVwF1-AeM)|-zzHAL%9Fqu8txVNlBTcs3Ijdg(+mG& z6u!nkBQU+MqxAJp0{b-g?+U!A$@_sY%xU^q6__5_8Athw7F`Uz5K|6$xdPMEFRK3C zA#k&NZw2j%!1PFq%Fh;o=?xX7uU84|?y7I8F z_$LJJ*V8ZXfQG*;FkQq@^?y#_l!vVNJ})p`ut-tmMc^UL|BC|Cy+Pl|L_!@qz zz;te{6Ziv!HGTh;z_c~kkNlkxn6|k_!2dOYX)CF~iTWilEz6gH{{?|(we&j05MxHe z^e)3i4R05CO~ZQyUf1x=0zZiRZcgI-cYr@4bJoixeNQ|M4nt$|SRSccFvT#cb&!H85CWb!ZVBubY z|6apy3-SNwA@TVf#|QOmi}6)~^EA99aK47uV`P4s*z1+~ZQ=~C%s&%v^UC}%@eYAI zomPD=7IA3;0uu!ZV|X!!)LuReP(z;fyLO*bbpoCKA!#~fy*K+ z_jd|Bxy8a`0uO8WvjUH3cuwF^4KE7ZtKt6;xL?C=F{SF$@OFVOXt+S&K@Hy_uwT>9 zA%TM$en8*>jlW6Y9u0R0+^yk15V%0o*Py_o8vc;L<9d1p9@FqQ1z!0BOMl-d{CW%j zC*d9o$BHRqK;z#YXZL@Hz(bn+y9J)maFxJQ8m^@&Xt(koXS4`Bt+}^Tcv|?ckF&?` zU2%r_C;I~mPwRg^B=CraKPhmwhNlEB)bNbJWf~4Azbs&vUlOp(pKG(rUuv_0!`b1I{+`9y(ErD6!w+dY6P~pcKLju!lS1BRs2_im!Dcrpne>C$x zmg$c-{#@YRaix!VV}j%#;Q1Nx|Bb*2n)^QsOt)85d3!-%dWlZuM}+7M>6;eHJwaf4 zt3~C4hk0e^_RaD+i3QRXfir{`);DRV#?;zYNFn!~qOqCCT`yQ~| z-z0E(l%>CS3cQqQmA4NHOh^7ydOss@Nsfj8PT)z@=LDMX68{dX{(MW|)-9HMX#MyO zr3dXl@vjO@9~4vaU1BgnZ@yOpX9-LZF+zas(aP_3zn@~Quao|NL>WJ3 zr9UQB^f!B~_9sW+1g(8ne`}C;gK+QE>ia%{y%`((n+)*ZDctG4g>rvPV0tpkAHpBn zUn~C|g1<=X&;C&0@+_-9ykB5?v%doMds5)BF#1*X_bU{iN~=77UEuK(R{#7xf$6zd z72aB^9FIdrtPzzFXimExd;WUhP)l zS@Ew3(a&-S_5u6T?DhW@0(WIu>3hAvm(n+mcM9SEUBaC%UzZr+^XJ29_V(*j0@G8V zsy+N-npOXH2>i8>_WTlgtZxec_XVc6@JiwTjpoN+QJj}bm-m5(z5(~%i9UVB>L$*7I(gUTO;*F$hMaF6g$SM*i= zeLIDB($e1t1zvo$imz2Z=HUNxl(23~A9LitT=XB%?{@^w*7WxifrFYpVlqYhaC~EX z$P2-$y*nrTmxZYx#c+Q% z(_Ac&;k}i@KV|h-?-O|bH5?xK|0{v%B^Om*zMN?MM3QUhOs{Gz9@T4}rR)1xXcdKxx+r|SJ50wf`U+)<~{yv;# zt^XuwD_f!ZECqhK;HOio!w4@ZaKad8IOXTFBrn4%?{5^CK4qZv`KJPpR$B4@aF)G2 zn-q9nD^K5~^k!J;Ule#k>ra0o@N~vT{i^=oy;aO#=+1h`cvY2;Y~enowHJE?_Ifs! zXC?2PaQCHa;nlXBYYFbV-RNj+Z>evseY(9R*r)*AF;eC;jltT6wsTD_XOvCH1{)Hk z%$;Y2Yjb_ODXZZr8>Z7Y(z3nr6&vjQZRZ+omLx5dk?bU6F!)TZzwxP-HfiD%kV!_L z3|ia?cG#heH5ppl+MYZgkj6lJ%Tx8iMtLf!mR{R1n(JGM);66#*I|Od`Cx+yL?{-} z!cbNs_2Q%$+P0?}+iUrB zRIt51AR^S(>eras8#{!l(Z<4Op<3F`)wVW1)!1rKphA}|&o=svKzmz5V@F4=$z%B2 zL@a~NE$2l1g{_E4he7%*BZ-G7A4PKcqo5+ZvyEr>3%1(k#@0Y%JNbB^@$8|t^XGyv zpKNb1&elIu+f;wPHCTJL&EE)zvJUbu%=?85<=@}p7n#xUWNk-7bEE%!E3Eu29dwY3 zj-WQSx1SFLI}FJnS)0xolJdTU+0L zMx^{~L)+O0&j$~lZ)$3!GJMWo8>~h8+4a~tI0_FPGE0L(v#s?VL7OPe+@OP}$X_7X zuG@78D9^4PqXN><-f-)F{>6zlI{PZhOMr^{nU)Trl@5_yidF6DXGA4{S?J4X=@2?r z7Ux<{lXq#RY}1)pPc44K^ePP^DpVHiEW))m*aqC**kqU{vL?UKx+rE(HA-Eu#lGTV z<6L8>iS86Sw{o?%<9tUzXt>e8Z-0?t+P6@gH9o>rTY~Lvtp**2rsK(H{HJTJ+DJzS z_uYDn5oqh!Cv+#$y6@IoH}cAAyup?mk`30fRoP&x;vwp|Uqs8QYz?iA_2)#ZvcW-C zdaV-fyRBHHPSiV@p`tbzXH^~YceK~Giu^U`nV4FEIt>45(Z=w*F||}`f@BgUk;?Cr zEyD6N6$(P<+5)0fw?Ea=K-%kQY!$6UqrbMrzwee}gPJLBB}+f}FG4?Y_GEKQ6V^5OMUUm4yiBpxE$T{?2+2Ps)hYlS+c``gh z*@3D9VHh4he5mTd6Sc=qJQUvBkz>N4@}%UbEjxDdz`=^cY$06i7FFe^9ynNg__$?5 zejX4JvpiVnUo;qH3_=twdRD1AP)k(-Zeyr-)feIDeiNgoVEIW?< zp#v2{nMZ1?C>ESU`(!(>@^0UG(Q!73eh=;0`35SwGqPz!uC*XqD?ExzcALPsee#%36My(p=h0veK=1< z1cTI8I59`d4u%1>r|UcZUtQO>n>G+c{Y41czVxxVw26cgDM5W*8RH}_;6=WL&+nPb z?#^QJ5D6@MJv)~(=Zs}iOIx39Hc$r2GT(8gF7yp7?LQK!{8;qV>@L=Z>${!1p54L`R+EfY1sjJcXDQK>Ljj+};009XVHg=|W;}onuOH@;IX} zz-p2PN=+-LrNYd|(~dM`;^xjVHB*M4UkyKrxGh3MayPdxxFjeOB{O{xT&kr)vM@2; z_y@3jZNS1X!ybANDI^mNIWc=}yp_dt>Vt|+G5)k4=mc>llh1gVxQZMXsmT^;(^9cX z^i*X6z1PE+5)CN_;|?-|UeIHD3yl^e$W(TRx+P^&7~g&HKq7o4+ru}C^Gq7L52*Pf z5qVzDSq#&>kZrLnD)-T*lnrBhEc?CL5j(?W4n-#eJ6J2HT5;rHEAq7nkz;*k*t zSr63#HS{WmYBuT2jGD|ASEjl<;?%QLo^`DJPFWTg-i*4Ok}S_nt&n`#n9tc7v<1PZAsl>c){rI|3{8l8z{$k;# zYV_bifjUs@6jWr*`uPS_a`CuWEmzCs!qf}je~u*OfX?#Y)@6N-`bFH;WEzsR&6owneP#E%=&0|hrVV7!88XbI})Ye1426*k%c`9MTCOp|F*g^ zlq$y^LP{gWENxjlaIaP+_y*LeQ{59iD3 diff --git a/packages/hal/arm/sa11x0/assabet/current/images/redboot_RAM.bin b/packages/hal/arm/sa11x0/assabet/current/images/redboot_RAM.bin new file mode 100644 index 0000000000000000000000000000000000000000..39609f8eb0aeea8ccb56cb463b507d45b554d172 GIT binary patch literal 67272 zc%0n5e|%k4l{dW4xi`s8a@(A?sf0Abp$%Fgz-ftN#R#_$rLV1c3jr!*oC{X1^K|Bk zTD8uDnlvd?ChZ$&3bjOX)IKv6t5)s2R;Dv^ON;bjI!q}=D^}f*=bonuT)L`e3dQEQk~L{X}kRV@gsx5 zG<9n}rqtbsY_{cAq*L3f5BvFLhu>c))oeU*z8W~;DyJAvwc2*7b!Lm&7$|2WV6ibs zc^iX8sf|H%Zey@a^%lHc8v`rl7ndqE(r)sz4U*rx&bGblB!4Q4e4ftNt~M4t#M#LA zZsc2mHpO$-72Zhu8zSvbzE1o9P@7|@`#jWr{K+?7xBuis-F?=dUUwXImoR>t4(iiq)TA!bmE!QI+!Zar{2!0xo^)g6$6Kn{m(ZR=me=yLY(K z_4743KVJ@f{Xf;$>0`PaJ_$!Y(}|c$ClMMDDq`v|0^<&r$CUS|4vm%$jGK>VogGt& z7)BLzgz+D_=D&Z+y~0(CKm9RxVY9o?^E~;+aOjbklJ+0FX-}9h z%;O=?D%8*K%H13g{z_e6#8_9gdi_CM-B7fYs$b;x1RnCH(kR>85?Ee$L3!%~3*XV9 z`hPE#M(3j(mFf;Ih+!Nh%{7unnKVx$4a;bb$5aREU-8I98yZa;+|*zYOZ%7`ZJZxh zaIE8FwL@ii|9z=+5%V7aycxniE6>kczzgP20**1q&!0$Y`p5n*8MepMGR>>MC=D~7 zaSq}-0J9F%-$A%xPN~#7>BmaMTOQs4?{?{%j!(Gj3N;IJh+ijd{!id-%JjW*uFk)y zN{u?_&v?GZ=_)$sThH^iRo_*Nh3}|8uFCon2uTD-#rtXz9Hsg~m`J}=szCU$o;gZA zvzqYF`9&**cxOwXT)2bn4Y!l(vW9ndgN{N|8NBOhLP1=1CRtK1=Q>B`)eHS5bwet7ZqF&%ck#(@GGrj$JW#$dx{)f|d zpEZ58mnxiZ#se_jcD|l0KH3NYCFoeYBpoDfKKlqn`bf>X|yFo zlW!PH6!rMra?E}9+slpDQ5&D27bTQ;8^)xJbji_l1NrX0nR5+kJvUV-d3K>v)4scH z&IiOVHhC-=Lyd#)P>TyuT7vl_<6Miiuhv@{G^Umo8dP;~1hkL!#!(;U$f%`pyxuW+ zJCGOrPu@u%HGR1e^GVe=BHet>3zX}42ZCg}Cr}7BXlvZ-2`<1KwvhH5q?w1b<#;Ak ze~@(g1GdHTvcopU&v6d~Z$ete+ttfut|?O{`_dus>IZFOzHW?D59r7v!G zuQNwlVY&N<`TZ2=h-KO(V`kdgVcruW+`^B=mYDPx!oEMoW3CD6K9s^!5crLz$>jrJ69Vz z%(*SJ1oN{Eb2A3G#fYEYR{Wj?-rJ7>kE%S*6YpN(v9YG-b((tu(p|*O0uLQ)QcF=E zWd%R~Z;&52=4+b3*I@3f#j_KE@{ZuyP&@+=WjAr}hmg_kQp@o230nUta?{8guc@#W$8I-)<;QC+=r^3oQ4S zrP9O7{c=EFk?pYEl{w{pDToWcZjiFLrrm*d61M+@^=s@q6Z4DkTt#~1^ad-1N9qbP z0{70KUFgUSLNAgSa}ejMW#C1K2b^!58=HyqGC%qQ&;h|=;vsRVSH9gRb541Wpsf1@ z$D}O?YYhDA3?1T_H-h(Xyugfi2l91jeu86ZW1K5c$1NE1_yRN5&Jn?d3gAK;>K+3g zjIkdWN2TYB;K3O*yj|}wBh@r4A+hi6``An@Mwb@O7q9cTGz3R-|e2mKI_i2ZpUwPl4s1z?e2g z`cR2>YCPN;lmQPf1|F7A!NWVExY)5jU>(ehb)w!g^CC8mBOl3ee9Iy@QpR~i90MNn zU77N~$$2>iU)qT;syA36{CTI$F|P6H2)-zTFR3Z`((^j_@_BwUI1=`0DvpHf;a;JO zAup=ev(qu1CTu6#z%k6L%zEMB2{YlrL95t?*uu`d@ay1R6?l2wt|QV1K(dPP`U@Ge zbaAXydZ^sAGg^n8WBJ65<>Y+;Ygu0~-r2x5G`7OqBx7CSb$@Sveph}L%1&ecTh4Wb zt_6_I_U{6ZUbeZaluZ_zghphCYTRVO_MRTL(Fds~x4c09 zFKpY|DSUmDZ-~CL{d)}V>$UZUqAhdf-hlE&4D#N9`5wYU8CYXZFzv_+@bmAfl64_} zyT}%4;!V|Gfqgaoa*PN5Dz$2l7& z_qJkFraB1W(x~PH<&ce@0c@I_If6Gg#kelF34L$$<^&1I;T*?a%mu#J;oU<28@=j) zbqr%%=1*x?>@4ll_`Z*N&XGQpMgBx!hPgvsBjJ|SaMLuvI~v#>{QXF96~?5Q<^Fo` z{*#s(X@8Tg+TU!ey?8b?*lMU=zlR}NXRFn3o*c*UT;1d}+f6ylKQ;Y{x-;{iEgU^d z{kz^Yr9BP$*)XNdtw`5s@~^1G{71M!;PjaAYBBe*pnc|GkXnd&1-yv4PY#Q$;ynpI z<}vWGj|ICe^5;E;FW74IyXN;1{Qfq6S71Doz_D*K9`NK?U>&LdwFP=VlVkQ|P~qw^ z>$Ny$za__tQ%;&w2_z#=OkT^UoSu4t%TfBe?4Wcbky^Jk-OqJAiwu zP1lLVsEIZpq^pKl+OP_D)OHub9%l^Ul(~ zbJ3orDd}p@lCB2n)--BfmUFTnVJm`#`L`$1pFQZ$UbOLL(~kd!Htvb^XOHR6M@)aR zNc$_3Hp8@vX%FkPpo5gXZV}n*rs9?Op5<6+9=~b;^~!sS^tdgL_2DAY^RT|Sw{JMC z^Yfb4)HB}ox{Gn|(P74u_xmDf80gmBEQ{qlUn*U}w(SL;QU3T=TnX)^yqQJWdy$U( zeir%3@9#yQi90_7oWk}IkLJ&s4A*~EXTtS|q`_0t?LJGo?;su9lQrYK*1(KBYIe%} z+GzV36*}?Q2;de+EAg3`d*rC+u8npe(Rhn;N-VX~MJrHa_nYW9c71r1@4Qbtj~we({U=#&+&D?foM4&XDneyCW?|W@7v7G3pon zB4nnK%aP^-cpg@oW*!FYjsg}J8(3gXt~wlTJ+hI(9)f&7+Q|IKbJ6chlK1DPzu=LvH2UAiIDXwR z`n)v_vDfAQzjeAax*lzyZppE1$LzSp*(zk&KttNoqNje05hqT~8yvaSw#LRMDGGk@t>4E6R<}aiC>-7aoM8_n1GY?yCPl5PlFX$SkjIC0eMAsYVJD!v& zwcOn+dq-?<*!F0DqOy$WLLg7Cq28H&aQe8vn_oql2K>h?qYI_}c|`}tsZ-#Tk2Uz< z(=k?g%=K({p^GwvH#f&TkVn32JEQ^W!YRy&B+^fJHw>3BM~P{b4Wxa@s_ju+n{{X8CAk8+yv+s+&Z-MOi_fO zbB(?fzZ+6Z3#=pV^%fdHBV5pkQ@_`924z$=L}*!qp=B(Cc^Z-SmnLl!(z>7vjpXy( zT=C1mnNHc$qTY$P)F!-Nhmj@9-heD|j?n4#1s8pMj`d_74XB${sYiz?=QS7}ka)5T zedZWdiL9y~Ck$dr^FMWl4y7@cwviu6hrRWk0Yn{ue@~P>= zJ<+->>lq-fa2?Cnaz6#~@N3m0Yb?tiAFq4OUhFy|CTJ~j1d*%aHe`?>U8znraVZ1|{@G15MbEktmh$1{585Udu z{jNef@-QpW?~ijIbUEtEYzb6fO9_VI~*-wEMod8@ayd%T&u6|~id1XyVKQqky@u;2!->i`w-ffHK4pz+BC-F}+3M;_r`30Yx3`2KFx{Wj4zu?&{Sa;EB9A=l(d>*L%H zPPK}jjyfUISj+kG5c$E+$bQnqchd8zddk-;hh=;)Qii2|G&HrG=?Zg5<`MXYDSAZ4 zv5t8tV>kGL-Dw1@mAf-~J?Fk{l54QKC$JZQyIRmYOg&i@=-JEMUw7^anmmSHu`Tml ztc`eY#(T5ak@W_P@ZN%V*45(CrmVM+1n#V49<>hg(bWa+@q^Yr#5G!_)<<}9j>D#) z26^{GX8k0_g1@u){olnV>`u`+lfP>;{2uj+D;}B5O9^j@d=~JA`}fL4Jqreg)q-_0 z@2WIUX8JRL(1pGXpif=s%K-Y+g}w}+PhIHC0Q%Gwti*c@-pPwU^{VERSTEZ$LAx}3 zqr4h%O>ATwEdw;+cay7mCEA?KH}N684ELkS&+dJzEqv^$`L?1Cwf!x&=ulH{wa4}6 zqWjH+y5XCObH{m%bwLltw;eR2+1n!fq~r4nW6U@^5?AYN0pAFogtkg(Lz_oC!Y;Ah zS%$b}cz5t#i+5YC0dLkei|Z%LiAQw89^T6%?;J1B(9_+RH>VK}%(GQLLhD;5c+5JK zpYlSUTK1`{&bCHSr`KlosYzSOXO(s6K3U#lL#?)-Kkrlta?PVcyV$mRd4Ft(<8zMr zO}wf#zpvo_Lq^A4h_R)t5Er`vzvzO`agDxW&Py0~)b*|uZCG@9F;m7g+UuC#EQ{|m zBW1B1mdA1`O*vAA(aDWX;s0aQ(f@kz{`sIg*^6w|gpfj5jWE?7=X|8mar@+b_W2dh zhxTMs17x+4={DAb`cCjRedxmivAcXzO~v!uYF;}Z%bb0F;x)fJH8Y-f%els@Gh~^t zFO(hA7u)I-`jEi0;bPsF(9URv=||Gh{dg1VO#X@OmG)SZ+r#;C7`S}c$a#mdp`6ki z902~=8ScBS3zFpBX+M_LeBxa4bved8DEpI@kTqgzhS(Ftl*2uW`ncCOgn2VWT0ny(UxJv$9LL;)=_p( ztqUk8=sHkFsz>-4%6-)9u1S->-7>L0lFucLjPO;Y(@RiZ&%*9p9dQC>>O5)LI}7ua zMe-2G&Q?~qH@V2r>x0oTb~JpfEP2U}2n;$RFz65%tc=1SYhXZmJ*#1`gtQ)Qu5|zd zrD0$x0|VN>7#OhqTo)RIN9+bKI2d%!U6-qMyMv_C>q5&}+WLC?sUhAp0l&ADt5Hwp zRb*`h-1NHEFFZsT??l!hmQiw4VTD<-by({fC^(mFEB@W!+Y4(A%z=^Xg!oZ&5xr**x@ zItE3SuoqD0unucO*YH(_zszPeFTR8N6Q{e-z0l8BP=}?+hhAR*FJ1uOcnjNTqb-O49Y}I>-EqJ)~Qd@A5Hq|cW1;l3%>JVBl zvsD|ys`uCt+NtHl3Xu~Q7cB4aaLm{(TZTq4&5N=JJ(Xsqi?o+!{zXpT>{|4#S8Ql? z+e0~c#X@^ro|QGh%}JfY8*^N_My1IcXq>7OyIU<&mq%r4mvC<*K8p^9r+g=^uHdi%MEoI=`g#tmC*U?K(Qn59)b!G#EiT%R4Fa=H-YD zqOqkeI+O>2Gop+0HcI|hHK9MHd>+~zSlaF&|2E+IGR%b~{!-xB1CYrzuDgAH%#9JCzof`_Xx%ZEF+KdPv0hyby5ZyEIwH&bf)WvF) z_Ug)cYB=FMJ{-n}=~zz1MQSu`7t8x4`j|kQ6102k^uM|cbMX>0PL{W%5ObdyuA~ih zr*AEjJ@vX~7_KOkeZf^d5%lwU=k9Dx=44;l~obED{KY_u_n zHh!m68l8%J;d(HeV?$k%_vE-OS8I;za3(h$?N;uS)DeDt8s<4%I_hKx2y@>%D4>#VBF+X2hXrwsdV8SOVw|W4F-RUcdlcf!*eU% z{~Avhc-D?*6W|lKHV=Q2IE1yfLfbw*vj*uhh^w@?7XLW7Q19=F{_{F*`#Qq$yf{m~ z{{`7U^^ishZU9HTR zb|LcLU~CX_sH^9lw(9%;IJ6-+i)_{Yjz7JOrbTDQ?RkUc{Wb~ z^sx^q)lpDRzHkY~wu&-e-^PGCcJecVFKY9UPEVVu%=eJ)`&F11oD+`lQOjjdHO$wP zWgUA@G-azHFM|$sY!o}T|AH*|x7^2ab(**u7$U7=x=N4qLZ>?y__os2t<+Q8FD|ft ze)}fM_)FHAX1+N=StoUI14Cs#%cT88TYhJ1uqe)8 z=egdsg>%)-#aM^G?+)-oW!_QQBN*3>r`H!4H?A8;+6r~!jEc0sPpJ^^oRQMlJ z3Cb9tFT(G2ystnTMb5b|qK@ddmrA9_Nz= s*q&LO6l&9KuP`sS_NlqroR$ouKiy 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 yxi5f!6$rd9;KeaY+K!F+fv%fn5~u} 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%0AE08v)?wnQv>WYj2A;9+^poNNzf%b92ptHV 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 diff --git a/packages/hal/arm/sa11x0/assabet/current/images/redboot_RAM.srec b/packages/hal/arm/sa11x0/assabet/current/images/redboot_RAM.srec new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/assabet/current/images/redboot_RAM.srec @@ -0,0 +1,3208 @@ +S02B00002F776F726B2F617373616265745F726564626F6F742F52414D2F696E7374616C6C2F62696E2F7265DF +S21902000018F09FE518F09FE518F09FE518F09FE518F09FE50028 +S21902001500000018F09FE518F09FE54400020044010200C80161 +S21902002A0200000202007C02020000000000640302004C03027A +S20902003F006000020053 +S2190200440000A0E354149FE5082091E5082080E5402091E52808 +S2190200592080E5000000EF0000A0E31C149FE5282091E52820DA +S21902006E80E5182091E5182080E5382091E5382080E51C20916E +S219020083E51C2080E53C2091E53C2080E50C2091E50C2080E515 +S2190200982C2091E52C2080E5102091E5102080E5302091E530A8 +S2190200AD2080E59CD39FE5D200A0E300F029E198D39FE5D100B0 +S2190200C2A0E300F029E188D39FE5DB00A0E300F029E180D39F7C +S2190200D7E5D300A0E300F029E100F069E168D39FE574139FE5D4 +S2190200EC74239FE50000A0E3020051E10200000A040081E402AF +S2190201010051E1FCFFFF1A480100EB3C0700EB0000A0E38C1318 +S2190201169FE5042091E5042080E5242091E5242080E5BA0B00FE +S21902012BEB200100EB7A1200EBFEFFFFEA0000A0E300F0A0E170 +S2190201400BB0ADDE14D39FE501582DE900004FE101002DE90D2F +S219020155C0A0E100000FE11F00C0E3130080E300F029E10DB06E +S21902016AA0E1DCD29FE50D005BE10300008ACC029FE500005B43 +S21902017FE10000009A0BD0A0E14CD04DE2FF0F8DE81F009CE81C +S219020194200010E304404402024044123C008DE500108DE52CBE +S2190201A9208DE540308DE538408DE534E08DE54C008CE230B0BC +S2190201BE8DE50140A0E34B0000EA5CD04DE2FF0F8DE800004F8D +S2190201D3E1200010E304304E0202304E123C008DE540C08DE5E6 +S2190201E838308DE534E08DE55C008DE230008DE50240A0E33D2C +S2190201FD0000EA58D29FE504E04EE201582DE900004FE101009A +S2190202122DE90DC0A0E100000FE11F00C0E3130080E300F0292B +S219020227E10DB0A0E11CD29FE50D005BE10300008A0C029FE5C2 +S21902023C00005BE10000009A0BD0A0E14CD04DE2FF0F8DE81F87 +S219020251009CE83C008DE500108DE52C208DE540308DE53840C5 +S2190202668DE534E08DE54C008CE230B08DE50340A0E31E000094 +S21902027BEADCD19FE504E04EE201582DE900004FE101002DE982 +S2190202900DC0A0E100000FE11F00C0E3130080E300F029E10DD5 +S2190202A5B0A0E1A0D19FE50D005BE10300008A90019FE500002C +S2190202BA5BE10000009A0BD0A0E14CD04DE2FF0F8DE81F009C6D +S2190202CFE83C008DE500108DE52C208DE540308DE538408DE571 +S2190202E434E08DE54C008CE230B08DE50440A0E3FFFFFFEA447A +S2190202F9408DE50D00A0E18A0000EB0DC0A0E100000FE1C00036 +S21902030E80E300F029E10000A0E10000A0E134E09CE530D09D42 +S219020323E51F00C0E3120080E300F029E10CD0A0E138E09DE5B1 +S2190203383C009DE540C09DE500F069E1FF0F9DE80EF0B0E10409 +S21902034DD19FE504E04EE201582DE900004FE101002DE9040071 +S21902036200EAF0D09FE504E04EE201582DE900004FE101002D70 +S219020377E90DC0A0E100000FE11F00C0E3D30080E300F029E151 +S21902038C0DB0A0E14CD04DE2FF0F8DE81F009CE83C008DE500F8 +S2190203A1108DE52C208DE540308DE538408DE534E08DE530B0CE +S2190203B68DE50D90A0E10900A0E1E50000EB0040A0E10400A0DC +S2190203CBE1D8209FE5009082E5A4109FE5041191E798209FE5C1 +S2190203E0046192E70920A0E10FE0A0E106F0A0E10DC0A0E10044 +S2190203F5000FE1C00080E300F029E10000A0E10000A0E134E0C9 +S21902040A9CE530D09DE51F00C0E3120080E300F029E10CD0A026 +S21902041FE138E09DE53C009DE540C09DE500F069E1FF0F9DE839 +S2190204340EF0B0E10EF0A0E100000FE10EF0A0E10D00A0E10E93 +S219020449F0A0E150080300500C0300501C030050070300D007CC +S21902045E030050080300C806030030C5030030C503002401033B +S2190204730024010300C80603002801030018020300080303001D +S219020488000002002401030065436F73203A20004175672032BB +S21902049D342032303030000000020000000200CCC203000DC0CB +S2190204B2A0E100D82DE930309FE530009FE5001093E504B04C9F +S2190204C7E228C09FE50C3091E50C308CE50C3090E5102091E515 +S2190204DC0C3081E510208CE5103090E5103081E500A81BE9F8C2 +S2190204F103030020000200501C03000DC0A0E100D82DE91C20E0 +S2190205069FE51C109FE5000092E50C3091E50C3080E51020911A +S21902051BE504B04CE2102080E500A81BE9F8030300501C03004F +S2190205300DC0A0E130D82DE968309FE504B04CE2002093E500AD +S21902054540A0E1000052E30400000A443094E5040053E301006E +S21902055A001A382084E530A81BE940509FE5003095E50130835C +S21902056FE2003085E5010053E30000001ACBFFFFEB28309FE513 +S219020584004083E5210300EB003095E5013043E2003085E5000A +S2190205990053E30000001AD5FFFFEB30A81BE934040300701C95 +S2190205AE030058C203000DC0A0E130D82DE924309FE504B04CCD +S2190205C3E220409FE50350A0E1030054E10300003A0FE0A0E19D +S2190205D804F014E4050054E1FBFFFF2A30A81BE9C4060300C451 +S2190205ED0603000DC0A0E100D82DE90030A0E10120A0E104B0A6 +S2190206024CE20C009FE50310A0E1E80C00EB0000A0E300A81B65 +S219020617E948E702000DC0A0E100D82DE904B04CE2FEDEFFE7CD +S21902062C00A81BE90DC0A0E110D82DE970209FE570309FE57012 +S219020641109FE50040A0E3004082E5004083E564209FE50130BE +S219020656A0E3003081E55C309FE5004082E5004083E508208266 +S21902066BE20F32E0E3003082E504B04CE2CF0000EB40309FE566 +S219020680004083E50922A0E3004082E58E0A00EB101F11EE0FA1 +S2190206951081E3101F01EE101F11EE011A81E3031081E3101F64 +S2190206AA01EE10A81BE904000590080005900C0005901000049E +S2190206BF9014000490100000900DC0A0E130D82DE90030A0E12A +S2190206D4010040E2000053E304B04CE21B0000DA6C509FE5009A +S2190206E9E0A0E3014040E2001095E5002095E5010052E10300D4 +S2190206FE001A50309FE5002093E5010052E1FCFFFF0A09C2A087 +S219020713E300309CE5000053E30400000A012052E000309C458E +S2190207280320824002E08EE0010000EA023061E003E08EE002CF +S21902073D005EE3EAFFFFDA0030A0E10400A0E1000053E3E4FF4E +S219020752FFCA30A81BE9100000900DC0A0E100D82DE984309FB7 +S219020767E5002093E504B04CE2FF0812E31000A0130500001A39 +S21902077CFF0C12E30800A0130200001AFF0012E31800A00300DB +S21902079100A01358109FE558C09FE55230A0E1010013E30C000B +S2190207A6000A0B0050E30700001A003091E50C2003E05230A0F7 +S2190207BBE1010013E30300001A010080E21B0050E3F9FFFF9AEB +S2190207D000A81BE9200080E200A81BE9010080E2070010E3ECEA +S2190207E5FFFF1A0000E0E300A81BE9000005901800049000F838 +S2190207FAFF0F0DC0A0E100D82DE92A0050E30B00A0C314109F0B +S21902080FE50120A0E3003091E504B04CE21230C3E1003081E540 +S21902082400A81BE9040005900DC0A0E100D82DE92A0050E30BCF +S21902083900A0C314109FE50120A0E3003091E504B04CE212302A +S21902084E83E1003081E500A81BE9040005900DC0A0E100D82DFC +S219020863E90B3040E21F0053E304B04CE20400009A1F3000E22D +S2190208780120A0E308109FE51223A0E1002081E500A81BE91824 +S21902088D0004900DC0A0E100D82DE90B3040E21F0053E304B019 +S2190208A24CE23400009A000051E31900000A000052E30B0000A7 +S2190208B70A1F1000E2BC009FE50120A0E3003090E51221A0E1CD +S2190208CCB0109FE5023083E1003080E5003091E5023083E10065 +S2190208E13081E500A81BE91F1000E28C009FE50120A0E30030C4 +S2190208F690E51221E0E180109FE5023003E0003080E5003091FE +S21902090BE5023003E0003081E500A81BE9000052E30B00000A4A +S2190209201F1000E254009FE50120A0E3003090E51221A0E1488D +S219020935109FE5023083E1003080E5003091E50230C3E100303B +S21902094A81E500A81BE91F1000E228009FE50120A0E30030905E +S21902095FE51221A0E114109FE5023083E1003080E5003091E56A +S2190209740230C3E1003081E500A81BE910000490140004900DF6 +S219020989C0A0E100D82DE904B04CE21CC09FE500309CE5003000 +S21902099EC3E1010000E0003083E100308CE51224A0E300308218 +S2190209B3E500A81BE9600100000DC0A0E100D82DE904B04CE218 +S2190209C800A81BE90DC0A0E100D82DE90C309FE50F0000E2007A +S2190209DD00D3E704B04CE200A81BE978E702000DC0A0E100D82F +S2190209F22DE920209FE5000092E504B04CE2000050E301000082 +S219020A07CA220600EB00A81BE90030E0E3003082E500A81BE914 +S219020A1C140403000DC0A0E100D82DE9FF0000E2613040E205CE +S219020A310053E30010A0E104B04CE20100008A570040E200A854 +S219020A461BE9302040E2FF3002E2090053E30100008A0200A09F +S219020A5BE100A81BE9413040E2050053E30100009A0000E0E3C6 +S219020A7000A81BE9370041E200A81BE90DC0A0E110D82DE9006C +S219020A8530A0E304B04CE214D04DE214304BE524404BE21C008C +S219020A9A0BE5D2FFFFEBFF0000E20410A0E1020000EB010050E1 +S219020AAFE3F9FFFF1A10A81BE90DC0A0E170D82DE90140A0E10D +S219020AC41050D4E504B04CE2000055E30800001A240050E32842 +S219020AD900001A0130A0E31030C4E50C5084E5005084E502309A +S219020AEE43E2043084E5210000EA010055E31700001A23005042 +S219020B03E30600001A080094E50C1094E50030A0E30130C0E732 +S219020B180220A0E31020C4E5160000EA0C1094E5020B51E3036A +S219020B2D00001A0030A0E31030C4E50000E0E370A81BE90030E7 +S219020B4294E5082094E5003083E0003084E50100C2E7013081F5 +S219020B57E20C3084E5070000EA020055E30700001AFF0000E2CE +S219020B6CABFFFFEB0002A0E1040084E50330A0E31030C4E5004A +S219020B8100A0E370A81BE9030055E32300001AFF0000E2A1FFC0 +S219020B96FFEB043094E50020D4E5003083E1043084E50300524D +S219020BABE10200000A2D00A0E3AA0500EBDCFFFFEA2B00A0E385 +S219020BC0A70500EB082094E50230D2E53A0053E31000001A005E +S219020BD500D2E50C6094E5A00500EB083094E50100D3E59D05CC +S219020BEA00EB0500A0E1060050E10700008A0210E0E308309415 +S219020BFFE50020D3E7033080E0010080E20120C3E7060050E123 +S219020C14F8FFFF9A0100A0E370A81BE90000E0E30030A0E3100E +S219020C2930C4E570A81BE90DC0A0E1F0D92DE904B04CE200703B +S219020C3EA0E168809FE52400A0E3850500EB0050A0E30540D7A2 +S219020C53E70560A0E1050054E10700000A0400A0E17E0500EB7A +S219020C68016086E2043085E00640D7E7FF5003E2000054E3F7A8 +S219020C7DFFFF1A2300A0E3760500EB2502D8E7740500EB0F30AE +S219020C9205E20300D8E7710500EB52FFFFEB7F0000E22B005025 +S219020CA7E3E5FFFF1AF0A91BE978E702000DC0A0E1F0DF2DE920 +S219020CBC90009FE50020A0E38C309FE504D04DE2002083E50496 +S219020CD1B04CE2001090E503A0A0E1020051E14B0000DA009097 +S219020CE6A0E16C809FE56C309FE5002093E5000052E3190000FB +S219020CFB0A003090E554109FE5030053E30300009A003098E5C3 +S219020D10030013E30440A0030800000A30209FE5003092E50159 +S219020D2540A0E3040053E10300009A003091E5010013E301403C +S219020D3AA0130240A0032C004BE2001091E50420A0E1BF0700BB +S219020D4FEB070000EA742C030018040300782C0300802C030094 +S219020D64003098E50020D3E50140A0E32C204BE500309AE500FF +S219020D790053E32400001A03C0A0E104005CE1150000AA2C601A +S219020D8E4BE270E09FE50A70A0E16C509FE50600DCE700109E96 +S219020DA3E52032D5E70130C1E4002097E500108EE5000052E317 +S219020DB81500001A0F3000E20320D5E70120C1E400309AE5007B +S219020DCD108EE5000053E30E00001A01C08CE204005CE1EDFFCD +S219020DE2FFBA002099E50900A0E1003098E5022064E000208958 +S219020DF7E5043083E0003088E5000052E3010000EA7C2C0300FC +S219020E0C78E70200B5FFFFCAF0AF1BE90DC0A0E170D82DE90499 +S219020E21B04CE268C09FE500108CE564109FE5000081E56000EC +S219020E369FE5002080E55C209FE5000053E3003082E50C60A0BE +S219020E4BE10A00000A4C409FE50050A0E3005084E5003094E551 +S219020E6093FFFFEB002094E5003094E5050053E10200000A056E +S219020E7500A0E170A81BE98CFFFFEB002096E50030A0E30030D1 +S219020E8AC2E5000096E570A81BE97C2C0300782C0300742C0319 +S219020E9F00802C0300180403000DC0A0E1F0DF2DE924019FE58D +S219020EB424219FE504D04DE20070A0E3007082E504B04CE200AA +S219020EC93090E50290A0E1070053E15A0000DA04319FE500200D +S219020EDE93E50010D2E503A0A0E1070051E15400000AF0809FEF +S219020EF3E5F0109FE5003091E5000053E31000000A003090E5DF +S219020F08030053E30300009A003098E5030013E30450A0030A50 +S219020F1D00000AB4209FE5003092E50150A0E3050053E105009D +S219020F32009A003098E5010013E30150A0130250A0030000006C +S219020F47EA0150A0E30040A0E3050054E1170000AA84609FE5AA +S219020F5C003096E50100D3E4003086E5ACFEFFEB0002A0E10064 +S219020F713099E5FF7000E2000053E33000001A00309AE5010035 +S219020F86D3E400308AE5A3FEFFEB000087E1003099E5FF7000E9 +S219020F9BE2000053E32700001A2C304BE20370C4E7014084E293 +S219020FB0050054E1E8FFFFBA2C109FE5003091E5000053E309A6 +S219020FC500000A2C004BE2001098E50520A0E12B0700EB060057 +S219020FDA00EA742C030018040300782C03007C2C0300802C034E +S219020FEF00003098E50070C3E5003099E5000053E30F00001A14 +S21902100430309FE5002093E50300A0E1003098E5022065E000BC +S2190210192080E5053083E0003088E5000052E3050000DA0030BD +S21902102E9AE50020D3E5000052E3000000EA742C0300ABFFFFE4 +S2190210431AF0AF1BE90DC0A0E170D82DE904B04CE25CC09FE5A6 +S21902105800008CE558009FE5001080E554109FE5002081E550FC +S21902106D209FE5000053E3003082E50060A0E10A00000A404081 +S2190210829FE50050A0E3005084E5003094E584FFFFEB00209478 +S219021097E5003094E5050053E10200000A0500A0E170A81BE9C8 +S2190210AC7DFFFFEB000096E570A81BE9782C03007C2C03007465 +S2190210C12C0300802C0300180403000DC0A0E100D82DE904B026 +S2190210D64CE2BC0500EB08209FE50130A0E3003082E500A81B6A +S2190210EBE9FC0303000DC0A0E170D82DE904B04CE20060A0E38D +S2190211000150A0E1006085E50040A0E1060000EA003095E501DB +S2190211156086E2002094E5033280E1003085E5012082E2002088 +S21902112A84E5002094E50030D2E5000053E30300000A0300A0DA +S21902113FE136FEFFEB000050E3F0FFFFAA0600A0E170A81BE927 +S2190211540DC0A0E170D82DE904B04CE202E0A0E10060A0E300AB +S2190211694051E20400001A3030A0E30130C0E40030C0E502004A +S21902117EA0E370A81BE907308EE2000053E3073083B2C3E1B019 +S219021193E11300000A50509FE501104EE28131A0E134C3B0E122 +S2190211A80020A0030120A01301005EE30030A0130130A0030398 +S2190211BD2092E10600000AFFC00CE22C32D5E70130C0E40F20A8 +S2190211D20CE20230D5E7026086E20130C0E400E051E2ECFFFF89 +S2190211E71A0600A0E170A81BE978E702000DC0A0E100D82DE992 +S2190211FC04B04CE200A81BE90DC0A0E100D82DE904B04CE2002B +S219021211A81BE90DC0A0E170D82DE9B8209FE5003092E504B0B2 +S2190212264CE2000053E30200000A003092E50FE0A0E103F0A092 +S21902123BE19C209FE5003092E5000053E30300000A0030A0E3D9 +S219021250003082E50250A0E3020000EA580A00EB450A00EB00A3 +S21902126550A0E1620C00EB000050E30000000A6A0C00EB5A0C3F +S21902127A00EBE0FFFFEB3C0C00EB0300A0E3100600EB0300A047 +S21902128FE3DB0500EB48609FE5000055E30600000A40409FE51D +S2190212A4003094E50500A0E10FE0A0E103F0A0E1000050E3F9EF +S2190212B9FFFF1A450C00EB003096E5000053E30200000A0030A8 +S2190212CE96E50FE0A0E103F0A0E170A81BE910040300C8C203E5 +S2190212E3000C040300000403000DC0A0E1F0DD2DE904B04CE2C2 +S2190212F824D04DE20050A0E10040A0E348604BE2F4A09FE50036 +S21902130D309AE50180A0E3000053E30500000A0400A0E1061031 +S219021322A0E10FE0A0E103F0A0E10080A0E1020000EA0400A0B9 +S219021337E1B90300EB48000BE50600A0E1103044E2070053E3B0 +S21902134C03E0A0E1017084E21100008A0840A0E30020A0E3023F +S219021361C0A0E144004BE20010A0E1043082E2012082E203C04D +S219021376C1E7040052E1FAFFFFBA0010A0E106C0A0E10320A02F +S21902138BE30130DCE4012042E20130C1E4010072E3FAFFFF1AEF +S2190213A0000058E30700000A0510A0E107005EE30C20A09304A4 +S2190213B520A0830030A0E395FEFFEB0050A0E1100000EA0520B9 +S2190213CAA0E107005EE31730A0930730A083010073E37810A0EB +S2190213DFE30300000A013043E20110C2E4010073E3FBFFFF1A8B +S2190213F407005EE30200009A085085E2010000EAE8C10300188B +S2190214095085E20740A0E1190054E3BCFFFFDAF0AD1BE90DC0F6 +S21902141EA0E1F0D92DE904B04CE20CD04DE20040A0E31A70A078 +S219021433E30130D0E40180A0E124000BE5500053E31700001A08 +S21902144824004BE228104BE226FFFFEB040050E10800000A2458 +S21902145D201BE50130D2E4FF3003E224200BE53D0053E30200AF +S219021472001A28401BE5017084E2090000EA74209FE50030D2F8 +S219021487E50810A0E1000053E32900000A0130C1E40130F2E584 +S21902149C000053E3FBFFFF1A240000EA0450A0E1070055E118B3 +S2190214B10000AA0060A0E32C104BE2104045E2070054E32C60E8 +S2190214C60BE50C20A0930420A08324001BE50630A0E1DAFEFFC2 +S2190214DBEB2C101BE50500A0E1560300EB070054E30300009A29 +S2190214F024301BE5083083E2020000EA8CE7020024301BE51822 +S2190215053083E2015085E224300BE5070055E1E7FFFFBA282015 +S21902151A9FE50030D2E50810A0E1000053E30300000A0130C17C +S21902152FE40130F2E5000053E3FBFFFF1A0030A0E30030C1E5E2 +S219021544000000EA90E70200F0A91BE90DC0A0E1F0D82DE974EB +S219021559239FE504B04CE2C0D04DE20040A0E10060A0E300305A +S21902156ED4E50270A0E10060C2E53F3043E2340053E303F19F1D +S21902158397F40100EA5C1602005C1D0200BC1602002C1C0200C9 +S219021598E41A02005C1D02005C1D02005C1D02000C1802006C34 +S2190215AD1D02005C1D02005C1D02005C1D02005C1D0200EC1813 +S2190215C202005C1D02005C1D02000C180200A41602005C1D02B8 +S2190215D700E41A02006C1D02005C1D02005C1D02005C1D0200FC +S2190215ECE81802005C1D02005C1D02005C1D02005C1D02005C99 +S2190216011D02005C1D02005C1D02005C1D02005C1D0200D41CD2 +S2190216160200E41A02005C1D02005C1D02005C1D0200B016027D +S21902162B005C1D02005C1D02005C1D02000C1C02005C1D02008D +S2190216401C1802005C1D02005C1D02005C1D0200981602002413 +S2190216551C0200E41A0200580900EB450900EB5330A0E30030A0 +S21902166AC7E50020A0E30320C7E55C129FE54032A0E10F30031F +S21902167FE20320D1E70F0000E20030D1E70120C7E50230C7E50E +S219021694B40100EA010084E27E0200EBB10100EA010084E2D2F4 +S2190216A90200EBAE0100EA0700A0E10CFFFFEBAB0100EA01305B +S2190216BED4E5000053E30A00001AF10100EB08129FE50030D181 +S2190216D3E50720A0E1000053E38C01000A0130C2E40130F1E5C3 +S2190216E8000053E3FBFFFF1A870100EAA4604BE2A0504BE201DC +S2190216FD3084E2A0300BE50500A0E10610A0E177FEFFEB0000FF +S21902171250E32400000AA0201BE50130D2E4FF3003E2A0200BD4 +S219021727E52C0053E31E00001A0500A0E1A8104BE26CFEFFEB68 +S21902173C000050E31900000AA0201BE50130D2E4FF3003E2A0E0 +S219021751200BE52C0053E31300001AA4101BE5000051E30B00EA +S219021766000AA8001BE5E00100EB001050E20300000AA0001BDF +S21902177BE5A4201BE50030A0E32FFEFFEBA4201BE5A0301BE54B +S219021790823083E0A0300BE5A0201BE50030D2E52C0053E3015E +S2190217A5308202D4FFFF0AA0301BE50020D3E5000052E30900B2 +S2190217BA001A18119FE50030D1E50720A0E1000053E350010037 +S2190217CF0A0130C2E40130F1E5000053E3FBFFFF1A4B0100EA97 +S2190217E4F4109FE50030D1E50720A0E1000053E34601000A014B +S2190217F930C2E40130F1E5000053E3FBFFFF1A410100EA04007E +S21902180EA0E10710A0E100FFFFEB530100EAAC504BE20500A0B0 +S219021823E1013084E2AC300BE5B0104BE22EFEFFEB000050E32F +S2190218381B00000AAC201BE50130D2E4FF3003E2AC200BE52CC0 +S21902184D0053E31500001A0500A0E1B4104BE223FEFFEB000098 +S21902186250E31000000AB0001BE50710A0E1B4201BE50130A030 +S219021877E366FDFFEB000050E33901001A58109FE50030D1E5CC +S21902188C0720A0E1000053E31E01000A0130C2E40130F1E5005B +S2190218A10053E3FBFFFF1A190100EA2C109FE50030D1E5072011 +S2190218B6A0E1000053E31401000A0130C2E40130F1E50000530F +S2190218CBE3FBFFFF1A0F0100EA7424030078E7020090E702009C +S2190218E094E7020098E702000160A0E3B8504BE20500A0E1014E +S2190218F53084E2B8300BE5BC104BE2FAFDFFEB000050E36B00F1 +S21902190A000AB8201BE50130D2E4FF3003E2B8200BE52C00539D +S21902191FE36500001A0500A0E1C0104BE2EFFDFFEB000050E3BE +S2190219346000000AB8001BE50130D0E4FF3003E2B8000BE53A9A +S2190219490053E35A00001A000056E33E00000AC0301BE5000067 +S21902195E53E32400000A9C504BE2C0301BE50040A0E3030054E6 +S219021973E11100002A0510A0E1B8201BE50130D2E40430C1E70B +S219021988FF3003E2B8200BE57D0053E30300001A0130D2E42090 +S21902199D3083E30430C5E7B8200BE5014084E27F0054E3020091 +S2190219B2008AC0301BE5030054E1EEFFFF3A0500A0E1BC101BD4 +S2190219C7E50420A0E1AD0400EB040050E10700001AC0201BE5A8 +S2190219DCBC301BE5022064E0C0200BE5043083E0BC300BE5005A +S2190219F10052E3DBFFFF1AC0301BE5000053E30900001A28132E +S219021A069FE50030D1E50720A0E1000053E3BE00000A0130C2C1 +S219021A1BE40130F1E5000053E3FBFFFF1AB90000EA04139FE53D +S219021A300030D1E50720A0E1000053E3B400000A0130C2E40140 +S219021A4530F1E5000053E3FBFFFF1AAF0000EABC101BE5C020F1 +S219021A5A1BE50130A0E378FDFFEB000050E30900000AC0129FA6 +S219021A6FE50030D1E50720A0E1000053E3A400000A0130C2E42D +S219021A840130F1E5000053E3FBFFFF1A9F0000EA9C129FE5003B +S219021A9930D1E50720A0E1000053E39A00000A0130C2E40130C1 +S219021AAEF1E5000053E3FBFFFF1A950000EA78129FE50030D16F +S219021AC3E50720A0E1000053E39000000A0130C2E40130F1E5CC +S219021AD8000053E3FBFFFF1A8B0000EA013084E2C4300BE5C4F5 +S219021AED504BE20020D4E50030A0E3C8300BE5530052E3430021 +S219021B0252130700001A0500A0E1C8104BE276FDFFEBC4201B5A +S219021B17E50030D2E53B0053E301308202C4300B050500A0E136 +S219021B2CCC104BE26EFDFFEB000050E30100000ACC001BE5270E +S219021B410800EB0300A0E3E00300EB0300A0E3AB0300EBC8005A +S219021B561BE5000050E30800000AD8219FE5003092E5000053B7 +S219021B6BE30400000A003092E50FE0A0E103F0A0E1000050E3AF +S219021B80C8000B05C8501BE5000055E30300000A0900A0E3C8C0 +S219021B95000BE5A80000EB740000EA990A00EB000050E304008E +S219021BAA000A6330A0E30030C4E588219FE5623043E200308290 +S219021BBFE50030D4E5530053E3730053130600001A0500A0E134 +S219021BD486FDFFEB68219FE568319FE5003082E5AD0900EB0125 +S219021BE90000EA0100A0E37FFDFFEB0300A0E3B40300EB0300E1 +S219021BFEA0E37F0300EB0000E0E35A0000EA3C319FE500209330 +S219021C13E50FE0A0E102F0A0E10100A0E3540000EA330300EB0A +S219021C284F0000EAD0004BE2013084E2D0300BE5D4104BE22BA7 +S219021C3DFDFFEB000050E31800000AD0201BE50130D2E4FF3049 +S219021C5203E2D0200BE52C0053E31200001A0130D2E4D0200B41 +S219021C67E5430053E30200001AD4001BE5220400EB010000EA17 +S219021C7CD4001BE51A0400EBA8109FE50030D1E50720A0E100A5 +S219021C910053E31E00000A0130C2E40130F1E5000053E3FBFFCB +S219021CA6FF1A190000EAA0109FE50030D1E50720A0E1000053F1 +S219021CBBE31400000A0130C2E40130F1E5000053E3FBFFFF1AE5 +S219021CD00F0000EAD8004BE2013084E2D8300BE5DC104BE20151 +S219021CE5FDFFEB000050E30B00001A60109FE50030D1E50720A3 +S219021CFAA0E1000053E30300000A0130C2E40130F1E5000053D9 +S219021D0FE3FBFFFF1A0030A0E30030C2E5120000EA0C009FE5AC +S219021D24C1FBFFEBDC001BE5650100EB0D0000EA90E7020098C8 +S219021D39E702009CE70200080403004404030024040300F0C1EA +S219021D4E03000404030094E70200A0E702000400A0E10710A029 +S219021D63E14B2FA0E3DB0300EB0700A0E1AEFBFFEB0000A0E31F +S219021D78F0A81BE90DC0A0E110D82DE914409FE504B04CE204A9 +S219021D8D10A0E1E30200EB0400A0E1A4FBFFEB10A81BE9742477 +S219021DA203000DC0A0E110D82DE938309FE5002093E504B04C52 +S219021DB7E2000052E3000000AAEDFFFFEB24409FE50400A0E10C +S219021DCC2AFBFFEB0400A0E1DDFDFFEB000050E3F9FFFF0A006F +S219021DE100A0B30100A0A310A81BE914040300741C03000DC018 +S219021DF6A0E100D82DE904B04CE200A81BE90DC0A0E100D82D81 +S219021E0BE904B04CE2ADFCFFEB850200EB2B00A0E3100100EB41 +S219021E2000A81BE90DC0A0E100D82DE908309FE504B04CE20020 +S219021E350083E500A81BE9140403000DC0A0E100D82DE93C10DA +S219021E4A9FE55830A0E30030C1E50020A0E30320C1E504B04CAB +S219021E5FE228C09FE54032A0E10F3003E20320DCE70F0000E22B +S219021E740030DCE70120C1E50230C1E50100A0E169FBFFEB00F0 +S219021E89A81BE97424030078E702000DC0A0E100D82DE9382001 +S219021E9E9FE538109FE50030E0E3003082E530309FE50020A0AA +S219021EB3E3002081E5002083E524109FE524309FE5003081E5FC +S219021EC804B04CE21C209FE50130A0E3003082E500A81BE9D88D +S219021EDD2C0300D42C0300842C03005C2D0300DC2C03001C044D +S219021EF203000DC0A0E130D82DE99C309FE504B04CE20040A053 +S219021F07E1002093E50150A0E1000052E30000001ADDFFFFEB5E +S219021F1C120054E3070000CA78309FE578109FE5002093E503BC +S219021F31C0A0E1022061E0052082E0800052E30100009A000019 +S219021F46A0E330A81BE958E09FE500309EE5030054E10B00006E +S219021F5B0A4C009FE5003090E548109FE5030054E1030000BA1A +S219021F70012084E20030A0E3023181E7002080E500408EE50048 +S219021F85309CE5043181E700309CE50300A0E1053083E00030F5 +S219021F9A8CE530A81BE91C0403005C2D0300DC2C0300D82C031D +S219021FAF00D42C0300842C03000DC0A0E1F0DD2DE904B04CE24D +S219021FC404D04DE20060A0E174009FE50150A0E1001090E502CC +S219021FD940A0E168A09FE5000051E31300001A0130A0E300305A +S219021FEE80E558709FE558809FE50130A0E1031CA0E10800A0D0 +S219022003E303E1A0E101C083E28120A0E1073022E0000051E3C4 +S2190220180320A0B10210A0E1010050E2F8FFFF1A0C30A0E10E97 +S21902202D2088E7FF0053E3F0FFFF9A14709FE50030A0E3003060 +S2190220428AE5080000EA2004030018040300B71DC104602D03B2 +S2190220570025305BE5243C23E0032197E7016086E2044422E0C0 +S21902206C015045E2010075E30600000A25004BE20610A0E1018D +S21902208120A0E3F10200EB00309AE5000053E3F0FFFF0A0400E1 +S219022096A0E1F0AD1BE90DC0A0E170D82DE928319FE504B04C83 +S2190220ABE20CD04DE21C000BE50020A0E30020C3E500C0A0E174 +S2190220C00020DCE50350A0E1430052E33700001A0130DCE55242 +S2190220D50053E33400001A0260DCE5430056E33100001A03304E +S2190220EADCE53A0053E32E00001A1C404BE20400A0E104308C93 +S2190220FFE21C300BE520104BE2F8FBFFEB000050E33700000AF9 +S2190221141C201BE50130D2E4FF3003E21C200BE52C0053E331B9 +S21902212900001A0400A0E124104BE2EDFBFFEB000050E32C0069 +S21902213E000A20001BE524101BE50020E0E399FFFFEB80309F73 +S219022153E5004093E50010A0E1000054E30B00000A70209FE5E2 +S2190221680030D2E50510A0E1000053E30300000A0130C1E401C4 +S21902217D30F2E5000053E3FBFFFF1A0030A0E30030C1E5170056 +S21902219200EA010085E22020A0E3ECFBFFEB0060C5E5010080C0 +S2190221A7E20040C5E7100000EA1C301BE50020D3E50300A0E1AC +S2190221BC4C0052E30210A0E10A00000A040000CA430052E30396 +S2190221D10000EA742403001804030094E70200500051E302004B +S2190221E6000A0510A0E14B2FA0E3AF0200EB70A81BE90DC0A01B +S2190221FBE100D82DE90030D0E504B04CE2700053E30200000A80 +S21902221008109FE54B2FA0E3AA0200EB00A81BE9742403000D2E +S219022225C0A0E100D82DE90C309FE5002093E504B04CE2000133 +S21902223A92E700A81BE9240403000DC0A0E100D82DE90C309F21 +S21902224FE5002093E504B04CE2001182E700A81BE924040300C3 +S2190222640DC0A0E100D82DE920309FE5182093E50010A0E1000D +S2190222790092E5FF1001E20C3092E504B04CE20FE0A0E103F0E8 +S21902228EA0E100A81BE9500000000DC0A0E100D82DE91C309F90 +S2190222A3E5182093E5000092E5103092E504B04CE20FE0A0E10A +S2190222B803F0A0E1FF0000E200A81BE9500000000DC0A0E1006B +S2190222CDD82DE924309FE504B04CE218C093E500109CE500204C +S2190222E2A0E10100A0E114309CE50010A0E30FE0A0E103F0A082 +S2190222F7E100A81BE9500000000DC0A0E100D82DE9000050E37F +S21902230C04B04CE20F00000A70209FE5003092E5013043E200A9 +S2190223213082E5000053E3160000CA0030A0E3003082E5542035 +S2190223369FE5183092E5000093E5142093E50510A0E30FE0A0FD +S21902234BE102F0A0E100A81BE930209FE5003092E5013083E265 +S219022360003082E5010053E30600001A1C309FE5182093E500F3 +S2190223750092E5143092E50410A0E30FE0A0E103F0A0E100A8F7 +S21902238A1BE928040300500000000DC0A0E100D82DE91C309F8D +S21902239FE5182093E5000092E5103092E504B04CE20FE0A0E10D +S2190223B403F0A0E1FF0000E200A81BE9500000000DC0A0E1F07E +S2190223C9DF2DE9FF1001E20D0051E304B04CE204D04DE2730078 +S2190223DE000A70319FE570219FE5000093E50010C2E7010080ED +S2190223F3E2000083E50A0051E30100000A640050E36900001A21 +S21902240850519FE5186095E500900FE100400FE1C04084E30486 +S21902241DF029E13C019FE50D0800EB000096E50C3096E5241082 +S219022432A0E30FE0A0E103F0A0E1000096E54F80A0E30C309688 +S219022447E50810A0E10FE0A0E103F0A0E1FC309FE5002093E5CF +S21902245C0070A0E3020057E1180000AAF8A09FE5E8209FE507C6 +S21902247130D2E72342DAE7000096E50F3003E20350DAE70C3051 +S21902248696E50410A0E10FE0A0E103F0A0E1000096E5017087D3 +S21902249BE20C3096E50510A0E10FE0A0E103F0A0E1044088E066 +S2190224B0FF8004E29C209FE5055088E0003092E5FF8005E2039E +S2190224C50057E1E7FFFFBA000096E50C3096E52310A0E30FE04D +S2190224DAA0E103F0A0E180309FE5000096E52812D3E70C20968C +S2190224EFE50FE0A0E102F0A0E168209FE5000096E50F3008E259 +S2190225040310D2E70C3096E50FE0A0E103F0A0E1000096E510C9 +S2190225193096E50FE0A0E103F0A0E129004BE529305BE52B00FA +S21902252E53E31000000A29004BE20110A0E32B0300EB000050EE +S219022543E30800001A29305BE52D0053E3EFFFFF1AB3FFFFEAD9 +S2190225582C0403006031030050000000B0250200A4E7020030BC +S21902256D209FE50130A0E3443082E528209FE50030A0E3003070 +S21902258282E520009FE5D50700EB00300FE1C04009E2C030C3AD +S219022597E3043083E103F029E1020000EA500000002C04030041 +S2190225ACB0250200F0AF1BE90DC0A0E170D82DE904B04CE2010A +S2190225C160A0E10240A0E10430A0E1014044E2000053E30050B8 +S2190225D6A0E10600000A0110D6E40500A0E176FFFFEB0430A0D4 +S2190225EBE1014044E2000053E3F8FFFF1A70A81BE90DC0A0E1DC +S21902260070D82DE904B04CE20160A0E10240A0E10430A0E10123 +S2190226154044E2000053E30050A0E10600000A0500A0E159FF4E +S21902262AFFEB0430A0E1014044E20100C6E4000053E3F8FFFFB7 +S21902263F1A70A81BE90DC0A0E10E002DE900D82DE90000A0E366 +S21902265410B04CE200A81BE90DC0A0E170D82DE90000A0E3049D +S219022669B04CE223FFFFEBB4C09FE5B4509FE5B4E09FE5B460BF +S21902267E9FE50020A0E3B0109FE50C40A0E1000091E5023190CF +S219022693E702318CE7012082E20A0052E3FAFFFFDA001091E582 +S2190226A82C3091E52C308CE5402091E530208CE5303091E534D6 +S2190226BD308CE5342091E538208CE5383091E53C308CE5000012 +S2190226D2A0E33C3091E51C208CE20C10A0E164308CE540008279 +S2190226E7E5042042E2010052E1FBFFFFAA00309EE5004085E576 +S2190226FC000053E30400000A0030A0E300308EE50F00A0E3C3D3 +S219022711FEFFEB720700EB0F00A0E3C0FEFFEB6F0700EB0000C5 +S21902272686E570A81BE9F0C103002404030044040300C8C20359 +S21902273B0058C203000DC0A0E100D82DE904B04CE260109FE553 +S2190227500000A0E301E0A0E158C09FE500209EE500319CE70095 +S2190227653182E7010080E20A0050E3F9FFFFDA001091E52C306B +S21902277A9CE52C3081E530209CE5402081E534309CE5303081A3 +S21902278FE538209CE5342081E53C309CE5383081E564209CE5F6 +S2190227A43C2081E50100A0E3D3FEFFEB00A81BE958C20300F05F +S2190227B9C103000DC0A0E100D82DE90000A0E304B04CE200A8F7 +S2190227CE1BE90DC0A0E100D82DE930209FE530309FE530109F18 +S2190227E3E5003082E52C309FE52C209FE5003081E528309FE53C +S2190227F828109FE5003082E524309FE504B04CE2003081E50022 +S21902280DA81BE908040300BC27020004040300F82802001004CE +S21902282203005C2602000C040300402702000DC0A0E170D82DD4 +S219022837E99C209FE5006092E504B04CE2000056E32200001A2E +S21902284C0130A0E3003082E584509FE55C0800EB343095E500A0 +S21902286100E0E30FE0A0E103F0A0E10040A0E1343095E5020013 +S219022876E0E30FE0A0E103F0A0E1141095E558309FE558209FDE +S21902288BE5043081E554309FE5082081E50C3081E54C209FE58A +S2190228A04C309FE5102081E5143081E5020074E3000054130319 +S2190228B500000A343095E50400A0E10FE0A0E103F0A0E1303056 +S2190228CA95E50600A0E10FE0A0E103F0A0E170A81BE9300403BA +S2190228DF0050000000B4250200FC250200C423020094230200ED +S2190228F4442602000DC0A0E100D82DE918309FE5403093E50468 +S219022909B04CE2000053E30100000A0FE0A0E103F0A0E100A807 +S21902291E1BE9500000000DC0A0E1F0D82DE95430A0E304B04C16 +S219022933E204D04DE20150A0E10570A0E10040A0E10130C7E43E +S2190229484402A0E11EF8FFEB0100C5E5017087E20400A0E11A88 +S21902295DF8FFEB0100C7E40000A0E317F8FFEB0100C7E40F0099 +S219022972A0E314F8FFEB0100C7E43A60A0E30160C7E40F00A04C +S219022987E325FEFFEB0710A0E10420A0E30030A0E320000BE542 +S21902299C20504BE20500A0E11BF9FFEB0070A0E13B40A0E3010E +S2190229B140C7E40000A0E303F8FFEB0100C7E40D00A0E300F883 +S2190229C6FFEB0100C7E40160C7E40D00A0E312FEFFEB0710A012 +S2190229DBE10420A0E320000BE50030A0E30500A0E109F9FFEB23 +S2190229F00070A0E10140C7E40030A0E30030C7E5F0A81BE90DB6 +S219022A05C0A0E100D82DE904B04CE2030050E300F19F9728001F +S219022A1A00EAC02A02002C2A0200402A02006C2A0200101F112E +S219022A2FEE011A81E3031081E3101F01EE1F0000EA101F11EE52 +S219022A44011AC1E3101F01EE151F07EE0000A0E10000A0E1006E +S219022A5900A0E10000A0E10000A0E10000A0E1140000EA0E024F +S219022A6EA0E3021A80E2202090E4000031E1FCFFFF1A160F0745 +S219022A83EE9A0F07EE0000A0E10000A0E10000A0E10000A0E1A7 +S219022A980000A0E10000A0E1151F07EE151F08EE0000A0E1004C +S219022AAD00A0E10000A0E10000A0E10000A0E10000A0E1100F69 +S219022AC211EE2006A0E1010000E200A81BE90DC0A0E100D82D70 +S219022AD7E904B04CE2030050E300F19F97190000EA502B02003B +S219022AECF82A0200082B02001C2B0200101F11EE0F1081E3106B +S219022B011F01EE110000EA101F11EE0C10C1E3101F01EE161F6E +S219022B1607EE0C0000EA0E02A0E3021A80E2202090E4000031C2 +S219022B2BE1FCFFFF1A160F07EE9A0F07EE0000A0E10000A0E1DF +S219022B400000A0E10000A0E10000A0E10000A0E1100F11EE2037 +S219022B5501A0E1010000E200A81BE90DC0A0E170D82DE9D020B7 +S219022B6A9FE5D0409FE504B04CE2CCC09FE50130A0E300308CD5 +S219022B7FE5C4309FE50260A0E1003082E50C50A0E1003094E5DD +S219022B9404C0A0E1000053E32200000A04E0A0E100309EE50363 +S219022BA90053E30900009A030011E30700001A030010E3050024 +S219022BBE001A043090E4043081E400209EE5042042E200208E07 +S219022BD3E5110000EA00309CE5010053E30900009A010011E386 +S219022BE80700001A010010E30500001AB230D0E0B230C1E00088 +S219022BFD309CE5023043E200308CE5040000EA0120D0E401202F +S219022C12C1E400309EE5013043E200308EE5003094E500005359 +S219022C27E3DDFFFF1A0030A0E3003085E50030A0E3003086E51E +S219022C3C70A81BE934040300C431030018040300342C02000D9F +S219022C51C0A0E130D82DE90030A0E10100A0E10310A0E11840E9 +S219022C669FE50250A0E1005084E504B04CE2B9FFFFEB0000942A +S219022C7BE5050060E030A81BE9C43103000DC0A0E130D82DE9D3 +S219022C9018409FE50250A0E1005084E504B04CE2AEFFFFEB0047 +S219022CA50094E5050060E030A81BE9C43103000DC0A0E100D85B +S219022CBA2DE90000A0E304B04CE200A81BE90DC0A0E100D82D84 +S219022CCFE90000A0E304B04CE200A81BE90DC0A0E100D82DE9B3 +S219022CE40000A0E304B04CE200A81BE90DC0A0E100D82DE90186 +S219022CF900A0E304B04CE200A81BE90DC0A0E100D82DE9010071 +S219022D0EA0E304B04CE200A81BE90DC0A0E100D82DE904B04C5C +S219022D23E267F6FFEB00A81BE90DC0A0E110D82DE904B04CE291 +S219022D3800300FE100400FE1C04084E304F029E108209FE5011D +S219022D4D30A0E3003082E5FEFFFFEA0000039010A81BE90DC01E +S219022D62A0E100D82DE904B04CE2EEFFFFEB0000A0E300A81BE7 +S219022D77E90DC0A0E100D82DE90000A0E304B04CE200A81BE90A +S219022D8C0DC0A0E170D82DE904B04CE20040A0E10000A0E30158 +S219022DA160A0E30010A0E1020074E30D00000A020000CA030063 +S219022DB674E30F00000A100000EA010074E30E00001ABC309F8C +S219022DCBE5003093E5000053E3016043E20B0000CA0360A0E1EA +S219022DE00260E003080000EAA0309FE598209FE5180083E50090 +S219022DF54082E5030000EA0040A0E1000000EA014084E20110CB +S219022E0AA0E3000051E31B00000A74509FE5183095E500005373 +S219022E1FE30400000A000093E5143093E50410A0E30FE0A0E16B +S219022E3403F0A0E154309FE548209FE5843283E0183085E5004F +S219022E494082E5183095E5000050E30500000A000093E5143006 +S219022E5E93E50510A0E30FE0A0E103F0A0E1040000EA000093E3 +S219022E73E5143093E50410A0E30FE0A0E103F0A0E10600A0E1A0 +S219022E8870A81BE93804030050000000C83103000DC0A0E10039 +S219022E9DD82DE90010A0E304B04CE201C0A0E3020070E30D0010 +S219022EB2000A020000CA030070E30F00000A100000EA01007054 +S219022EC7E30E00001A64309FE5003093E5000053E301C043E208 +S219022EDC0B0000CA03C0A0E102C0E003080000EA48309FE540EE +S219022EF1209FE5141083E5000082E5030000EA0100A0E10000BF +S219022F0600EA010080E20110A0E3000051E30500000A18309FA4 +S219022F1BE51C209FE5000083E510309FE5802282E0142083E529 +S219022F300C00A0E100A81BE93C04030050000000C83103000DB0 +S219022F45C0A0E100D82DE904B04CE200A81BE90DC0A0E100D88D +S219022F5A2DE904B04CE200A81BE90DC0A0E110D82DE904B04C6B +S219022F6FE22C409FE5950600EB303094E50000E0E30FE0A0E1E2 +S219022F8403F0A0E1000050E30300000A343094E50000A0E30F0E +S219022F99E0A0E103F0A0E110A81BE9500000000DC0A0E110D805 +S219022FAE2DE9FF1000E258309FE504B04CE2142093E50340A083 +S219022FC3E1000052E30400000A000092E50C3092E50FE0A0E134 +S219022FD803F0A0E1040000EA182094E5000092E50C3092E50F91 +S219022FEDE0A0E103F0A0E1443094E5000053E30300000A0000C3 +S219023002A0E3880000EB0030A0E3443084E510A81BE950000020 +S219023017000DC0A0E100D82DE930209FE5181092E5003092E547 +S21902302C04B04CE2130053E30600001A1430A0E3003082E500DF +S2190230410091E5143091E50510A0E30FE0A0E103F0A0E100A81F +S2190230561BE9500000000DC0A0E110D82DE90030A0E350209FFC +S21902306BE504B04CE204D04DE214300BE518E092E500309EE529 +S2190230800020A0E10300A0E10130A0E118C09EE514104BE20FA2 +S219023095E0A0E10CF0A0E114301BE50040A0E1000053E3020004 +S2190230AA000A10309FE5000093E55C0000EB0400A0E1010000F7 +S2190230BFEA50000000CCC2030010A81BE90DC0A0E1F0D82DE942 +S2190230D4E0009FE5E0609FE50020A0E3DC509FE504B04CE2D8AB +S2190230E9709FE50510A0E10231A0E1012082E2030081E73F005E +S2190230FE52E3FAFFFFDAC0C09FE50030A0E3A8009FE501108338 +S219023113E28332A0E10720A0E303008CE7012052E2043083E27A +S219023128FBFFFF5A0130A0E1020053E3F5FFFFDA90209FE5133A +S21902313D30A0E3003085E5042085E584309FE584209FE5083003 +S21902315285E5402085E57C309FE57C209FE5103085E548208546 +S219023167E574309FE5306085E570209FE5347085E5203085E569 +S21902317C0140E0E31C2085E50400A0E10FE0A0E106F0A0E1041D +S21902319100A0E10FE0A0E107F0A0E10030A0E3243085E54020E8 +S2190231A69FE5283085E54C3085E5443085E58C2085E5F0A81B3A +S2190231BBE9782D02008C2D020050000000982E0200C831030099 +S2190231D028010300200000002C2D0200602D0200182D02004422 +S2190231E52F0200542F0200684502000DC0A0E100D82DE900002D +S2190231FA51E304B04CE20700000A011041E20130D0E703005320 +S21902320FE30100001A0100A0E300A81BE9000051E3F7FFFF1A32 +S2190232240000A0E300A81BE90DC0A0E100D82DE9000050E31CD4 +S219023239109FE504B04CE23810901514309FE58C2093E5010029 +S21902324EA0E10FE0A0E102F0A0E100A81BE95832020050000078 +S219023263000DC0A0E130D82DE90020E0E304B04CE258C09FE582 +S2190232780040A0E100309CE50150A0E1140053E30600001A1874 +S21902328D309CE5000093E5142093E50610A0E30FE0A0E102F055 +S2190232A2A0E10020A0E1020054E10400001A0400A0E10510A05F +S2190232B7E167FFFFEB000050E30200001A0400A0E10510A0E160 +S2190232CCC7F4FFEB30A81BE9500000000DC0A0E110D82DE9FFCA +S2190232E10000E204B04CE20040A0E10A0054E30100001A0D00E3 +S2190232F6A0E32AFFFFEB0400A0E128FFFFEB10A81BE90DC0A067 +S21902330BE110D82DE90040A0E10030D4E504B04CE2000053E305 +S2190233200400000A0000D4E5EAFFFFEB0130F4E5000053E3FABD +S219023335FFFF1A10A81BE90DC0A0E100D82DE90030A0E3101099 +S21902334AA0E32B20A0E304D04DE200308DE504B04CE24400004B +S21902335FEB00A81BE90DC0A0E1F0DF2DE904B04CE224D04DE283 +S2190233740150A0E10040A0E129104BE24C300BE548A04BE204BF +S219023389309BE50A00A0E1000053E32090A0033090A013019060 +S21902339E41E4000051E1FCFFFFAA0080A0E3053094E103000068 +S2190233B31A3030A0E348304BE5018088E2150000EA053094E1C5 +S2190233C81300000A0260A0E10070A0E30510A0E10400A0E107D4 +S2190233DD30A0E10620A0E1732B00EB68309FE50010D3E70810F5 +S2190233F2CAE70730A0E10620A0E10510A0E10400A0E10180888B +S219023407E2072A00EB0150A0E10040A0E1053094E1EDFFFF1A69 +S21902341C08309BE5080053E10380A0A14C301BE52D0053E306F7 +S21902343100001A013048E20320DAE7090052E10380A0014C304A +S2190234461BE50830CAE7050000EA018048E2030000EAB8E70259 +S21902345B000800DAE7018048E29BFFFFEB000058E3FAFFFFAA80 +S219023470F0AF1BE90DC0A0E100D82DE908D04DE200308DE504B4 +S219023485B04CE204309BE501C0A0E104308DE50010A0E30230EC +S21902349AA0E10C20A0E1AFFFFFEB00A81BE90DC0A0E100D82D51 +S2190234AFE9000050E304B04CE201C0A0E31500000A0010A0E10F +S2190234C40030D1E5000053E31000000A44E09FE5013060E00E8F +S2190234D90053E10020D1E500C0A0A30D0052E30A005213020017 +S2190234EE000A203042E25E0053E300C0A083011081E200005CFD +S219023503E30200000A0030D1E5000053E3EFFFFF1A0C00A0E10D +S21902351800A81BE9010100000DC0A0E1F0DF2DE904B04CE20CC8 +S21902352DD04DE20060A0E12C100BE5DAFFFFEB004050E2170129 +S219023542001AA4039FE56EFFFFEB0600A0E179FFFFEB98039FAE +S219023557E56AFFFFEB2000A0E35CFFFFEB2C301BE5040193E75D +S21902356C72FFFFEB014084E2070054E3F7FFFFDA74039FE560D9 +S219023581FFFFEB090100EA0040D6E5250054E30200000A0400EA +S219023596A0E14EFFFFEBFF0000EA0070A0E32BC0A0E30140F6E0 +S2190235ABE50710A0E1300054E30090A0130190A003303044E223 +S2190235C0090053E30600008A073187E0833084E00140F6E5301E +S2190235D57043E2302044E2090052E3F8FFFF9A6C0054E303005B +S2190235EA001A0140F6E56C0054E30110A0030140F60525304463 +S2190235FFE2530053E303F19F97E00000EA8439020090390200C7 +S21902361490390200903902009039020090390200903902009013 +S21902362939020090390200903902009039020090390200903955 +S21902363E02009039020090390200903902009039020090390277 +S21902365300903902009039020090390200903902009039020064 +S219023668903902009039020090390200903902009039020090BF +S21902367D39020054390200103802005C370200903902009039F4 +S21902369202009039020090390200903902009039020090390223 +S2190236A700903902009039020090390200903902009039020010 +S2190236BC90390200903902002C380200903902009039020090D0 +S2190236D139020090390200B83702009039020090390200903987 +S2190236E6020090390200903902009039020090390200903902CF +S2190236FB009039020054390200103802005C37020090390200AF +S21902371090390200903902009039020090390200903902009016 +S21902372539020090390200903902009039020090390200903958 +S21902373A020090390200903902002C38020090390200903902DF +S21902374F009039020090390200B8370200000051E30B00000A8E +S2190237642C301BE50300B3E82C300BE5000051E3020000AA0023 +S2190237790070E20010E1E22DC0A0E30A20A0E300908DE50C30B4 +S21902378EA0E1100000EA2C301BE5040093E42C300BE500005031 +S2190237A3E3000060B22DC0A0B30A10A0E30C20A0E1100000EA91 +S2190237B8000051E30900000A00908DE50C30A0E12CC01BE50300 +S2190237CD00BCE82CC00BE51020A0E304708DE5016086E2DFFE21 +S2190237E2FFEB6E0000EA0C20A0E12CC01BE504009CE41010A0AC +S2190237F7E32CC00BE50930A0E100708DE5016086E219FFFFEB90 +S21902380C640000EA2C301BE50000D3E5043083E22C300BE50158 +S2190238216086E2ABFEFFEB5D0000EA0050A0E32CC01BE50580A5 +S219023836A0E104409CE405A0A0E12CC00BE5050054E1AC409F6A +S21902384B050C00000A0400A0E113FFFFEB000050E30800001A70 +S21902386098009FE50A90A0E1A6FEFFEB0400A0E1B1FEFFEB1950 +S2190238753047E2190057E30370A0C17C409FE50530D4E7016026 +S21902388A86E2000053E30300000A015085E20530D4E70000537C +S21902389FE3FBFFFF1A000057E3070055110750A0C1000059E37C +S2190238B40780651007A065000830A0E1018048E2000053E30155 +S2190238C9704AE2050000DA2000A0E37FFEFFEB0830A0E1018024 +S2190238DE48E2000053E3F9FFFFCA0030D4E5080000EACCE7021D +S2190238F300E4E70200E8E70200ECE70200F4E7020008E8020077 +S2190239080000D4E571FEFFEB0130F4E5000053E30200000A0144 +S21902391D5045E2010075E3F7FFFF1A0A30A0E107A0A0E10000CC +S21902393253E31A0000DA2000A0E365FEFFEB0A30A0E101A04AB9 +S219023947E2000053E3F9FFFFCA130000EA000057E32C301BE5F8 +S21902395C014047121F40A003005093E55534A0E1010013E32EBC +S21902397100A0033100A01356FEFFEB014044E2F8FFFFEA250009 +S219023986A0E352FEFFEB030000EA2500A0E34FFEFFEB0400A0F8 +S21902399BE14DFEFFEB016086E20030D6E5000053E3F5FEFF1A04 +S2190239B0F0AF1BE90DC0A0E10F002DE900D82DE914B04CE220E5 +S2190239C5D04DE208309BE50C209BE504009BE52C300BE528206B +S2190239DA0BE510309BE514209BE524300BE520200BE518309B16 +S2190239EFE51C209BE51C300BE518200BE520309BE524209BE523 +S219023A0414300BE510200BE52C104BE2C2FEFFEB00A81BE90D86 +S219023A19C0A0E1F0DF2DE904B04CE20060A0E1060051E10670FA +S219023A2E41800170A091000057E30290A0E13B0000DA0000595E +S219023A43E30300000AE4009FE5061069E0D7FFFFEB020000EA04 +S219023A58D4009FE50610A0E1D3FFFFEB0050A0E3108047E2100B +S219023A6DA086E2070055E1030000AAB8009FE50510D6E7CBFF73 +S219023A82FFEB010000EAAC009FE5C8FFFFEBC54FA0E105306444 +S219023A97E00130C3E3053063E0010053E30100001A90009FE57E +S219023AACC0FFFFEBA43EA0E1033085E00730C3E3053063E007FE +S219023AC10053E30100001A70009FE5B8FFFFEB015085E20F003C +S219023AD655E3E4FFFFDA60009FE5B3FFFFEB0050A0E307005531 +S219023AEBE1040000AA0510D6E7203041E25E0053E32E10A083F6 +S219023B00000000EA2010A0E338009FE5A8FFFFEB015085E20FF8 +S219023B150055E3F2FFFFDA28009FE5A3FFFFEB0A60A0E10070FF +S219023B2A58E2C3FFFFCAF0AF1BE90CE8020014E802001CE8021D +S219023B3F0020E8020024E8020028E802002CE802000DC0A0E1DC +S219023B5400D82DE90020A0E304B04CE2ACFFFFEB00A81BE90D94 +S219023B69C0A0E100D82DE904B04CE2FAFCFFEB00A81BE90DC0D6 +S219023B7EA0E100D82DE9030040E204B04CE2040050E300F19FEE +S219023B9397080000EAAC3B0200AC3B0200AC3B0200B43B0200E1 +S219023BA8B43B02000A00A0E300A81BE90200A0E300A81BE905A1 +S219023BBD00A0E300A81BE90DC0A0E100D82DE90C309FE50020A1 +S219023BD293E504B04CE2440092E500A81BE958C203000DC0A08C +S219023BE7E100D82DE90010A0E10F00A0E304B04CE291F9FFEB7A +S219023BFC00A81BE90DC0A0E110D82DE904B04CE20040A0E119F9 +S219023C1100A0E382F9FFEB0020A0E3244EA0E10F0054E304F1DE +S219023C269F97560000EA6C3C0200783C0200803C02008C3C0224 +S219023C3B00943C02009C3C0200A83C0200B43C0200C43C0200E7 +S219023C50D83C0200E83C0200083D0200283D0200543D02007C5F +S219023C653D0200843D0200202FA0E1012002E2430000EA202FF0 +S219023C7AA0E10D0000EAA02EA0E1012002E23E0000EAA02EA0CC +S219023C8FE1080000EAA02FA0E13A0000EA0020E0E1A22FA0E19F +S219023CA4370000EA202EA0E1012002E2340000EA202EA0E10121 +S219023CB92022E2012002E2300000EA062200E2020252E3002049 +S219023CCEA0130120A0032B0000EA062200E2022252E20120A02B +S219023CE313270000EA092200E2000052E30030A0130130A003A8 +S219023CF8090252E30320A0110120A0031F0000EA092200E201C1 +S219023D0D0252E30030A0130130A003020152E30320A01101207F +S219023D22A003170000EA093200E2000053E309025313202FA02E +S219023D37E1012022E20030A0130130A003000053E30120021248 +S219023D4C0020A0030C0000EA093200E2010253E30201531320C3 +S219023D612FA0E10030A0130130A003000053E301200202012063 +S219023D76A013020000EA0120A0E3000000EA0020A0E30200A0BF +S219023D8BE110A81BE90DC0A0E130D82DE904B04CE20050A0E160 +S219023DA00F0005E21EF9FFEB0040A0E1100015E30200001A3EED +S219023DB53D05E2C303A0E1020000EA0F0C05E22004A0E115F9E6 +S219023DCAFFEB603005E2C332A0E1030053E303F19F9713000090 +S219023DDFEAF03D0200F83D0200003E0200083E02001440A0E11B +S219023DF40D0000EA3440A0E10B0000EA5440A0E1090000EA00CA +S219023E090050E30600001AA440A0E11900A0E301F9FFEB020261 +S219023E1E10E3023184E30340A011000000EA7440A0E10400A044 +S219023E33E130A81BE90DC0A0E1F0D82DE904B04CE20040A0E1E7 +S219023E480150A0E1033305E2233DA0E1030053E303F19F97B972 +S219023E5D0000EA703E0200F03F0200A440020000400200D8225C +S219023E729FE5FF32C5E3020053E10200001A0F0005E2E6F8FFB2 +S219023E87EBF0A81BE9047084E20F3A05E20F0A53E35200001AD3 +S219023E9CB0329FE5B0229FE5033005E0020053E14D00000A0F9A +S219023EB10805E22008A0E1D9F8FFEB0060A0E1020415E30400BF +S219023EC6001A050AA0E1200AA0E1AEFFFFEB0040A0E103000030 +S219023EDBEAFF4005E20F3C05E2A333A0E17443A0E11E3605E2BF +S219023EF0A33AA0E10F0053E303F19F97390000EA403F020048FD +S219023F053F0200503F0200583F0200603F0200683F0200843F28 +S219023F1A0200A83F0200E83F0200E83F0200E83F0200E83F02FC +S219023F2F00CC3F0200D43F0200DC3F0200E43F0200047006E0B8 +S219023F44270000EA047026E0250000EA067064E0230000EA04FC +S219023F597066E0210000EA047086E01F0000EA1900A0E3ACF868 +S219023F6EFFEBA00EA0E1010000E2043086E0007083E0180000B6 +S219023F83EA1900A0E3A5F8FFEBA00EA0E1010000E2063064E089 +S219023F98000050E30370A011017043020F0000EA1900A0E39CCF +S219023FADF8FFEBA00EA0E1010000E2043066E0000050E30370E4 +S219023FC2A01101704302060000EA047086E1040000EA0470A0AF +S219023FD7E1020000EA0470C6E1000000EA0470E0E10700A0E13F +S219023FECF0A81BE964219FE5023005E0020053E10100001A04A8 +S2190240010084E2F0A81BE9010615E3FBFFFF0A0F3A05E20F0A56 +S21902401653E3F8FFFF1A0F4805E22408A0E17EF8FFEB08308045 +S21902402BE20F0854E30060A0110360A001010415E31600000A17 +S219024040020415E30900001A020515E30300000A053AA0E12354 +S2190240553AA0E1036086E00E0000EA053AA0E1233AA0E10660CF +S21902406A63E00A0000EA020515E30400000A050AA0E1200AA09C +S21902407FE142FFFFEB006086E0030000EA050AA0E1200AA0E12B +S2190240943DFFFFEB066060E0000096E5F0A81BE9027415E21AA6 +S2190240A900001A010615E3D2FFFF0A020915E3D0FFFF0A0F48D6 +S2190240BE05E22408A0E156F8FFEB083080E20F0854E30060A032 +S2190240D3110360A00107C0A0E10C20A0E178309FE5020505E2AD +S2190240E8031005E05132A0E1010013E301C08C12012082E20ED7 +S2190240FD0052E3F9FFFFDA000050E30C618610E2FFFF1A04600D +S21902411246E2E0FFFFEA0500A0E1B7FEFFEB000050E3B5FFFF96 +S2190241270AFF34C5E30311A0E1020515E33F0381E308008012C3 +S21902413C08008102000084E0F0A81BE90000A0E3F0A81BE910AD +S219024151FF2F010000BF0F00000F0110000002FFFF00000DC068 +S219024166A0E170D82DE90118A0E14128A0E1211EA0E1041041C5 +S21902417BE204B04CE20060A0E1023086E2015083E30B0051E3F3 +S21902419001F19F973E0000EAC841020094420200944202009474 +S2190241A542020094420200944202009442020094420200944284 +S2190241BA0200F441020028420200604202000228A0E1C8309F5E +S2190241CFE52208A0E1033002E0470453E32C00001A780000E20E +S2190241E4A001A0E10DF8FFEB0050A0E1270000EA0238A0E10F02 +S2190241F90403E20002A0E12348A0E17DFEFFEB000050E320009A +S21902420E000AFF3004E28300A0E1800014E3800BE011A00BE0F3 +S21902422311090000EA0238A0E1020313E32318A0E11600001AD9 +S219024238813AA0E1A33AA0E18300A0E1010B11E3800AE011A0B1 +S21902424D0AE011043080E2033086E0015083E30C0000EA3E1B25 +S219024262E0E30228A0E1013802E02302A0E1010312E38004E0B4 +S21902427711A004E011B230D6E1013003E0830080E1042080E26E +S21902428C022086E0015082E30500A0E170A81BE9000087FF0DA3 +S2190242A1C0A0E130D82DE90F00A0E304B04CE2DBF7FFEB004032 +S2190242B6A0E11900A0E3D8F7FFEB200010E30600000A0400A04F +S2190242CBE1B010D0E1A3FFFFEB88309FE5000083E580109FE541 +S2190242E00F0000EA005094E50500A0E143FEFFEB000050E30616 +S2190242F500000A0400A0E10510A0E15C409FE5CBFEFFEB0000B5 +S21902430A84E550109FE5030000EA48209FE5043084E20210A025 +S21902431FE1003082E5004091E5010014E30600000A30309FE568 +S2190243340120C4E3B000D2E128109FE5B000C3E1B010C2E1309F +S219024349A81BE91C309FE5002094E518109FE5002083E50010FF +S21902435E84E530A81BE9400403002C320300BEBEFFFF2832037F +S21902437300FEDEFFE70DC0A0E100D82DE944309FE50300A0E1B4 +S219024388001093E504B04CE2000051E30B00000A010011E3046D +S21902439D00000A28209FE5B020D2E10130C1E3B020C3E1020060 +S2190243B200EA18309FE5002093E5002081E50030A0E3003080B8 +S2190243C7E500A81BE9400403002C320300283203000DC0A0E1F6 +S2190243DC00D82DE904B04CE200A81BE90DC0A0E100D82DE90409 +S2190243F1B04CE200A81BE90DC0A0E100D82DE90F00A0E304B0A4 +S2190244064CE285F7FFEB0C309FE5030050E10000A0130100A0BE +S21902441B0300A81BE9280602000DC0A0E110D82DE90F00A0E3C8 +S21902443004B04CE27AF7FFEB0040A0E11900A0E377F7FFEB205E +S2190244450010E302408412044084020F00A0E30410A0E179F72F +S21902445AFFEB10A81BE90DC0A0E100D82DE964109FE504B04C6C +S21902446FE260C09FE500209CE50030A0E3003081E5030052E18B +S2190244841100001A010010E30600000A00008CE540309FE50187 +S21902449900C0E3B020D0E1B420CCE1B030C0E1040000EA0000F3 +S2190244AE8CE528209FE5003090E504308CE5002080E50300A043 +S2190244C3E381F9FFEB0300A0E34CF9FFEB00A81BE944040300EA +S2190244D830320300BEBEFFFFFEDEFFE70DC0A0E100D82DE96C7F +S2190244ED309FE504B04CE200C093E500005CE30100000A00009B +S219024502A0E300A81BE954209FE5001092E50130C1E3030050C7 +S219024517E10E00001A010011E30200000AB430D2E1B030C0E166 +S21902452C010000EA043092E5003080E50030A0E3003082E503FB +S21902454100A0E361F9FFEB0300A0E32CF9FFEB0100A0E300A8D6 +S2190245561BE90C00A0E100A81BE944040300303203000DC0A0EF +S21902456BE130D82DE984209FE50030A0E380509FE504B04CE224 +S219024580001095E50040A0E1003082E5030051E10100000A01FC +S21902459500A0E1D1FFFFEB003095E5000053E31300001A1900A9 +S2190245AAA0E31CF7FFEB200010E30600000A013084E300308505 +S2190245BFE53C209FE5B030D4E1B430C5E1B020C4E1040000EA99 +S2190245D4004085E528209FE5003094E5043085E5002084E50382 +S2190245E900A0E337F9FFEB0300A0E302F9FFEB30A81BE944048A +S2190245FE030030320300BEBEFFFFFEDEFFE70DC0A0E100D82DAA +S219024613E910309FE5000093E504B04CE2000050E20100A0139E +S21902462800A81BE9303203000DC0A0E100D82DE9001090E500A4 +S21902463D00A0E30C0081E51C30A0E31C3081E50820A0E3002020 +S21902465281E504B04CE2040081E5173043E2083081E505204229 +S219024667E20C2081E500A81BE90DC0A0E100D82DE9000090E566 +S21902467CFF1001E2203090E504B04CE2040013E30200001A2053 +S2190246913090E5040013E3FCFFFF0A141080E500A81BE90DC068 +S2190246A6A0E100D82DE9000090E5203090E504B04CE202301328 +S2190246BBE20500000A143090E50030C1E50420A0E31C2080E51B +S2190246D00100A0E300A81BE90300A0E100A81BE90DC0A0E130F0 +S2190246E5D82DE904B04CE204D04DE20050A0E115404BE205008E +S2190246FAA0E10410A0E1E7FFFFEB000050E3FAFFFF0A15005B19 +S21902470FE530A81BE90DC0A0E170D82DE904B04CE20160A0E15D +S2190247240240A0E10430A0E1014044E2000053E30050A0E1068D +S21902473900000A0110D6E40500A0E1C9FFFFEB0430A0E1014061 +S21902474E44E2000053E3F8FFFF1A70A81BE90DC0A0E170D82D04 +S219024763E904B04CE20160A0E10240A0E10430A0E1014044E2AE +S219024778000053E30050A0E10600000A0500A0E1D4FFFFEB04C7 +S21902478D30A0E1014044E20100C6E4000053E3F8FFFF1A70A8EF +S2190247A21BE90DC0A0E1F0D82DE904B04CE20050A0E10430954F +S2190247B7E50160A0E13C709FE5033183E08340A0E1030000EA27 +S2190247CC483097E56400A0E30FE0A0E103F0A0E10500A0E10686 +S2190247E110A0E1AEFFFFEB000050E30200001A014044E20100DD +S2190247F674E3F3FFFF1AF0A81BE9500000000DC0A0E10E002DD0 +S21902480BE910D82DE910B04CE204309BE50040A0E3043043E2EC +S219024820030053E303F19F971E0000EA644802003C480200904D +S2190248354802009C48020054209FE50130A0E3003082E50010E4 +S21902484A90E50C3091E5083083E30C3081E5080090E5F2EFFF8E +S21902485FEB100000EA2C209FE5004092E50030A0E3003082E587 +S219024874001090E50C3091E50830C3E30C3081E5080090E5DB19 +S219024889EFFFEB050000EA084090E5030000EA60040300083002 +S21902489E9BE5044090E5043080E50400A0E110A81BE90DC0A07E +S2190248B3E170D82DE904B04CE204D04DE200C090E520409CE5AF +S2190248C814309CE519304BE50420A0E31C208CE50050A0E30867 +S2190248DD0090E50160A0E1830000EB005086E5020014E3060040 +S2190248F2000A19004BE20110A0E33BFAFFEB050050E10130A0A0 +S21902490713003086150150A0E30500A0E170A81BE90DC0A0E1F2 +S21902491C70D82DE984509FE50000E0E3343095E504B04CE20F37 +S219024931E0A0E103F0A0E170409FE50060A0E10400A0E139FFC3 +S219024946FFEB343095E50000A0E30FE0A0E103F0A0E11410956D +S21902495BE550309FE550209FE5004081E5043081E548309FE527 +S219024970082081E50C3081E540209FE540309FE5102081E51479 +S2190249853081E538209FE538309FE5182081E51C3081E5342014 +S21902499A95E50600A0E10FE0A0E102F0A0E170A81BE9500000B1 +S2190249AF0048040300144702005C47020070460200E0460200BB +S2190249C404480200B0480200A44702000DC0A0E100D82DE91C4A +S2190249D9209FE5003092E504B04CE2000053E30200001A013012 +S2190249EEA0E3003082E5C7FFFFEB00A81BE9640403000DC0A05F +S219024A03E130D82DE970E09FE500309EE504B04CE2000053E3F9 +S219024A181700000A0E50A0E100000FE100400FE1C04084E304F7 +S219024A2DF029E100E095E514309EE5003085E518109EE50020ED +S219024A42A0E318208EE500300FE1C04000E2C030C3E3043083DB +S219024A57E103F029E100009EE510209EE50CC09EE50FE0A0E170 +S219024A6C0CF0A0E1003095E5000053E3E8FFFF1A30A81BE938BD +S219024A813203000DC0A0E100D82DE904B04CE20C209FE50030E6 +S219024A9692E5013083E2003082E500A81BE9D0C203000DC0A0B2 +S219024AABE110D82DE904B04CE234409FE5003094E5010053E356 +S219024AC00000001ACDFFFFEB0030A0E3003084E51C309FE500EE +S219024AD52093E5000052E30200000A0130A0E3003084E5F2FFAE +S219024AEAFFEA10A81BE9D0C20300383203000DC0A0E100D82DB6 +S219024AFFE904B04CE254EFFFEB00A81BE90DC0A0E100D82DE9BB +S219024B1404B04CE25CEFFFEB00A81BE90DC0A0E1F0DF2DE9008F +S219024B2900E0E301DC4DE2C0619FE5343096E504B04CE20FE04C +S219024B3EA0E103F0A0E10090A0E1343096E50000A0E30FE0A064 +S219024B53E103F0A0E19C019FE59C319FE50050A0E3005083E5F4 +S219024B68482096E590719FE50FE0A0E102F0A0E1005087E584A6 +S219024B7D019FE584119FE584219FE584419FE50234A0E3003023 +S219024B9284E5D31000EB78019FE5D11000EB74019FE50020945A +S219024BA7E5001097E56C419FE5CC1000EB68219FE568319FE55F +S219024BBC0180A0E364A19FE54A7F4BE2005083E5020054E10269 +S219024BD150A0E10300000A0FE0A0E104F094E4050054E1FBFFDA +S219024BE6FF1A0A50A0E1006095E5000056E30F00000A30419F83 +S219024BFBE530019FE5001094E5B71000EB0700A0E1002094E5A8 +S219024C10011CA0E30040A0E3823262E0032182E0004085E5827D +S219024C2521A0E1161200EB020070E30040850500608A150000A0 +S219024C3A58E30200000AF0009FE50080A0E3A61000EB0740A018 +S219024C4FE10400A0E1011CA0E3FA20A0E3091200EB000050E36D +S219024C64050000AACC309FE5002093E5000052E3EFFFFF0ADC65 +S219024C791500EBEDFFFFEA0600001A6C209FE5343092E5090036 +S219024C8EA0E10FE0A0E103F0A0E15FEEFFEBE5FFFFEA0400A0FD +S219024CA3E1A41000EB000050E30F0000DA88509FE50400A0E178 +S219024CB884409FE50510A0E10420A0E1210000EB003050E204EB +S219024CCD00000A000095E50410A0E10FE0A0E10CF093E50200CC +S219024CE200EA5C009FE50710A0E17D1000EB0180A0E3CFFFFF0B +S219024CF7EA50000000400D0300E0C203007CC3030000E9020045 +S219024D0C30E902003CE90200E4C2030048E902006CE90200AC6A +S219024D21060300B406030074C3030084C30300E8C2030078E91E +S219024D360200B4E90200BCC4030078C30300F0C20300C0E9029F +S219024D4B00F0AF1BE90DC0A0E1F0DD2DE904B04CE20040A0E1D5 +S219024D600050A0E30170A0E10260A0E1D4809FE5D4A09FE5219E +S219024D750000EA054186E7200052E3015085E21A0000EA220052 +S219024D8A53E31200001A052186E0043012E5040053E1014084F7 +S219024D9F02044002050030D4E5000053E3220053130300000AF7 +S219024DB40130F4E5000053E322005313FBFFFF1A0030D4E5001F +S219024DC90053E30900001A78009FE5431000EB000000EA014010 +S219024DDE84E20030D4E5FF2003E2000052E30300000A200052B2 +S219024DF3E3E3FFFF1A0030A0E30130C4E40030D4E5000053E31B +S219024E080800000A200053E30200001A0130F4E5200053E3FCAE +S219024E1DFFFF0A0030D4E5FF2003E2000052E3D1FFFF1A005016 +S219024E3287E50800A0E1002096E50A10A0E1030000EBF0AD1B93 +S219024E47E99C0503000C060300D8E902000DC0A0E1F0DF2DE9B7 +S219024E5C04B04CE20040A0E10280A0E10800A0E101A0A0E131B8 +S219024E711000EB0450A0E10A0055E10090A0E12C00000A0800C6 +S219024E86A0E1001095E50920A0E1801000EB000050E32300008A +S219024E9B1A000095E5251000EB090050E11D0000DA0170A0E322 +S219024EB00A0054E11400000A040055E10F00000A0800A0E100AD +S219024EC51094E50920A0E1711000EB006050E20900001A00007D +S219024EDA57E30400000A58009FE50810A0E1002095E50670A04F +S219024EEFE1FC0F00EB48009FE5001094E5F90F00EB104084E2D2 +S219024F040A0054E1EAFFFF1A000057E30300001A2C009FE5F257 +S219024F190F00EB0700A0E1F0AF1BE90500A0E1F0AF1BE91050CE +S219024F2E85E20A0055E1D2FFFF1A0000A0E3F0AF1BE9ECE902D9 +S219024F430014EA020018EA02000DC0A0E170D82DE904B04CE2C0 +S219024F580040A0E10150A0E130009FE50260A0E1DE0F00EB0536 +S219024F6D0054E10700000A20009FE5002094E5083094E50610DE +S219024F82A0E1D70F00EB104084E2050054E1F7FFFF1A70A81B8F +S219024F97E91CEA020024EA02000DC0A0E100D82DE90010C0E50C +S219024FAC0C0080E904B04CE204309BE50C3080E508209BE51085 +S219024FC12080E50C309BE5143080E500A81BE90DC0A0E1F0DF21 +S219024FD62DE904B04CE20CD04DE200C0A0E334C00BE50CE09B0E +S219024FEBE501A0A0E32C000BE50A005EE100C0A01301C0A00365 +S21902500008E09BE50180A0E130300BE500005EE300C0A0030036 +S219025015005CE334101B1500108E1534301BE504C09BE5304001 +S21902502A1BE50C0053E1110000AA03C0A0E104009BE5103094D3 +S21902503FE5000053E300C08315041094E5000051E30600001A01 +S219025054083094E5000053E30100000A020053E30100001A0CEF +S2190250693094E5001083E5184084E2010050E2EFFFFF1A2CE006 +S21902507E1BE50270A0E10E0057E1870000AA071198E70030D114 +S219025093E52D0053E35300001A0050A0E330401BE50500A0E183 +S2190250A804209BE5016087E20190D1E5020055E1440000AA0011 +S2190250BD30D4E5030059E13C00001A103094E5000053E3060066 +S2190250D2000A003093E5000053E30300000A94019FE5141094FC +S2190250E7E500A0A0E37D0F00EB043094E5000053E32000000A21 +S2190250FC070198E70230D0E53D0053E3035080020200000A07CF +S2190251113188E0017087E2045093E5082094E5000052E302006B +S219025126000A010052E30C00000A0D0000EA0500A0E10C1094EA +S21902513BE50230A0E15D0000EB006050E20700001A2C019FE514 +S2190251500510A0E1142094E506A0A0E1610F00EB010000EA0C87 +S2190251653094E5005083E5102094E50130A0E3003082E5036076 +S21902517A87E00C0000EA083094E5000053E30200000A02005374 +S21902518FE30400000A060000EA0C2094E5003092E5013083E241 +S2190251A4010000EA0C2094E50130A0E3003082E50150A0E3043C +S2190251B90000EA010080E204309BE5184084E2030050E1BAFF2E +S2190251CEFFBA000055E33000001A0910A0E1A0009FE505A0A087 +S2190251E3E13F0F00EB2B0000EA08C09BE500005CE32400000ACC +S2190251F834E01BE500005EE30300000A10109BE578009FE5009D +S21902520DA0A0E3340F00EB0C109BE5000051E30200000A010057 +S21902522251E30D00000A0F0000EA08109BE50C209BE507019848 +S219025237E70230A0E11E0000EB004050E20800001A30009FE570 +S21902524C10209BE5071198E704A0A0E1220F00EB020000EA07CB +S2190252613198E708209BE5003082E50130A0E334300BE50360D7 +S21902527687E0070000EA30EA020040EA02005CEA020070EA02D8 +S21902528B0020009FE5016087E2130F00EB08A09BE52CC01BE578 +S2190252A00670A0E10C0057E177FFFFBA0A00A0E1000000EA8093 +S2190252B5EA0200F0AF1BE90DC0A0E1F0D92DE904B04CE200C07F +S2190252CAA0E10140A0E30A50A0E30060A0E30180A0E10270A0AF +S2190252DFE10000DCE503E0A0E1200050E30200001A0130FCE52C +S2190252F4200053E3FCFFFF0A0030DCE5000053E33F00000A00D4 +S2190253090054E30B00000AFF3003E2300053E30800001A01306F +S21902531EDCE5411043E2202083E2FF2002E2190051E30230A075 +S21902533391780053E31050A00302C08C020040A0E30110DCE438 +S2190253480400A0E1302041E2413041E2050053E30900528302A2 +S21902535D00009A613041E2050053E30000008A0100A0E300009D +S21902537250E31300000A0000A0E3302041E2FF3002E20900536A +S219025387E30200A0910600009A613041E2050053E3570041923B +S21902539C0200009A413041E2050053E337004192050050E10446 +S2190253B10000AA0030DCE5950626E0000053E3D0FFFF1A0F0077 +S2190253C600EA00005EE30B00000A0E20A0E10030D2E5010000F4 +S2190253DBEA0130F2E5FF3003E2000053E30100000A030051E13A +S2190253F0F9FFFF1A0030D2E5000053E30100001A0000A0E3F0E5 +S219025405A91BE9006088E5000057E300C087150100A0E3F0A95E +S21902541A1BE90DC0A0E100D82DE90030D0E504B04CE2200053FC +S21902542FE30200001A0130F0E5200053E3FCFFFF0A0000D0E54D +S219025444540050E30030A0130130A003740050E30130A0030093 +S2190254590053E30400001A460050E3660050130200000A030092 +S21902546EA0E100A81BE90130A0E3003081E50100A0E300A81B64 +S219025483E90DC0A0E110D82DE9020050E304B04CE20140A0E1FF +S2190254985A00001A040094E56C119FE5CE0E00EB000050E310FC +S2190254AD00001A00C00FE100400FE1C04084E304F029E1101F55 +S2190254C211EE011A81E3031081E3101F01EE101F11EE0F1081ED +S2190254D7E3101F01EE00300FE1C0400CE2C030C3E3043083E17C +S2190254EC03F029E110A81BE9040094E518119FE5B80E00EB0010 +S2190255010050E33B00001A00C00FE100400FE1C04084E304F0CB +S21902551629E10E02A0E3021A80E2202090E4000031E1FCFFFF9E +S21902552B1A160F07EE9A0F07EE0000A0E10000A0E10000A0E10F +S2190255400000A0E10000A0E10000A0E1101F11EE011AC1E310CF +S2190255551F01EE151F07EE0000A0E10000A0E10000A0E1000080 +S21902556AA0E10000A0E10000A0E1101F11EE0C10C1E3101F0184 +S21902557FEE161F07EE0E02A0E3021A80E2202090E4000031E121 +S219025594FCFFFF1A160F07EE9A0F07EE0000A0E10000A0E1002D +S2190255A900A0E10000A0E10000A0E10000A0E1151F07EE151F85 +S2190255BE08EE0000A0E10000A0E10000A0E10000A0E10000A037 +S2190255D3E10000A0E1161F07EE171F08EE00300FE1C0400CE2F6 +S2190255E8C030C3E3043083E103F029E110A81BE91C009FE5041C +S2190255FD1094E5380E00EB10A81BE910009FE5350E00EB10A8A2 +S2190256121BE9ACEA0200B0EA0200B4EA0200CCEA02000DC0A07F +S219025627E130D82DE934309FE504B04CE230409FE50350A0E1D6 +S21902563C030054E10700000A24009FE5041094E5002094E50833 +S2190256513094E5230E00EB104084E2050054E1F7FFFF1A30A8A1 +S2190256661BE90C0603009C050300D8EA02000DC0A0E130D82D24 +S21902567BE904B04CE208D04DE20050A0E1010055E30140A0E175 +S219025690020000CA64009FE5120E00EB1F0000EA18104BE200E1 +S2190256A520A0E3040094E50230A0E101FFFFEB000050E30300F6 +S2190256BA001A40009FE5041094E5070E00EB140000EA02005514 +S2190256CFE30D0000DA1C104BE20020A0E3080094E50230A0E1C5 +S2190256E4F4FEFFEB000050E30800001A10009FE5081094E5FA5A +S2190256F90D00EB070000EAE8EA020000EB02001CEB0200203092 +S21902570EA0E31C300BE518001BE51C101BE5221000EB30A81B6C +S219025723E90DC0A0E170D82DE904B04CE23CD04DE23C304BE21F +S21902573840204BE200308DE50040A0E104208DE530604BE2848E +S21902574D319FE50600A0E108308DE50150A0E178319FE57710D4 +S219025762A0E300C093E50120A0E344C00BE50030A0E309FEFF1F +S219025777EB0120A0E300208DE544304BE204308DE50010A0E31B +S21902578C08108DE548319FE50400A0E10C308DE50510A0E106AB +S2190257A130A0E109FEFFEB000050E34D00000A40301BE5000050 +S2190257B653E30C00000A20019FE544101BE53C201BE5C60D0063 +S2190257CBEB38004BE23C201BE50810A0E3823262E0032182E0FF +S2190257E08221A0E1270F00EB020070E33D00000A44301BE50058 +S2190257F5C00FE100400FE1C04084E304F029E10E02A0E3021AA4 +S21902580A80E2202090E4000031E1FCFFFF1A160F07EE9A0F077C +S21902581FEE0000A0E10000A0E10000A0E10000A0E10000A0E1FA +S2190258340000A0E1101F11EE011AC1E3101F01EE151F07EE00A3 +S21902584900A0E10000A0E10000A0E10000A0E10000A0E10000BE +S21902585EA0E1101F11EE0C10C1E3101F01EE161F07EE0E02A0C7 +S219025873E3021A80E2202090E4000031E1FCFFFF1A160F07EEC4 +S2190258889A0F07EE0000A0E10000A0E10000A0E10000A0E10062 +S21902589D00A0E10000A0E1151F07EE151F08EE0000A0E1000019 +S2190258B2A0E10000A0E10000A0E10000A0E10000A0E1161F0719 +S2190258C7EE171F08EE0FE0A0E103F0A0E1030000EA3CEB0200B1 +S2190258DC80C303004CEB020060EB020070A81BE90DC0A0E1007A +S2190258F1D82DE908009FE504B04CE2790D00EB00A81BE9D0EB67 +S21902590602000DC0A0E1F0D92DE904B04CE20150A0E10070A092 +S21902591BE30530A0E1015045E2070053E10080A0E10260A0E140 +S219025930470000DA0FE0A0E108F0A0E1FF4000E20FE0A0E108B8 +S219025945F0A0E10010A0E3302044E2413044E2050053E30900F1 +S21902595A5283FFE000E20200009A613044E2050053E30000000D +S21902596F8A0110A0E3000051E32F00000A00C0A0E330004EE2EE +S219025984FF1000E241204EE2FF3002E2050053E3090051830258 +S21902599900009A61304EE2050053E30000008A01C0A0E300008E +S2190259AE5CE32100000A0774A0E100C0A0E3301044E2FF30019E +S2190259C3E2090053E301C0A0910600009A613044E2050053E323 +S2190259D857C044920200009A413044E2050053E337C04492008B +S2190259ED10A0E3FF3000E2090053E30010A0910600009A613049 +S219025A024EE2050053E357104E920200009AFF3002E2050053CF +S219025A17E337104E920C2281E1027087E1000056E30500000AB7 +S219025A2C003096E5023083E0003086E5010000EA0000E0E3F0E5 +S219025A41A91BE90530A0E1015045E2000053E3B7FFFFCA0700B2 +S219025A56A0E1F0A91BE90DC0A0E1F0DF2DE90120A0E304B04C3F +S219025A6BE268D04DE288200BE50070A0E38C700BE50030E0E36C +S219025A8090300BE50790A0E180100BE50080A0E1930000EA53F1 +S219025A950052E30300000A04029FE50710A0E10F0D00EB9100F9 +S219025AAA00EA0FE0A0E108F0A0E1027087E200C0A0E10800A049 +S219025ABFE10110A0E37C204BE20030A0E37C300BE5FF600CE2F1 +S219025AD48BFFFFEB004050E27CA04BE2030000AAC0019FE5078E +S219025AE910A0E1FD0C00EB7F0000EA017087E2303046E2090048 +S219025AFE53E303F19F97620000EAD45C0200305B0200305B0294 +S219025B1300305B0200945C0200945C0200945C0200605C020055 +S219025B28605C0200605C02000800A0E12F1046E20A20A0E171D9 +S219025B3DFFFFEB0050A0E12F3047E288201BE5067083E08450B5 +S219025B520BE5000052E30A00000A80301BE5000053E304000014 +S219025B670A039065E03C019FE50910A0E1DB0C00EB000000EA29 +S219025B7C80901BE50020A0E388200BE524319FE5001093E50958 +S219025B915085E090301BE5052069E0030052E10230A03190301C +S219025BA60BE5010055E10300003A00319FE5002093E5020055DB +S219025BBBE10300009AF4009FE50510A0E1C60C00EB480000EA53 +S219025BD02E3084E2034066E0047087E00430A0E1014044E20075 +S219025BE50053E3080000DA0800A0E10110A0E30A20A0E142FF83 +S219025BFAFFEB0430A0E1014044E20100C5E4000053E3F6FFFFB5 +S219025C0FCA0800A0E10110A0E30020A0E339FFFFEB017087E2F3 +S219025C240000E0E17C205BE5FF3000E27C200BE5020053E102F2 +S219025C3900000A84101BE578009FE5A70C00EB8C201BE5053036 +S219025C4E69E0020053E10320A0218C200BE51C0000EA0800A08D +S219025C63E13B1066E20A20A0E125FFFFEB4C309FE590201BE548 +S219025C780050A0E144009FE5005083E58C301BE50510A0E195D8 +S219025C8D0C00EB170000EA0710A0E12C009FE50620A0E1900C78 +S219025CA200EB120000EAECEB020018EC02003CEC02007CC303B4 +S219025CB700E4C2030054EC020090EC020080C30300CCEC020068 +S219025CCCF4EC0200017087E20FE0A0E108F0A0E10A0050E3FAE0 +S219025CE1FFFF1A0FE0A0E108F0A0E1002050E267FFFFCAF0AF86 +S219025CF61BE90DC0A0E130D82DE9B4309FE504B04CE2085193EC +S219025D0BE50340A0E1000055E32100001A143194E5000053E36C +S219025D200900000A183194E590209FE50310D2E78C009FE50181 +S219025D353083E2183184E5690C00EB183194E5060053E3185144 +S219025D4A84850C3194E5FF0053E3060000CA143194E500005368 +S219025D5FE30100000A5C009FE55E0C00EB0000E0E330A81BE966 +S219025D74043084E20300A0E1011CA0E3043184E5112E84E20F03 +S219025D89E0A0E100F094E50C0184E5080184E5000050E3EDFF2D +S219025D9EFFBA083194E5042194E5013043E2083184E50100D215 +S219025DB3E4042184E530A81BE93C3203006804030020ED020097 +S219025DC824ED02000DC0A0E100D82DE920309FE504B04CE200BA +S219025DDDC0A0E308C183E5012CA0E30C2183E5000083E5141164 +S219025DF283E518C183E500A81BE93C3203000DC0A0E100D82D7C +S219025E07E914309FE5042083E2042183E50C1193E504B04CE241 +S219025E1C081183E500A81BE93C3203000DC0A0E1F0DD2DE90C8F +S219025E3120A0E304B04CE2C0D04DE20080A0E130604BE206004D +S219025E46A0E10040A0E3B8400BE50170A0E1D0400BE50410A06E +S219025E5BE1BF0C00EB0150A0E3BA524BE1BC424BE1B0304BE251 +S219025E7000308DE504A0A0E104A08DE538339FE50C20A0E3B8E3 +S219025E85224BE17610A0E308308DE5AC404BE224339FE5040008 +S219025E9AA0E114C093E50A20A0E130C00BE50230A0E33BFCFFA9 +S219025EAFEBB4304BE200308DE594004BE200339FE57210A0E3BC +S219025EC408308DE50A20A0E104A08DE50230A0E331FCFFEBB8D3 +S219025ED9304BE200308DE5BC204BE204208DE57C004BE2D43260 +S219025EEE9FE56210A0E308308DE50520A0E10A30A0E126FCFFF3 +S219025F03EBC0304BE200308DE5C4204BE204208DE564004BE2A0 +S219025F18AC329FE56D10A0E308308DE50520A0E10530A0E11BEA +S219025F2DFCFFEBC8304BE200308DE5CC204BE204208DE54C00B0 +S219025F424BE284329FE56810A0E308308DE50520A0E10530A0BC +S219025F57E110FCFFEB0530A0E300308DE5D0204BE224008DE946 +S219025F6C0800A0E15C329FE50710A0E10C308DE50520A0E1048E +S219025F8130A0E111FCFFEB000050E3AB00000ACC301BE5000078 +S219025F9653E30800000AC8001BE50610A0E1B01100EB0000504C +S219025FABE30300001A20029FE5C8101BE5CA0B00EB9F0000EA13 +S219025FC0C4301BE5000053E31600000AC0001BE504129FE5021F +S219025FD50C00EB000050E301A0A0031000000AC0001BE5F01167 +S219025FEA9FE5FC0B00EB000050E30700001AE4319FE500209385 +S219025FFFE500A0A0E1000052E30600001AD4019FE5B40B00EB28 +S219026014890000EACC019FE5C0101BE5B00B00EB850000EA00C7 +S219026029005AE30700001AD0301BE5000053E30400001AAC01FC +S21902603E9FE5A80B00EBA8019FE5A60B00EB7B0000EA00005A9C +S219026053E32900001A0610A0E10120A0E3D4404BE2D0001BE5BF +S2190260680430A0E1F00D00EB005050E2070000AAD4001BE5D0A8 +S21902607D401BE5E90E00EB0020A0E168019FE50410A0E1940B23 +S21902609200EB690000EA5C019FE5B0101BE50A60A0E148FFFFE2 +S2190260A7EB50819FE534704BE2010000EA0650C7E7016086E214 +S2190260BC030056E30400008A0BFFFFEB005050E2F8FFFFAA10D8 +S2190260D13198E5D4300BE5000055E3070000AAD4001BE5D00E76 +S2190260E600EB0010A0E110019FE57C0B00EB0400A0E12D0E005B +S2190260FBEB4F0000EA01005AE30200001AF8009FE5750B00EB24 +S2190261104A0000EA39FFFFEBB4301BE5000053E31100000ABC2C +S219026125301BE5000053E30200001AD4009FE56B0B00EB3A00E9 +S21902613A00EAB8401BE5C8609FE5000000EA0150C4E4E9FEFFF2 +S21902614FEB005050E2FBFFFFAA0600A0E1B8101BE50420A0E130 +S2190261645F0B00EB2E0000EA33004BE29C109FE50320A0E3B2CA +S2190261790B00EB000050E30200001A8C009FE5D7FDFFEB2500D2 +S21902618E00EA34305BE5530053E31F00001A33305BE53030435F +S2190261A3E2090053E31B00008A64009FE5B8101BE528FEFFEB5A +S2190261B81A0000EA80ED020090C3030088ED020098ED0200A85C +S2190261CDED0200C8ED0200E0ED0200ECED020004EE02000CEE78 +S2190261E20200BCC4030014EE02003CEE020050EE020028ED0295 +S2190261F70064EE0200D49902003C3203007CEE0200A0EE02005C +S21902620CCCEE0200F0EE020008EF0200F85C020018009FE534BB +S219026221101BE52F0B00EB00005AE30300001AD4004BE2DE0DE6 +S21902623600EB000000EA0CEF0200F0AD1BE90DC0A0E100D82D86 +S21902624BE90010A0E118009FE504B04CE2220B00EB10009FE593 +S21902626010109FE510209FE537FBFFEB00A81BE96CF102002C77 +S2190262750503009C0503008CF102000DC0A0E1F0DF2DE904B0FB +S21902628A4CE230D04DE20070A0E344304BE20060A0E140504B4B +S21902629FE244700BE50500A0E100308DE50140A0E144329FE579 +S2190262B46610A0E308308DE50720A0E104708DE50230A0E334B4 +S2190262C9FBFFEB0130A0E388008DE80600A0E120329FE50410B2 +S2190262DEA0E10C308DE50220A0E308708DE50530A0E136FBFF00 +S2190262F3EB070050E1A000000A00029FE52F0D00EB070050E1DD +S2190263080200001AF4019FE5F40A00EB990000EAEC019FE5F116 +S21902631D0A00EB44301BE5000053E31900000ADCC19FE5483009 +S2190263324BE2D8E19FE50320A0E1D4119FE50380A0E100409EF6 +S219026347E50C60A0E100009CE50EA0A0E1003091E5840080E02E +S21902635C043043E2940301E09C1200EB005050E20D00000A48DA +S219026371401BE50500A0E13E1300EB0410A0E10030A0E1900137 +S2190263869FE50520A0E1D50A00EB040000EA84019FE570619FA0 +S21902639BE570A19FE5D00A00EB48804BE274919FE50010A0E396 +S2190263B0004099E5012CA0E30400A0E1670B00EB60319FE50369 +S2190263C50093E8030084E8003096E5103084E5012CA0E314308A +S2190263DA84E50050A0E3185084E50510A0E1024084E00400A0BA +S2190263EFE15A0B00EB30C19FE50F009CE80F0084E8003096E533 +S21902640400209AE5023083E0103084E5143084E50510A0E11844 +S2190264195084E5012CA0E3024084E00400A0E14C0B00EBFCC0D5 +S21902642E9FE50F009CE804E0A0E10700AEE8F0609FE50130CE66 +S219026443E42324A0E10120CEE42338A0E10030CEE500209AE560 +S219026458003096E5823043E0103084E5182084E50510A0E114B4 +S21902646D3084E5012CA0E3024084E00400A0E1370B00EBB0C002 +S2190264829FE50F009CE804E0A0E10700AEE80130CEE42334A00B +S219026497E10030CEE5017087E2003096E5017087E200109AE537 +S2190264AC017087E2036061E0106084E5017087E2146084E508BE +S2190264C120A0E1181084E50600A0E1421200EB005050E218002D +S2190264D6000A48401BE50500A0E1E41200EB0410A0E10030A04C +S2190264EBE128009FE50520A0E17B0A00EB200000EA94F1020061 +S219026500BCEF0200C0F10200F0F10200FCF1020058330300605F +S2190265153303006433030020F2020048F202006833030090F22A +S21902652A020098F20200A8F202005C330300B8F202000600A047 +S21902653FE10724A0E1001099E50830A0E1721200EB005050E27B +S2190265540900000A48401BE50500A0E1C41200EB0410A0E100B4 +S21902656930A0E108009FE50520A0E15B0A00EB000000EAC8F23F +S21902657E0200F0AF1BE90DC0A0E170D82DE96C309FE56C009F85 +S219026593E508D04DE268409FE5001093E5002094E504B04CE2D1 +S2190265A8015062E04D0A00EB003094E50060A0E3230456E11404 +S2190265BD00002A0030D5E5FF0053E30700000A102085E20C10B5 +S2190265D292E800C08DE51C1095E504108DE524009FE50510A078 +S2190265E7E13E0A00EB016086E2003094E5015C85E2230456E1F0 +S2190265FC030000EA5C330300F8F20200603303003CF30200EA67 +S219026611FFFF3A70A81BE90DC0A0E170D82DE9B4309FE5B41041 +S2190266269FE504B04CE2B0C09FE5002093E5005091E500009C04 +S21902663BE50C60A0E1804082E00410A0E1050054E11C00002A3A +S219026650003094E5010073E31500000A040051E10200000A7C51 +S219026665009FE50420A0E11D0A00EB0410A0E1050054E10B0004 +S21902667A002A003094E5010073E30800000A54309FE50020930D +S21902668FE50320C2E3021081E0050051E10200002A003091E5C6 +S2190266A4010073E3F9FFFF1A0140A0E1E4FFFFEA003096E50336 +S2190266B930C3E3034084E0E0FFFFEA040051E10200000A14002A +S2190266CE9FE50420A0E1030A00EB70A81BE9583303005C330353 +S2190266E3006033030068F302000DC0A0E130D82DE9BC309FE5CC +S2190266F8BC409FE5002093E500E094E504B04CE2B0C09FE58EB1 +S21902670D2082E000E09CE50050A0E102C0A0E10E005CE11A0014 +S219026722002A0400A0E1003092E5010073E31100000A02005C35 +S219026737E10200000A02306CE0430151E11600009A02C0A0E172 +S21902674C0E005CE10700002A003090E50320C3E302C08CE00E0B +S219026761005CE10200002A00309CE5010073E3F9FFFF1A0C206E +S219026776A0E1020000EA003090E50330C3E3032082E00E005237 +S21902678BE1E5FFFF3A02005CE10500000A02306CE0430151E1B2 +S2190267A00200008A00C085E50100A0E330A81BE90000A0E33014 +S2190267B5A81BE958330300603303005C3303000DC0A0E1F0DF49 +S2190267CA2DE904B04CE2B8D04DE20040A0E3A8400BE5B0400B6E +S2190267DFE50080A0E1B8400BE5A0604BE2C0400BE50600A0E12C +S2190267F4C8400BE5A4304BE200308DE5A8204BE204208DE50162 +S21902680970A0E144339FE56210A0E308308DE50120A0E3043010 +S21902681EA0E1DEF9FFEBAC304BE200308DE5B0204BE204208DC3 +S219026833E588004BE21C339FE57210A0E308308DE50120A0E389 +S2190268480430A0E1D3F9FFEBB4304BE200308DE5B8204BE2040D +S21902685D208DE570004BE2F4329FE56510A0E308308DE5012083 +S219026872A0E30430A0E1C8F9FFEB58004BE2C0304BE204308DC4 +S219026887E5BC504BE2D0329FE56610A0E308308DE50120A0E30A +S21902689C00508DE50430A0E1BDF9FFEBC4304BE200308DE5C83E +S2190268B1204BE204208DE540004BE2A4329FE56C10A0E30830EA +S2190268C68DE50120A0E30430A0E1B2F9FFEB0530A0E300308DE1 +S2190268DBE5CC204BE204208DE5043043E208308DE50800A0E181 +S2190268F074329FE50710A0E10C308DE50220A0E30630A0E1B10F +S219026905F9FFEB040050E10200001A58029FE54AFEFFEB0D0124 +S21902691A00EAA8301BE5000053E30500000AC8301BE50000530F +S21902692FE30200000ACC301BE5000053E30200001A2C029FE55D +S2190269443EFEFFEB010100EAC0301BE5000053E31800000ABC21 +S219026959001BE5E91000EB006050E20600001ABC001BE5C430DC +S21902696E1BE5030080E0010040E2E21000EB006050E20D00000B +S2190269830ABC401BE50600A0E1B91100EB0020A0E1DC019FE5B4 +S2190269980410A0E1510900EBD4019FE5D4319FE5D4C19FE5000E +S2190269AD1093E500209CE54B0900EBE50000EAC4619FE5A4103A +S2190269C21BE5003096E5BC419FE5030051E10400003AC4301B0B +S2190269D7E5002094E5033081E0020053E10600003AA0019FE5F7 +S2190269EC3D0900EB84019FE5001096E5002094E5390900EBD331 +S219026A010000EACC001BE54B0900EB0F0050E30300009A78012C +S219026A169FE51010A0E3310900EBCB0000EAC0301BE500005320 +S219026A2BE30800001AC4101BE50500A0E12BFFFFEB000050E3A9 +S219026A400300001A4C019FE5C4101BE5250900EBBF0000EA288E +S219026A55319FE53C519FE53C419FE5001093E5002095E50080BC +S219026A6AA0E3000094E5019062E00910A0E1980700EB00309558 +S219026A7FE50860A0E1007094E5230458E11700002A0030D7E5B7 +S219026A94FF0053E30F00000ACC001BE50710A0E1310900EB000F +S219026AA90050E30A00001A102097E5BC301BE5030052E1890023 +S219026ABE001ADC009FE5CC101BE53D0B00EB000050E39F000061 +S219026AD30A0180A0E3040000EA016086E2003095E5017C87E252 +S219026AE8230456E1E7FFFF3ABC101BE5C4201BE5000058E30C1E +S219026AFD00001A003095E594009FE50860A0E1007090E50200D1 +S219026B1200EA016086E2003095E5017C87E2230456E1020000C4 +S219026B272A0030D7E5FF0053E3F7FFFF1A0100A0E1021081E003 +S219026B3C011041E2701300EB008050E21700000A54009FE5E40C +S219026B510800EB7E0000EA80F3020094F30200A8F30200BCF383 +S219026B660200D8F30200E0F30200ECF3020000F402001CF40286 +S219026B7B003CF40200583303005C3303007CC30300E4C20300C1 +S219026B9058F4020074F40200A4F402006033030068330300F86B +S219026BA5F4020014F5020001A0A0E3BC001BE5D0404BE2C410E2 +S219026BBA1BE50420A0E1851000EB006050E20800000A0600A050 +S219026BCFE1D0401BE508A0A0E1261100EB0410A0E10030A0E128 +S219026BE408019FE50620A0E1BD0800EB00005AE30E00000ABCA0 +S219026BF9001BE5A4101BE5C4201BE5D0304BE2C31000EB00609D +S219026C0E50E20700000AD0401BE50600A0E1151100EB0410A0CB +S219026C23E10030A0E1C8009FE50620A0E1AC0800EB0700A0E1A9 +S219026C380010A0E3012CA0E3460900EBCC101BE50700A0E1D788 +S219026C4D0800EBBC301BE5B0201BE5103087E5000052E3050096 +S219026C62001AC0301BE5000053E3BC201B150200001AA4201BCF +S219026C77E5000000EAAC201BE5B8301BE5142087E5000053E3A8 +S219026C8C0200001A64309FE5003093E5000000EAB4301BE51C26 +S219026CA13087E5C4301BE5183087E50900A0E1001095E5D0208F +S219026CB64BE2471000EB006050E21000000AD0401BE50600A0F1 +S219026CCBE1E91000EB0410A0E10030A0E120009FE50620A0E157 +S219026CE0800800EB1A0000EA14009FE57D0800EB170000EA48D0 +S219026CF5F502006CF5020080C3030090F50200CCF402003C302E +S219026D0A9FE5001093E50900A0E1002095E5D0304BE27E100082 +S219026D1FEB006050E20A00000AD0401BE50600A0E1D01000EB65 +S219026D340410A0E10030A0E10C009FE50620A0E1670800EB016B +S219026D490000EA68330300B0F50200F0AF1BE90DC0A0E1F0D846 +S219026D5E2DE904B04CE254D04DE20040A0E30070A0E14C504B33 +S219026D73E254400BE50500A0E15C400BE550304BE200308DE53D +S219026D8854204BE204208DE50160A0E128319FE56610A0E308F8 +S219026D9D308DE50120A0E30430A0E17CF8FFEB58304BE200309C +S219026DB28DE55C204BE204208DE534004BE200319FE56C10A0E2 +S219026DC7E308308DE50120A0E30430A0E171F8FFEB0220A0E3D2 +S219026DDC14008DE8E4309FE50700A0E10C308DE50610A0E108A5 +S219026DF1408DE50530A0E174F8FFEB040050E10200001AC400B3 +S219026E069FE50DFDFFEB460000EA54301BE5000053E30200000C +S219026E1B0A5C301BE5000053E30200001AA4009FE504FDFFEB60 +S219026E303D0000EA50001BE5B20F00EB005050E20600001A5031 +S219026E45001BE558301BE5030080E0010040E2AB0F00EB00502E +S219026E5A50E20D00000A50401BE50500A0E1821000EB0020A080 +S219026E6FE160009FE50410A0E11A0800EB58009FE558309FE5B8 +S219026E8458C09FE5001093E500209CE5140800EB240000EA50C8 +S219026E99101BE558301BE50100A0E1031081E0011041E2951274 +S219026EAE00EB000050E30C00000A28009FE5090800EB190000D3 +S219026EC3EABCF30200D8F30200BCEF0200ECF30200D4F50200F2 +S219026ED81CF402003CF40200583303005C33030014F5020050DF +S219026EED001BE558101BE560204BE2B70F00EB005050E2090038 +S219026F02000A60401BE50500A0E1591000EB0410A0E10030A08A +S219026F17E108009FE50520A0E1F00700EB000000EA90F50200F8 +S219026F2CF0A81BE90DC0A0E1F0DF2DE904B04CE218D04DE20081 +S219026F4160A0E300608DE52C304BE204308DE50120A0E3082084 +S219026F568DE548319FE50C308DE5022082E00630A0E118F8FFB8 +S219026F6BEB060050E10200001A30019FE5B1FCFFEB660000EA30 +S219026F8028319FE528519FE528419FE5001093E5002095E50606 +S219026F9580A0E1000094E501A062E00A10A0E14D0600EB00604A +S219026FAA94E50270A0E3026C86E2010000EA017087E2016C86CF +S219026FBFE2EC909FE5003099E5230457E10D00002A0030D6E5A5 +S219026FD4FF0053E3F6FFFF0A2C001BE50610A0E1E10700EB00D8 +S219026FE90050E3F1FFFF1AC4009FE52C101BE5F10900EB0000E7 +S219026FFE50E34500000A0180A0E3000058E30300001AA8009F52 +S219027013E52C101BE5B20700EB3E0000EA100096E530704BE21C +S219027028181096E50720A0E1690F00EB005050E20700000A30DB +S21902703D401BE50500A0E10B1000EB0410A0E10030A0E16C00B9 +S2190270529FE50520A0E1A20700EB0600A0E1FF10A0E3012CA07E +S219027067E33C0800EB0A00A0E1001099E50720A0E1570F00EBE9 +S21902707C005050E21000000A30401BE50500A0E1F90F00EB046F +S21902709110A0E10030A0E124009FE50520A0E1900700EB1C00B5 +S2190270A600EAE8F50200ECF302005C330300603303006833035E +S2190270BB00F4F5020008F6020090F5020040309FE5001093E5CB +S2190270D03C309FE5002093E50A00A0E10730A0E18D0F00EB0052 +S2190270E55050E20B00000A30401BE50500A0E1DF0F00EB041015 +S2190270FAA0E10030A0E110009FE50520A0E1760700EB020000A4 +S21902710FEA6833030060330300B0F50200F0AF1BE90DC0A0E1AE +S219027124F0D82DE904B04CE214D04DE20060A0E300608DE520A7 +S219027139304BE204308DE50120A0E308208DE5D4309FE50C3035 +S21902714E8DE5022082E00630A0E19CF7FFEB060050E1020000C2 +S2190271631ABC009FE535FCFFEB3D0000EAB4309FE5B4409FE594 +S219027178B4509FE5001093E5002094E50670A0E1000095E501E0 +S21902718D1062E0D20500EB005095E5010000EA016086E2015CF7 +S2190271A285E2003094E5230456E10800002A0030D5E5FF0053F5 +S2190271B7E3F7FFFF0A20001BE50510A0E1690700EB000050E396 +S2190271CCF2FFFF1A0170A0E3000057E30300001A54009FE5205A +S2190271E1101BE53F0700EB1E0000EA48209FE5140095E500309F +S2190271F692E5030050E10500003A38309FE518C095E5001093B2 +S21902720BE50C2080E0010052E10B00003A24009FE5310700EBB2 +S219027220100000EAE8F50200ECF302005C330300603303006808 +S21902723533030008F602007CC30300E4C2030020F602001010E4 +S21902724A95E50C20A0E1A20500EB08209FE51C3095E50030824B +S21902725FE5000000EA80C30300F0A81BE90DC0A0E1F0D92DE935 +S21902727444209FE504D04DE2004092E504B04CE2000054E3271C +S21902728900001A30809FE50118A0E3000098E50130A0E300309E +S21902729E82E5010840E2820E00EB001050E20600000A10009FC6 +S2190272B3E50B0700EB0400A0E11B0000EA70040300E4C2030033 +S2190272C838F6020060709FE560609FE50100A0E15C409FE50739 +S2190272DD10A0E10620A0E19B0E00EB50509FE50400A0E105100B +S2190272F2A0E1A80E00EB44009FE5001097E5002096E500C0941B +S219027307E5003095E500C08DE5F40600EB003094E5002098E57E +S21902731C24109FE5013883E2022063E0002081E50100A0E3058B +S2190273310000EA583303005C330300603303006433030060F6B0 +S219027346020068330300F0A91BE90DC0A0E130D82DE904B04C82 +S21902735BE20050A0E1010055E30140A0E1020000CA48009FE5D0 +S219027370B3FBFFEB30A81BE9BBFFFFEB000050E30C00000A346C +S219027385009FE534109FE5042094E5AFF6FFEB003050E204000E +S21902739A000A0500A0E10410A0E10FE0A0E10CF093E530A81BDB +S2190273AFE910009FE5A2FBFFEB30A81BE98CF602002C0503002A +S2190273C49C050300A0F602000DC0A0E1F0DD2DE904B04CE264FA +S2190273D9D04DE20080A0E10140A0E1080098E502A0A0E100002E +S2190273EE50E30D00000A80104BE20120A0E3AE0100EB0C20987A +S219027403E5000052E30200000A80301BE5000053E35400000A03 +S219027418000052E30200001A80301BE5000053E34F00001A2890 +S21902742D039FE528339FE5041098E5036084E0A90600EB1030AB +S21902744298E5013043E2050053E303F19F97410000EA6C7402E9 +S219027457008C740200F0740200F87402009C740200B474020007 +S21902746CF0229FE5003096E5EC129FE5EC029FE5000053E30297 +S21902748110A001970600EB330000EADC029FE5001096E5930613 +S21902749600EB2F0000EA0600A0E1BF0C00EB0010A0E1BC029FAB +S2190274ABE58D0600EB290000EA0050A0E3B4429FE50510D6E730 +S2190274C00400A0E1870600EB040055E30100008AA0029FE58343 +S2190274D50600EB015085E2050055E3F5FFFF9A90029FE57E068E +S2190274EA00EB1A0000EA88029FE51B0000EA84029FE50650A084 +S2190274FFE1780600EB0030D6E50640A0E1000053E31100000A24 +S2190275146C729FE50030D5E50A0053E30200000A0130F4E50AAF +S2190275290053E3FCFFFF1A0700A0E10030A0E30030C4E50510D3 +S21902753EA0E1680600EB0A30A0E30130C4E40450A0E10030D5E7 +S219027553E5000053E3EEFFFF1A00005AE30300000A18029FE513 +S2190275685E0600EB0200A0E38A0000EA103098E5040053E313B5 +S21902757D00000A74404BE20400A0E15010A0E30A20A0E1BC0731 +S21902759200EB000050E30000E0E30470A0E17E0000BA0700A028 +S2190275A7E1630600EB000050E3EDFFFF0A74305BE52E0053E323 +S2190275BC0A00A0017600000A5E0053E30300A0037300000A10C1 +S2190275D13098E5013043E2050053E303F19F976D0000EAFC756E +S2190275E602001076020094770200C07602002C7602005C760242 +S2190275FB0074004BE2004096E50610A0E183F7FFEB0A0000EA29 +S21902761074004BE20610A0E10020A0E3004096E50230A0E124F1 +S219027625F7FFEB030000EA74004BE2004096E50610A0E10B0C71 +S21902763A00EB000050E30400A0E35500000A000096E500005461 +S21902764FE10100A0130200A003500000EA7C404BE20400A0E13D +S2190276640610A0E10620A0E39B0400EB0050A0E304A0A0E184C4 +S219027679404BE274304BE288300BE588704BE2E8809FE50410EA +S21902768EA0E10720A0E188001BE50830A0E106F7FFEB0000503F +S2190276A3E32600000A84305BE50530C6E7015085E2050055E3ED +S2190276B8F3FFFF9A360000EAC4009FE50650A0E1060600EB7481 +S2190276CD704BE2B8609FE50A0000EA74305BE50740A0E10000C8 +S2190276E253E30400000A0030D4E50130C5E40120F4E500005239 +S2190276F7E3FAFFFF1A0A30A0E30130C5E40040A0E30040C5E53E +S21902770C0600A0E1F40500EB0700A0E15010A0E30420A0E1588E +S2190277210700EB040050E10000E0E31B0000BA0700A0E10006FF +S21902773600EB040050E1E5FFFF1A150000EA0600A0E10A10A0DA +S21902774BE10620A0E3620400EB0400A0E3100000EA20F70200AD +S2190277606C33030034F702002CF7020028F702003CF702004083 +S219027775F7020048F702004CF7020050F7020054F7020058F794 +S21902778A020060F702008CF7020008009FE5D20500EB0100A014 +S21902779FE3000000EA50F70200F0AD1BE90DC0A0E100D82DE9DB +S2190277B4031081E22111A0E10130A0E1011041E204B04CE200C8 +S2190277C9E0A0E10000A0E300C0A0E1000053E1090000DA012047 +S2190277DEA0E1011041E204309EE40F005CE3133C83E103002000 +S2190277F3E001C08C1200C0A003000052E3F5FFFFCA00A81BE93A +S2190278080DC0A0E100D82DE9010040E204B04CE2050050E300EB +S21902781DF19F970C0000EA3C7802003C7802004C780200547834 +S21902783202003C780200447802000400A0E300A81BE90800A0E9 +S219027847E300A81BE90000A0E300A81BE9020CA0E300A81BE92A +S21902785C0DC0A0E1F0DF2DE904B04CE243DE4DE208D04DE24C58 +S219027871040BE50080A0E350140BE504A0A0E379FEFFEBB491E3 +S2190278869FE5080050E10970A0E18800000A426E4BE208604612 +S21902789BE20600A0E19C519FE5012BA0E30510A0E10B0400EBB8 +S2190278B0433E4BE2083043E20C3043E200308DE5434E4BE204EC +S2190278C5808DE5084044E274319FE5084044E2008083E50400C4 +S2190278DAA0E168319FE56C10A0E308308DE50820A0E10230A0D0 +S2190278EFE3AAF5FFEB0120A0E304018DE84C041BE548319FE5A6 +S21902790408808DE550141BE50C308DE50430A0E1ADF5FFEB0812 +S2190279190050E16500000A1E0000EA0700A0E144241BE50A10A0 +S21902792EA0E1A5FEFFEB010080E2050050E300F19F9716000057 +S219027943EA5C790200AC79020070790200747902008879020063 +S219027958987902000500A0E10610A0E1012BA0E3DC0300EB5119 +S21902796D0000EA0180A0E3100097E5A2FFFFEB00A08AE014706B +S21902798287E2050000EA090057E1147047120970A00101000058 +S219027997EAB4009FE5510500EBB0309FE5030057E1DDFFFF1ADD +S2190279AC000058E34000000AA0309FE5A0209FE50540A0E100DC +S2190279C13084E50400A0E1F82384E5FF1FA0E375FFFFEBFC030A +S2190279D684E584309FE584409FE5002093E5001094E57C009F70 +S2190279EBE5817042E0730700EB000050E32E00000A001094E52F +S219027A000700A0E1114D4BE2084044E20420A0E1F10C00EB005C +S219027A156050E21500000A48441BE50600A0E1930D00EB0410F2 +S219027A2AA0E10030A0E138009FE50620A0E12A0500EB1D000074 +S219027A3FEA0C0603006C33030084C3030090F70200BCEF02000A +S219027A54A8F70200AC060300CEFAAD0BADDEADDE5C3303006038 +S219027A69330300BCF7020020F202000700A0E10510A0E1012BB8 +S219027A7EA0E30430A0E1240D00EB006050E20900000A48441B4C +S219027A93E50600A0E1760D00EB0410A0E10030A0E108009FE52B +S219027AA80620A0E10D0500EB000000EAE8F70200F0AF1BE90DA3 +S219027ABDC0A0E1F0DF2DE904B04CE20480A0E30070A0E101505C +S219027AD2A0E10290A0E1D8609FE5E2FDFFEBD4A09FE500005037 +S219027AE7E33100000A0A0056E12C00000AC4309FE50710A0E1DE +S219027AFC000096E5034088E0190500EB000050E31F00001A10C3 +S219027B110096E5090050E11800001A013040E2050053E303F1EF +S219027B269F97130000EA447B0200447B0200B47B0200787B0268 +S219027B3B00507B0200647B0200003094E5003085E5F0AF1BE99A +S219027B500500A0E10410A0E10420A0E35F0300EBF0AF1BE90562 +S219027B6500A0E10410A0E10620A0E35A0300EBF0AF1BE900401A +S219027B7A85E5F0AF1BE93C009FE50710A0E1D60400EBF0AF1B0B +S219027B8FE9100096E51BFFFFEB008088E0146086E20A0056E15D +S219027BA4D2FFFF1A18009FE50710A0E1CC0400EBF0AF1BE90C3D +S219027BB9060300AC0603006C33030014F8020040F802000DC03B +S219027BCEA0E130D82DE90030A0E304B04CE294509FE504D04DDE +S219027BE3E2003085E59FFDFFEB000050E33F00000A80309FE5D4 +S219027BF880009FE580409FE5001090E5012BA0E300C093E504B9 +S219027C0D00A0E18C1041E0310300EB0400A0E1FF1FA0E3E1FEF9 +S219027C22FFEBFC3394E5030050E10700001A002094E54C309FAB +S219027C37E5030052E10300001AF82394E540309FE5030052E13B +S219027C4C1100000A38009FE5A30400EB0400A0E130209FE5005A +S219027C6130A0E3003082E50310A0E1012BA0E33A0500EB1E0032 +S219027C7600EA74C30300603303005C3303006C330300CEFAAD8F +S219027C8B0BADDEADDE60F8020084C3030018104BE23C009FE503 +S219027CA00120A0E384FFFFEB18301BE5000053E30700000A2800 +S219027CB5009FE528109FE50420A0E37DFFFFEB20009FE5201092 +S219027CCA9FE50220A0E379FFFFEB0130A0E3003085E5040000C1 +S219027CDFEACCF60200E4F6020084C303000CF70200E8C2030003 +S219027CF430A81BE90DC0A0E100D82DE9803260E0030180E00006 +S219027D090180E014209FE50002A0E1483092E504B04CE20FE002 +S219027D1EA0E103F0A0E100A81BE9500000000DC0A0E1F0DF2D0E +S219027D33E904B04CE206DD4DE298010BE5041090E59C110BE5A8 +S219027D480020A0E3A4210BE5007091E5A0210BE549F3FFEB51B9 +S219027D5DF3FFEB47F3FFEB043097E5010053E3A200001A07005F +S219027D72A0E10410A0E3C30B00EB043097E5040053E302000038 +S219027D870AD4029FE5550400EBF1FFFFEA0700A0E12010A0E324 +S219027D9C632F4BE2013CA0E390310BE500C0A0E394C10BE565AE +S219027DB14F4BE200408DE5193E4BE28C0A00EB000050E363AF3E +S219027DC64BE20700000A94329FE528104BE2F32091E1410F528D +S219027DDBE30200000A84029FE53F0400EBDBFFFFEA0700A0E11A +S219027DF00030A0E394310BE51510A0E3653F4BE200308DE50AEA +S219027E0520A0E1193E4BE2780A00EB000050E31B00000A628F86 +S219027E1A4BE20840A0E10130D4E444929FE5000053E3020000DB +S219027E2F0A0130D4E4000053E3FCFFFF1A0460A0E10130D4E42C +S219027E44000053E3FCFFFF1A0450A0E10130D4E4000053E3FCE8 +S219027E59FFFF1AA4111BE5000051E30100000A04029FE51D0456 +S219027E6E00EB0900A0E10610A0E10820A0E100408DE50530A0BC +S219027E83E1170400EB0700A0E11A10A0E30050A0E394510BE51F +S219027E98653F4BE200308DE50A20A0E1193E4BE2510A00EB05E1 +S219027EAD0050E10800000A0A00A0E190111BE58C204BE2260B40 +S219027EC200EB8C301BE5A0111BE5050050E10310A011A0110B96 +S219027ED7E5A0211BE5000052E30200001A8C019FE5FE0300EB9B +S219027EEC9AFFFFEA0510A0E180519FE507CDA0E30500A0E10828 +S219027F013097E5813083E00C20D3E70120C0E7011081E205007D +S219027F1651E3F8FFFFDA0700A0E10030A0E394310BE51B10A090 +S219027F2BE3653F4BE200308DE50A20A0E1193E4BE22C0A00EB94 +S219027F40000050E32900000A0A00A0E190111BE574204BE2C70B +S219027F550A00EB000050E32000000A9C111BE570201BE5003051 +S219027F6A91E5101093E5024081E09C211BE5044082E5A0111B16 +S219027F7FE574205BE50700A0E1450A00EB1F30D4E51F30C4E56B +S219027F940720D4E5800012E30200001A0730D4E5800013E3FCFE +S219027FA9FFFF0A98111BE5003091E50100A0E1202093E5051016 +S219027FBEA0E10FE0A0E100F092E59C211BE5343092E50140A0D6 +S219027FD3E30C4083E5B2F2FFEB0400A0E12B0000EA94009FE5BB +S219027FE8BE0300EB5AFFFFEA8C009FE5BB0300EB57FFFFEA0592 +S219027FFD0053E30200001A7C009FE5B60300EB52FFFFEAA4F2A2 +S219028012FFEB3200A0E336FFFFEBA4311BE5000053E301000088 +S2190280271A5C009FE5AD0300EBA4111BE554009FE5011081E2A7 +S21902803CA4110BE5A80300EBA4211BE50000A0E30A0052E30F57 +S21902805100000A0700A0E1CD0100EB88F2FFEB3DFFFFEAA4F8A3 +S21902806602009EFEFFFFC0F80200DCF80200D8F80200ECF8021A +S21902807B00B404030008F902001CF9020038F9020058F902008E +S21902809078F90200F0AF1BE90DC0A0E170D82DE90040A0E10849 +S2190280A56094E5045096E504B04CE2E70A00EB0000A0E3D80AF4 +S2190280BA00EB000085E5344085E50600A0E117FFFFEB70A81BBD +S2190280CFE90DC0A0E100D82DE904B04CE204C090E504109CE5C0 +S2190280E42130A0E30030C1E5FF20A0E30720C1E5213043E20FE2 +S2190280F930C1E530308CE500A81BE90DC0A0E110D82DE904E0E8 +S21902810E90E504B04CE204C09EE52130A0E30030CCE54820A0FA +S219028123E30E20CCE50000A0E30B00CCE50A00CCE5013043E22E +S2190281380C30CCE5462042E20D20CCE5203083E20430CCE51824 +S21902814D008EE514008EE508308EE50140A0E12C008EE56010A0 +S219028162A0E30110CCE53F3083E20330CCE57E2082E20220CC14 +S219028177E5203043E210308EE57F2082E20720CCE5203043E28F +S21902818C0F30CCE50C20A0E10110C2E40710CCE50030D4E700D0 +S2190281A130C2E7010080E2050050E3FAFFFFDA2230A0E3003077 +S2190281B6CCE50020A0E30D20CCE51E3043E20C30CCE501208278 +S2190281CBE230208EE510A81BE90DC0A0E100D82DE9010C51E2BB +S2190281E00100A01304B04CE200A81BE90DC0A0E100D82DE90401 +S2190281F52090E504B04CE2143092E50000A0E3000053E1020083 +S21902820A000A183092E5000053E10000001A0100A0E300A81BFA +S21902821FE90DC0A0E100D82DE904B04CE204C090E504009CE57E +S2190282342230A0E30030C0E50520C0E54224A0E10620C0E50404 +S21902824910C0E5043083E20030C0E50120A0E32C208CE500A8ED +S21902825E1BE90DC0A0E1F0DF2DE904B04CE20090A0E10380A0B7 +S219028273E13F0058E3044099E50850A0C14050A0D304309BE562 +S2190282880160A0E1087094E502A0A0E1040094E5400057E304E9 +S21902829D00001A147084E51C3084E5245084E55030A0E3030026 +S2190282B200EA187084E5203084E5285084E54030A0E30830848C +S2190282C7E52230A0E30030C0E50A50C0E54534A0E10B30C0E533 +S2190282DC0020A0E30820C0E502E0A0E10970C0E54030A0E3079B +S2190282F130C0E5122082E20020C0E50A005EE10F0000AA8E3180 +S219028306A0E1062083E004C092E501E08EE2061093E70C20A069 +S21902831BE101C04CE2000052E3F4FFFFDA0C20A0E10130D1E4E2 +S21902833001C04CE21030C0E5000052E3F9FFFFCAEDFFFFEA058D +S2190283450058E1040000AA0030A0E305E068E01030C0E501E08F +S21902835A5EE2FCFFFF1A2C2094E50730D0E5400013E3FCFFFFD2 +S21902836F0A000052E30800001A143094E5030057E10130A003C5 +S2190283840230A0130C3084E50900A0E10710A0E10520A0E1A0EB +S219028399FFFFEBF0AF1BE90DC0A0E170D82DE904D04DE200602D +S2190283AEA0E1045096E5044095E50C20D4E56230A0E30030C4B7 +S2190283C3E50710D4E5403043E20030C4E504B04CE22A0000EA85 +S2190283D80430A0E30000A0E30A30C4E50B00C4E5800052E308FB +S2190283ED00C4E56020A0030920C4E5103095E5020053E10200E4 +S219028402001A013041E20330C4E5210000EA0010A0E11C004B11 +S219028417E2102085E54030A0E30730C4E50A20A0E30020C4E584 +S21902842C1030D4E50130C0E7011081E2030051E3FAFFFF9A190D +S219028441305BE51A105BE50600A0E1002096E5031481E120C0CA +S21902845692E5041041E20FE0A0E104F09CE51B305BE501304378 +S21902846BE20330C4E56220A0E30020C4E50710D4E52230A0E3C4 +S2190284800030C4E50320D4E5FF1001E2012082E2010052E1CFB1 +S219028495FFFF1A70A81BE90DC0A0E170D82DE904B04CE200C049 +S2190284AAA0E30C40A0E10260A0E1040090E5060054E104E0905B +S2190284BFE50150A0E1060000AA0520A0E106C0A0E1043092E5A2 +S2190284D401C05CE2034084E0082082E2FAFFFF1A2230A0E30073 +S2190284E930CEE50A40CEE54434A0E10B30CEE50420A0E30820E1 +S2190284FECEE51010D0E500C0A0E30910CEE54030A0E30730CED3 +S219028513E5062082E20020CEE506005CE10D0000AA8C21A0E1E2 +S219028528053082E0041093E5050092E7000051E301208CE203D0 +S21902853D00000A1030DEE50130C0E4011051E2FBFFFF1A02C027 +S219028552A0E106005CE1F1FFFFBA70A81BE90DC0A0E170D82DC1 +S219028567E90050A0E1044095E5043094E50C2094E504B04CE24C +S21902857C0410D3E5010052E30300001A1C6094E50030A0E31408 +S2190285913084E5020000EA206094E50030A0E3183084E51410C8 +S2190285A694E50030A0E32C3084E5030051E10500000A242094AC +S2190285BBE50500A0E116FFFFEB0130A0E30C3084E5090000EAEE +S2190285D0181094E5000051E30500000A282094E50500A0E10D57 +S2190285E5FFFFEB0230A0E30C3084E5000000EA0C1084E50500C3 +S2190285FAA0E1003095E50610A0E120C093E50020A0E30FE0A019 +S21902860FE108F09CE570A81BE90DC0A0E100D82DE90C009FE50D +S2190286240C109FE504B04CE22D0200EB00A81BE97CF9020080FB +S219028639F902000DC0A0E1F0D82DE90050A0E1047095E50460DB +S21902864E97E52230A0E30030C6E50720D6E504B04CE2FF4002DF +S219028663E2000054E31600000A0740C6E5303097E5000053E3BE +S2190286781400000A0A0014E30200000A0500A0E10410A0E1B3ED +S21902868DFFFFEB050014E30200000A0500A0E10410A0E13EFF88 +S2190286A2FFEB300014E30200000A0500A0E10410A0E1D7FFFFAF +S2190286B7EB0730D6E5FF4003E2000054E3E8FFFF1A000097E5F3 +S2190286CC730900EBF0A81BE90DC0A0E100D82DE9043090E500AA +S2190286E12093E504B04CE2200092E500A81BE90DC0A0E130D86A +S2190286F62DE98C209FE58C309FE504B04CE2001092E50040A099 +S21902870BE1005093E5000051E30400001A0130A0E3003082E50C +S2190287203500A0E30120A0E1F7F0FFEB0E33A0E3083084E502AB +S2190287352CA0E30C2084E53E3383E2103084E50123A0E314208A +S21902874A84E5033383E2183084E58300A0E31C2084E53530A0AE +S21902875FE3203084E58010A0E386E0FFEB010515E30200001AE5 +S2190287740130A0E3043084E530A81BE90030A0E3043084E5303C +S219028789A81BE9BC040300000004900DC0A0E100D82DE9243041 +S21902879E9FE5002093E504B04CE2010512E30200001A0130A0D9 +S2190287B3E3043080E500A81BE90030A0E3043080E500A81BE98A +S2190287C8000004900DC0A0E100D82DE9803260E0030180E0006F +S2190287DD0180E014209FE50002A0E1483092E504B04CE20FE024 +S2190287F2A0E103F0A0E100A81BE9500000000DC0A0E170D82DB7 +S219028807E9040051E304B04CE24CD04DE20040A0E12900001A03 +S21902881C045094E5010055E32600001A8300A0E38110A0E3548C +S219028831E0FFEB1E00A0E3E3FFFFEB8300A0E30310A0E3023026 +S219028846A0E3043084E50060A0E34CE0FFEB0500A0E1DBFFFF9E +S21902885BEB8300A0E30330A0E3043084E50510A0E145E0FFEB18 +S2190288700500A0E3D4FFFFEB020000EA0A00A0E3D1FFFFEB0173 +S2190288856086E2090056E30C0000CA0400A0E12010A0E300308F +S21902889AA0E360300BE560204BE200208DE55C304BE258204B04 +S2190288AFE2CF0700EB000050E3EFFFFF0A0430A0E3043084E58C +S2190288C470A81BE90DC0A0E100D82DE93500A0E304B04CE28620 +S2190288D9F0FFEB00A81BE90DC0A0E100D82DE904B04CE202C01D +S2190288EEA0E100E0A0E103005CE30200009A003081E103001306 +S219028903E30A00000A0C30A0E101C04CE2000053E30500000A70 +S2190289180C20A0E10130D1E401C04CE20130CEE4000052E3F9B0 +S21902892DFFFF1A00A81BE900E0A0E10F005CE30E00009A0430DF +S21902894291E404308EE4042091E404208EE4043091E404308E64 +S219028957E4042091E410C04CE204208EE40F005CE3F4FFFF8A29 +S21902896C020000EA043091E404C04CE204308EE403005CE3FA86 +S219028981FFFF8A0C30A0E101C04CE2000053E30500000A0C2035 +S219028996A0E10130D1E401C04CE20130CEE4000052E3F9FFFF60 +S2190289AB1A00A81BE90DC0A0E1F0DF2DE904B04CE250D04DE286 +S2190289C00170A0E178404BE200A0A0E3005050E20260A0E10339 +S2190289D580A0E10490A0E10300001A3030A0E378304BE57740E1 +S2190289EA4BE2090000EA0500A0E10610A0E1241700EB0030D806 +S2190289FFE70610A0E10130C4E40500A0E1C31500EB005050E23A +S219028A14F5FFFF1A090054E10500000A0920A0E1013074E501B7 +S219028A29A08AE20130C7E4020054E1FAFFFF1A0A00A0E1003045 +S219028A3EA0E30030C7E5F0AF1BE90DC0A0E1F0DF2DE904B04CE7 +S219028A53E234D04DE24C200BE50180A0E148204BE250200BE59F +S219028A680060A0E30140D8E40070A0E158600BE5060054E1FE40 +S219028A7D00000A250054E3ED00001A0030A0E354300BE5014008 +S219028A92D8E40350A0E12D0054E30200001A0120A0E354200B95 +S219028AA7E50140D8E4300054E30200001A0140D8E40190A0E33D +S219028ABC060000EA0390A0E1040000EA053185E08330A0E130AD +S219028AD13043E2045083E00140D8E4303044E2090053E3F7FFC5 +S219028AE6FF9A2E0054E30600001A0140D8E4019089E20000005D +S219028AFBEA0140D8E4303044E2090053E3FBFFFF9A00A0A0E3FD +S219028B106C0054E30140D804584044E2200054E304F19F9772D7 +S219028B250000EACC8B0200F48C0200F48C0200F48C0200F48CEB +S219028B3A0200F48C0200F48C0200F48C0200F48C0200F48C0293 +S219028B4F00F48C0200D08C0200CC8B0200F48C0200F48C0200CD +S219028B64F48C0200F48C0200F48C0200F48C0200F48C0200F477 +S219028B798C0200F48C0200F48C0200F48C0200AC8B0200F48C13 +S219028B8E0200F48C0200B08C0200F48C0200F48C0200F48C0283 +S219028BA300F48C0200CC8B02003000A0E30FE0A0E107F0A0E140 +S219028BB87800A0E30FE0A0E107F0A0E10190A0E30850A0E34C83 +S219028BCD301BE5040093E44C300BE5200054E304F19F972F00C4 +S219028BE200EA908C0200A48C0200A48C0200A48C0200A48C02A7 +S219028BF700A48C0200A48C0200A48C0200A48C0200A48C020068 +S219028C0CA48C0200A48C0200688C0200A48C0200A48C0200A4EA +S219028C218C0200A48C0200A48C0200A48C0200A48C0200A48CB1 +S219028C360200A48C0200A48C0200A48C0200848C0200A48C0246 +S219028C4B00A48C0200A48C0200A48C0200A48C0200A48C020013 +S219028C60A48C0200848C0200000050E32DA0A0B3000060B24807 +S219028C75104BE2B4319FE50A20A0E3050000EA48104BE2A83143 +S219028C8A9FE5010000EA48104BE2A0319FE51020A0E343FFFF91 +S219028C9FEB58000BE548204BE250200BE5140000EA4C301BE517 +S219028CB4042093E450200BE54C300BE50200A0E19C0000EB58DB +S219028CC9000BE50C0000EA4C301BE5043083E24C300BE50160C7 +S219028CDE86E2040053E5019088E20FE0A0E107F0A0E15D000096 +S219028CF3EA3F00A0E30FE0A0E107F0A0E1016086E258201BE590 +S219028D08055062E000005AE301504512000059E30800000A3055 +S219028D1D40A0E300005AE30600000A0A00A0E10FE0A0E107F038 +S219028D32A0E1016086E200A0A0E3000000EA2040A0E358201B58 +S219028D47E5019088E254301BE5012042E25C200BE5000053E3C5 +S219028D5C0800001A030000EA0400A0E10FE0A0E107F0A0E1017E +S219028D716086E20530A0E1015045E2000053E3F7FFFFCA0000FB +S219028D865AE30300000A0A00A0E10FE0A0E107F0A0E10160862D +S219028D9BE25C201BE558301BE50F0000EA50301BE50140D3E465 +S219028DB0016086E250300BE50400A0E10FE0A0E107F0A0E10AF7 +S219028DC50054E30300001A0D00A0E30FE0A0E107F0A0E1016065 +S219028DDA86E258301BE50320A0E1012042E258200BE5000053E9 +S219028DEFE3ECFFFFCA54301BE5000053E31A00000A0530A0E13D +S219028E04015045E2000053E3160000DA2000A0E30FE0A0E1079A +S219028E19F0A0E1016086E20530A0E1015045E2000053E3F7FFA9 +S219028E2EFFCA0D0000EA90F902009CF90200B0F902000400A0F7 +S219028E43E10FE0A0E107F0A0E1016086E20A0054E3019088E245 +S219028E580300001A0D00A0E30FE0A0E107F0A0E1016086E200A0 +S219028E6D40D8E50980A0E1000054E300FFFF1A0600A0E1F0AF6D +S219028E821BE90DC0A0E100D82DE918309FE5002093E50100C26D +S219028E97E40010A0E3002083E504B04CE20010C2E500A81BE97B +S219028EAC6C3703000DC0A0E10E002DE900D82DE918309FE500D8 +S219028EC10083E510B04CE204109BE50C009FE508208BE2DBFEAD +S219028ED6FFEB010000EA6C370300848E020000A81BE90DC0A0D8 +S219028EEBE10F002DE900D82DE910009FE514B04CE204109BE55D +S219028F0008208BE2CFFEFFEB000000EA8891020000A81BE90D4B +S219028F15C0A0E100D82DE90030A0E10120A0E10310A0E1080022 +S219028F2A9FE504B04CE2C4FEFFEB00A81BE9889102000DC0A0E5 +S219028F3FE100D82DE90020A0E30130D0E404B04CE2020053E1A7 +S219028F540300000A0130D0E4012082E2000053E3FBFFFF1A023F +S219028F6900A0E100A81BE90DC0A0E100D82DE90130D1E400207D +S219028F7EA0E10100D2E404B04CE2030050E10500001A0000501A +S219028F93E30400000A0100D2E40130D1E4030050E1F9FFFF0AFF +S219028FA8000063E000A81BE90DC0A0E100D82DE90130D1E4009C +S219028FBD0053E304B04CE20300000A0130C0E40130D1E40000B8 +S219028FD253E3FBFFFF1A0030A0E30030C0E500A81BE90DC0A099 +S219028FE7E100D82DE900E0A0E10120DEE404B04CE2020000EA8D +S219028FFC000050E30F00000A0120DEE401C0D1E4200082E2FF31 +S2190290110000E2413042E2190053E30200A08120308CE2FF207D +S21902902603E241304CE2190053E30C30A0810230A09103005048 +S21902903BE1EEFFFF0A000063E000A81BE90DC0A0E100D82DE917 +S219029050000052E304B04CE200C0A0E10300001A0200A0E1000C +S219029065A81BE9000063E000A81BE90100DCE40130D1E40300AA +S21902907A50E1F9FFFF1A000050E30100000A012052E2F7FFFF10 +S21902908F1A0000A0E300A81BE90DC0A0E110D82DE9000052E3FB +S2190290A404B04CE20040A0E10500001A0200A0E110A81BE900AF +S2190290B90063E010A81BE9012052E21000000A01C0D4E401E0D3 +S2190290CED1E420008CE2FF0000E241304CE2190053E30C00A0C8 +S2190290E38120308EE2FFC003E241304EE2190053E30E30A0813D +S2190290F80C30A091030050E1ECFFFF1A000050E3ECFFFF1A0080 +S21902910D00A0E310A81BE90DC0A0E100D82DE904B04CE202C027 +S219029122A0E1070000EA0120D0E40130D1E4030052E1030000CB +S2190291370A013050E5010051E5030060E000A81BE90C30A0E1C9 +S21902914C01C04CE2000053E3F3FFFFCA0000A0E300A81BE90DEB +S219029161C0A0E100D82DE9012052E2FF1001E204B04CE2020098 +S219029176004A0110C0E4012052E2FCFFFF5A00A81BE90DC0A01C +S21902918BE1F0D92DE9BC309FE504B04CE2004093E5FF6000E2BD +S2190291A0000054E31900001AA8309FE50000E0E30380A0E134F2 +S2190291B52093E50850A0E10FE0A0E102F0A0E10070A0E13430F5 +S2190291CA95E50400A0E10FE0A0E103F0A0E1143095E500009355 +S2190291DFE5014084E20C3093E50610A0E10FE0A0E103F0A0E1B9 +S2190291F4000054E3F2FFFFDA343098E50700A0E10FE0A0E10382 +S219029209F0A0E1F0A91BE940209FE5143092E5000053E3050061 +S21902921E000A000093E50C3093E50610A0E10FE0A0E103F0A064 +S219029233E1F0A91BE9183092E5000093E50C3093E50610A0E11F +S2190292480FE0A0E103F0A0E1F0A91BE9E0C20300500000000D87 +S21902925DC0A0E110D82DE930209FE504B04CE2143092E5004005 +S219029272A0E1000053E30500000A000093E5103093E50FE0A05B +S219029287E103F0A0E10000C4E510A81BE9183092E5F7FFFFEA73 +S21902929C500000000DC0A0E1F0DF2DE9E0309FE504B04CE200BD +S2190292B160A0E1004093E50390A0E1000054E31C00001A000087 +S2190292C6E0E3C4309FE50450A0E10380A0E1342093E50870A094 +S2190292DBE10FE0A0E102F0A0E100A0A0E1343097E50500A0E12C +S2190292F00FE0A0E103F0A0E1143097E5000093E51C3093E5067C +S21902930510A0E10FE0A0E103F0A0E1004050E20C00001A0150EE +S21902931A85E2000055E3F0FFFFDA343098E50A00A0E10FE0A0D5 +S21902932FE103F0A0E1130000EA54209FE5143092E5000053E3E7 +S2190293440800000A080000EA0130A0E3003089E5302098E505E5 +S21902935900A0E10FE0A0E102F0A0E10400A0E1F0AF1BE9183024 +S21902936E92E5000093E51C3093E50610A0E10FE0A0E103F0A096 +S219029383E10040A0E10400A0E1F0AF1BE9E0C20300500000000F +S2190293980DC0A0E1F0D92DE9D8309FE504B04CE2004093E50066 +S2190293AD60A0E1000054E31C00001AC4309FE50000E0E3038098 +S2190293C2A0E1342093E50850A0E10FE0A0E102F0A0E10070A076 +S2190293D7E1343095E50400A0E10FE0A0E103F0A0E114C095E504 +S2190293EC00005CE30500000A00009CE50710A0E314309CE50631 +S21902940120A0E10FE0A0E103F0A0E1014084E2000054E3EFFFFE +S219029416FFDA343098E50700A0E10FE0A0E103F0A0E10A00000A +S21902942BEA50309FE514C093E50380A0E100005CE30500000A99 +S21902944000009CE50710A0E314309CE50620A0E10FE0A0E10316 +S219029455F0A0E118C098E500005CE30500000A00009CE507104F +S21902946AA0E314309CE50620A0E10FE0A0E103F0A0E1F0A91B5F +S21902947FE9E0C20300500000000DC0A0E1F0DD2DE904B04CE2E0 +S21902949404D04DE20250A0E10060A0E10640A0E10070A0E3B497 +S2190294A9819FE5002098E5000052E30600000A0030D2E50000D9 +S2190294BE53E30300000A0130D2E425304BE5002088E516000040 +S2190294D3EA060054E10030A0130130A003000055E30030A0D3C6 +S2190294E8000053E30D00000A3200A0E3A7FFFFEB000000EA32BA +S2190294FD5045E2000055E3030000DA25004BE263FFFFEB0070B9 +S21902951250E2F8FFFF0A000057E30300001A0000E0E3510000A0 +S219029527EA25004BE24AFFFFEB25205BE50030A0E30D0052E33F +S21902953C0030C4E50200A0E11B00000A080000CA080050E32C59 +S21902955100000A020000CA030050E30C00000A380000EA0A00B0 +S21902956650E31200000A350000EA2B0050E32E00000A020000E3 +S21902957BCA240050E32B00000A2F0000EA7F0050E31D00000A8C +S2190295902C0000EA060054E10300001AC4009FE550FEFFEB01D0 +S2190295A500E0E3300000EA0100C4E4B4A09FE5270000EA2520F6 +S2190295BA5BE5A8A09FE50A0052E30200001A0030DAE50D0053DF +S2190295CFE32000000A0D0052E30200001A0030DAE50A0053E3E6 +S2190295E41B00000A0D00A0E3E5FEFFEB0A00A0E3E3FEFFEB256C +S2190295F9305BE50030CAE50100A0E3190000EA5CA09FE50600FA +S21902960E54E11000000A0800A0E3DAFEFFEB2000A0E3D8FEFF2C +S219029623EB0800A0E3D6FEFFEB014044E2080000EA060054E163 +S2190296380200001AF8E1FFEB0000A0E3090000EACEFEFFEB25E6 +S21902964D305BE514A09FE50130C4E425305BE50030CAE591FF7C +S219029662FFEA84C30300C4F90200C0040300F0AD1BE90DC0A025 +S219029677E1F0DF2DE904B04CE20060A0E1060051E106704180DF +S21902968C0170A091000057E30290A0E13B0000DA000059E3037F +S2190296A100000AE4009FE5061069E00DFEFFEB020000EAD40027 +S2190296B69FE50610A0E109FEFFEB0050A0E3108047E210A086CA +S2190296CBE2070055E1030000AAB8009FE50510D6E701FEFFEBC0 +S2190296E0010000EAAC009FE5FEFDFFEBC54FA0E1053064E0015F +S2190296F530C3E3053063E0010053E30100001A90009FE5F6FDB2 +S21902970AFFEBA43EA0E1033085E00730C3E3053063E0070053AF +S21902971FE30100001A70009FE5EEFDFFEB015085E20F0055E368 +S219029734E4FFFFDA60009FE5E9FDFFEB0050A0E3070055E10495 +S2190297490000AA0510D6E7203041E25E0053E32E10A083000020 +S21902975E00EA2010A0E338009FE5DEFDFFEB015085E20F0055B5 +S219029773E3F2FFFFDA28009FE5D9FDFFEB0A60A0E1007058E22C +S219029788C3FFFFCAF0AF1BE9C8F90200D4F90200DCF90200E04E +S21902979DF90200E4F90200E8F90200ECF902000DC0A0E100D8E6 +S2190297B22DE90020A0E304B04CE2ACFFFFEB00A81BE90DC0A052 +S2190297C7E10F002DE930D82DE914B04CE208D04DE248409FE55D +S2190297DC04009BE5005094E508108BE2C9FDFFEB38009FE5BC77 +S2190297F1FDFFEB1C004BE20020A0E3002084E50810A0E31FFF47 +S219029806FFEB1C305BE5590053E30000A0130100A0037900531E +S21902981BE30100A003005084E5010000EA84C30300F0F90200D1 +S21902983030A81BE90DC0A0E1F0DF2DE904B04CE20050A0E10159 +S21902984570A0E14C419FE50260A0E12CC014E503A0A0E1000019 +S21902985A5CE30300000A0A30A0E300308AE50000E0E3F0AF1BCD +S21902986FE90100A0E3710C00EB0000C4E52004A0E10100C4E510 +S2190298840500A0E10030D0E5022084E2000053E30300000A0191 +S21902989930C2E40130F0E5000053E3FBFFFF1A0030A0E30130AA +S2190298AEC2E4030056E1E4009F050200000A010056E3E6FFFF0C +S2190298C31AD8009FE50030D0E5D4809FE5D4609FE5000053E368 +S2190298D80300000A0130C2E40130F0E5000053E3FBFFFF1A0839 +S2190298ED40A0E10400A0E10050A0E30050C2E50510A0E10C208D +S219029902A0E315FEFFEB144044E20190A0E3BA91C4E10500A0A6 +S219029917E13D0C00EB140084E5003096E5B000D6E1093083E0F4 +S21902992C003086E5420C00EBB801C4E1B430D7E1050053E10216 +S21902994100001A4500A0E33C0C00EBB400C7E1180088E20720F0 +S219029956A0E150109FE50830A0E11F0A00EB000050E307000089 +S21902996BBA149008E50C5084E50030E0E3103084E5085084E573 +S219029980045084E50500A0E1F0AF1BE90000E0E30930A0E30066 +S219029995308AE5F0AF1BE99C37030008FA020014FA02008437CF +S2190299AA0300C8040300050200000DC0A0E100D82DE90000A0EC +S2190299BFE308309FE504B04CE2000083E500A81BE9703703004D +S2190299D40DC0A0E1F0DF2DE904B04CE218D04DE234000BE50027 +S2190299E930A0E33C300BE538100BE50280A0E10C629FE5010025 +S2190299FE53E1870000AA2C5046E20C3095E5000053E315000043 +S219029A13DA34001BE538C01BE53C201BE5341295E50C4062E087 +S219029A28040053E10340A0B10420A0E1A9FBFFEB34C01BE534FB +S219029A3D3295E504C08CE034C00BE50C2095E5043083E03432AA +S219029A5285E5022064E00C2085E53C101BE5041081E03C100B7A +S219029A67E5690000EA103095E5020C53E36A00003A0530A0E351 +S219029A7C88019FE50020A0E330300BE5209085E22C200BE51467 +S219029A91A085E274119FE530304BE200308DE50920A0E10A3096 +S219029AA6A0E1140A00EB004050E20470A0E31C0000AA04309522 +S219029ABBE5013083E2043085E5050053E3020000CA083095E5BD +S219029AD0000053E30100001A0830A0E3470000EA0700A0E1D5E0 +S219029AE50B00EB0000C6E52004A0E10100C6E5B800D5E1D00B2A +S219029AFA00EB0200C6E50710A0E12004A0E10300C6E50920A004 +S219029B0FE1F4009FE50A30A0E1B10900EB000050E33B0000AA69 +S219029B240930A0E3340000EA0030D6E50100D6E5000483E1C07C +S219029B390B00EB030050E32000001A0230D6E50300D6E50004FB +S219029B4E83E1BA0B00EB083095E5013083E2030050E105000066 +S219029B631A044044E2104085E50C4085E5043086E2343285E586 +S219029B78080085E50700A0E1AE0B00EB0000C6E52004A0E101E2 +S219029B8D00C6E5B800D5E1A90B00EB0200C6E50710A0E120049B +S219029BA2A0E10300C6E50920A0E158009FE50A30A0E18A0900A4 +S219029BB7EB000050E3140000AA0930A0E30D0000EA0030D6E518 +S219029BCC0100D6E5000483E1990B00EB050050E30600001A0270 +S219029BE130D6E50300D6E5000483E1930B00EB000088E5000061 +S219029BF6E0E30A0000EA0B30A0E3003088E50000E0E306000078 +S219029C0BEA9C370300050200003C201BE538301BE5030052E17C +S219029C2078FFFFBA3C001BE5F0AF1BE90DC0A0E100D82DE901DC +S219029C350040E204B04CE20B0050E300F19F97230000EA789C89 +S219029C4A0200809C0200889C0200909C0200989C0200A09C0216 +S219029C5F00A89C0200B09C0200B89C0200C09C0200C89C02003B +S219029C74D09C020060009FE500A81BE95C009FE500A81BE958F2 +S219029C89009FE500A81BE954009FE500A81BE950009FE500A88F +S219029C9E1BE94C009FE500A81BE948009FE500A81BE944009FCF +S219029CB3E500A81BE940009FE500A81BE93C009FE500A81BE928 +S219029CC838009FE500A81BE934009FE500A81BE930009FE50000 +S219029CDDA81BE92CFA02003CFA020050FA020074FA02008CFA1D +S219029CF20200A0FA0200B4FA0200C4FA0200D8FA0200F4FA0284 +S219029D070008FB02001CFB02001CFA02000DC0A0E170D82DE95E +S219029D1CAC309FE504B04CE20160A0E1004093E50350A0E1007B +S219029D310054E31800001AD50D00EB90009FE5043090E505001E +S219029D4653E30500001AB831D0E1000053E30000001AFD0D00B8 +S219029D5BEB0400A0E170A81BE9000053E30400001A2D0100EBF3 +S219029D700A30A0E30030C6E50100A0E370A81BE950409FE5800B +S219029D8520A0E30410A0E10F0E00EB44309FE5000085E50040E0 +S219029D9A83E5000095E5000050E30800000A2CC09FE500109C6A +S219029DAFE50130D1E40030C6E5002095E50100A0E300108CE553 +S219029DC4012042E2002085E570A81BE9D0040300B439030008C9 +S219029DD9400300884003000DC0A0E170D82DE904B04CE204D0FE +S219029DEE4DE26440A0E30060A0E119504BE2090000EA01405404 +S219029E03E20200001A0F0000EB6440A0E3040000EA28309FE55A +S219029E18482093E56400A0E30FE0A0E102F0A0E10600A0E105F8 +S219029E2D10A0E1B7FFFFEB000050E3F0FFFF0A19005BE5000064 +S219029E4200EA5000000070A81BE90DC0A0E1F0DD2DE99C709FD2 +S219029E57E504B04CE20760A0E194509FE594A09FE594809FE588 +S219029E6C0A0000EA0400A0E1002095E50610A0E10F0E00EB0028 +S219029E810050E3030000DA003095E5006086E0033060E00030A2 +S219029E9685E57D0D00EB003095E5000053E30900000A58409FA7 +S219029EABE5043094E5050053E30100001A0400A0E1A40D00EB92 +S219029EC0043094E5000053E3E8FFFF1AD50000EB00708AE544C0 +S219029ED53098E50040A0E3004085E5040053E10200000A04000F +S219029EEAA0E1CEE4FFEB444088E5F0AD1BE98C400300D4040303 +S219029EFF008C41030050000000B43903000DC0A0E110D82DE9EB +S219029F14A8209FE5A8409FE5003092E5FF1001E20110C3E42404 +S219029F290051E3003082E504B04CE20130A003003084050020C2 +S219029F3E94E5230051E30030A0130130A003000052E30030A07B +S219029F5303000053E30500000A68209FE50130A0E3003082E553 +S219029F6860109FE5013043E2003081E558209FE5003092E50159 +S219029F7D3083E2003082E5010C53E30900000A38309FE500203A +S219029F9293E5000052E30800000A2C209FE5003092E5013083C9 +S219029FA7E2003082E5030053E30200001AA4FFFFEB0030A0E390 +S219029FBC003084E510A81BE98C410300A8390300AC390300B0E8 +S219029FD1390300D40403000DC0A0E110D82DE904B04CE27600B9 +S219029FE600EB0040A0E114009FE514109FE5EE20A0E3BAFBFF2E +S219029FFBEB0400A0E17F0000EB10A81BE9F8FB020000FC0200C1 +S21902A0100DC0A0E110D82DE904B04CE2680000EB0040A0E114DE +S21902A025009FE514109FE5012CA0E3ACFBFFEB0400A0E17100BC +S21902A03A00EB10A81BE9F8FB020010FC02000DC0A0E1F0D82D1D +S21902A04FE904B04CE20060A0E10150A0E17AFFFFEB44209FE52C +S21902A064003092E540709FE5033183E08340A0E1030000EA48F5 +S21902A0793097E56400A0E30FE0A0E103F0A0E10600A0E10510B8 +S21902A08EA0E11FFFFFEB000050E30200001A014044E201007402 +S21902A0A3E3F3FFFF1AF0A81BE9CC040300500000000DC0A0E1A6 +S21902A0B80E002DE930D82DE910B04CE204309BE50050A0E304D1 +S21902A0CD3043E2030053E303F19F97200000EA1CA10200ECA06A +S21902A0E202003CA1020050A1020054409FE554309FE5001094CA +S21902A0F7E50120A0E3002083E5000051E30100001A830500EB7A +S21902A10C000084E5000094E5C4D9FFEB100000EA28309FE520D8 +S21902A121209FE5005093E5000092E50010A0E3001083E5B0D9AB +S21902A136FFEB080000EA04309FE5005093E5050000EAD80403E3 +S21902A14B00DC04030010209FE508309BE5005092E5003082E54B +S21902A1600500A0E1000000EACC04030030A81BE90DC0A0E13046 +S21902A175D82DE904B04CE204D04DE20040A0E10200A0E1015066 +S21902A18AA0E159EAFFEB0400A0E10030A0E3003085E515104BC9 +S21902A19FE2DBFEFFEB000050E30300000A15305BE5030053E301 +S21902A1B40130A003003085050100A0E330A81BE90DC0A0E13023 +S21902A1C9D82DE92C409FE50000E0E3343094E504B04CE20FE02B +S21902A1DEA0E103F0A0E10050A0E1343094E50000A0E30FE0A0B0 +S21902A1F3E103F0A0E10500A0E130A81BE9500000000DC0A0E1FB +S21902A20800D82DE910309FE5342093E504B04CE20FE0A0E10268 +S21902A21DF0A0E100A81BE9500000000DC0A0E110D82DE9381024 +S21902A2329FE538209FE50030A0E3003081E530409FE5000092E1 +S21902A247E5343094E504B04CE20FE0A0E103F0A0E11C209FE5B3 +S21902A25C303094E5000092E50FE0A0E103F0A0E110A81BE9E016 +S21902A271C203000040030050000000044003000DC0A0E170D89C +S21902A2862DE964309FE50150A0E3005083E504B04CE258409FE9 +S21902A29BE50060E0E3342094E50600A0E10FE0A0E102F0A0E168 +S21902A2B044309FE5000083E5342094E50500A0E10FE0A0E1026D +S21902A2C5F0A0E1301094E50600A0E10FE0A0E101F0A0E120309A +S21902A2DA9FE5000083E5302094E50500A0E10FE0A0E102F0A02B +S21902A2EFE170A81BE9E0C20300500000000040030004400300D7 +S21902A3040DC0A0E170D82DE9AC609FE5003096E504B04CE20074 +S21902A3190053E31E00001A9C409FE5343094E50000E0E30FE0CB +S21902A32EA0E103F0A0E10050A0E1343094E50100A0E30FE0A05D +S21902A343E103F0A0E1141094E574309FE574209FE5043081E532 +S21902A35870309FE5082081E50C3081E568209FE568309FE5105D +S21902A36D2081E5143081E560209FE560309FE5182081E51C30A2 +S21902A38281E5342094E50500A0E10FE0A0E102F0A0E10130A052 +S21902A397E3003086E540309FE540409FE5B010D3E10400A0E13B +S21902A3AC3E0C00EB34209FE5043094E5003082E570A81BE9E048 +S21902A3C104030050000000D89F020010A002000C9F0200E09DD4 +S21902A3D60200B4A0020070A1020048A0020070C30300B43903F0 +S21902A3EB00FC3F03000DC0A0E130D82DE904B04CE2240C00EBAF +S21902A40078309FE578109FE5002093E50350A0E1040091E50121 +S21902A41540A0E1000052E11400000A040050E30E00001A94FF27 +S21902A42AFFEB54309FE554009FE5000083E550109FE50130A02F +S21902A43FE3003081E548109FE548309FE50D20A0E30020C0E53B +S21902A454003081E53C209FE50030A0E3003082E5043094E5007F +S21902A4690053E30000001AA3FFFFEB043094E5003085E530A8DC +S21902A47E1BE9FC3F0300B43903008840030008400300D00403A3 +S21902A493008C4103008C400300D40403000DC0A0E1F0D92DE906 +S21902A4A868319FE5001093E504B04CE2000051E30900001A5862 +S21902A4BD019FE558219FE50130A0E3003080E5001082E54C31C4 +S21902A4D29FE54C119FE5003081E50080A0E1150000EA40019F93 +S21902A4E7E530119FE50120A0E371F5FFEB34019FE528119FE545 +S21902A4FC0220A0E314419FE56CF5FFEB0410A0E120019FE50140 +S21902A51120A0E368F5FFEB18019FE518119FE50520A0E364F5F9 +S21902A526FFEB10019FE50480A0E10C119FE50520A0E35FF5FFF9 +S21902A53BEB04419FE50030A0E3003084E5FC509FE5110300EB35 +S21902A550480800EBF4309FE50460A0E1030055E10370A0E109F1 +S21902A56500000A0140A0E30500A0E10FE0A0E104F095E50000A8 +S21902A57A50E30C4085150C008505105085E2070055E1F6FFFF1E +S21902A58F1ABC309FE5002093E5000052E30200001AB0009FE509 +S21902A5A44FFAFFEBF0A91BE9003098E5000053E30600000A9C3C +S21902A5B9009FE5C80500EB000050E30200000A90009FE545FAB8 +S21902A5CEFFEB010000EA0130A0E3003086E5003096E50000534F +S21902A5E3E30A00000A4C009FE56C0000EB0010A0E168009FE5C1 +S21902A5F83AFAFFEB40009FE5670000EB0010A0E158009FE53571 +S21902A60DFAFFEB3BFFFFEBF0A91BE974C30300ECC2030028C5B4 +S21902A62203002823000070C3030074FB02004CFB0200A4FB023D +S21902A63700C0FB0200F0040300E8FB0200A4C30300BCC4030081 +S21902A64CB4060300C40603002CC503001CFC020090C303003CC8 +S21902A661FC020068FC020070FC02000DC0A0E1F0DF2DE904B024 +S21902A6764CE20040A0E10190A0E100A0A0E30A80A0E10160A098 +S21902A68BE30070A0E301C0D4E40A50A0E307005CE13500000A04 +S21902A6A030005CE30030A0130130A003030016E10A00000A006A +S21902A6B530D4E5411043E2202083E2FF2002E2190051E3023003 +S21902A6CAA091780053E30200001A1050A0E3014084E201C0D45A +S21902A6DFE400E0A0E30E60A0E130104CE2FF0001E241204CE24A +S21902A6F4FF3002E2050053E3090050830200009A61304CE205C0 +S21902A7090053E30000008A01E0A0E300005EE31200000A0000B3 +S21902A71EA0E3FF3001E2090053E30100A0910600009A61304C9C +S21902A733E2050053E357004C920200009AFF3002E2050053E3CE +S21902A74837004C92050050E1040000AA01C0D4E4950727E000E0 +S21902A75D005CE3CEFFFF1A030000EA2E005CE30100000A000056 +S21902A772A0E3F0AF1BE9033068E28331A0E117A38AE1018088C5 +S21902A787E2030058E3BDFFFFDA0A00A0E19E0800EB000089E577 +S21902A79C0100A0E3F0AF1BE90DC0A0E110D82DE90010A0E10895 +S21902A7B1D04DE20230D1E528409FE500308DE50320D1E504201A +S21902A7C68DE50020D1E50130D1E504B04CE210109FE50400A01E +S21902A7DBE1B3F9FFEB0400A0E1010000EA9041030088FC020021 +S21902A7F010A81BE90DC0A0E1F0D82DE904B04CE200E0A0E1081A +S21902A805C09EE5FF1001E204609BE50250A0E1000096E503705D +S21902A81AA0E108208EE2140092E8044082E000C08CE014000095 +S21902A82FEA010052E10E00001A0230DCE508009EE502E093E2F2 +S21902A8440500000A0E10A0E10030DCE5011051E20130C5E40239 +S21902A859C08CE2FAFFFF1A00E087E50C3060E0003086E501003F +S21902A86EA0E3F0A81BE90230DCE58330A0E1043083E203C08CA0 +S21902A883E004005CE10300002A0020DCE5FF3002E2FF0053E342 +S21902A898E4FFFF1A0000A0E3F0A81BE90DC0A0E100D82DE90845 +S21902A8AD3090E5FF2002E20120C3E704B04CE200A81BE90DC0C1 +S21902A8C2A0E100D82DE90610A0E3002090E504B04CE201C0D268 +S21902A8D7E45C31A0E1010013E30100000A0130D2E4A32382E062 +S21902A8EC011051E2F8FFFF5A002080E500A81BE90DC0A0E1003D +S21902A901D82DE9002090E50130D2E404B04CE21C1003E21C00C1 +S21902A91651E301208212033003E2030053E30120821200208096 +S21902A92BE500A81BE90DC0A0E1F0DF2DE904B04CE20040A0E3A7 +S21902A9400090A0E100C099E50460A0E10120DCE401E0A0E16024 +S21902A9553002E2A332A0E14430CEE5800012E34100000A012074 +S21902A96ADCE40470A0E10F3002E2013083E240308EE503005726 +S21902A97FE13A0000AA303002E223A2A0E12283A0E10750A0E16F +S21902A99403005AE30AF19F97130000EAF0A90200B0A90200B88B +S21902A9A9A90200CCA902000160DCE40D0000EA0120DCE5003046 +S21902A9BEDCE5026483E102C08CE2080000EA0300DCE50020DC10 +S21902A9D3E50230DCE50110DCE5002C82E10338A0E1013483E1DA +S21902A9E8036082E104C08CE20E6085E7030058E308F19F971301 +S21902A9FD0000EA50AA020010AA020018AA02002CAA02000140BF +S21902AA12DCE40D0000EA0120DCE50030DCE5024483E102C08CA6 +S21902AA27E2080000EA0300DCE50020DCE50230DCE50110DCE5D5 +S21902AA3C002C82E10338A0E1013483E1034082E104C08CE20141 +S21902AA514084E220308EE2054083E7017087E240309EE50450B3 +S21902AA6685E2030057E1C8FFFFBA00C089E5F0AF1BE90DC0A074 +S21902AA7BE130D82DE904B04CE204D04DE200C0A0E118000BE592 +S21902AA900C10A0E10130D1E40250A0E1FF3003E218100BE51B0D +S21902AAA50053E30800000A18C00BE510009FE510109FE500202D +S21902AABADCE5BCE3FFEB0000A0E3240000EA94FC0200B8FC025D +S21902AACF00010081E218000BE50120D1E5011080E218100BE59D +S21902AAE43F3002E20030C5E5800012E30300000A0130D0E501C0 +S21902AAF930C5E5012081E218200BE518301BE50140D3E4024039 +S21902AB0EC5E518300BE5010014E30100000A18004BE266FFFF9D +S21902AB23EB020014E30100000A18004BE262FFFFEB040014E39C +S21902AB380100000A18004BE26DFFFFEB080014E30200000A1838 +S21902AB4D004BE2041085E275FFFFEB0100A0E330A81BE90DC0B9 +S21902AB62A0E100D82DE904B04CE200C0A0E10130DCE402E0A0D2 +S21902AB77E11A0053E30500000A90009FE590109FE501205CE5E8 +S21902AB8C88E3FFEB0000A0E300A81BE901C08CE20100DCE40039 +S21902ABA130A0E301C08CE200308EE5031010E20500004A03209C +S21902ABB6A0E10130DCE7022483E1011051E2FBFFFF5A00208E3F +S21902ABCBE5033000E2013083E203C08CE00010A0E33C3000E2CE +S21902ABE02331A0E1013083E204308EE5030051E1060000AA085A +S21902ABF5008EE20130DCE40130C0E704209EE5011081E20200EE +S21902AC0A51E1F9FFFFBA0100A0E300A81BE994FC0200CCFC02BF +S21902AC1F000DC0A0E100D82DE9001050E204B04CE20300000AAC +S21902AC3410009FE55DE3FFEB0000A0E300A81BE904009FE5008F +S21902AC49A81BE9DCFC0200B04103000DC0A0E130D82DE904B055 +S21902AC5E4CE20050A0E31C409FE5005084E50400A0E19EF6FF28 +S21902AC73EB2C4084E2015085E2000055E3F8FFFFDA30A81BE96C +S21902AC88B04103000DC0A0E100D82DE904B04CE2D8F6FFEB00E6 +S21902AC9DA81BE90DC0A0E100D82DE904B04CE205F7FFEB00A843 +S21902ACB21BE90DC0A0E110D82DE940409FE51C3094E504B04C6D +S21902ACC7E2000053E30100000A0000A0E310A81BE9030084E8A0 +S21902ACDC980200EB000050E30500001A083094E50120A0E31C14 +S21902ACF12084E5003063E2103084E510A81BE910A81BE900C563 +S21902AD0603000DC0A0E100D82DE93C209FE50010A0E11C3092A3 +S21902AD1BE504B04CE2000053E30100001A0700A0E300A81BE9CE +S21902AD30143092E5030051E10300003A183092E50000A0E30395 +S21902AD450051E10000003A0100A0E300A81BE900C503000DC0C1 +S21902AD5AA0E100D82DE930009FE504B04CE21C3090E502C0A0B5 +S21902AD6FE1000053E30500000A143090E5003081E5182090E5A6 +S21902AD8400208CE50000A0E300A81BE90700A0E300A81BE900BD +S21902AD99C503000DC0A0E100D82DE92C209FE51C3092E504B053 +S21902ADAE4CE2000053E30500000A083092E5003080E50C209214 +S21902ADC3E5002081E50000A0E300A81BE90700A0E300A81BE9A4 +S21902ADD800C503000DC0A0E1F0DF2DE904B04CE200A0A0E3005F +S21902ADED50A0E10180A0E108C19FE50290A0E11C309CE50C70CE +S21902AE02A0E10A0053E10100001A0700A0E3F0AF1BE900609736 +S21902AE17E5E8109FE5E8209FE50600A0E1022061E0ACF6FFEBBC +S21902AE2C0E02A0E3021A80E2202090E4000031E1FCFFFF1A1609 +S21902AE410F07EE9A0F07EE0000A0E10000A0E10000A0E10000D0 +S21902AE56A0E10000A0E10000A0E1101F11EE011AC1E3101F0140 +S21902AE6BEE151F07EE0000A0E10000A0E10000A0E10000A0E1B0 +S21902AE800000A0E10000A0E1103097E5034005E00410A0E10833 +S21902AE955085E070009FE50520A0E110F8FFEB68809FE50400F0 +S21902AEAA00EA083097E560009FE50130C3E3034084E009F8FF8C +S21902AEBFEB050054E10600002A0400A0E10FE0A0E106F0A0E1B6 +S21902AED4730200EB00A050E2F2FFFF0A004089E5101F11EE0159 +S21902AEE91A81E3031081E3101F01EE0800A0E1FAF7FFEB0A00CC +S21902AEFEA0E1F0AF1BE900C5030054B9020074BA0200F8FC0217 +S21902AF130014FD020010FD02000DC0A0E1F0DF2DE904B04CE2EB +S21902AF2804D04DE20270A0E10090A0E30050A0E1A4C09FE5014A +S21902AF3D60A0E11C209CE50CA0A0E12C300BE5090052E107009E +S21902AF52A0034300000A00809AE584109FE584209FE50800A00C +S21902AF67E1022061E05BF6FFEB0E02A0E3021A80E2202090E48A +S21902AF7C000031E1FCFFFF1A160F07EE9A0F07EE0000A0E1005A +S21902AF9100A0E10000A0E10000A0E10000A0E10000A0E1101FF0 +S21902AFA611EE011AC1E3101F01EE151F07EE0000A0E10000A069 +S21902AFBBE10000A0E10000A0E10000A0E10000A0E11C009FE5F5 +S21902AFD00610A0E1072086E00530A0E1C1F7FFEB090000EA00F6 +S21902AFE5C5030074BA0200B4BB020018FD020070009FE5077065 +S21902AFFA64E0B9F7FFEB0130C4E3035085E0036086E0000057AD +S21902B00FE30D0000DA0500A0E108309AE50610A0E1030057E14C +S21902B0240740A0B10340A0A10420A0E10FE0A0E108F0A0E11A4C +S21902B0390200EB009050E2EBFFFF0A2C301BE5005083E5101F16 +S21902B04E11EE011A81E3031081E3101F01EE0C009FE5A0F7FFAD +S21902B063EB0900A0E1010000EA10FD020014FD0200F0AF1BE9AC +S21902B0780DC0A0E100D82DE904B04CE2070050E300F19F971726 +S21902B08D0000EAB0B00200B8B00200C0B00200C8B00200D0B085 +S21902B0A20200D8B00200E0B00200E8B0020040009FE500A81B53 +S21902B0B7E93C009FE500A81BE938009FE500A81BE934009FE508 +S21902B0CC00A81BE930009FE500A81BE92C009FE500A81BE928D8 +S21902B0E1009FE500A81BE924009FE500A81BE920009FE500A883 +S21902B0F61BE938FD020058FD020070FD020088FD0200A4FD0213 +S21902B10B00BCFD0200CCFD0200F0FD020014FE02000DC0A0E151 +S21902B12000D82DE9003090E5000053E104B04CE20500000A0457 +S21902B1353090E5001083E5043090E5090081E8041080E500A8A5 +S21902B14A1BE9041083E5001083E5043081E5003081E500A81BFE +S21902B15FE90DC0A0E100D82DE90010A0E1000091E504B04CE2C6 +S21902B174010050E10400000A003090E5003081E5002090E504AB +S21902B1891082E500A81BE90000A0E300A81BE90DC0A0E170D8C2 +S21902B19E2DE93C309FE53C209FE53C509FE5043083E504B04C03 +S21902B1B3E2003083E50F40A0E3042082E50260A0E1002082E53F +S21902B1C80600A0E10510A0E1D1FFFFEB615E85E2014054E2F9FE +S21902B1DDFFFF5A70A81BE9E4410300DC410300EC4103000DC09D +S21902B1F2A0E130D82DE90620A0E304B04CE20050A0E1100085B1 +S21902B207E20140A0E1B3F5FFEB0410A0E118009FE50620A0E31B +S21902B21CAFF5FFEB10309FE5005083E50500A0E1020000EB3069 +S21902B231A81BE920C503002CC503000DC0A0E100D82DE900300D +S21902B246A0E1101080E204B04CE200C093E50020A0E30FE0A09D +S21902B25BE100F09CE500A81BE90DC0A0E1F0DF2DE944319FE5AD +S21902B27004B04CE288D04DE23CC19FE50540A0E34C8093E500CC +S21902B28590A0E100509CE50270A0E1AC100BE5000058E31000E1 +S21902B29A000A0850A0E100C095E514219FE520309CE524308C11 +S21902B2AFE50C3095E520208CE5000053E30700001A0500A0E15A +S21902B2C4F8109FE50320A0E10FE0A0E100F09CE50C3095E501A6 +S21902B2D93083E30C3085E5D0609FE50A0000EA003095E50500C6 +S21902B2EEA0E10FE0A0E118F093E5C8009FE5483096E50140440F +S21902B303E20FE0A0E103F0A0E1000054E33E0000DA003095E56F +S21902B3180500A0E10FE0A0E10CF093E5000050E3EEFFFF0AA8DE +S21902B32D900BE50EA0A0E3A4A00BE5AC301BE59C700BE5A03077 +S21902B3420BE50500A0E17C409FE50030A0E3003084E5A8104BEA +S21902B357E200C095E50220A0E300408DE50A3087E00FE0A0E156 +S21902B36C10F09CE558309FE5002093E50460A0E1000052E3186E +S21902B38100000A8EFBFFEB0040A0E140009FE5D4F6FFEB0900F1 +S21902B396A0E10A10A0E102F9FFEBAC001BE50710A0E1FFF8FF60 +S21902B3ABEB0400A0E193FBFFEB0B0000EA500000002CC5030065 +S21902B3C0E404030020C50300400D0300F0A8030028C50300249F +S21902B3D5FE0200002095E50500A0E10FE0A0E118F092E500301D +S21902B3EA96E5000053E3F8FFFF0A000058E30400000A00309588 +S21902B3FFE5242093E5202083E50010A0E3241083E5F0AF1BE917 +S21902B4140DC0A0E100D82DE930309FE5030051E104B04CE200E5 +S21902B429C0A0E10200001A0130A0E3003081E500A81BE9003084 +S21902B43E9CE50C00A0E124C093E50FE0A0E108F09CE500A81BDC +S21902B453E9F0A803000DC0A0E1F0D92DE9DC309FE5DC209FE51C +S21902B46804B04CE20070A0E14C6093E50180A0E1005092E50008 +S21902B47D0056E31000000A0650A0E100C095E5B8209FE52030A3 +S21902B4929CE524308CE50C3095E520208CE5000053E3070000B4 +S21902B4A71A0500A0E19C109FE50320A0E10FE0A0E100F09CE534 +S21902B4BC0C3095E5013083E30C3085E5003095E50500A0E10F42 +S21902B4D1E0A0E118F093E574009FE51FFFFFEB004050E20D00FF +S21902B4E6000A0700A0E10C1084E20E20A0E3F9F4FFEB0800A006 +S21902B4FBE1082094E51A1084E20E2042E2F4F4FFEB44009FE537 +S21902B5100410A0E100FFFFEB080094E5000000EA0400A0E100B1 +S21902B5250056E30400000A003095E5242093E5202083E50010A5 +S21902B53AA0E3241083E5F0A91BE9500000002CC50300E404030A +S21902B54F0020C50300E4410300DC4103000DC0A0E1F0D92DE983 +S21902B56404B04CE20050A0E30280A0E1080055E10160A0E10DE6 +S21902B5790000AA34709FE58541A0E1060094E7001097E506404A +S21902B58E84E0042094E5D1F4FFEB003097E5042094E5015085D2 +S21902B5A3E2023083E0003087E5080055E1F2FFFFBAF0A91BE9F4 +S21902B5B8F4A803000DC0A0E1F0D92DE904B04CE280D04DE2004A +S21902B5CD60A0E10C019FE50170A0E1E0FEFFEB008050E20C5028 +S21902B5E288120800001AF5FAFFEB0040A0E1F0009FE5F0109FE4 +S21902B5F7E50720A0E1EC509FE538F6FFEB0400A0E1FDFAFFEB6D +S21902B60CA0500BE50600A0E19C700BE5A0104BE2003096E50136 +S21902B62120A0E30FE0A0E114F093E5C0209FE5003092E5000073 +S21902B63653E30B00000AE0FAFFEB0040A0E1AC009FE526F6FFDD +S21902B64BEB0500A0E10E10A0E354F8FFEB0E0085E20E1047E2DF +S21902B66051F8FFEB0400A0E1E5FAFFEB003096E5242093E500E6 +S21902B6750052E31200000A1E1085E274009FE50420A0E3A1F69D +S21902B68AFFEB000050E30C00000A64309FE5002096E5005083EB +S21902B69FE5144092E524C092E554309FE50600A0E1143082E54A +S21902B6B40710A0E10FE0A0E104F09CE5003096E5144083E50096 +S21902B6C90058E30E00000A087088E52C009FE50810A0E18EFE58 +S21902B6DEFFEB0C0000EADC41030034FE020054FE0200ECA20337 +S21902B6F30028C5030064FE0200F0040300F4A803005CB502003E +S21902B708E4410300A0001BE59C101BE524F8FFEBF0A91BE90D01 +S21902B71DC0A0E100D82DE914309FE5000093E5002090E504B058 +S21902B7324CE20FE0A0E11CF092E500A81BE92CC503000DC0A0CD +S21902B747E1F0D82DE9F8209FE5F8109FE5022061E004B04CE2BA +S21902B75CF0709FE55CD04DE2004097E50400A0E15BF4FFEB0E0A +S21902B77102A0E3021A80E2202090E4000031E1FCFFFF1A160FBA +S21902B78607EE9A0F07EE0000A0E10000A0E10000A0E10000A0F1 +S21902B79BE10000A0E10000A0E1101F11EE011AC1E3101F01EEA4 +S21902B7B0151F07EE0000A0E10000A0E10000A0E10000A0E10050 +S21902B7C500A0E10000A0E150504BE20500A0E10FE0A0E104F0AF +S21902B7DAA0E1101F11EE011A81E3031081E3101F01EE0560A08B +S21902B7EFE140404BE20400A0E158109FE50320A0E310F6FFEBA9 +S21902B804000050E31400000A48009FE5B4F5FFEB3430A0E3246D +S21902B819308DE504E0A0E10F00BEE80DC0A0E10F00ACE80F0057 +S21902B82EBEE80F00ACE800309EE500308CE50F0096E8C2E0FF33 +S21902B843EB0800A0E3150000EA7CBC0200B4BB020000C5030001 +S21902B85874FE020078FE02000532A0E3143087E530C0D5E52FA5 +S21902B86D10D5E52EE0D5E52D20D5E50C1481E18134A0E10E243C +S21902B88282E1012082E2083087E50114A0E10C2087E59102035A +S21902B897E08330A0E1053283E2183087E5F0A81BE90DC0A0E147 +S21902B8AC10D82DE944309FE504B04CE20040A0E1033004E000D0 +S21902B8C10053E30A00000A30009FE50410A0E184F5FFEB28301D +S21902B8D69FE5033004E0000053E30100000A0400A0E310A81B20 +S21902B8EBE90200A0E310A81BE90300A0E110A81BE97E007E00DB +S21902B90098FE0200100010000DC0A0E100D82DE934309FE5004F +S21902B91520A0E3030050E104B04CE20100008A030051E1040099 +S21902B92A008A1C309FE5030050E10200008A030051E1000000B2 +S21902B93F9A0120A0E30200A0E100A81BE94400020048E7020008 +S21902B9540DC0A0E130D82DE904B04CE20040A0E1103F11EE2357 +S21902B96951A0E1015015E21000000A0E02A0E3021A80E220203D +S21902B97E90E4000031E1FCFFFF1A160F07EE9A0F07EE0000A0BB +S21902B993E10000A0E10000A0E10000A0E10000A0E10000A0E132 +S21902B9A8101F11EE0C10C1E3101F01EE161F07EE98C09FE598D9 +S21902B9BDE09FE598309FE5A41BA0E194209FE5811BA0E10030F9 +S21902B9D281E58C309FE5002081E5003084E5000091E50E3000E0 +S21902B9E7E00E0053E10100000A01C05CE2F9FFFF1A6C309FE5E7 +S21902B9FC6C209FE5033000E0002081E5000053E30B00000A0437 +S21902BA113094E40128A0E3010073E30500001A042042E2000007 +S21902BA2652E3020000DA043094E4010073E3F9FFFF0A0000529D +S21902BA3BE30000A003000055E30200000A101F11EE0F1081E374 +S21902BA50101F01EE30A81BE9404B4C0080008000500050002049 +S21902BA65002000D000D0007E007E00FF00FF000DC0A0E1F0D8F5 +S21902BA7A2DE904B04CE20040A0E10160A0E102E0A0E100C0A052 +S21902BA8FE3103F11EE2351A0E1015015E21000000A0E02A0E380 +S21902BAA4021A80E2202090E4000031E1FCFFFF1A160F07EE9A7A +S21902BAB90F07EE0000A0E10000A0E10000A0E10000A0E1000069 +S21902BACEA0E10000A0E1101F11EE0C10C1E3101F01EE161F0712 +S21902BAE3EEAC309FE5A40BA0E1A8709FE5800BA0E1003080E58C +S21902BAF8070000EA9C309FE5003080E5042094E4043096E4030F +S21902BB0D0052E18CC09F151600001A04E04EE200005EE3130051 +S21902BB2200DA7C309FE5003080E5002096E5002084E500C090F4 +S21902BB37E56C109FE507300CE0070053E10600000A4C209FE5AF +S21902BB4C011051E20700000A00C090E502300CE0020053E1F906 +S21902BB61FFFF1A44309FE503300CE0000053E3E1FFFF0A243026 +S21902BB769FE5003080E5000055E30200000A101F11EE0F108188 +S21902BB8BE3101F01EE0C00A0E1F0A81BE95000500080008000D4 +S21902BBA0FF00FF001099109910001000404B4C007E007E000D39 +S21902BBB5C0A0E100D82DE904B04CE200E0A0E1103F11EE23C1D0 +S21902BBCAA0E101C01CE21000000A0E02A0E3021A80E220209024 +S21902BBDFE4000031E1FCFFFF1A160F07EE9A0F07EE0000A0E107 +S21902BBF40000A0E10000A0E10000A0E10000A0E10000A0E110A0 +S21902BC091F11EE0C10C1E3101F01EE161F07EE50209FE5503085 +S21902BC1E9FE50512A0E3003081E5012042E2000052E3FCFFFFE2 +S21902BC33CA0020A0E3043091E4012082E20130CEE4330052E30F +S21902BC48FAFFFF9A24309FE5003081E500005CE30200000A1085 +S21902BC5D1F11EE0F1081E3101F01EE0000A0E300A81BE9400D90 +S21902BC72030098009800FF00FF000DC0A0E110D82DE94C309F1E +S21902BC87E504B04CE2000093E50140A0E1000050E30000000A63 +S21902BC9C0FF3FFEB0030D4E5020053E30900001A1C0084E224B6 +S21902BCB1109FE50620A0E315F5FFEB000050E30300001A1010D6 +S21902BCC684E210009FE50420A0E302F3FFEB10A81BE9F8A80383 +S21902BCDB0020C50300F00403000DC0A0E1F0DF2DE90010A0E3A8 +S21902BCF04B2FA0E36C319FE504B04CE252DF4DE2000083E5165A +S21902BD055E4BE20500A0E113F5FFEB54419FE554119FE50030ED +S21902BD1AA0E30030C4E50130C4E50230C4E50330C4E50100A07F +S21902BD2FE33C219FE528304BE20200C3E734319FE528204BE2A5 +S21902BD440300C2E72CC19FE50620A0E328304BE20C20C3E720A2 +S21902BD59319FE55C310BE5510F4BE2DDF2FFEBFFC0A0E3053DD2 +S21902BD6EE0E328104BE203C0C1E74F2FE0E30130A0E102C0C3AE +S21902BD83E7F8309FE503C0C1E7F4109FE528304BE201C0C3E72E +S21902BD98EC309FE528104BE203C0C1E7E4109FE528304BE20121 +S21902BDADC0C3E70270A0E3D8309FE528104BE203C0C1E705902A +S21902BDC2A0E1CC109FE528304BE201C0C3E70480A0E1C0309F00 +S21902BDD7E528104BE203C0C1E70850A0E1013083E203C0C1E7C1 +S21902BDEC34004BE2A8209FE54410A0E3390000EB5BAF4BE279E3 +S21902BE010700EB0060A0E10900A0E14B1FA0E34430A0E30030B4 +S21902BE168DE50A20A0E1013043E2A90000EBA00200EB0030D577 +S21902BE2BE5000053E30800001A0130D8E5000053E30500001A7B +S21902BE400230D5E5000053E30200001A0340D5E5000054E31262 +S21902BE5500000A4400A0E3410000EB0000A0E31B0000EAF8A8AC +S21902BE6A0300F004030020C50300C8FEFFFFC9FEFFFFCAFEFF8A +S21902BE7FFF55553412BCFEFFFFBDFEFFFFBEFEFFFFC0FEFFFFD1 +S21902BE94C1FEFFFFC2FEFFFFC4FEFFFF7CBC0200500700EB00DB +S21902BEA90066E07D0E50E3DBFFFF3A0730A0E1017047E2000014 +S21902BEBE53E3CEFFFFCA4400A0E3260000EB08309FE50000E028 +S21902BED3E3004083E5000000EA28C50300F0AF1BE90DC0A0E1FD +S21902BEE870D82DE90118A0E16C309FE504B04CE20040A0E10281 +S21902BEFD50A0E14108A0E100C093E50360A0E100005CE309002A +S21902BF12000A0038A0E12328A0E1B430DCE1020053E1010000AC +S21902BF271A0000E0E370A81BE900C09CE500005CE3F7FFFF1A76 +S21902BF3C0008A0E12008A0E1BD0200EBB400C4E1085084E500F3 +S21902BF513096E5003084E50000A0E3004086E570A81BE9FCA8A2 +S21902BF6603000DC0A0E1F0D92DE90008A0E14008A0E15C309F12 +S21902BF7BE504B04CE20060A0E3005093E50380A0E1060055E1F8 +S21902BF901000000A0078A0E1B440D5E12708A0E1A60200EB0095 +S21902BFA50054E10600001A000056E30200000A003095E500300C +S21902BFBA86E5010000EA003095E5003088E50560A0E100509503 +S21902BFCFE5000055E3EFFFFF1AF0A91BE9FCA803000DC0A0E1A0 +S21902BFE4F0D92DE9BC309FE504D04DE20070A0E1086097E50416 +S21902BFF9B04CE2B620D6E10180A0E1045097E5030052E1003089 +S21902C00EA003B630C601B430D6E1B230C5E1B400D6E1860200B0 +S21902C023EB0040A0E10500A0E10A0200EB0020A0E10600A0E1B0 +S21902C0380410A0E1E30100EB0008B0E11D00001A60309FE500A4 +S21902C04D5093E5000055E31900000AB420D5E1B230D6E103008E +S21902C06252E11200001AB400D6E1730200EB084040E2B000D6A8 +S21902C077E1700200EB0038A0E10500A0E1081086E22338A0E1D4 +S21902C08C00308DE50420A0E10830A0E10FE0A0E108F095E507AF +S21902C0A100A0E1BB0100EB060000EAFFFF0000FCA80300005076 +S21902C0B695E5000055E3E5FFFF1A0700A0E1B30100EBF0A91BE4 +S21902C0CBE90DC0A0E1F0DF2DE90338A0E104B04CE20160A0E1BD +S21902C0E000A0A0E10290A0E1E8C09FE54378A0E1F450DBE10C9C +S21902C0F50056E13500008AD8009FE5840100EB008050E231008A +S21902C10A000A083086E2BC30C8E1084098E50508A0E10450989B +S21902C11FE52008A0E1450200EBB000C4E10708A0E12008A0E1B6 +S21902C134410200EBB200C4E1BC00D8E13E0200EB0030A0E30A0D +S21902C14910A0E1B400C4E10620A0E1B630C4E1080084E2DFF180 +S21902C15EFFEB0C0085E274109FE50420A0E3DBF1FFEB1000856E +S21902C173E20910A0E10420A0E3D7F1FFEB1170A0E30970C5E5B4 +S21902C188B430D4E1B230C5E1BC60D8E10500A0E1AF0100EB0084 +S21902C19D20A0E10400A0E10610A0E1880100EB0008A0E12008A4 +S21902C1B2A0E1210200EB0710A0E1B600C4E10920A0E10800A09D +S21902C1C7E1F10000EB0800A0E1700100EBF0AF1BE9BE05000054 +S21902C1DCEA050000F00403000DC0A0E1F0D92DE904B04CE21042 +S21902C1F1D04DE20080A0E10240A0E10400A0E10170A0E12C606C +S21902C2064BE20610A0E10350A0E1440600EB000050E30F00000D +S21902C21BBAB400D4E1060200EB0048A0E1B400D5E12448A0E1D1 +S21902C230020200EB0038A0E10800A0E10710A0E12338A0E1004D +S21902C245308DE50620A0E10430A0E19DFFFFEB0000A0E30300D3 +S21902C25A00EA0C009FE50C109FE51FF3FFEB0000E0E3010000EE +S21902C26FEAA4FE0200C8FE0200F0A91BE90DC0A0E1F0D92DE993 +S21902C28464009FE50240A0E1004080E55C809FE504B04CE2000C +S21902C2990098E50370A0E1F450DBE14C609FE58CF1FFEB003051 +S21902C2AE96E5000053E30900000A0508A0E12008A0E1DE01009A +S21902C2C3EB001096E5B400C1E1003097E5003081E50020A0E3AE +S21902C2D8002088E5F0A91BE914009FE50410A0E1FEF2FFEBF029 +S21902C2EDA91BE904A9030000A9030008A90300D8FE02000DC0D3 +S21902C302A0E1F0DF2DE904B04CE20CD04DE20050A0E1B400D374 +S21902C317E10160A0E104909BE50270A0E1C50100EB0048A0E1C6 +S21902C32C34004BE214209FE52418A0E1E9FEFFEB000050E30219 +S21902C3410000AA0000E0E31F0000EA7CC2020078109FE57800A6 +S21902C3569FE578309FE5041099E8005081E50480A0E1006080EB +S21902C36BE501A0A0E1007083E50060E0E30070A0E1821262E0ED +S21902C38054009FE5012182E0901C83E02333A0E1825183E01415 +S21902C3950600EB0040A0E1120600EB000064E0050050E1040059 +S21902C3AA002A3E0100EB00309AE5000053E3F7FFFF1A00609738 +S21902C3BFE52808A0E1E7FEFFEB0600A0E1030000EA00A90300DD +S21902C3D404A9030008A90300D34D6210F0AF1BE90DC0A0E11056 +S21902C3E9D82DE90030D0E504B04CE2FF0053E30A00001A0130F9 +S21902C3FED0E5FF0053E30700001A0230D0E5FF0053E3040000F8 +S21902C4131A0330D0E5FF0053E30100001A0100A0E310A81BE97B +S21902C4284C409FE50420A0E30410A0E136F3FFEB000050E3F76F +S21902C43DFFFF0A0030D4E5000053E30900001A0130D4E50000AF +S21902C45253E30600001A0230D4E5000053E30300001A0330D433 +S21902C467E50100A0E3000053E30000000A0000A0E310A81BE9D1 +S21902C47CF00403000DC0A0E1F0D82DE904B04CE20CD04DE20094 +S21902C49150A0E1044095E50160A0E1100084E2CFFFFFEB0000F0 +S21902C4A650E30700000A0400A0E10010D4E50020A0E30F100125 +S21902C4BBE20111A0E1C20000EB0008B0E10200000A0500A0E118 +S21902C4D0B00000EB2D0000EA28704BE20700A0E10C1084E204CB +S21902C4E520A0E3FCF0FFEB24004BE20610A0E10620A0E3F8F049 +S21902C4FAFFEB0030D4E5B200D4E10F3003E20361A0E14B010097 +S21902C50FEB000066E0BC00C5E10930D4E5060053E30C00000A39 +S21902C524020000CA010053E30300000A140000EA110053E30C9A +S21902C53900000A110000EA0500A0E1063084E0083085E5071008 +S21902C54EA0E1420100EB0D0000EA0500A0E1063084E00830854E +S21902C563E50710A0E1B90200EB070000EA0500A0E1063084E088 +S21902C578083085E50710A0E196FEFFEB010000EA0500A0E181FD +S21902C58D0000EBF0A81BE90DC0A0E1F0DF2DE90060A0E10830BF +S21902C5A286E2080113E8038048E004B04CE2045096E54801A0CC +S21902C5B7E1BC30D6E10F0000E2083083E0BC30C6E1400080E322 +S21902C5CC0000C5E50070A0E30170C5E501A0A0E1BC00D6E10204 +S21902C5E190A0E1150100EB80409FE5B200C5E1B000D4E1110119 +S21902C5F600EBB400C5E1B030D4E16C109FE5013083E2B030C415 +S21902C60BE1B670C5E14030A0E30830C5E509A0C5E50420A0E397 +S21902C620BA70C5E10C0085E2ACF0FFEB100085E20910A0E10420 +S21902C63520A0E3A8F0FFEB0500A0E10810A0E10720A0E160009D +S21902C64A00EB0008A0E12008A0E1F90000EB041089E2BA00C5D5 +S21902C65FE1022BA0E30600A0E1CB0000EBF0AF1BE90CA9030096 +S21902C674F00403000DC0A0E1F0D82DE97C209FE5003092E504BC +S21902C689B04CE2000053E31A00001A03E0A0E10130A0E3003005 +S21902C69E82E50E40A0E15C709FE504C0A0E158509FE503E0A006 +S21902C6B3E354609FE50500A0E1001096E507208CE0023002E296 +S21902C6C8022083E05ECE8CE2103085E2042083E70CC08CE200C8 +S21902C6DD1080E501E05EE228309FE50010A0E1BE30C0E114405B +S21902C6F284E2140081E2F0FFFF5A001086E5F0A81BE9000503E8 +S21902C7070060A9030010A9030010C10300EA0500000DC0A0E13D +S21902C71C00D82DE960309FE504B04CE200C093E500005CE31294 +S21902C73100000A00209CE5002083E510309CE504308CE5401003 +S21902C7469FE5143083E208308CE538E09FE50030A0E3BC30CCFA +S21902C75BE1003091E52C209FE5013083E2003081E5001092E5B8 +S21902C77000009EE5033061E0000053E100308EC50C00A0E10072 +S21902C785A81BE910C10300F8040300F4040300FC0403000DC04E +S21902C79AA0E100D82DE920209FE5003092E51C109FE501304385 +S21902C7AFE2003082E5003091E5003080E504B04CE2000081E572 +S21902C7C400A81BE9F804030010C103000DC0A0E100D82DE9029C +S21902C7D91051E204B04CE202C0A0E10300004AB230D0E00210EB +S21902C7EE51E203C08CE0FBFFFF5A010071E30500001A0030D006 +S21902C803E5FF20CEE302E083E1FFECCEE30E38A0E123C88CE064 +S21902C8180C08A0E12C28A0E130109FE520C882E00C3061E0010E +S21902C82D005CE103C0A0C10C00E0E10008A0E12E0880E160E859 +S21902C842A0E1200CA0E10008A0E10E0C80E12008A0E100A81B3C +S21902C857E9FFFF00000DC0A0E100D82DE90020A0E304D04DE2FC +S21902C86CBC30D0E104B04CE210204BE50910D0E50F104BE5BEF6 +S21902C88120D0E1B011D0E1B2C1D0E1023083E0013083E0B0213A +S21902C8965BE10C3083E0B200D0E1023083E0000083E000A81B8D +S21902C8ABE90DC0A0E110D82DE904B04CE210D04DE2B4009FE513 +S21902C8C094FFFFEB004050E20200001AA8009FE584F1FFEBFEC8 +S21902C8D5FFFFEA101094E594209FE520004BE2DBFAFFEBBC00C6 +S21902C8EAC4E10008B0E12600000A84209FE5003092E5B4015BE5 +S21902C8FFE1013083E2003082E54C0000EB020B50E30500000A89 +S21902C91468309FE5030050E10C00000A0400A0E19BFFFFEBE3B5 +S21902C929FFFFEA54309FE5002093E5101094E5012082E200202C +S21902C93E83E5041084E50400A0E11A104BE2CBFEFFEBD9FFFF92 +S21902C953EA30309FE5002093E5101094E5012082E2002083E5BC +S21902C968041084E50400A0E1C70300EBD0FFFFEAEA0500000451 +S21902C97DFF02000C05030006080000040503000805030004005B +S21902C992A0E17FFFFFEB10A81BE90DC0A0E170D82DE904B04C38 +S21902C9A7E210D04DE20050A0E128604BE20600A0E10240A0E1B3 +S21902C9BC0620A0E3C6EFFFEB22004BE238109FE50620A0E3C291 +S21902C9D1EFFFEB0448A0E12408A0E1170000EBBC014BE11010EC +S21902C9E695E5BC20D5E10600A0E11BFAFFEB10209FE50030922D +S21902C9FBE5013083E2003082E5010000EA20C503001005030023 +S21902CA1070A81BE90DC0A0E1203CA0E1003C83E1FF2800E2001A +S21902CA25D82DE9FF0C00E20004A0E1220480E1000083E104B0F6 +S21902CA3A4CE200A81BE90DC0A0E100D82DE90008A0E1FF38000A +S21902CA4FE2200CA0E1230480E104B04CE200A81BE90DC0A0E1D8 +S21902CA6430D82DE90040A0E1080094E504B04CE2B030D0E101E2 +S21902CA7950A0E1080053E31600001ABC10D4E10020A0E34FFFF0 +S21902CA8EFFEB0008A0E120C8B0E11000001A083094E500C0C342 +S21902CAA3E5082094E5B2C0C2E1080094E5BC10D4E10C20A0E12D +S21902CAB844FFFFEB0008A0E12008A0E1DDFFFFEB083094E5018B +S21902CACD10A0E3B200C3E10520A0E10400A0E1ACFEFFEB0400A1 +S21902CAE2A0E12BFFFFEB30A81BE90DC0A0E1F0DF2DE904B04C94 +S21902CAF7E204D04DE20060A0E10140A0E1307086E2048097E593 +S21902CB0C020014E3085097E50290A0E10F00000A1830A0E3BC8D +S21902CB2130C7E10C30D5E550019FE59030C3E3603083E30C30BD +S21902CB36C5E5B5FFFFEB2C104BE22C000BE50420A0E3140085D6 +S21902CB4BE263EFFFEB0030A0E3B831C6E1060000EAB831D6E1DD +S21902CB60143083E2BC30C7E10C20D5E5A020C2E3502082E30C50 +S21902CB7520C5E50C30D5E50F30C3E30C30C5E5580096E5A1FFA6 +S21902CB8AFFEB040085E5540096E59EFFFFEB0030A0E3B031C588 +S21902CB9FE1000059E3080085E508A086E21800001AB401D6E13D +S21902CBB4A1FFFFEBB000C5E1B601D6E19EFFFFEBB200C5E10D2B +S21902CBC940C5E5B831D6E1000053E3083084130D30C515A0000A +S21902CBDE9FE596FFFFEBBE00C5E1B291C5E10420A0E390109F05 +S21902CBF3E50C0088E238EFFFEB100088E20A10A0E10420A0E3FE +S21902CC0834EFFFEB0630A0E30930C8E5BC00D7E188FFFFEBB2CD +S21902CC1D00C8E1BC40D7E10800A0E10BFFFFEB0020A0E105007B +S21902CC32A0E10410A0E1E4FEFFEB0008A0E12008A0E17DFFFF57 +S21902CC47EB0610A0E3B001C5E10A20A0E10700A0E14DFEFFEB8E +S21902CC5C043096E50A0053E30A00001A1C109FE51C0086E2185D +S21902CC71209FE50630A0E1B20200EB110000EAB2050402B2053E +S21902CC860000F0040300C0D4010094CE02000D30D5E503001395 +S21902CC9BE30200001AB831D6E1000053E30600000A1C0086E214 +S21902CCB0FA1FA0E308209FE50630A0E1A10200EB000000EA7879 +S21902CCC5CE0200F0AF1BE90DC0A0E1F0DF2DE904B04CE208D0F3 +S21902CCDA4DE22C000BE52C301BE5089090E5046093E50800990D +S21902CCEFE530100BE546FFFFEB00A0A0E1040099E543FFFFEB16 +S21902CD040080A0E1B200D9E14BFFFFEB0058A0E1B000D9E145EA +S21902CD1958A0E147FFFFEB149086E20048A0E12C301BE5147040 +S21902CD2EA0E3BC70C3E10A00A0E15030A0E30C30C9E54448A0F2 +S21902CD43E132FFFFEB040089E50800A0E12FFFFFEB080089E54F +S21902CD58010BA0E337FFFFEBBE00C9E10030A0E3B231C9E10563 +S21902CD6D58A0E1B031C9E12508A0E130FFFFEBB401C6E10448D7 +S21902CD82A0E12408A0E12CFFFFEBB200C9E10D70C9E50420A007 +S21902CD97E370109FE50C0086E2CEEEFFEB100086E230101BE5C7 +S21902CDAC0420A0E3CAEEFFEB0650A0E30950C6E52C301BE5BC2D +S21902CDC100D3E11DFFFFEBB200C6E12C301BE5BC40D3E1060031 +S21902CDD6A0E19FFEFFEB0020A0E10900A0E10410A0E178FEFF04 +S21902CDEBEB0008A0E12008A0E111FFFFEBB001C9E130201BE56A +S21902CE002C001BE50510A0E1E1FDFFEB000000EAF0040300F0BB +S21902CE15AF1BE90DC0A0E100D82DE94C309FE50010A0E300205F +S21902CE2A93E504B04CE2010052E10D00000A03C0A0E1000052B1 +S21902CE3FE10600001A000051E30200000A003092E5003081E559 +S21902CE54010000EA003092E500308CE50210A0E1002092E50065 +S21902CE690052E3F2FFFF1A00A81BE914C103000DC0A0E100D8C4 +S21902CE7E2DE90010A0E30120A0E304B04CE216FFFFEB00A81BA7 +S21902CE93E90DC0A0E100D82DE90030A0E3043080E504B04CE230 +S21902CEA8DAFFFFEB00A81BE90DC0A0E110D82DE90040A0E144AE +S21902CEBD0094E504B04CE2000050E30500000A003090E54430A3 +S21902CED284E52FFEFFEB440094E5000050E3F9FFFF1A10A81BF0 +S21902CEE7E90DC0A0E110D82DE90030A0E304B04CE20040A0E1A4 +S21902CEFC043084E51C0084E2290200EB0400A0E1E7FFFFEB048C +S21902CF1100A0E1BFFFFFEB10A81BE90DC0A0E1F0D82DE9017082 +S21902CF26A0E1082097E5BC10D7E104B04CE20C30D2E50050A081 +S21902CF3BE1040092E52332A0E10331A0E1014063E0036082E0AA +S21902CF50AFFEFFEB542095E5003062E0000053E3170000CA02B5 +S21902CF653060E0044063E0036086E0000054E3120000DA043099 +S21902CF7A82E0543085E5442095E50030A0E3003087E5030052C9 +S21902CF8FE10600000A000000EA002092E5003092E5000053E337 +S21902CFA4FBFFFF1A007082E5020000EA447085E54C4085E5483F +S21902CFB96085E50100A0E3F0A81BE90000A0E3F0A81BE90DC086 +S21902CFCEA0E130D82DE9083091E50040A0E1080093E504B04CB9 +S21902CFE3E28AFEFFEB583094E50050A0E1053063E0000053E35E +S21902CFF8140000DA1C0084E2EA0100EB582094E5B831D4E10543 +S21902D00D1062E0030051E10310A0A1000051E30B0000DAB8312A +S21902D022D4E1033061E0B831C4E1012082E0582084E50338B0EC +S21902D037E10400000A380094E5B821D4E1140080E2011080E0C8 +S21902D04C23EEFFEB30A81BE90DC0A0E1F0DD2DE90080A0E1BC03 +S21902D06100D8E1086098E504B04CE2044098E50170A0E171FE11 +S21902D076FFEBB200C4E100A0A0E3BC50D8E10400A0E1F3FDFF01 +S21902D08BEB0020A0E10600A0E10510A0E1CCFDFFEB0008B0E194 +S21902D0A0F600001AC4339FE5005093E5000000EA005095E5006D +S21902D0B50055E31200000AB200D6E1B441D5E15DFEFFEB0000B2 +S21902D0CA54E1F7FFFF1AB631D5E1000053E30A00000AB000D699 +S21902D0DFE10340A0E155FEFFEB000054E1EFFFFF1A0700A0E18F +S21902D0F4081085E20420A0E304F0FFEB000050E3E9FFFF1A00E8 +S21902D1090055E3D800000A0C0085E2041087E20620A0E3EFED7B +S21902D11EFFEB043095E5020053E30700000A0D30D6E504001305 +S21902D133E30400000A0500A0E169FFFFEB0800A0E193FDFFEB14 +S21902D148F0AD1BE9043095E5013043E2090053E303F19F97C2FB +S21902D15D0000EA88D10200E8D1020080D4020050D2020050D21A +S21902D1720200FCD2020040D30200D4D3020018D402005CD402F1 +S21902D187000D30D6E5020013E31000000A0230A0E3043085E52F +S21902D19C040096E51BFEFFEB013080E2B000D6E1543085E522EB +S21902D1B1FEFFEBB601C5E1002097E51210A0E3082085E500301A +S21902D1C6A0E3B831C5E10500A0E1B035C5E18C0000EA0800A00C +S21902D1DBE10710A0E1B9FEFFEBA50000EA1C0085E26F0100EBB1 +S21902D1F00D30D6E5041013E20200000A0130A0E3043085E59D27 +S21902D2050000EA020013E30300000A0500A0E10120A0E333FEC3 +S21902D21AFFEB970000EA100013E39500000A080096E5F8FDFF71 +S21902D22FEB583095E5013083E2030050E18F00001A0430A0E3CC +S21902D244043085E5580085E58B0000EA0D30D6E5544095E510E3 +S21902D2590013E30200000A0500A0E10810A0E157FFFFEB050053 +S21902D26EA0E10810A0E128FFFFEB0D30D6E500A0A0E10100134C +S21902D283E30800000A040096E5E0FDFFEB543095E5030050E122 +S21902D2980300001A013080E2543085E50520A0E3042085E55452 +S21902D2AD3095E5040053E10200001AB035D5E1000053E36E0028 +S21902D2C2000AB841D5E1000054E30700001A1C0085E235010086 +S21902D2D7EB0500A0E11010A0E30420A0E100FEFFEBB045C5E1FF +S21902D2EC630000EA0130A0E3B035C5E1600000EA0D30D6E51048 +S21902D3010013E35D00000A0500A0E10810A0E12DFFFFEB080076 +S21902D31696E5BDFDFFEB583095E5013083E2030050E1540000BC +S21902D32B1A0030A0E3043085E50500A0E1B6FEFFEB4F0000EA1E +S21902D3400D30D6E5100013E31700000A0500A0E10810A0E11C77 +S21902D355FFFFEB080096E5ACFDFFEB583095E5013083E2030022 +S21902D36A50E10E00001A0D30D6E5010013E30900000A0500A0A7 +S21902D37FE11010A0E3543095E50A20A0E3042085E5013083E23F +S21902D394543085E50A2042E2D2FDFFEB010000EA0830A0E304DE +S21902D3A93085E50D30D6E5010013E33100000A1C0085E2FB0026 +S21902D3BE00EB0500A0E11110A0E3543095E50920A0E30A00008A +S21902D3D3EA0500A0E10810A0E1CEFEFFEB0D30D6E500A0A0E166 +S21902D3E8010013E32300000A0500A0E11010A0E3543095E50AD4 +S21902D3FD20A0E3042085E5013083E2543085E50020A0E3B5FD0A +S21902D412FFEB190000EA0D30D6E5100013E31600000A0500A04E +S21902D427E10810A0E1E6FEFFEB080096E576FDFFEB583095E5BF +S21902D43C013083E2030050E10D00001A1C0085E2D70000EB0A94 +S21902D45130A0E3043085E5080000EA0500A0E10010A0E3012042 +S21902D466A0E39FFDFFEB030000EA14C103000800A0E10710A09C +S21902D47BE112FEFFEB00005AE30100001A0800A0E1C1FCFFEB32 +S21902D490F0AD1BE90DC0A0E100D82DE904B04CE201FDFFEBD900 +S21902D4A50000EB00A81BE90DC0A0E130D82DE954209FE504B0BC +S21902D4BA4CE20040A0E10158A0E14558A0E10010A0E323EFFFCB +S21902D4CFEB0130A0E3043084E5B451C4E15C2084E2402084E5B0 +S21902D4E4342084E524109FE524209FE5703084E2383084E5BE5A +S21902D4F923C4E1003091E5003084E50000A0E3004081E530A80F +S21902D50E1BE94806000014C10300EA0500000DC0A0E110D82D85 +S21902D523E90040A0E1043094E504B04CE2010000EAD6FFFFEB09 +S21902D538043094E5000053E30200000AB831D4E1000053E3F81C +S21902D54DFFFF1A10A81BE90DC0A0E110D82DE904B04CE2004080 +S21902D562A0E1ECFFFFEB041094E5020051E30030A0130130A0E0 +S21902D57703040051E30320A0110120A003000052E30600000A80 +S21902D58C0400A0E11110A0E30730A0E3043084E50020A0E3510F +S21902D5A1FDFFEB060000EA050051E30400001A0400A0E1063085 +S21902D5B6A0E3043084E51110A0E349FDFFEB0400A0E138FEFFAB +S21902D5CBEB10A81BE90DC0A0E1F0D82DE904B04CE20160A0E1AD +S21902D5E0005052E20040A0E1020000DA4C3094E5000053E303E0 +S21902D5F500001A0000A0E3F0A81BE94C0084E52B0000EA0430E3 +S21902D60A94E5040053E30070A0E3170000EA481094E50600A0E6 +S21902D61FE1AEECFFEB4C3094E5440094E5037087E0002090E569 +S21902D634036086E0442084E5055063E054FCFFEB440094E500B5 +S21902D6490050E3EBFFFF0A081090E50C30D1E5BC20D0E123323E +S21902D65EA0E1032142E04C2084E50C30D1E52332A0E1031181B7 +S21902D673E0481084E5000055E30D00000A4C2094E5020055E18E +S21902D688E2FFFFAA0600A0E1481094E50520A0E190ECFFEB4850 +S21902D69D3094E5057087E04C2094E5053083E0483084E502206C +S21902D6B265E04C2084E50700A0E1F0A81BE90DC0A0E170D82D5B +S21902D6C7E904B04CE20040A0E1380094E5005052E2010000CABB +S21902D6DC0000A0E370A81BE9043094E5043043E2010053E30155 +S21902D6F100009A0000E0E370A81BE9B861D4E1000056E30C0091 +S21902D706001A34309FE5140080E2030055E10350A0210520A07D +S21902D71BE16FECFFEB0400A0E11010A0E3B851C4E10620A0E14F +S21902D730EDFCFFEB0500A0E170A81BE90000A0E370A81BE9B217 +S21902D7450500000DC0A0E170D82DE904B04CE20060A0E1024012 +S21902D75AA0E1041086E50350A0E1200100EB080086E50C40868E +S21902D76FE534309FE5002093E50310A0E1105086E5000052E3A5 +S21902D7840400000A060052E10500000A002092E5000052E3FA6D +S21902D799FFFF1A003091E5003086E5006081E570A81BE918C160 +S21902D7AE03000DC0A0E100D82DE94C109FE50020A0E3003091DC +S21902D7C3E504B04CE2020053E10D00000A000053E10700001AE1 +S21902D7D8000052E30200000A003093E5003082E500A81BE90009 +S21902D7ED3093E5003081E500A81BE90320A0E1003093E50000EA +S21902D80253E3F1FFFF1A00A81BE918C103000DC0A0E170D82D80 +S21902D817E970309FE504B04CE20050A0E3004093E50360A0E197 +S21902D82C050054E11500000AEC0000EB0C0094E9000063E002E2 +S21902D8410050E10C00003A000055E30200000A003094E5003037 +S21902D85685E5010000EA003094E5003086E5100094E50FE0A005 +S21902D86BE10CF094E5004096E50050A0E3010000EA0450A0E1FD +S21902D880004094E5000054E3E9FFFF1A70A81BE918C103000D96 +S21902D895C0A0E1F0D92DE90070A0E1045097E5B200D5E104B07A +S21902D8AA4CE263FCFFEB0040A0E1B000D5E160FCFFEB0100502D +S21902D8BFE3020B54033B00001A186085E20600A0E1EC809FE55B +S21902D8D40420A0E30810A0E10CEEFFEB000050E33300001AB6DE +S21902D8E900D5E153FCFFEB010050E31C00001A0200A0E34FFCFA +S21902D8FEFFEB0E4085E20410A0E1B600C5E10420A0E30600A031 +S21902D913E1F1EBFFEB126085E20600A0E1085085E20510A0E19C +S21902D9280620A0E3EBEBFFEB0400A0E10810A0E10420A0E3E7CE +S21902D93DEBFFEB0500A0E17C109FE50620A0E3E3EBFFEB1C30B6 +S21902D952A0E3BC30C7E10700A0E168209FE50610A0E10CFCFF70 +S21902D967EB120000EAB600D5E132FCFFEB020050E30E00001ADC +S21902D97C4C409FE5003094E5000053E30A00000A0E1085E208FF +S21902D9910094E50420A0E3DDEDFFEB006050E20400001A0810DE +S21902D9A685E2040094E50620A0E3CAEBFFEB006084E50700A0C9 +S21902D9BBE175FBFFEBF0A91BE9F004030020C50300060800008B +S21902D9D01CC103000DC0A0E1F0DF2DE904B04CE208D04DE2003F +S21902D9E590A0E12C00A0E30180A0E148FBFFEB007050E2040091 +S21902D9FA001A470000EA0700A0E163FBFFEB0400A0E14400002D +S21902DA0FEA044097E50100A0E308FCFFEBB600C4E10100A0E300 +S21902DA2405FCFFEBB000C4E1020BA0E302FCFFEBB200C4E106D1 +S21902DA3960A0E30460C4E50450A0E30550C4E50520A0E18410D2 +S21902DA4E9FE50E0084E2A1EBFFEB080084E278109FE50620A00E +S21902DA63E19DEBFFEB180084E20910A0E10520A0E199EBFFEB28 +S21902DA78FF30A0E330304BE52F304BE52E304BE52D304BE52C7A +S21902DA8D304BE52B304BE544209FE5016086E2048082E530A026 +S21902DAA24BE2089082E5FE3043E2003082E50280A0E11C30A063 +S21902DAB7E3BC30C7E10700A0E11C209FE50A10A0E1B3FBFFEB61 +S21902DACC460000EB0050A0E1070000EAF004030020C503001C50 +S21902DAE1C10300060800006FFBFFEB004098E5000054E3C1FF4F +S21902DAF6FF0A3B0000EB000065E0F90050E3F7FFFF9A0630A00F +S21902DB0BE1016046E2000053E3E6FFFFCA0700A0E11DFBFFEB26 +S21902DB200000E0E3F0AF1BE90DC0A0E1F0DD2DE904B04CE20070 +S21902DB3580A0E10150A0E1A0A09FE50070A0E30A60A0E1080057 +S21902DB4AA0E10640A0E10410A0E10420A0E36DEDFFEB00305077 +S21902DB5FE20E00000A0C6084E2017087E20F0057E3F4FFFFDAEF +S21902DB740500A0E10810A0E10420A0E356EBFFEB0800A0E10417 +S21902DB891085E290FFFFEB000050E3050000AA0000E0E3F0AD4E +S21902DB9E1BE9070096E8070085E80300A0E1F0AD1BE930E09F9A +S21902DBB3E500C09EE5070095E88C308CE003318AE0070083E872 +S21902DBC801C08CE200C08EE510005CE30030A00300308E0500FA +S21902DBDD00A0E3F0AD1BE928C10300140503000DC0A0E100D8DA +S21902DBF22DE928309FE5FA0FA0E3482093E504B04CE20FE0A048 +S21902DC07E102F0A0E114109FE5003091E5013083E20300A0E145 +S21902DC1C003081E500A81BE950000000180503000DC0A0E1F0FC +S21902DC31DF2DE904B04CE214D04DE20270A0E101A0A0E12C00AC +S21902DC460BE5006053E2BF00001A0A0057E14200009A010857E6 +S21902DC5BE30300002AFF0057E30800A0830000A093020000EA1A +S21902DC70010457E31800A0231000A03340139FE53220A0E102EF +S21902DC8530D1E7003083E0200073E20600000A1770A0E12C103F +S21902DC9A1BE5203060E23133A0E11AA083E11110A0E12C100BF0 +S21902DCAFE50798A0E12998A0E10A00A0E12788A0E10810A0E1BE +S21902DCC4710200EB0040A0E10A00A0E10810A0E1110100EB0004 +S21902DCD960A0E1990602E02C101BE52138A0E1044883E1020005 +S21902DCEE54E10500002A016046E2074094E00200002A020054F0 +S21902DD03E10160463207408430044062E00400A0E10810A0E1AB +S21902DD185C0200EB0050A0E10400A0E10810A0E1FC0000EB9937 +S21902DD2D0002E02C101BE50138A0E12338A0E1055883E1020063 +S21902DD4255E10400002A010040E2075095E00100002A020055F0 +S21902DD57E10100403206C880E1E60000EA000057E30300001A06 +S21902DD6C0100A0E30210A0E1E90000EB0070A0E1010857E30775 +S21902DD8120A0E10300002AFF0057E30800A0830000A09302001F +S21902DD9600EA010457E31800A0231000A03318129FE53220A0EA +S21902DDABE10230D1E7003083E0200073E20130A00330300B0545 +S21902DDC00AA067003400000A202060E21770A0E12C101BE53AF8 +S21902DDD552A0E13132A0E11110A0E12C100BE51AA083E12788E0 +S21902DDEAA0E10798A0E12998A0E10500A0E10810A0E1230200F6 +S21902DDFFEB0040A0E10500A0E10810A0E1C30000EB0060A0E1AE +S21902DE14990602E02A38A0E1044883E1020054E10500002A0177 +S21902DE296046E2074094E00200002A020054E101604632074017 +S21902DE3E8430044062E00400A0E10810A0E10F0200EB0050A084 +S21902DE53E10400A0E10810A0E1AF0000EB990002E00A38A0E1DC +S21902DE682338A0E1055883E1020055E10500002A010040E20770 +S21902DE7D5095E00200002A020055E10100403207508530066873 +S21902DE9280E105A062E030600BE50798A0E12998A0E10A00A0A0 +S21902DEA7E12788A0E10810A0E1F60100EB0040A0E10A00A0E187 +S21902DEBC0810A0E1960000EB0060A0E1990602E02C101BE52171 +S21902DED138A0E1044883E1020054E10500002A016046E2074096 +S21902DEE694E00200002A020054E10160463207408430044062CF +S21902DEFBE00400A0E10810A0E1E10100EB0050A0E10400A0E1EA +S21902DF100810A0E1810000EB990002E02C101BE50138A0E1235C +S21902DF2538A0E1055883E1020055E10400002A010040E2075086 +S21902DF3A95E00100002A020055E10100403206C880E16D0000E4 +S21902DF4FEA0A0056E10020A08330200B8502C0A0816800008A93 +S21902DF64010856E30620A0E10300002AFF0056E30800A0830028 +S21902DF7900A093020000EA010456E31800A0231000A033301031 +S21902DF8E9FE53220A0E10230D1E7003083E0200073E208000026 +S21902DFA31A2C301BE506005AE10700539101C0A0E300C0A031EB +S21902DFB80010A0E330100BE5500000EA24FF0200202060E23772 +S21902DFCD32A0E1166083E11770A0E12C101BE53A52A0E13132F7 +S21902DFE2A0E11110A0E12C100BE51AA083E12698A0E10628A0A9 +S21902DFF7E12228A0E10500A0E134200BE50910A0E1A00100EB72 +S21902E00C0040A0E10500A0E10910A0E1400000EB34201BE50098 +S21902E02180A0E1980202E02A38A0E1044883E1020054E1050097 +S21902E036002A018048E2064094E00200002A020054E101804813 +S21902E04B3206408430044062E00400A0E10910A0E18B0100EB71 +S21902E0600050A0E10400A0E10910A0E12B0000EB34201BE590BA +S21902E0750202E00A38A0E12338A0E1055883E1020055E105000E +S21902E08A002A010040E2065095E00200002A020055E1010040BD +S21902E09F320650853008C880E105A062E02C08A0E12738A0E17B +S21902E0B40018CCE10328C7E191020EE0900202E0930101E090BE +S21902E0C90303E0011092E00138832201E89EE02138A3E00A00A7 +S21902E0DE53E10500008A2C101BE50030A0130130A0030000531D +S21902E0F3E301005E110000009A01C04CE20020A0E330200BE552 +S21902E1083CC00BE530301BE540204BE238300BE5030092E9F05C +S21902E11DAF1BE9000051E31F00000A0130A0E30020A0E301007E +S21902E13250E11900003A010251E3000051310112A0310332A0DB +S21902E14731FAFFFF3A020151E3000051318110A0318330A031BA +S21902E15CFAFFFF3A010050E10100402003208221A10050E1A1A9 +S21902E171004020A3208221210150E12101402023218221A1016E +S21902E18650E1A1014020A3218221000050E32332B0112112A0C7 +S21902E19B11EFFFFF1A0200A0E10EF0A0E104E02DE5640100EB08 +S21902E1B00000A0E30080BDE80DC0A0E1F0DF2DE904B04CE22472 +S21902E1C5D04DE20260A0E10180A0E138000BE530C04BE234C021 +S21902E1DA0BE5007053E29700001A080056E11800009A01085693 +S21902E1EFE30300002AFF0056E30800A0830000A093020000EA82 +S21902E204010456E31800A0231000A033D4129FE53220A0E102C3 +S21902E21930D1E7003083E0203073E23C300BE55200000A166398 +S21902E22EA0E138101BE5203063E23C201BE53133A0E118828318 +S21902E243E11112A0E138100BE5490000EA000056E30300001A79 +S21902E2580100A0E30210A0E1AEFFFFEB0060A0E1010856E306D3 +S21902E26D20A0E10300002AFF0056E30800A0830000A09302002F +S21902E28200EA010456E31800A0231000A03354129FE53220A0BE +S21902E297E10230D1E7003083E0203073E23C300BE5088066001E +S21902E2AC3100000A3C201BE53C304BE2081093E83C101BE52027 +S21902E2C12062E21663A0E13852A0E13C32A0E140200BE51CC1BC +S21902E2D6A0E138C00BE5188183E12678A0E106A8A0E12AA8A006 +S21902E2EBE10500A0E10710A0E1E50000EB0040A0E10500A0E101 +S21902E3000710A0E185FFFFEB9A0002E02838A0E1044883E102EC +S21902E3150054E10300002A064094E00100002A020054E1064028 +S21902E32A8430044062E00400A0E10710A0E1D40000EB0050A0D1 +S21902E33FE10400A0E10710A0E174FFFFEB9A0002E00838A0E12A +S21902E3542338A0E1055883E1020055E10300002A065095E001DF +S21902E36900002A020055E106508530058062E006A8A0E12AA863 +S21902E37EA0E10800A0E12678A0E10710A0E1BF0000EB0040A038 +S21902E393E10800A0E10710A0E15FFFFFEB9A0002E038C01BE5B0 +S21902E3A82C38A0E1044883E1020054E10300002A064094E001A5 +S21902E3BD00002A020054E106408430044062E00400A0E10710C7 +S21902E3D2A0E1AD0000EB0050A0E10400A0E10710A0E14DFFFFDD +S21902E3E7EB9A0002E038101BE50138A0E12338A0E1055883E114 +S21902E3FC020055E10300002A065095E00100002A020055E1066C +S21902E411508530055062E038500BE534201BE5000052E39600BC +S21902E426000A38301BE53CC01BE5333CA0E148300BE50010A064 +S21902E43BE344100BE58B0000EA080057E10500009A48000BE512 +S21902E45044800BE540204BE20C0012E930C04BE2860000EA01DA +S21902E4650857E30720A0E10300002AFF0057E30800A083000020 +S21902E47AA093020000EA010457E31800A0231000A03358109F63 +S21902E48FE53220A0E10230D1E7003083E0203073E23C300BE53B +S21902E4A41100001A38301BE5070058E1060053910200003A065D +S21902E4B9C053E00780C8E038C00BE534101BE5000051E36C0059 +S21902E4CE000A38201BE548200BE544800BE540204BE20C001219 +S21902E4E3E901C0A0E1640000EA240003003C301BE53CC01BE515 +S21902E4F838201BE5203063E240300BE540101BE53633A0E1176A +S21902E50D7C83E1166CA0E13851A0E13231A0E1122CA0E138200A +S21902E5220BE5188C83E12798A0E10738A0E12338A0E10500A064 +S21902E537E14C300BE50910A0E1520000EB0040A0E10500A0E15D +S21902E54C0910A0E1F2FEFFEB4C201BE500A0A0E19A0202E0280C +S21902E56138A0E1044883E1020054E10500002A01A04AE20740BB +S21902E57694E00200002A020054E101A04A3207408430044062F4 +S21902E58BE00400A0E10910A0E13D0000EB0050A0E10400A0E1F7 +S21902E5A00910A0E1DDFEFFEB4C201BE5900202E00838A0E1233C +S21902E5B538A0E1055883E1020055E10500002A010040E20750EF +S21902E5CA95E00200002A020055E10100403207508530058062F6 +S21902E5DFE00A3880E12308A0E126C8A0E10018C3E10C28C6E1EB +S21902E5F491020EE0900202E09C0101E0900C0CE0011092E0018C +S21902E609C88C2201E89EE021C8ACE008005CE10500008A381087 +S21902E61E1BE50030A0130130A003000053E301005E1102000081 +S21902E6339A06205EE007C0CCE002E0A0E134301BE5000053E35D +S21902E6480D00000A38201BE50E1052E00C80C8E03CC01BE53196 +S21902E65D3CA0E140101BE5183183E148300BE5388CA0E1448076 +S21902E6720BE534C01BE540204BE20C0012E90C008CE830304BE9 +S21902E687E2030093E8F0AF1BE9000051E32600000A0130A0E35C +S21902E69C010050E10EF0A031010251E3000051310112A03103C1 +S21902E6B132A031FAFFFF3A020151E3000051318110A03183304A +S21902E6C6A031FAFFFF3A0020A0E3010050E101004020A100500E +S21902E6DBE1A1004020E3208221210150E121014020632182219F +S21902E6F0A10150E1A1014020E321822103C0A0E1000050E323F8 +S21902E70532B0112112A011EEFFFF1A0E2212E20EF0A001EC016B +S21902E71A12E1A10180106C0112E121018010EC0012E1A10080AC +S21902E72F100EF0A0E104E02DE5010000EB0000A0E30080BDE8B5 +S20802E7440EF0A0E14B +S21902E74853707572696F757320496E74657272757074212121FB +S21902E75D202D20766563746F723A2025642C20646174613A207D +S21902E77225780A000000303132333435363738396162636465E8 +S21902E7876600000000503031004F4B0000453031004530330077 +S21902E79C45303200423031003031323334353637383941424344 +S21902E7B144454600000000303132333435363738394142434466 +S21902E7C64546000000003C42616420666F726D61742073747247 +S21902E7DB696E673A2000000000203A00003E0A00003C6E756C5D +S21902E7F06C3E00003C4E6F74206120737472696E673A203078BC +S21902E8050000003E000000253038583A2000002530325800009B +S21902E81A00002020000020000000207C0000256300007C0A00D8 +S21902E82F003C746F7069633E0048656C702061626F75742068E8 +S21902E844656C703F0000000068656C70000000005B2D77203C34 +S21902E85974696D656F75743E5D205B656E7472795D000045783A +S21902E86E656375746520636F64652061742061206C6F63617414 +S21902E883696F6E0000676F00003C6C6F636174696F6E3E205B0F +S21902E8983C6C656E6774683E5D000000446973706C61792028ED +S21902E8AD6865782064756D702920612072616E6765206F662048 +S21902E8C26D656D6F72790000000064756D70000000005B4F4EF3 +S21902E8D7207C204F46465D00004D616E616765206D61636869C6 +S21902E8EC6E652063616368657300000063616368650000000AB8 +S21902E901526564426F6F7428746D2920646562756720656E7689 +S21902E91669726F6E6D656E74202D206275696C742025732C20E8 +S21902E92B25730A000030383A35383A3433000000004175672041 +S21902E9403234203230303000436F707972696768742028432906 +S21902E95520323030302C20526564204861742C20496E632E0A82 +S21902E96A0A0052414D3A2025702D25700A003D3D2045786563CD +S21902E97F7574696E6720626F6F742073637269707420696E20B5 +S21902E9942564207365636F6E6473202D20656E746572205E4383 +S21902E9A920746F2061626F72740A00526564426F6F743E200000 +S21902E9BE0000496C6C6567616C20636F6D6D616E643A20257392 +S21902E9D30A00000000556E62616C616E63656420737472696EE1 +S21902E9E867210A00416D626967756F757320636F6D6D616E64D6 +S21902E9FD20272573272C2063686F69636573206172653A2025F7 +S21902EA127300202573000A00000055736167653A0A0020202515 +S21902EA277325732025730A0000257320616C72656164207365ED +S21902EA3C740A0000696E76616C6964206E756D62657220272544 +S21902EA51732720666F722025730A00696E76616C696420666C0D +S21902EA66616720272563270A0000257320616C72656164792012 +S21902EA7B7365740A006E6F2064656661756C742F6E6F6E2D663A +S21902EA906C616720617267756D656E747320737570706F727403 +S21902EAA565640A000000006F6E00006F666600496E76616C6907 +S21902EABA64206361636865206D6F64653A2025730A00636163E0 +S21902EACF686573203F0A00000025730A20202025732025730A26 +S21902EAE40000000044756D702077686174205B6C6F63617469B5 +S21902EAF96F6E5D3F0A0000496E76616C69642073746172742049 +S21902EB0E616464726573733A2025730A0000496E76616C696442 +S21902EB23206C656E6774682F656E6420616464726573733A206E +S21902EB3825730A00776169742074696D656F75740000000073D0 +S21902EB4D74617274696E6720616464726573730000000041620A +S21902EB626F757420746F20737461727420657865637574696F68 +S21902EB776E206174202570202D2061626F7274207769746820E9 +S21902EB8C5E432077697468696E202564207365636F6E64730A57 +S21902EBA10000005B2D7261775D205B2D62203C6D656D5F616460 +S21902EBB664723E5D5D004C6F616420612066696C65006C6F6178 +S21902EBCB6400000000454C4620696D61676573206E6F74207359 +S21902EBE07570706F727465640A000000496E76616C6964205362 +S21902EBF52D7265636F7264206174206F66667365742025702CDB +S21902EC0A20696E7075743A2025630A00000042616420532D7299 +S21902EC1F65636F726420636F756E74206174206F6666736574E7 +S21902EC342025700A0000000041646472657373206F666673650C +S21902EC4974203D2025700A00000000417474656D707420746F3D +S21902EC5E206C6F616420532D7265636F7264206461746120746D +S21902EC736F20616464726573733A202570205B6E6F7420696E5E +S21902EC882052414D5D0A00002A2A2A205761726E696E67212054 +S21902EC9D436865636B73756D206661696C757265202D2041640E +S21902ECB264723A20256C782C202530326C58203C3E2025303235 +S21902ECC76C580A0000456E74727920706F696E743A2025702CEC +S21902ECDC20616464726573732072616E67653A2025702D257038 +S21902ECF10A0000496E76616C696420532D7265636F7264206196 +S21902ED0674206F6666736574203078256C782C20747970653ABD +S21902ED1B2025780A00256308000A00000075736167653A206CA0 +S21902ED306F6164203C66696C655F6E616D653E205B2D725D20C2 +S21902ED455B2D765D205B2D68203C686F73743E5D205B2D6D205D +S21902ED5A7B54465450207C205A4D4F44454D7D5D205B2D622058 +S21902ED6F3C626173655F616464726573733E5D0A007665726218 +S21902ED846F7365006C6F61642072617720646174610000006CFC +S21902ED996F6164206164647265737300000000646F776E6C6F91 +S21902EDAE6164206D6F6465202854465450206F72205A4D4F44DE +S21902EDC3454D290000686F7374206E616D652028495020616434 +S21902EDD8647265737329000066696C65206E616D65000000492B +S21902EDED6E76616C696420495020616464726573733A202573DB +S21902EE020A007A6D6F64656D00007466747000000000544654B2 +S21902EE1750206D6F6465207265717569726573206120776F7241 +S21902EE2C6B696E67206E6574776F726B0A000000496E76616CF3 +S21902EE41696420276D6F6465273A2025730A0046696C65206ECB +S21902EE56616D65206D697373696E670A000043616E2774206C10 +S21902EE6B6F616420272573273A2025730A000000004572726FBD +S21902EE80722072656164696E6720686561646572207669612001 +S21902EE95544654503A2025730A0000536F7272792C207A6D6F66 +S21902EEAA64656D20646F776E6C6F6164206E6F7420796574209B +S21902EEBF617661696C61626C650A000000526177206C6F6164A2 +S21902EED42072657175697265732061206D656D6F727920616473 +S21902EEE964726573730A005261772066696C65206C6F616465D3 +S21902EEFE642025702D25700A0000454C4600556E7265636F6769 +S21902EF136E697A656420696D61676520747970653A20256C7860 +S21902EF280A0000007B636D64737D00004D616E61676520464C29 +S21902EF3D41534820696D6167657300666973005B2D6C5D0000B3 +S21902EF5200004D616E61676520636F6E66696775726174696F30 +S21902EF676E206B65707420696E20464C415348206D656D6F7287 +S21902EF7C7900000066636F6E666967005B2D665D000000004990 +S21902EF916E697469616C697A6520464C41534820496D6167650A +S21902EFA62053797374656D205B4649535D00696E69740000003C +S21902EFBB0000000000446973706C617920636F6E74656E7473D6 +S21902EFD0206F6620464C41534820496D61676520537973746567 +S21902EFE56D205B4649535D000000006C69737400000000446980 +S21902EFFA73706C61792066726565205B617661696C61626C65F4 +S21902F00F5D206C6F636174696F6E732077697468696E20464C37 +S21902F02441534820496D6167652053797374656D205B464953EF +S21902F0395D000066726565000000002D66203C666C6173685F60 +S21902F04E616464723E202D6C203C6C656E6774683E00457261E0 +S21902F063736520464C41534820636F6E74656E7473000000009D +S21902F07865726173650000006E616D6500000000446973706CCF +S21902F08D617920616E20696D6167652066726F6D20464C415361 +S21902F0A24820496D6167652053797374656D205B4649535D00A8 +S21902F0B70064656C65746500004C6F616420696D6167652066A1 +S21902F0CC726F6D20464C41534820496D61676520537973746511 +S21902F0E16D205B4649535D20696E746F2052414D0000006C6F37 +S21902F0F66164000000002D62203C6D656D5F626173653E202D8A +S21902F10B6C203C6C656E6774683E205B2D66203C666C617368E8 +S21902F1205F616464723E5D205B2D65203C656E7472795F706F65 +S21902F135696E743E5D205B2D72203C72616D5F616464723E5D8D +S21902F14A203C6E616D653E00000043726561746520616E2069A2 +S21902F15F6D6167650063726561746500002A2A2A20696E76613A +S21902F1746C696420276669732720636F6D6D616E643A202573A5 +S21902F1890A0000666973200000000066756C6C20696E6974690E +S21902F19E616C697A6174696F6E2C2065726173657320616C6C62 +S21902F1B3206F6620666C6173680000000041626F757420746F1F +S21902F1C820696E697469616C697A65205B666F726D61745D2058 +S21902F1DD464C41534820696D6167652073797374656D002A2A6C +S21902F1F22041626F727465640A002A2A2A20496E697469616CAE +S21902F207697A6520464C41534820496D616765205379737465DA +S21902F21C6D0A0000202020696E697469616C697A6174696F6E17 +S21902F231206661696C65642025703A202578282573290A00009D +S21902F2460000202020205761726E696E673A206465766963658C +S21902F25B20636F6E74656E7473206E6F74206572617365642CD8 +S21902F27020736F6D6520626C6F636B73206D6179206E6F742018 +S21902F285626520757361626C650A00526564426F6F740052659A +S21902F29A64426F6F745B6261636B75705D00526564426F6F7483 +S21902F2AF20636F6E6669670000464953206469726563746F724F +S21902F2C4790000004572726F722077726974696E6720696D6130 +S21902F2D967652064657363726970746F72732061742025703A97 +S21902F2EE202578282573290A00004E616D6520202020202020F3 +S21902F30320202020202020464C41534820616464722020204D38 +S21902F318656D2061646472202020204C656E67746820202020EA +S21902F32D456E74727920706F696E740A000000252D3136732012 +S21902F3422030782530386C5820202030782530386C58202030CD +S21902F357782530366C58202030782530386C580A0020203078A8 +S21902F36C2530386C58202E2E2030782530386C580A0000006D28 +S21902F381656D6F727920626173652061646472657373007261B0 +S21902F3966D2062617365206164647265737300000000656E74E6 +S21902F3AB727920706F696E74206164647265737300464C4153E5 +S21902F3C048206D656D6F7279206261736520616464726573736F +S21902F3D50000006C656E677468000066696C65206E616D650039 +S21902F3EA0000696E76616C696420617267756D656E747300002A +S21902F3FF00726571756972656420706172616D65746572206D23 +S21902F414697373696E670000496E76616C696420464C415348FA +S21902F42920616464726573733A20257020282573290A0020207F +S21902F43E2076616C69642072616E67652069732025702D2570E2 +S21902F4530A00000000496E76616C69642052414D206164647211 +S21902F4686573733A2025700A000000004E616D65206973207433 +S21902F47D6F6F206C6F6E672C206D757374206265206C657373F2 +S21902F492207468616E2025642063686172730A00000043616E9D +S21902F4A72774206C6F6361746520256C64206279746573206634 +S21902F4BC72656520696E20464C4153480A000000496D61676586 +S21902F4D120666F756E642C2062757420464C4153482061646475 +S21902F4E67265737320696E636F72726563740A000000416E208B +S21902F4FB696D616765206E616D656420272573272065786973EE +S21902F5107473000043616E27742070726F6772616D20746869CE +S21902F5257320726567696F6E202D20636F6E7461696E73206364 +S21902F53A6F646520696E20757365210A000043616E27742065BC +S21902F54F7261736520726567696F6E2061742025703A202578B0 +S21902F564282573290A00000043616E27742070726F6772616DD3 +S21902F57920726567696F6E2061742025703A2025782825732948 +S21902F58E0A004572726F722065726173696E672061742025709A +S21902F5A33A202578282573290A000000004572726F7220707256 +S21902F5B86F6772616D6D696E672061742025703A202578282588 +S21902F5CD73290A000000006D697373696E6720617267756D65E1 +S21902F5E26E7400000000696D616765206E616D65000044656C52 +S21902F5F765746520696D61676520272573270000004E6F20694B +S21902F60C6D616765202725732720666F756E640A000000004EAE +S21902F6216F742061206C6F616461626C6520696D6167650A00E8 +S21902F6360000464C4153483A2064726976657220696E69742070 +S21902F64B6661696C6564212C207374617475733A2025780A002C +S21902F660464C4153483A202570202D2025702C20256420626C6C +S21902F6756F636B73206F662025702062797465732065612E0ABA +S21902F68A0000746F6F2066657720617267756D656E74730000BA +S21902F69F00756E7265636F676E697A656420636F6D6D616E6443 +S21902F6B40000000052756E2073637269707420617420626F6FFB +S21902F6C9740000626F6F745F73637269707400426F6F742073E2 +S21902F6DE637269707400626F6F745F7363726970745F646174AE +S21902F6F36100000000426F6F74207363726970742074696D6582 +S21902F7086F757400626F6F745F7363726970745F74696D656F68 +S21902F71D75740025733A2000000000257320007472756500007D +S21902F732000066616C7365000000256420003078253032580080 +S21902F747003A000000200000003F3F00000A0000002E2E202523 +S21902F75C730A0000456E746572207363726970742C20746572CA +S21902F7716D696E617465207769746820656D707479206C696E70 +S21902F786650A000000003E3E20006C69737420636F6E6669670A +S21902F79B75726174696F6E206F6E6C79002A2A20696E76616CE0 +S21902F7B0696420656E7472790A000000557064617465205265DA +S21902F7C564426F6F74206E6F6E2D766F6C6174696C6520636F46 +S21902F7DA6E66696775726174696F6E0000004572726F722077CC +S21902F7EF726974696E6720636F6E66696720646174612061742C +S21902F8042025703A202578282573290A00000000526571756547 +S21902F819737420666F7220636F6E6669672076616C756520276B +S21902F82E257327202D2077726F6E6720747970650A0043616E67 +S21902F84327742066696E6420636F6E6669672076616C7565205A +S21902F858272573270A000000464C41534820636F6E666967752B +S21902F86D726174696F6E20636865636B73756D206572726F7235 +S21902F882206F7220696E76616C6964206B65790A0000657468AE +S21902F897300000000073635F6C7065000043462063617264204C +S21902F8AC776F6E277420676F207265616479210A000000004EAD +S21902F8C16F742061205343204C50452C20736F7272790A00007B +S21902F8D600000A00000025733A2025732025732025730A000008 +S21902F8EB00436F756C646E27742066696E6420434F5220706F3D +S21902F900696E746572210A0043616E2774207061727365204353 +S21902F91549530A0000000043616E277420666574636820636F67 +S21902F92A6E66696720696E666F0A00000000436F6D7061637480 +S21902F93F20466C61736820636172642072656D6F766564210AA7 +S21902F954000000002E2E2E2057616974696E6720666F72206E25 +S21902F9696574776F726B20636172643A2000002E00000025730C +S21902F97E0A0073635F6C70655F4275664576656E7400303132DC +S21902F9933334353637383900003031323334353637383961620E +S21902F9A8636465660000000030313233343536373839414243DE +S21902F9BD444546000000005E430A003078253038583A200000CD +S21902F9D2000025303258000000002020000020000000207C003E +S21902F9E700256300007C0A0000202D2061726520796F75207341 +S21902F9FC7572652028792F6E293F20004E45544153434949006D +S21902FA110000004F43544554000000556E6B6E6F776E20657273 +S21902FA26726F7200000066696C65206E6F7420666F756E640024 +S21902FA3B006163636573732076696F6C6174696F6E0000000048 +S21902FA506469736B2066756C6C206F7220616C6C6F63617469B2 +S21902FA656F6E20657863656564656400000000696C6C656761E3 +S21902FA7A6C2054465450206F7065726174696F6E0000756E6B67 +S21902FA8F6E6F776E207472616E736665722049440066696C65C7 +S21902FAA420616C726561647920657869737473006E6F2073759F +S21902FAB963682075736572000000006F7065726174696F6E2096 +S21902FACE74696D6564206F757400736F6D6520736F7274206F66 +S21902FAE366206E6574776F726B206572726F720000696E76617F +S21902FAF86C696420706172616D6574657200000070726F746FA4 +S21902FB0D636F6C2076696F6C6174696F6E000066696C65206980 +S21902FB2273206C6172676572207468616E206275666665720052 +S21902FB370047444220636F6E6E656374696F6E20706F727400B0 +S21902FB4C6764625F706F7274000000004E6574776F726B2064DE +S21902FB616562756720617420626F6F742074696D6500006E657A +S21902FB76745F646562756700000055736520424F4F5450206642 +S21902FB8B6F72206E6574776F726B20636F6E6669677572617401 +S21902FBA0696F6E00626F6F74700000004C6F63616C204950201B +S21902FBB56164647265737300000000626F6F74705F6D795F691D +S21902FBCA700044656661756C74207365727665722049502061F9 +S21902FBDF646472657373000000626F6F74705F7365727665726B +S21902FBF45F69700025732E25640A00006E65745F696F5F77729E +S21902FC09697465000000006E65745F696F5F72656164004E6F67 +S21902FC1E206E6574776F726B20696E74657266616365732066D6 +S21902FC336F756E640A0000000043616E27742067657420424F37 +S21902FC484F545020696E666F202D206E6574776F726B2064697D +S21902FC5D7361626C6564210A00000049503A20257300002C201E +S21902FC7244656661756C74207365727665723A2025730A0000FE +S21902FC870025642E25642E25642E2564002573202D2063616C7E +S21902FC9C6C6564207769746820696E76616C6964204349533AFB +S21902FCB12025780A00000063665F70617273655F6366746162CE +S21902FCC66C650000000063665F70617273655F636F6E66696739 +S21902FCDB0050434D4349413A20496E76616C696420736C6F745D +S21902FCF02025640A000000002E2E2E2045726173652066726F44 +S21902FD056D2025702D25703A2000002E0000000A0000002E2E10 +S21902FD1A2E2050726F6772616D2066726F6D2025702D2570203C +S21902FD2F61742025703A2000004E6F206572726F72202D206FF1 +S21902FD447065726174696F6E20636F6D706C657465000000497F +S21902FD596E76616C696420464C4153482061646472657373007C +S21902FD6E00004572726F7220747279696E6720746F2065726157 +S21902FD8373650000004572726F7220747279696E6720746F20A2 +S21902FD986C6F636B2F756E6C6F636B004572726F722074727962 +S21902FDAD696E6720746F2070726F6772616D0047656E65726987 +S21902FDC263206572726F720000004465766963652F7265676952 +S21902FDD76F6E2069732077726974652D70726F746563746564F5 +S21902FDEC00000000464C415348207375622D73797374656D2031 +S21902FE016E6F7420696E697469616C697A656400000000556E1B +S21902FE166B6E6F776E206572726F7200000045746865726E658E +S21902FE2B742073656E643A0A0025733A207061636B6574206F40 +S21902FE40662025642062797465732064726F707065640A0065D3 +S21902FE5574685F6472765F726563760000000045746865726E95 +S21902FE6A657420726563763A0A005152590043616E277420695D +S21902FE7F64656E7469667920464C4153482C20736F7272790A51 +S21902FE9400000000457272203D2025780A00000025733A2043D0 +S21902FEA9616E27742066696E642061646472657373206F6620F7 +S21902FEBE7365727665720A0000005F5F7564705F73656E647403 +S21902FED36F000000007564705F7265637666726F6D202D2064C7 +S21902FEE8726F70706564207061636B6574206F662025642062BC +S21902FEFD797465730A00005F5F656E65745F706F6C6C3A206ED2 +S21902FF126F206D6F726520627566666572730A00000000010277 +S21902FF2702030303030404040404040404050505050505050568 +S21902FF3C05050505050505050606060606060606060606060633 +S21902FF5106060606060606060606060606060606060606070714 +S21902FF66070707070707070707070707070707070707070707EC +S21902FF7B070707070707070707070707070707070707070707D7 +S21902FF90070707070707070707070707070707070707070708C1 +S21902FFA508080808080808080808080808080808080808080898 +S21902FFBA08080808080808080808080808080808080808080883 +S21902FFCF0808080808080808080808080808080808080808086E +S21902FFE408080808080808080808080808080808080808080859 +S21902FFF908080808080808080808080808080808080808080844 +S21903000E0808080808080808080808080808080808080808082D +S21903002308000102020303030304040404040404040505050573 +S21903003805050505050505050505050506060606060606060639 +S21903004D06060606060606060606060606060606060606060618 +S219030062060607070707070707070707070707070707070707F0 +S219030077070707070707070707070707070707070707070707D9 +S21903008C070707070707070707070707070707070707070707C4 +S2190300A10707070808080808080808080808080808080808089D +S2190300B608080808080808080808080808080808080808080885 +S2190300CB08080808080808080808080808080808080808080870 +S2190300E00808080808080808080808080808080808080808085B +S2190300F508080808080808080808080808080808080808080846 +S21903010A08080808080808080808080808080808080808080830 +S20903011F0808080808AB +S219030124000000006432020064320200643202006432020064FA +S2190301393202006432020064320200643202006432020064327F +S21903014E0200643202006432020064320200643202006432029A +S21903016300643202006432020064320200643202006432020087 +S2190301786432020064320200643202006432020064320200640E +S21903018D3202006432020064320200643202006432020064322B +S2190301A202006432020064320200643202006432020064320246 +S2190301B700643202006432020064320200643202006432020033 +S2190301CC643202006432020064320200643202006432020064BA +S2190301E1320200643202006432020064320200643202006432D7 +S2190301F6020064320200643202006432020064320200643202F2 +S21903020B0064320200643202006432020000000000000000000E +S219030220000000000000000000000000000000000000000000C1 +S219030235000000000000000000000000000000000000000000AC +S21903024A00000000000000000000000000000000000000000097 +S21903025F00000000000000000000000000000000000000000082 +S2190302740000000000000000000000000000000000000000006D +S21903028900000000000000000000000000000000000000000058 +S21903029E00000000000000000000000000000000000000000043 +S2190302B30000000000000000000000000000000000000000002E +S2190302C800000000000000000000000000000000000000000019 +S2190302DD00000000000000000000000000000000000000000004 +S2190302F2000000000000000000000000000000000000000000EF +S219030307000000000000000000000000000000000000000000D9 +S21903031C000000000000000000000000000000000000000000C4 +S219030331000000000000000000000000000000000000000000AF +S2190303460000000000000000000000000000000000000000009A +S21903035B00000000000000000000000000000000000000000085 +S21903037000000000000000000000000000000000000000000070 +S2190303850000000000000000000000000000000000000000005B +S21903039A00000000000000000000000000000000000000000046 +S2190303AF00000000000000000000000000000000000000000031 +S2190303C40000000000000000000000000000000000000000001C +S2190303D900000000000000000000000000000000000000000007 +S2190303EE000000000000000000002000000000000000A41D020F +S21903040300F41D0200000000000000000000000000FFFFFFFFCD +S219030418000000000000000000000000F0C10300000000000013 +S21903042D0000000000000000000000FEFFFFFFFEFFFFFF0000BC +S21903044200000000000000000180E80300000F0000000000051D +S21903045780E80300001100000000000000000000007C2F2D5CD8 +S21903046C7C2D00000000000004810200D0800200D4810200ECAE +S219030481810200608202009C8402003C860200D4860200E404CD +S21903049603000000000074040300C0C4030094F80200000000B6 +S2190304AB00000000000000000008881234567800000000000090 +S2190304C000000000141E0000141E0000F40100000000000000C6 +S2190304D5000000000000000000000000000000F0B10200BCB5F6 +S2190304EA020014B4020000000000000000000000000000000029 +S2190304FF000000000000000000000000000000000000000000E0 +S219030514000000000000000000000000000000000000000000CA +S21903052900000064F1020054F10200FCF00200C4670200B8F054 +S21903053E020088F0020080F00200306F020078F0020060F00255 +S2190305530044F00200586D02003CF00200F8EF0200BCEF0200CA +S21903056818660200B4EF020090EF020088EF020080620200F083 +S21903057DEF0200C0EF0200BCEF020084650200F4F00200C0F091 +S219030592020080F0020020710200F8E80200E0E80200D4E802DB +S2190305A70084540200CCE80200A4E802008CE8020074560200D7 +S2190305BC48EF020034EF02002CEF02005073020080EF0200541D +S2190305D1EF02004CEF02005C78020088E802006CE8020054E805 +S2190305E60200245702004CE8020038E8020030E802002456028B +S2190305FB00C8EB0200BCEB0200A4EB0200285E0200CCF60200A8 +S219030610B8F60200000000000100000001000000E4F60200D867 +S219030625F60200CCF6020001000000040000000CF70200F8F604 +S21903063A0200CCF602000100000002000000A4FB020080FB02BC +S21903064F00000000000100000001000000C0FB0200ACFB020026 +S219030664A4FB02000000000005000000E8FB0200CCFB0200A481 +S219030679FB020000000000050000004CFB020038FB02000000E4 +S21903068E0000010000000200000074FB020058FB020000000086 +S2190306A3000100000001000000CC7B0200A0A402009CF8020013 +S2140306B8988002009C04030000000000683B0200C8 +S804020044B5 diff --git a/packages/hal/arm/sa11x0/assabet/current/images/redboot_ROM.bin b/packages/hal/arm/sa11x0/assabet/current/images/redboot_ROM.bin new file mode 100644 index 0000000000000000000000000000000000000000..e4f4be89933eebabf47538fdfc1fc9dc6744eb33 GIT binary patch literal 72152 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 diff --git a/packages/hal/arm/sa11x0/assabet/current/images/redboot_ROM.srec b/packages/hal/arm/sa11x0/assabet/current/images/redboot_ROM.srec new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/assabet/current/images/redboot_ROM.srec @@ -0,0 +1,3440 @@ +S02B00002F776F726B2F617373616265745F726564626F6F742F524F4D2F696E7374616C6C2F62696E2F7265D1 +S31A5000000018F09FE518F09FE518F09FE518F09FE518F09FE500D9 +S31A5000001500000018F09FE518F09FE54400000078030050FC035A +S31A5000002A005034040050B004005000000000980500508005001D +S30A5000003F505402005070 +S31A500000441214A0E388269FE5022A82E3012982E3002081E57C54 +S31A50000059169FE57C269FE5002081E578369FE5BF2FA0E3002033 +S31A5000006E83E570269FE5002081E56C369FE56420A0E3009093CF +S31A50000083E5012052E2FCFFFF1A4C269FE5002081E548369FE546 +S31A500000980128A0E3002083E5520F0FEE44169FE50B20A0E300DF +S31A500000AD2081E5510F0FEE0000A0E10000A0E11214A0E3102624 +S31A500000C29FE5022AC2E3012982E3002081E51C169FE501104161 +S31A500000D7E2000051E3FCFFFF1A10169FE510269FE5021041E0FD +S31A500000EC042091E4043091E4003082E5042091E4000052E3FA08 +S31A50000101FFFF1A1214A0E3C8259FE5022A82E30129C2E30020E1 +S31A5000011681E5E0159FE50120A0E3002081E5D8159FE50820A03C +S31A5000012BE3002081E50311A0E3002091E5002091E5002091E5A7 +S31A50000140002091E5002091E5002091E5002091E5002091E50A5C +S31A5000015512A0E3A8259FE5002081E51B0000EA040000A07FAA01 +S31A5000016AAAAA080000A0AAAAAAAA0C0000A0AAAAAAAA10000022 +S31A5000017FA0384B384B140000A019242122180000A04A994A99BD +S31A500001941C0000A02703FC49200000A07FAAAAAA240000A0AA2A +S31A500001A9AAAAAA280000A0AAAAAAAA2C0000A049441942300099 +S31A500001BE00A0CCAFCCAF000000A0547254720000000000000014 +S31A500001D30028159FE51020A0E3002081E524159FE50321A0E363 +S31A500001E802D081E1840200EB1214A0E3DC249FE5022A82E30148 +S31A500001FD29C2E3002081E504259FE57110A0E3101F01EE02F082 +S31A50000212A0E10000A0E10000A0E10000A0E11214A0E3AC249F65 +S31A50000227E5022AC2E30129C2E3002081E5D8149FE5002081E56B +S31A5000023CD4149FE5009081E50000A0E3CC149FE5082091E50868 +S31A500002512080E50000A0E35C149FE5282091E5282080E51820A3 +S31A5000026691E5182080E5382091E5382080E51C2091E51C208021 +S31A5000027BE53C2091E53C2080E50C2091E50C2080E52C2091E5AB +S31A500002902C2080E5102091E5102080E5302091E5302080E5009C +S31A500002A52091E5002080E56C249FE5202080E5E8339FE5E84350 +S31A500002BA9FE5E8539FE5050054E10500000A043043E20440446C +S31A500002CFE20400B3E50400A4E5050054E1FBFFFF1AA0D39FE575 +S31A500002E4D200A0E300F029E19CD39FE5D100A0E300F029E18C93 +S31A500002F9D39FE5DB00A0E300F029E184D39FE5D300A0E300F0CA +S31A5000030E29E100F069E16CD39FE578139FE578239FE50000A0AF +S31A50000323E3020051E10200000A040081E4020051E1FCFFFF1A9B +S31A500003385B0100EB9B0800EB0000A0E3D8139FE5042091E504F5 +S31A5000034D2080E5242091E5242080E58D0F00EB330100EB9E1603 +S31A5000036200EBFEFFFFEAD300A0E300F029E1B3FFFFEA0BB0AD0C +S31A50000377DE14D39FE501582DE900004FE101002DE90DC0A0E1CE +S31A5000038C00000FE11F00C0E3130080E300F029E10DB0A0E1DCCA +S31A500003A1D29FE50D005BE10300008ACC029FE500005BE1000037 +S31A500003B6009A0BD0A0E14CD04DE2FF0F8DE81F009CE820001045 +S31A500003CBE304404402024044123C008DE500108DE52C208DE5D4 +S31A500003E040308DE538408DE534E08DE54C008CE230B08DE50153 +S31A500003F540A0E34B0000EA5CD04DE2FF0F8DE800004FE1200077 +S31A5000040A10E304304E0202304E123C008DE540C08DE538308D69 +S31A5000041FE534E08DE55C008DE230008DE50240A0E33D0000EAAE +S31A5000043458D29FE504E04EE201582DE900004FE101002DE90DD8 +S31A50000449C0A0E100000FE11F00C0E3130080E300F029E10DB028 +S31A5000045EA0E11CD29FE50D005BE10300008A0C029FE500005B7D +S31A50000473E10000009A0BD0A0E14CD04DE2FF0F8DE81F009CE8D6 +S31A500004883C008DE500108DE52C208DE540308DE538408DE5341B +S31A5000049DE08DE54C008CE230B08DE50340A0E31E0000EADCD11B +S31A500004B29FE504E04EE201582DE900004FE101002DE90DC0A024 +S31A500004C7E100000FE11F00C0E3130080E300F029E10DB0A0E189 +S31A500004DCA0D19FE50D005BE10300008A90019FE500005BE10099 +S31A500004F100009A0BD0A0E14CD04DE2FF0F8DE81F009CE83C00FD +S31A500005068DE500108DE52C208DE540308DE538408DE534E08D6B +S31A5000051BE54C008CE230B08DE50440A0E3FFFFFFEA44408DE5E0 +S31A500005300D00A0E19C0000EB0DC0A0E100000FE1C00080E300EA +S31A50000545F029E10000A0E10000A0E134E09CE530D09DE51F0019 +S31A5000055AC0E3120080E300F029E10CD0A0E138E09DE53C009D54 +S31A5000056FE540C09DE500F069E1FF0F9DE80EF0B0E104D19FE505 +S31A5000058404E04EE201582DE900004FE101002DE9040000EAF064 +S31A50000599D09FE504E04EE201582DE900004FE101002DE90DC00C +S31A500005AEA0E100000FE11F00C0E3D30080E300F029E10DB0A022 +S31A500005C3E14CD04DE2FF0F8DE81F009CE83C008DE500108DE54B +S31A500005D82C208DE540308DE538408DE534E08DE530B08DE50D49 +S31A500005ED90A0E10900A0E1F70000EB0040A0E10400A0E120219F +S31A500006029FE5009082E5A4109FE5041191E798209FE50461921A +S31A50000617E70920A0E10FE0A0E106F0A0E10DC0A0E100000FE1C2 +S31A5000062CC00080E300F029E10000A0E10000A0E134E09CE5307F +S31A50000641D09DE51F00C0E3120080E300F029E10CD0A0E138E056 +S31A500006569DE53C009DE540C09DE500F069E1FF0F9DE80EF0B0FC +S31A5000066BE10EF0A0E100000FE10EF0A0E10D00A0E10EF0A0E148 +S31A5000068030870000308B0000309B000030860000B086000030B6 +S31A50000695870000B0850000404401004044010028140150008027 +S31A500006AA0000B085000004800000F4800000E481000000000053 +S31A500006BF500080000065436F73203A2000417567203234203207 +S31A500006D430303000E414A00004000490FCA707080800049000AD +S31A500006E9A407080000049014000290A0860100640100500000DD +S31A500006FE0050600002800400029055725472309B00002002004F +S31A500007135060010000640100000000005044020050000000502F +S31A50000728DC4101000DC0A0E100D82DE930309FE530009FE50074 +S31A5000073D1093E504B04CE228C09FE50C3091E50C308CE50C30E0 +S31A5000075290E5102091E50C3081E510208CE5103090E510308168 +S31A50000767E500A81BE9D482000020000050309B00000DC0A0E1B7 +S31A5000077C00D82DE91C209FE51C109FE5000092E50C3091E50C7F +S31A500007913080E5102091E504B04CE2102080E500A81BE9D48249 +S31A500007A60000309B00000DC0A0E130D82DE968309FE504B04C95 +S31A500007BBE2002093E50040A0E1000052E30400000A443094E568 +S31A500007D0040053E30100001A382084E530A81BE940509FE500B8 +S31A500007E53095E5013083E2003085E5010053E30000001ACBFFB4 +S31A500007FAFFEB28309FE5004083E54A0400EB003095E5013043CF +S31A5000080FE2003085E5000053E30000001AD5FFFFEB30A81BE918 +S31A500008241C830000509B0000684101000DC0A0E130D82DE924A5 +S31A50000839309FE504B04CE220409FE50350A0E1030054E10300CB +S31A5000084E003A0FE0A0E104F014E4050054E1FBFFFF2A30A81B59 +S31A50000863E9AC850000AC8500000DC0A0E100D82DE90030A0E1F2 +S31A500008780120A0E104B04CE20C009FE50310A0E19D1000EB00D5 +S31A5000088D00A0E300A81BE908FA00500DC0A0E100D82DE904B08F +S31A500008A24CE2FEDEFFE700A81BE90DC0A0E110D82DE970209FD4 +S31A500008B7E570309FE570109FE50040A0E3004082E5004083E5B7 +S31A500008CC64209FE50130A0E3003081E55C309FE5004082E500B8 +S31A500008E14083E5082082E20F32E0E3003082E504B04CE2AE014C +S31A500008F600EB40309FE5004083E50922A0E3004082E5410E006C +S31A5000090BEB101F11EE0F1081E3101F01EE101F11EE011A81E31A +S31A50000920031081E3101F01EE10A81BE904000590080005900CD9 +S31A500009350005901000049014000490100000900DC0A0E130D880 +S31A5000094A2DE90030A0E1010040E2000053E304B04CE21B000025 +S31A5000095FDA6C509FE500E0A0E3014040E2001095E5002095E529 +S31A50000974010052E10300001A50309FE5002093E5010052E1FCFB +S31A50000989FFFF0A09C2A0E300309CE5000053E30400000A012097 +S31A5000099E52E000309C450320824002E08EE0010000EA023061F8 +S31A500009B3E003E08EE002005EE3EAFFFFDA0030A0E10400A0E16D +S31A500009C8000053E3E4FFFFCA30A81BE9100000900DC0A0E10018 +S31A500009DDD82DE984309FE5002093E504B04CE2FF0812E3100003 +S31A500009F2A0130500001AFF0C12E30800A0130200001AFF0012E0 +S31A50000A07E31800A0030000A01358109FE558C09FE55230A0E1A8 +S31A50000A1C010013E30C00000A0B0050E30700001A003091E50C51 +S31A50000A312003E05230A0E1010013E30300001A010080E21B00C2 +S31A50000A4650E3F9FFFF9A00A81BE9200080E200A81BE901008026 +S31A50000A5BE2070010E3ECFFFF1A0000E0E300A81BE9000005904C +S31A50000A701800049000F8FF0F0DC0A0E100D82DE92A0050E30BC5 +S31A50000A8500A0C314109FE50120A0E3003091E504B04CE212308D +S31A50000A9AC3E1003081E500A81BE9040005900DC0A0E100D82D1F +S31A50000AAFE92A0050E30B00A0C314109FE50120A0E3003091E536 +S31A50000AC404B04CE2123083E1003081E500A81BE9040005900D57 +S31A50000AD9C0A0E100D82DE90B3040E21F0053E304B04CE20400EB +S31A50000AEE009A1F3000E20120A0E308109FE51223A0E10020813B +S31A50000B03E500A81BE9180004900DC0A0E100D82DE90B3040E2B1 +S31A50000B181F0053E304B04CE23400009A000051E31900000A0016 +S31A50000B2D0052E30B00000A1F1000E2BC009FE50120A0E30030EE +S31A50000B4290E51221A0E1B0109FE5023083E1003080E5003091EF +S31A50000B57E5023083E1003081E500A81BE91F1000E28C009FE555 +S31A50000B6C0120A0E3003090E51221E0E180109FE5023003E000B8 +S31A50000B813080E5003091E5023003E0003081E500A81BE9000077 +S31A50000B9652E30B00000A1F1000E254009FE50120A0E30030905D +S31A50000BABE51221A0E148109FE5023083E1003080E5003091E599 +S31A50000BC00230C3E1003081E500A81BE91F1000E228009FE501F4 +S31A50000BD520A0E3003090E51221A0E114109FE5023083E100304B +S31A50000BEA80E5003091E50230C3E1003081E500A81BE910000469 +S31A50000BFF90140004900DC0A0E110D82DE904B04CE260439FE5FE +S31A50000C14104F02EE0330A0E3103F03EE0400A0E10010A0E30117 +S31A50000C2929A0E3FB2500EB0010A0E3052CA0E32000A0E302C0FD +S31A50000C3EA0E3033B8CE30C3083E3013A83E1023184E7010040FB +S31A50000C53E2011081E2012082E2000050E3F6FFFFCA8020A0E347 +S31A50000C680210A0E10400A0E302C0A0E3033B8CE30C3083E30172 +S31A50000C7D3A83E1023184E7010040E2011081E2012082E20000B4 +S31A50000C9250E3F6FFFFCA012CA0E30210A0E18000A0E3D0C29F8F +S31A50000CA7E5013AA0E12C3683E1023184E7010040E2011081E246 +S31A50000CBC012082E2000050E3F7FFFFCA062DA0E30210A0E1808D +S31A50000CD100A0E3A0C29FE5013AA0E12C3683E1023184E701002E +S31A50000CE640E2011081E2012082E2000050E3F7FFFFCA612FA066 +S31A50000CFBE30210A0E10100A0E370C29FE5013AA0E12C3683E15C +S31A50000D10023184E7010040E2011081E2012082E2000050E3F794 +S31A50000D25FFFFCA622FA0E30210A0E10100A0E340C29FE5013AAF +S31A50000D3AA0E12C3683E1023184E7010040E2011081E20120822F +S31A50000D4FE2000050E3F7FFFFCA632FA0E30210A0E10100A0E339 +S31A50000D6410C29FE5013AA0E12C3683E1023184E7010040E2018A +S31A50000D791081E2012082E2000050E3F7FFFFCA192EA0E3021049 +S31A50000D8EA0E10400A0E3E0C19FE5013AA0E12C3683E102318494 +S31A50000DA3E7010040E2011081E2012082E2000050E3F7FFFFCAF0 +S31A50000DB8652FA0E30210A0E10400A0E3B0C19FE5013AA0E12CC2 +S31A50000DCD3683E1023184E7010040E2011081E2012082E2000067 +S31A50000DE250E3F7FFFFCA022CA0E30210A0E10200A0E180C19F0D +S31A50000DF7E5013AA0E12C3683E1023184E7010040E2011081E2F5 +S31A50000E0C012082E2000050E3F7FFFFCA032CA0E30210A0E102BD +S31A50000E210CA0E350C19FE5013AA0E12C3683E1023184E7010021 +S31A50000E3640E2011081E2012082E2000050E3F7FFFFCA012BA078 +S31A50000E4BE30210A0E18000A0E320C19FE5013AA0E12C3683E1DC +S31A50000E60023184E7010040E2011081E2012082E2000050E3F743 +S31A50000E75FFFFCA122DA0E30210A0E18000A0E3F0C09FE5013A83 +S31A50000E8AA0E12C3683E1023184E7010040E2011081E2012082DE +S31A50000E9FE2000050E3F7FFFFCA022BA0E30210A0E1010BA0E342 +S31A50000EB4C0C09FE5013AA0E12C3683E1023184E7010040E2018B +S31A50000EC91081E2012082E2000050E3F7FFFFCA031BA0E3002013 +S31A50000EDEA0E32000A0E302C0A0E3033B8CE30C3083E3013A8331 +S31A50000EF3E1023184E7010040E2011081E2012082E2000050E3C6 +S31A50000F08F6FFFFCA032BA0E30210A0E12000A0E302C0A0E30391 +S31A50000F1D3B8CE3043083E3013A83E1023184E7010040E20110B4 +S31A50000F3281E2012082E2000050E3F6FFFFCA0E2CA0E30210A00C +S31A50000F47E18000A0E302C0A0E3033B8CE30C3083E3013A83E128 +S31A50000F5C023184E7010040E2011081E2012082E2000050E3F647 +S31A50000F71FFFFCA10A81BE9004000C00020C0000DC0A0E100D88B +S31A50000F862DE904B04CE21CC09FE500309CE50030C3E101000022 +S31A50000F9BE0003083E100308CE51224A0E3003082E500A81BE9DA +S31A50000FB0600100000DC0A0E100D82DE904B04CE200A81BE90D9E +S31A50000FC5C0A0E100D82DE90C309FE50F0000E20000D3E704B073 +S31A50000FDA4CE200A81BE938FA00500DC0A0E100D82DE920209F35 +S31A50000FEFE5000092E504B04CE2000050E3010000CAED0800EB7B +S31A5000100400A81BE90030E0E3003082E500A81BE9F08200000D20 +S31A50001019C0A0E100D82DE9FF0000E2613040E2050053E300105E +S31A5000102EA0E104B04CE20100008A570040E200A81BE9302040B4 +S31A50001043E2FF3002E2090053E30100008A0200A0E100A81BE954 +S31A50001058413040E2050053E30100009A0000E0E300A81BE9371E +S31A5000106D0041E200A81BE90DC0A0E110D82DE90030A0E304B096 +S31A500010824CE214D04DE214304BE524404BE21C000BE5D2FFFFE1 +S31A50001097EBFF0000E20410A0E1020000EB010050E3F9FFFF1A5B +S31A500010AC10A81BE90DC0A0E170D82DE90140A0E11050D4E50492 +S31A500010C1B04CE2000055E30800001A240050E32800001A0130C2 +S31A500010D6A0E31030C4E50C5084E5005084E5023043E2043084B6 +S31A500010EBE5210000EA010055E31700001A230050E30600001ACA +S31A50001100080094E50C1094E50030A0E30130C0E70220A0E3102E +S31A5000111520C4E5160000EA0C1094E5020B51E30300001A003083 +S31A5000112AA0E31030C4E50000E0E370A81BE9003094E5082094AA +S31A5000113FE5003083E0003084E50100C2E7013081E20C3084E551 +S31A50001154070000EA020055E30700001AFF0000E2ABFFFFEB006F +S31A5000116902A0E1040084E50330A0E31030C4E50000A0E370A8F1 +S31A5000117E1BE9030055E32300001AFF0000E2A1FFFFEB04309457 +S31A50001193E50020D4E5003083E1043084E5030052E10200000AC0 +S31A500011A82D00A0E3750800EBDCFFFFEA2B00A0E3720800EB08E5 +S31A500011BD2094E50230D2E53A0053E31000001A0000D2E50C6088 +S31A500011D294E56B0800EB083094E50100D3E5680800EB0500A071 +S31A500011E7E1060050E10700008A0210E0E3083094E50020D3E794 +S31A500011FC033080E0010080E20120C3E7060050E1F8FFFF9A01FF +S31A5000121100A0E370A81BE90000E0E30030A0E31030C4E570A85C +S31A500012261BE90DC0A0E1F0D92DE904B04CE20070A0E168809FD2 +S31A5000123BE52400A0E3500800EB0050A0E30540D7E70560A0E1BD +S31A50001250050054E10700000A0400A0E1490800EB016086E2045A +S31A500012653085E00640D7E7FF5003E2000054E3F7FFFF1A2300E8 +S31A5000127AA0E3410800EB2502D8E73F0800EB0F3005E20300D839 +S31A5000128FE73C0800EB52FFFFEB7F0000E22B0050E3E5FFFF1AE7 +S31A500012A4F0A91BE938FA00500DC0A0E1F0DF2DE990009FE50079 +S31A500012B920A0E38C309FE504D04DE2002083E504B04CE200106A +S31A500012CE90E503A0A0E1020051E14B0000DA0090A0E16C809F27 +S31A500012E3E56C309FE5002093E5000052E31900000A003090E506 +S31A500012F854109FE5030053E30300009A003098E5030013E30423 +S31A5000130D40A0030800000A30209FE5003092E50140A0E304003D +S31A5000132253E10300009A003091E5010013E30140A0130240A01C +S31A50001337032C004BE2001091E50420A0E1A00A00EB070000EA3E +S31A5000134C54AB0000F482000058AB000060AB0000003098E50006 +S31A5000136120D3E50140A0E32C204BE500309AE5000053E3240000 +S31A50001376001A03C0A0E104005CE1150000AA2C604BE270E09F06 +S31A5000138BE50A70A0E16C509FE50600DCE700109EE52032D5E76D +S31A500013A00130C1E4002097E500108EE5000052E31500001A0F7A +S31A500013B53000E20320D5E70120C1E400309AE500108EE50000E4 +S31A500013CA53E30E00001A01C08CE204005CE1EDFFFFBA0020998C +S31A500013DFE50900A0E1003098E5022064E0002089E5043083E0FC +S31A500013F4003088E5000052E3010000EA5CAB000038FA0050B593 +S31A50001409FFFFCAF0AF1BE90DC0A0E170D82DE904B04CE268C057 +S31A5000141E9FE500108CE564109FE5000081E560009FE50020807C +S31A50001433E55C209FE5000053E3003082E50C60A0E10A00000A9B +S31A500014484C409FE50050A0E3005084E5003094E593FFFFEB0078 +S31A5000145D2094E5003094E5050053E10200000A0500A0E170A8FF +S31A500014721BE98CFFFFEB002096E50030A0E30030C2E5000096DB +S31A50001487E570A81BE95CAB000058AB000054AB000060AB0000E5 +S31A5000149CF48200000DC0A0E1F0DF2DE924019FE524219FE504C6 +S31A500014B1D04DE20070A0E3007082E504B04CE2003090E50290EE +S31A500014C6A0E1070053E15A0000DA04319FE5002093E50010D298 +S31A500014DBE503A0A0E1070051E15400000AF0809FE5F0109FE58E +S31A500014F0003091E5000053E31000000A003090E5030053E303BA +S31A5000150500009A003098E5030013E30450A0030A00000AB4205C +S31A5000151A9FE5003092E50150A0E3050053E10500009A003098C7 +S31A5000152FE5010013E30150A0130250A003000000EA0150A0E3BE +S31A500015440040A0E3050054E1170000AA84609FE5003096E5016A +S31A5000155900D3E4003086E5ACFEFFEB0002A0E1003099E5FF70A1 +S31A5000156E00E2000053E33000001A00309AE50100D3E400308A8F +S31A50001583E5A3FEFFEB000087E1003099E5FF7000E2000053E3F0 +S31A500015982700001A2C304BE20370C4E7014084E2050054E1E837 +S31A500015ADFFFFBA2C109FE5003091E5000053E30900000A2C0040 +S31A500015C24BE2001098E50520A0E10C0A00EB060000EA54AB006E +S31A500015D700F482000058AB00005CAB000060AB0000003098E571 +S31A500015EC0070C3E5003099E5000053E30F00001A30309FE5008B +S31A500016012093E50300A0E1003098E5022065E0002080E5053094 +S31A5000161683E0003088E5000052E3050000DA00309AE50020D3B3 +S31A5000162BE5000052E3000000EA54AB0000ABFFFF1AF0AF1BE9EB +S31A500016400DC0A0E170D82DE904B04CE25CC09FE500008CE55848 +S31A50001655009FE5001080E554109FE5002081E550209FE50000CF +S31A5000166A53E3003082E50060A0E10A00000A40409FE50050A05F +S31A5000167FE3005084E5003094E584FFFFEB002094E5003094E50C +S31A50001694050053E10200000A0500A0E170A81BE97DFFFFEB009E +S31A500016A90096E570A81BE958AB00005CAB000054AB000060AB2B +S31A500016BE0000F48200000DC0A0E100D82DE904B04CE2800800A5 +S31A500016D3EB08209FE50130A0E3003082E500A81BE9D8820000C4 +S31A500016E80DC0A0E170D82DE904B04CE20060A0E30150A0E10054 +S31A500016FD6085E50040A0E1060000EA003095E5016086E2002074 +S31A5000171294E5033280E1003085E5012082E2002084E500209401 +S31A50001727E50030D2E5000053E30300000A0300A0E136FEFFEBA6 +S31A5000173C000050E3F0FFFFAA0600A0E170A81BE90DC0A0E17016 +S31A50001751D82DE904B04CE202E0A0E10060A0E3004051E20400A0 +S31A50001766001A3030A0E30130C0E40030C0E50200A0E370A81BB9 +S31A5000177BE907308EE2000053E3073083B2C3E1B0E11300000A7F +S31A5000179050509FE501104EE28131A0E134C3B0E10020A003010A +S31A500017A520A01301005EE30030A0130130A003032092E1060071 +S31A500017BA000AFFC00CE22C32D5E70130C0E40F200CE20230D5FA +S31A500017CFE7026086E20130C0E400E051E2ECFFFF1A0600A0E18B +S31A500017E470A81BE938FA00500DC0A0E110D82DE90010A0E18897 +S31A500017F9309FE504B04CE2002093E500E0A0E30E0052E11C0097 +S31A5000180E00DA74409FE500C094E50E005CE10300000A0100A02B +S31A50001823E30FE0A0E10CF0A0E100E0A0E101005EE30200001ACB +S31A5000183850309FE500E0C3E510A81BE9003094E501007EE300F2 +S31A5000184D0053130B00001A38309FE5003093E5000053E30700D4 +S31A50001862000A0100A0E30FE0A0E103F0A0E1000050E302000074 +S31A500018770A18209FE50130A0E30030C2E510A81BE9F4400100C4 +S31A5000188C00830000F8820000E8400100FC8200000DC0A0E110EF +S31A500018A1D82DE974409FE50030D4E504B04CE2000053E30B00AA +S31A500018B6000A64309FE500C093E500005CE30700000A58309FF6 +S31A500018CBE50000A0E3002093E50010A0E10FE0A0E10CF0A0E134 +S31A500018E00030A0E30030C4E53C409FE50030D4E5000053E308EA +S31A500018F500000A30309FE5003093E5000053E30400000A0000AE +S31A5000190AA0E30FE0A0E103F0A0E10030A0E30030C4E510A81BAC +S31A5000191FE9F882000000830000F4400100FC820000E84001009B +S31A500019340DC0A0E170D82DE9B8209FE5003092E504B04CE200B7 +S31A500019490053E30200000A003092E50FE0A0E103F0A0E19C20AA +S31A5000195E9FE5003092E5000053E30300000A0030A0E30030824B +S31A50001973E50250A0E3020000EA610D00EB4E0D00EB0050A0E1F3 +S31A500019886B0F00EB000050E30000000A730F00EB630F00EBBECA +S31A5000199DFFFFEB450F00EB0300A0E3A70800EB0300A0E3720897 +S31A500019B200EB48609FE5000055E30600000A40409FE5003094A3 +S31A500019C7E50500A0E10FE0A0E103F0A0E1000050E3F9FFFF1A22 +S31A500019DC4E0F00EB003096E5000053E30200000A003096E50FB1 +S31A500019F1E0A0E103F0A0E170A81BE9EC820000D8410100E882A8 +S31A50001A060000DC8200000DC0A0E1F0DD2DE904B04CE224D04DC3 +S31A50001A1BE20050A0E10040A0E348604BE2F4A09FE500309AE54E +S31A50001A300180A0E3000053E30500000A0400A0E10610A0E10FD7 +S31A50001A45E0A0E103F0A0E10080A0E1020000EA0400A0E13A06AF +S31A50001A5A00EB48000BE50600A0E1103044E2070053E303E0A051 +S31A50001A6FE1017084E21100008A0840A0E30020A0E302C0A0E108 +S31A50001A8444004BE20010A0E1043082E2012082E203C0C1E70469 +S31A50001A990052E1FAFFFFBA0010A0E106C0A0E10320A0E301304E +S31A50001AAEDCE4012042E20130C1E4010072E3FAFFFF1A00005832 +S31A50001AC3E30700000A0510A0E107005EE30C20A0930420A08340 +S31A50001AD80030A0E34BFEFFEB0050A0E1100000EA0520A0E10745 +S31A50001AED005EE31730A0930730A083010073E37810A0E3030014 +S31A50001B02000A013043E20110C2E4010073E3FBFFFF1A07005E92 +S31A50001B17E30200009A085085E2010000EAEC400100185085E23E +S31A50001B2C0740A0E1190054E3BCFFFFDAF0AD1BE90DC0A0E1F0C3 +S31A50001B41D92DE904B04CE20CD04DE20040A0E31A70A0E301305C +S31A50001B56D0E40180A0E124000BE5500053E31700001A24004B34 +S31A50001B6BE228104BE2DCFEFFEB040050E10800000A24201BE579 +S31A50001B800130D2E4FF3003E224200BE53D0053E30200001A2814 +S31A50001B95401BE5017084E2090000EA74209FE50030D2E50810C4 +S31A50001BAAA0E1000053E32900000A0130C1E40130F2E5000053B5 +S31A50001BBFE3FBFFFF1A240000EA0450A0E1070055E1180000AAE3 +S31A50001BD40060A0E32C104BE2104045E2070054E32C600BE50C1D +S31A50001BE920A0930420A08324001BE50630A0E190FEFFEB2C1068 +S31A50001BFE1BE50500A0E1D70500EB070054E30300009A24301BE5 +S31A50001C13E5083083E2020000EA4CFA005024301BE5183083E261 +S31A50001C28015085E224300BE5070055E1E7FFFFBA28209FE500AD +S31A50001C3D30D2E50810A0E1000053E30300000A0130C1E4013072 +S31A50001C52F2E5000053E3FBFFFF1A0030A0E30030C1E50000007E +S31A50001C67EA50FA0050F0A91BE90DC0A0E1F0D82DE9D4239FE54A +S31A50001C7C04B04CE2C0D04DE20040A0E10070A0E30030D4E502BD +S31A50001C9160A0E10070C2E53F3043E23B0053E303F19F971702A8 +S31A50001CA600EA981D0050082500503C1E0050D8230050682200E8 +S31A50001CBB500825005008250050082500508C1F0050B0230050D9 +S31A50001CD0082500500825005008250050082500507020005008CD +S31A50001CE5250050082500508C1F0050241E00500825005068220E +S31A50001CFA0050C42300500825005008250050082500506C2000F5 +S31A50001D0F500825005008250050082500500825005008250050A8 +S31A50001D2408250050082500500825005008250050802400506804 +S31A50001D39220050F01D00500825005008250050301E00500825AB +S31A50001D4E0050082500500825005090230050082500509C1F00A5 +S31A50001D6350082500500825005008250050181E0050A8230050AD +S31A50001D786822005008250050082500500825005008250050082A +S31A50001D8D25005008250050D41D00505A0C00EB470C00EB5330A6 +S31A50001DA2A0E30030C6E50020A0E30320C6E5A0129FE54032A0BF +S31A50001DB7E10F3003E20320D1E70F0000E20030D1E70120C6E53C +S31A50001DCC0230C6E5D00100EA0600A0E1021BA0E32020A0E359D1 +S31A50001DE1FEFFEB0030A0E30030C6E7C90100EA64129FE5003041 +S31A50001DF6D1E50620A0E1000053E3AE01000A0130C2E40130F13D +S31A50001E0BE5000053E3FBFFFF1AA90100EA010084E2890200EBCD +S31A50001E20BC0100EA010084E2EC0200EBB90100EA0600A0E1F451 +S31A50001E35FEFFEBB60100EA0130D4E5000053E30A00001AFC0178 +S31A50001E4A00EB0C129FE50030D1E50620A0E1000053E397010045 +S31A50001E5F0A0130C2E40130F1E5000053E3FBFFFF1A920100EA6A +S31A50001E74A4704BE2A0504BE2013084E2A0300BE50500A0E107C1 +S31A50001E8910A0E115FEFFEB000050E32400000AA0201BE501300E +S31A50001E9ED2E4FF3003E2A0200BE52C0053E31E00001A0500A020 +S31A50001EB3E1A8104BE20AFEFFEB000050E31900000AA0201BE5F6 +S31A50001EC80130D2E4FF3003E2A0200BE52C0053E31300001AA4D1 +S31A50001EDD101BE5000051E30B00000AA8001BE5EB0100EB0010B2 +S31A50001EF250E20300000AA0001BE5A4201BE50030A0E3CDFDFF66 +S31A50001F07EBA4201BE5A0301BE5823083E0A0300BE5A0201BE55B +S31A50001F1C0030D2E52C0053E301308202D4FFFF0AA0301BE500B0 +S31A50001F3120D3E5000052E30900001A1C119FE50030D1E5062058 +S31A50001F46A0E1000053E35B01000A0130C2E40130F1E5000053E2 +S31A50001F5BE3FBFFFF1A560100EAF8109FE50030D1E50620A0E1CB +S31A50001F70000053E35101000A0130C2E40130F1E5000053E3FB65 +S31A50001F85FFFF1A4C0100EA0400A0E10610A0E1E8FEFFEB5E0157 +S31A50001F9A00EAAC504BE20500A0E1013084E2AC300BE5B0104BD5 +S31A50001FAFE2CCFDFFEB000050E31B00000AAC201BE50130D2E427 +S31A50001FC4FF3003E2AC200BE52C0053E31500001A0500A0E1B417 +S31A50001FD9104BE2C1FDFFEB000050E31000000AB0001BE50610A5 +S31A50001FEEA0E1B4201BE50130A0E304FDFFEB000050E34401001C +S31A500020031A5C109FE50030D1E50620A0E1000053E32901000A71 +S31A500020180130C2E40130F1E5000053E3FBFFFF1A240100EA30F7 +S31A5000202D109FE50030D1E50620A0E1000053E31F01000A013096 +S31A50002042C2E40130F1E5000053E3FBFFFF1A1A0100EA54A30041 +S31A500020570038FA005054FA005050FA005084FA005088FA0050C4 +S31A5000206C0170A0E3B8504BE20500A0E1013084E2B8300BE5BC2F +S31A50002081104BE297FDFFEB000050E36B00000AB8201BE5013088 +S31A50002096D2E4FF3003E2B8200BE52C0053E36500001A0500A0C7 +S31A500020ABE1C0104BE28CFDFFEB000050E36000000AB8001BE524 +S31A500020C00130D0E4FF3003E2B8000BE53A0053E35A00001A0030 +S31A500020D50057E33E00000AC0301BE5000053E32400000A9C50DE +S31A500020EA4BE2C0301BE50040A0E3030054E11100002A0510A083 +S31A500020FFE1B8201BE50130D2E40430C1E7FF3003E2B8200BE51E +S31A500021147D0053E30300001A0130D2E4203083E30430C5E7B85B +S31A50002129200BE5014084E27F0054E30200008AC0301BE503005F +S31A5000213E54E1EEFFFF3A0500A0E1BC101BE50420A0E12B0700B2 +S31A50002153EB040050E10700001AC0201BE5BC301BE5022064E0AE +S31A50002168C0200BE5043083E0BC300BE5000052E3DBFFFF1AC0E1 +S31A5000217D301BE5000053E30900001A50139FE50030D1E506207B +S31A50002192A0E1000053E3C800000A0130C2E40130F1E500005328 +S31A500021A7E3FBFFFF1AC30000EA2C139FE50030D1E50620A0E1DA +S31A500021BC000053E3BE00000A0130C2E40130F1E5000053E3FBAB +S31A500021D1FFFF1AB90000EABC101BE5C0201BE50130A0E315FD76 +S31A500021E6FFEB000050E30900000AE8129FE50030D1E50620A034 +S31A500021FBE1000053E3AE00000A0130C2E40130F1E5000053E396 +S31A50002210FBFFFF1AA90000EAC4129FE50030D1E50620A0E100D6 +S31A500022250053E3A400000A0130C2E40130F1E5000053E3FBFF5C +S31A5000223AFF1A9F0000EAA0129FE50030D1E50620A0E100005381 +S31A5000224FE39A00000A0130C2E40130F1E5000053E3FBFFFF1A76 +S31A50002264950000EA013084E2C4300BE5C4504BE20020D4E500FB +S31A5000227930A0E3C8300BE5530052E3430052130700001A050009 +S31A5000228EA0E1C8104BE213FDFFEBC4201BE50030D2E53B00530C +S31A500022A3E301308202C4300B050500A0E1CC104BE20BFDFFEBB3 +S31A500022B8000050E30100000ACC001BE5170B00EB0300A0E35EC0 +S31A500022CD0600EB0300A0E3290600EBC8001BE5000050E3080012 +S31A500022E2000A00229FE5003092E5000053E30400000A00309234 +S31A500022F7E50FE0A0E103F0A0E1000050E3C8000B05C8501BE590 +S31A5000230C000055E30300000A0900A0E3C8000BE5B20000EB7EC2 +S31A500023210000EA680D00EB000050E30400000A6330A0E3003080 +S31A50002336C4E5B0219FE5623043E2003082E50030D4E553005361 +S31A5000234BE3730053130600001A0500A0E123FDFFEB90219FE586 +S31A5000236090319FE5003082E59D0C00EB010000EA0100A0E31C17 +S31A50002375FDFFEB0300A0E3320600EB0300A0E3FD0500EB0000FA +S31A5000238AE0E3640000EA64319FE5002093E50FE0A0E102F0A024 +S31A5000239FE10100A0E35E0000EA940500EB590000EA010084E2F8 +S31A500023B40610A0E14B2FA0E3D30200EB540000EA010084E206BF +S31A500023C910A0E14B2FA0E3B80200EB4F0000EAD0004BE201300F +S31A500023DE84E2D0300BE5D4104BE2BEFCFFEB000050E31800003E +S31A500023F30AD0201BE50130D2E4FF3003E2D0200BE52C0053E348 +S31A500024081200001A0130D2E4D0200BE5430053E30200001AD40D +S31A5000241D001BE5960600EB010000EAD4001BE58E0600EBA810D7 +S31A500024329FE50030D1E50620A0E1000053E31E00000A0130C2DD +S31A50002447E40130F1E5000053E3FBFFFF1A190000EAA0109FE5BF +S31A5000245C0030D1E50620A0E1000053E31400000A0130C2E4015C +S31A5000247130F1E5000053E3FBFFFF1A0F0000EAD8004BE2013082 +S31A5000248684E2D8300BE5DC104BE294FCFFEB000050E30B0000BC +S31A5000249B1A60109FE50030D1E50620A0E1000053E30300000AF8 +S31A500024B00130C2E40130F1E5000053E3FBFFFF1A0030A0E300E7 +S31A500024C530C2E5120000EA0C009FE554FBFFEBDC001BE5C3036E +S31A500024DA00EB0D0000EA50FA005088FA00508CFA0050E482000D +S31A500024EF002C8300000C83000000410100E082000084FA0050D2 +S31A5000250490FA00500400A0E10610A0E14B2FA0E34F0600EB0633 +S31A5000251900A0E141FBFFEB0000A0E3F0A81BE90DC0A0E110D85B +S31A5000252E2DE914409FE504B04CE20410A0E13A0500EB0400A00F +S31A50002543E137FBFFEB10A81BE954A300000DC0A0E110D82DE931 +S31A5000255838309FE5002093E504B04CE2000052E3000000AAEDE6 +S31A5000256DFFFFEB24409FE50400A0E1BDFAFFEB0400A0E1BAFDD0 +S31A50002582FFEB000050E3F9FFFF0A0000A0B30100A0A310A81B66 +S31A50002597E9F0820000549B00000DC0A0E100D82DE904B04CE271 +S31A500025AC00A81BE90DC0A0E100D82DE904B04CE240FCFFEBDCF8 +S31A500025C10400EB2B00A0E36E0300EB00A81BE90DC0A0E100D8E4 +S31A500025D62DE908309FE504B04CE2000083E500A81BE9F0820060 +S31A500025EB000DC0A0E100D82DE93C109FE55830A0E30030C1E598 +S31A500026000020A0E30320C1E504B04CE228C09FE54032A0E10FB3 +S31A500026153003E20320DCE70F0000E20030DCE70120C1E5023082 +S31A5000262AC1E50100A0E1FCFAFFEB00A81BE954A3000038FA0068 +S31A5000263F500DC0A0E100D82DE938209FE538109FE50030E0E309 +S31A50002654003082E530309FE50020A0E3002081E5002083E524CB +S31A50002669109FE524309FE5003081E504B04CE21C209FE5013031 +S31A5000267EA0E3003082E500A81BE9B8AB0000B4AB000064AB005A +S31A50002693003CAC0000BCAB0000048300000DC0A0E130D82DE99A +S31A500026A89C309FE504B04CE20040A0E1002093E50150A0E1006A +S31A500026BD0052E30000001ADDFFFFEB120054E3070000CA7830DB +S31A500026D29FE578109FE5002093E503C0A0E1022061E005208227 +S31A500026E7E0800052E30100009A0000A0E330A81BE958E09FE53D +S31A500026FC00309EE5030054E10B00000A4C009FE5003090E548B6 +S31A50002711109FE5030054E1030000BA012084E20030A0E3023167 +S31A5000272681E7002080E500408EE500309CE5043181E700309C8E +S31A5000273BE50300A0E1053083E000308CE530A81BE9048300002E +S31A500027503CAC0000BCAB0000B8AB0000B4AB000064AB00000DF1 +S31A50002765C0A0E1F0DD2DE904B04CE204D04DE20060A0E17400AB +S31A5000277A9FE50150A0E1001090E50240A0E168A09FE500005179 +S31A5000278FE31300001A0130A0E3003080E558709FE558809FE5DE +S31A500027A40130A0E1031CA0E10800A0E303E1A0E101C083E281E1 +S31A500027B920A0E1073022E0000051E30320A0B10210A0E101009F +S31A500027CE50E2F8FFFF1A0C30A0E10E2088E7FF0053E3F0FFFFE1 +S31A500027E39A14709FE50030A0E300308AE5080000EA088300001A +S31A500027F8F4820000B71DC10440AC000025305BE5243C23E00380 +S31A5000280D2197E7016086E2044422E0015045E2010075E30600D7 +S31A50002822000A25004BE20610A0E10120A0E3650500EB00309A95 +S31A50002837E5000053E3F0FFFF0A0400A0E1F0AD1BE90DC0A0E1AF +S31A5000284C70D82DE968319FE504B04CE20CD04DE21C000BE500AD +S31A5000286120A0E30020C3E500C0A0E10020DCE50350A0E1430068 +S31A5000287652E33700001A0130DCE5520053E33400001A0260DC6B +S31A5000288BE5430056E33100001A0330DCE53A0053E32E00001A8A +S31A500028A01C404BE20400A0E104308CE21C300BE520104BE28BF9 +S31A500028B5FBFFEB000050E34600000A1C201BE50130D2E4FF30FE +S31A500028CA03E21C200BE52C0053E34000001A0400A0E124104BD2 +S31A500028DFE280FBFFEB000050E33B00000A20001BE524101BE57B +S31A500028F40020E0E399FFFFEBC0309FE5004093E50010A0E10057 +S31A500029090054E30B00000AB0209FE50030D2E50510A0E1000046 +S31A5000291E53E30300000A0130C1E40130F2E5000053E3FBFFFFFE +S31A500029331A0030A0E30030C1E5260000EA010085E22020A0E35B +S31A500029487FFBFFEB0060C5E5010080E20040C5E71F0000EA1C42 +S31A5000295D301BE50300A0E10120D0E44C0052E30210A0E106006C +S31A50002972000A020000CA430052E30B00000A110000EA500051FB +S31A50002987E30400000A0E0000EA0510A0E14B2FA0E3C60100EBB7 +S31A5000299C0E0000EA0510A0E14B2FA0E3040200EB0A0000EA055B +S31A500029B110A0E1022BA0E3110100EB060000EA54A30000F48220 +S31A500029C6000084FA00500300A0E10510A0E14B2FA0E3140500A8 +S31A500029DBEB70A81BE90DC0A0E100D82DE90030D0E504B04CE287 +S31A500029F0700053E30300001A18109FE54B2FA0E3420100EB00E2 +S31A50002A05A81BE908109FE54B2FA0E30B0500EB00A81BE954A383 +S31A50002A1A00000DC0A0E100D82DE9682080E2020050E104B04CF8 +S31A50002A2FE20300002A043091E4043080E4020050E1FBFFFF3A86 +S31A50002A4400A81BE90DC0A0E100D82DE94530A0E30130C0E43042 +S31A50002A5920A0E30120C0E4133043E20130C0E404B04CE200A8E3 +S31A50002A6E1BE90DC0A0E100D82DE94F30A0E30130C0E44B20A0DB +S31A50002A83E30120C0E404B04CE200A81BE90DC0A0E170D82DE906 +S31A50002A9804B04CE20060A0E10040A0E3005051E20700000A01B8 +S31A50002AAD00D6E4015045E257F9FFEB004084E1000055E304323F +S31A50002AC2A0E10340A011F7FFFF1A0400A0E170A81BE90DC0A017 +S31A50002AD7E130D82DE904B04CE20050A0E10140A0E10210A0E38B +S31A50002AECE7FFFFEB000084E5020085E230A81BE90DC0A0E13083 +S31A50002B01D82DE904B04CE20050A0E10140A0E10810A0E3DDFF8F +S31A50002B16FFEB000084E5080085E230A81BE90DC0A0E100D82D63 +S31A50002B2BE9FF0000E2613040E2050053E304B04CE20300008A18 +S31A50002B40573040E2003081E50100A0E300A81BE9413040E20523 +S31A50002B550053E337304092F8FFFF9A302040E2FF3002E2090088 +S31A50002B6A53E30100009A0000A0E300A81BE90100A0E3002081DB +S31A50002B7FE500A81BE90DC0A0E110D82DE90040A0E10100D4E494 +S31A50002B9404B04CE2E1FFFFEB0400A0E110A81BE90DC0A0E1009B +S31A50002BA9D82DE904B04CE218C09FE5FF3001E22322DCE701205A +S31A50002BBEC0E40F1001E20130DCE70130C0E400A81BE994FA0003 +S31A50002BD3500DC0A0E1F0D82DE904B04CE204D04DE20040A0E175 +S31A50002BE80060A0E30170A0E120504BE2030000EA20301BE501D2 +S31A50002BFD4084E20F3003E2066283E10000D4E50510A0E1C3FFC6 +S31A50002C12FFEB000050E3F6FFFF1A0400A0E1006087E5F0A81B28 +S31A50002C27E90DC0A0E1F0D82DE904B04CE20050A0E10170A0E188 +S31A50002C3C106085E2060055E10800002A0100D5E4F1F8FFEB005B +S31A50002C5140A0E10100D5E4EEF8FFEB040280E10100C7E40600B4 +S31A50002C6655E1F6FFFF3A0500A0E1F0A81BE90DC0A0E110D82D1A +S31A50002C7BE904B04CE20140A0E1241CA0E1C5FFFFEB2418A0E135 +S31A50002C90FF1001E2C2FFFFEB2414A0E1FF1001E2BFFFFFEBFFEA +S31A50002CA54004E20410A0E1BCFFFFEB10A81BE90DC0A0E130D852 +S31A50002CBA2DE904B04CE20150A0E10520A0E10130D2E40040A078 +S31A50002CCFE3040053E10300000A0130D2E4014084E2000053E3AE +S31A50002CE4FBFFFF1AC80054E3C840A0A3FF1004E2AAFFFFEB049C +S31A50002CF930A0E1014044E2000053E3080000DA0420A0E101306A +S31A50002D0ED5E4014044E2230053E3000053132A30A0030130C08D +S31A50002D23E4000052E3F6FFFFCA30A81BE90DC0A0E130D82DE926 +S31A50002D3804B04CE20150A0E1104080E2040050E10300002A0167 +S31A50002D4D10D5E493FFFFEB040050E1FBFFFF3A30A81BE90DC0C5 +S31A50002D62A0E100D82DE90330A0E30020A0E304B04CE2013043E8 +S31A50002D77E20120C0E4010073E3FBFFFF1A413CA0E10130C0E40D +S31A50002D8C4128A0E10120C0E44134A0E10130C0E40010C0E500AD +S31A50002DA1A81BE90DC0A0E100D82DE9040080E20310A0E304B02F +S31A50002DB64CE200C0A0E30120A0E1011041E20130D0E400005234 +S31A50002DCBE30CC483E1F9FFFFCA0C00A0E100A81BE90DC0A0E13E +S31A50002DE000D82DE90720A0E304B04CE20130D1E4012042E201E2 +S31A50002DF530C0E4010072E3FAFFFF1A00A81BE90DC0A0E130D835 +S31A50002E0A2DE904B04CE208D04DE20140A0E11C504BE20500A05E +S31A50002E1FE1B00700EB000050E30900000A5130A0E30130C4E4A2 +S31A50002E344320A0E30120C4E40500A0E1D7FFFFEB0010A0E104A9 +S31A50002E4900A0E188FFFFEB010000EA0400A0E1FAFEFFEB00409A +S31A50002E5EA0E10030A0E30030C4E530A81BE90DC0A0E110D82DBD +S31A50002E73E90010A0E104B04CE220D04DE218404BE20400A0E16F +S31A50002E88B4FFFFEB0400A0E130104BE2B80700EB000050E30370 +S31A50002E9D00000A28301BE50100A0E3000053E30000001A000094 +S31A50002EB2A0E310A81BE90DC0A0E130D82DE904B04CE204D04D07 +S31A50002EC7E20040A0E10150A0E118104BE23EFFFFEB000054E17A +S31A50002EDC0600000A18001BE5E0FFFFEB000050E30200000A0556 +S31A50002EF100A0E1DDFEFFEB010000EA0500A0E1D0FEFFEB0030D7 +S31A50002F06A0E30030C0E530A81BE90DC0A0E130D82DE90030E0B0 +S31A50002F1BE304B04CE20CD04DE20120D0E40150A0E120300BE594 +S31A50002F30670052E32100000A020000CA630052E30700000A2ECC +S31A50002F450000EA700052E32C00001A20104BE20AFFFFEB1C10D0 +S31A50002F5A4BE231FFFFEB2A0000EA0030D0E52D0053E306000063 +S31A50002F6F1A0130D0E5310053E30300001A08219FE50030A0E313 +S31A50002F84003082E5030000EAF8409FE50410A0E10EFFFFEB0412 +S31A50002F9920A0E1000092E5000050E30200000AAFFFFFEB0000DE +S31A50002FAE50E31300000A0500A0E1ACFEFFEB120000EAC8409FAB +S31A50002FC3E50410A0E101FFFFEB001094E51C004BE261FFFFEB23 +S31A50002FD8004094E5010074E30100000A000054E30200001A021D +S31A50002FED30A0E320300BE5050000EA0130A0E320300BE50200A1 +S31A5000300200EA0500A0E18EFEFFEB0050A0E120301BE5013083A8 +S31A50003017E2030053E303F19F971E0000EAAC3000503430005021 +S31A5000302C443000508030005058209FE558309FE5003082E519BD +S31A500030410000EA50409FE548109FE50400A0E171FEFFEB1C0050 +S31A500030564BE21A10A0E30420A0E1580700EB000050E30C000007 +S31A5000306B0A20309FE5004083E50500A0E17CFEFFEB090000EA97 +S31A500030800500A0E179FEFFEB060000EAF4400100F04001000C9C +S31A5000309583000000410100704101000500A0E167FEFFEB005034 +S31A500030AAA0E10030A0E30030C5E530A81BE90DC0A0E1F0DF2D87 +S31A500030BFE904B04CE208D04DE20160A0E10070A0E32C104BE296 +S31A500030D40240A0E1A9FEFFEB30104BE27BFEFFEB50509FE50544 +S31A500030E910A0E1CDFEFFEB1A4044E2049086E05130A0E3013087 +S31A500030FEC6E44D20A0E30120C6E40710A0E106A0A0E10A00A099 +S31A50003113E1A2FEFFEB0060A0E10680A0E13030A0E30130C6E440 +S31A500031280510A0E10600A0E1FEFEFFEB0060A0E1080000EA4026 +S31A5000313DB00000017087E20600A0E10410A0E1F7FEFFEB006042 +S31A50003152A0E10500A0E10410A0E11EFFFFEB090056E10D000022 +S31A500031672A30301BE5030057E10A0000AA3C409FE50510A0E1EE +S31A5000317C2C001BE50420A0E1E90600EB0030A0E32C300BE5033B +S31A500031910050E1E9FFFF1A313083E20030C8E50A00A0E1FF1064 +S31A500031A607E27DFEFFEB0030A0E30030C6E5000000EA48B00000 +S31A500031BB00F0AF1BE90DC0A0E130D82DE90030A0E304B04CE205 +S31A500031D024D04DE22C300BE528300BE524300BE50150A0E120A7 +S31A500031E5300BE538104BE242FEFFEB1C404BE20410A0E18AFE1A +S31A500031FAFFEB0400A0E134404BE20410A0E1DB0600EB000050A9 +S31A5000320FE33700000A7130A0E30130C5E47020A0E30120C5E455 +S31A5000322438101BE50500A0E190FEFFEB0410A0E1BDFEFFEB3887 +S31A50003239301BE50050A0E1020013E30600000A0210A0E388FE06 +S31A5000324EFFEB0210A0E352FEFFEB2C105BE550FEFFEB0050A0B8 +S31A50003263E138301BE5040013E30800000A28301BE5000053E31D +S31A500032780500000A0500A0E10410A0E37AFEFFEB28101BE5889D +S31A5000328DFEFFEB0050A0E138301BE5080013E30800000A243051 +S31A500032A21BE5000053E30500000A0500A0E10810A0E36EFEFFF0 +S31A500032B7EB24101BE57CFEFFEB0050A0E138301BE5100013E3EA +S31A500032CC0B00000A20301BE5000053E30800000A0500A0E11054 +S31A500032E110A0E362FEFFEB20101BE570FEFFEB010000EA05002D +S31A500032F6A0E1D2FDFFEB0050A0E10030A0E30030C5E530A81BE2 +S31A5000330BE90DC0A0E170D82DE904B04CE208D04DE20040A0E118 +S31A5000332020504BE20500A0E10160A0E10210A0E18AFEFFEB0533 +S31A5000333500A0E10410A0E10620A0E1B30600EB70A81BE90DC0E3 +S31A5000334AA0E100D82DE90C309FE5002093E504B04CE2000192DC +S31A5000335FE700A81BE90C8300000DC0A0E100D82DE90C309FE5E5 +S31A50003374002093E504B04CE2001182E700A81BE90C8300000DB2 +S31A50003389C0A0E100D82DE920309FE5182093E50010A0E1000095 +S31A5000339E92E5FF1001E20C3092E504B04CE20FE0A0E103F0A0C3 +S31A500033B3E100A81BE9500000000DC0A0E100D82DE91C309FE5C6 +S31A500033C8182093E5000092E5103092E504B04CE20FE0A0E10367 +S31A500033DDF0A0E1FF0000E200A81BE9500000000DC0A0E100D811 +S31A500033F22DE924309FE504B04CE218C093E500109CE50020A0FF +S31A50003407E10100A0E114309CE50010A0E30FE0A0E103F0A0E1BB +S31A5000341C00A81BE9500000000DC0A0E100D82DE9000050E304D6 +S31A50003431B04CE20F00000A70209FE5003092E5013043E20030F8 +S31A5000344682E5000053E3160000CA0030A0E3003082E554209F41 +S31A5000345BE5183092E5000093E5142093E50510A0E30FE0A0E136 +S31A5000347002F0A0E100A81BE930209FE5003092E5013083E200C1 +S31A500034853082E5010053E30600001A1C309FE5182093E500006E +S31A5000349A92E5143092E50410A0E30FE0A0E103F0A0E100A81B57 +S31A500034AFE910830000500000000DC0A0E100D82DE91C309FE5DA +S31A500034C4182093E5000092E5103092E504B04CE20FE0A0E1036A +S31A500034D9F0A0E1FF0000E200A81BE9500000000DC0A0E1F0DF1D +S31A500034EE2DE9FF1001E20D0051E304B04CE208D04DE26C0000D5 +S31A500035030A68319FE568219FE5000093E50010C2E70A0051E3BA +S31A50003518010080E2000083E50390A0E10100000A640050E36166 +S31A5000352D00001A44319FE5186093E500200FE100400FE1C040F0 +S31A5000354284E304F029E130200BE5000096E50C3096E52410A073 +S31A50003557E30FE0A0E103F0A0E1000096E54F80A0E30C3096E5BE +S31A5000356C0810A0E10FE0A0E103F0A0E1002099E50070A0E302E4 +S31A500035810057E1170000AAF0A09FE5E4209FE50730D2E72342F5 +S31A50003596DAE7000096E50F3003E20350DAE70C3096E50410A0EB +S31A500035ABE10FE0A0E103F0A0E1000096E5017087E20C3096E5E4 +S31A500035C00510A0E10FE0A0E103F0A0E1044088E0FF8004E20510 +S31A500035D55088E0003099E5FF8005E2030057E1E8FFFFBA0000E4 +S31A500035EA96E50C3096E52310A0E30FE0A0E103F0A0E17C309F5F +S31A500035FFE5000096E52812D3E70C2096E50FE0A0E102F0A0E183 +S31A5000361464209FE5000096E50F3008E20310D2E70C3096E50F0D +S31A50003629E0A0E103F0A0E1000096E5103096E50FE0A0E103F0C8 +S31A5000363EA0E129004BE529305BE52B0053E30F00000A29004BC0 +S31A50003653E20110A0E3380300EB000050E30700001A29305BE583 +S31A500036682D0053E3EFFFFF1AB5FFFFEA1483000050B000005009 +S31A5000367D000000A8FA005028209FE50130A0E3443082E5002075 +S31A50003692A0E3002089E530201BE500300FE1C04002E2C030C3B5 +S31A500036A7E3043083E103F029E1000000EA50000000F0AF1BE963 +S31A500036BC0DC0A0E170D82DE904B04CE20160A0E10240A0E1046C +S31A500036D130A0E1014044E2000053E30050A0E10600000A01104E +S31A500036E6D6E40500A0E17DFFFFEB0430A0E1014044E200005364 +S31A500036FBE3F8FFFF1A70A81BE90DC0A0E170D82DE904B04CE2C7 +S31A500037100160A0E10240A0E10430A0E1014044E2000053E30057 +S31A5000372550A0E10600000A0500A0E160FFFFEB0430A0E1014093 +S31A5000373A44E20100C6E4000053E3F8FFFF1A70A81BE90DC0A084 +S31A5000374FE10E002DE900D82DE90000A0E310B04CE200A81BE9FF +S31A500037640DC0A0E170D82DE90000A0E304B04CE22AFFFFEBB422 +S31A50003779C09FE5B4509FE5B4E09FE5B4609FE50020A0E3B01006 +S31A5000378E9FE50C40A0E1000091E5023190E702318CE701208216 +S31A500037A3E20A0052E3FAFFFFDA001091E52C3091E52C308CE5A3 +S31A500037B8402091E530208CE5303091E534308CE5342091E53862 +S31A500037CD208CE5383091E53C308CE50000A0E33C3091E51C20A4 +S31A500037E28CE20C10A0E164308CE5400082E5042042E20100522A +S31A500037F7E1FBFFFFAA00309EE5004085E5000053E30400000A42 +S31A5000380C0030A0E300308EE50F00A0E3CAFEFFEBE00700EB0FD6 +S31A5000382100A0E3C7FEFFEBDD0700EB000086E570A81BE9004173 +S31A5000383601000C8300002C830000D8410100684101000DC0A0B7 +S31A5000384BE100D82DE904B04CE260109FE50000A0E301E0A0E188 +S31A5000386058C09FE500209EE500319CE7003182E7010080E20A03 +S31A500038750050E3F9FFFFDA001091E52C309CE52C3081E530206F +S31A5000388A9CE5402081E534309CE5303081E538209CE534208133 +S31A5000389FE53C309CE5383081E564209CE53C2081E50100A0E3D3 +S31A500038B4DAFEFFEB00A81BE968410100004101000DC0A0E10001 +S31A500038C9D82DE90000A0E304B04CE200A81BE90DC0A0E100D86F +S31A500038DE2DE930209FE530309FE530109FE5003082E52C309F5B +S31A500038F3E52C209FE5003081E528309FE528109FE5003082E5F0 +S31A5000390824309FE504B04CE2003081E500A81BE9E4820000C42E +S31A5000391D380050E0820000003A0050EC82000064370050E88208 +S31A500039320000483800500DC0A0E170D82DE99C209FE50060927C +S31A50003947E504B04CE2000056E32200001A0130A0E3003082E58E +S31A5000395C84509FE5CA0800EB343095E50000E0E30FE0A0E103D7 +S31A50003971F0A0E10040A0E1343095E50200E0E30FE0A0E103F0B3 +S31A50003986A0E1141095E558309FE558209FE5043081E554309FF2 +S31A5000399BE5082081E50C3081E54C209FE54C309FE5102081E526 +S31A500039B0143081E5020074E3000054130300000A343095E50453 +S31A500039C500A0E10FE0A0E103F0A0E1303095E50600A0E10FE0E2 +S31A500039DAA0E103F0A0E170A81BE91883000050000000BC360094 +S31A500039EF5004370050E8340050B83400504C3700500DC0A0E1C9 +S31A50003A0400D82DE918309FE5403093E504B04CE2000053E3019C +S31A50003A1900000A0FE0A0E103F0A0E100A81BE9500000000DC08B +S31A50003A2EA0E1F0D82DE95430A0E304B04CE208D04DE20150A0ED +S31A50003A43E10570A0E10040A0E10130C7E44402A0E15AF5FFEBA4 +S31A50003A580100C5E5017087E20400A0E156F5FFEB0100C7E474A4 +S31A50003A6D30A0E30130C7E46820A0E30120C7E4023043E2013000 +S31A50003A82C7E4032042E20120C7E4113043E20130C7E401204276 +S31A50003A97E20120C7E43A50A0E30150C7E4F80400EB00C0A0E1E5 +S31A50003AAC20004BE24C3CA0E120304BE54C28A0E11F204BE5076E +S31A50003AC110A0E11DC04BE54C34A0E11E304BE50420A0E30030A6 +S31A50003AD6A0E34CF6FFEB0070A0E13B40A0E30140C7E40000A05B +S31A50003AEBE334F5FFEB0100C7E40F00A0E331F5FFEB0100C7E480 +S31A50003B000150C7E40F00A0E30EFEFFEB0710A0E10420A0E30097 +S31A50003B1530A0E324000BE524604BE20600A0E139F6FFEB0070BD +S31A50003B2AA0E10140C7E40000A0E322F5FFEB0100C7E40D00A0E6 +S31A50003B3FE31FF5FFEB0100C7E40150C7E40D00A0E3FCFDFFEB1F +S31A50003B540710A0E10420A0E324000BE50030A0E30600A0E12851 +S31A50003B69F6FFEB0070A0E10140C7E40030A0E30030C7E5F0A80D +S31A50003B7E1BE90DC0A0E100D82DE904B04CE2030050E300F19FF4 +S31A50003B9397280000EA3C3C0050A83B0050BC3B0050E83B005069 +S31A50003BA8101F11EE011A81E3031081E3101F01EE1F0000EA1057 +S31A50003BBD1F11EE011AC1E3101F01EE151F07EE0000A0E10000F8 +S31A50003BD2A0E10000A0E10000A0E10000A0E10000A0E1140000EF +S31A50003BE7EA0E02A0E3021A80E2202090E4000031E1FCFFFF1A9E +S31A50003BFC160F07EE9A0F07EE0000A0E10000A0E10000A0E10023 +S31A50003C1100A0E10000A0E10000A0E1151F07EE151F08EE000072 +S31A50003C26A0E10000A0E10000A0E10000A0E10000A0E10000A00E +S31A50003C3BE1100F11EE2006A0E1010000E200A81BE90DC0A0E19B +S31A50003C5000D82DE904B04CE2030050E300F19F97190000EACC0D +S31A50003C653C0050743C0050843C0050983C0050101F11EE0F10E7 +S31A50003C7A81E3101F01EE110000EA101F11EE0C10C1E3101F0144 +S31A50003C8FEE161F07EE0C0000EA0E02A0E3021A80E2202090E4F7 +S31A50003CA4000031E1FCFFFF1A160F07EE9A0F07EE0000A0E10056 +S31A50003CB900A0E10000A0E10000A0E10000A0E10000A0E1100FFC +S31A50003CCE11EE2001A0E1010000E200A81BE90DC0A0E170D82D98 +S31A50003CE3E9D0209FE5D0409FE504B04CE2CCC09FE50130A0E3DF +S31A50003CF800308CE5C4309FE50260A0E1003082E50C50A0E100F1 +S31A50003D0D3094E504C0A0E1000053E32200000A04E0A0E1003066 +S31A50003D229EE5030053E30900009A030011E30700001A030010AC +S31A50003D37E30500001A043090E4043081E400209EE5042042E2F3 +S31A50003D4C00208EE5110000EA00309CE5010053E30900009A01F2 +S31A50003D610011E30700001A010010E30500001AB230D0E0B2305B +S31A50003D76C1E000309CE5023043E200308CE5040000EA0120D0B9 +S31A50003D8BE40120C1E400309EE5013043E200308EE5003094E5CE +S31A50003DA0000053E3DDFFFF1A0030A0E3003085E50030A0E3008D +S31A50003DB53086E570A81BE91C830000B4B00000F4820000B03D86 +S31A50003DCA00500DC0A0E130D82DE90030A0E10100A0E10310A0EC +S31A50003DDFE118409FE50250A0E1005084E504B04CE2B9FFFFEBAC +S31A50003DF4000094E5050060E030A81BE9B4B000000DC0A0E130E8 +S31A50003E09D82DE918409FE50250A0E1005084E504B04CE2AEFF69 +S31A50003E1EFFEB000094E5050060E030A81BE9B4B000000DC0A0E4 +S31A50003E33E100D82DE90000A0E304B04CE200A81BE90DC0A0E1F6 +S31A50003E4800D82DE90000A0E304B04CE200A81BE90DC0A0E100C2 +S31A50003E5DD82DE90000A0E304B04CE200A81BE90DC0A0E100D8D5 +S31A50003E722DE90100A0E304B04CE200A81BE90DC0A0E100D82D6A +S31A50003E87E90100A0E304B04CE200A81BE90DC0A0E100D82DE999 +S31A50003E9C04B04CE2A7F2FFEB00A81BE90DC0A0E110D82DE9045A +S31A50003EB1B04CE200300FE100400FE1C04084E304F029E10820EB +S31A50003EC69FE50130A0E3003082E5FEFFFFEA0000039010A81B76 +S31A50003EDBE90DC0A0E100D82DE904B04CE2EEFFFFEB0000A0E31B +S31A50003EF000A81BE90DC0A0E100D82DE90000A0E304B04CE2001A +S31A50003F05A81BE90DC0A0E170D82DE904B04CE20040A0E1000056 +S31A50003F1AA0E30160A0E30010A0E1020074E30D00000A020000D2 +S31A50003F2FCA030074E30F00000A100000EA010074E30E00001A70 +S31A50003F44BC309FE5003093E5000053E3016043E20B0000CA0366 +S31A50003F5960A0E10260E003080000EAA0309FE598209FE518003D +S31A50003F6E83E5004082E5030000EA0040A0E1000000EA0140847C +S31A50003F83E20110A0E3000051E31B00000A74509FE5183095E5FA +S31A50003F98000053E30400000A000093E5143093E50410A0E30FA0 +S31A50003FADE0A0E103F0A0E154309FE548209FE5843283E018307F +S31A50003FC285E5004082E5183095E5000050E30500000A000093EC +S31A50003FD7E5143093E50510A0E30FE0A0E103F0A0E1040000EA74 +S31A50003FEC000093E5143093E50410A0E30FE0A0E103F0A0E106B5 +S31A5000400100A0E170A81BE92083000050000000B8B000000DC08F +S31A50004016A0E100D82DE90010A0E304B04CE201C0A0E3020070A5 +S31A5000402BE30D00000A020000CA030070E30F00000A100000EAFB +S31A50004040010070E30E00001A64309FE5003093E5000053E301A2 +S31A50004055C043E20B0000CA03C0A0E102C0E003080000EA4830F3 +S31A5000406A9FE540209FE5141083E5000082E5030000EA0100A002 +S31A5000407FE1000000EA010080E20110A0E3000051E30500000AD1 +S31A5000409418309FE51C209FE5000083E510309FE5802282E014F1 +S31A500040A92083E50C00A0E100A81BE92483000050000000B8B08C +S31A500040BE00000DC0A0E100D82DE904B04CE200A81BE90DC0A060 +S31A500040D3E100D82DE904B04CE200A81BE90DC0A0E110D82DE9D9 +S31A500040E804B04CE22C409FE5E60600EB303094E50000E0E30F19 +S31A500040FDE0A0E103F0A0E1000050E30300000A343094E5000066 +S31A50004112A0E30FE0A0E103F0A0E110A81BE9500000000DC0A062 +S31A50004127E110D82DE9FF1000E258309FE504B04CE2142093E5C3 +S31A5000413C0340A0E1000052E30400000A000092E50C3092E50FD8 +S31A50004151E0A0E103F0A0E1040000EA182094E5000092E50C30DC +S31A5000416692E50FE0A0E103F0A0E1443094E5000053E30300006D +S31A5000417B0A0000A0E37D0000EB0030A0E3443084E510A81BE998 +S31A50004190500000000DC0A0E100D82DE904B04CE200A81BE90D9D +S31A500041A5C0A0E110D82DE90030A0E350209FE504B04CE204D013 +S31A500041BA4DE214300BE518E092E500309EE50020A0E10300A0D1 +S31A500041CFE10130A0E118C09EE514104BE20FE0A0E10CF0A0E159 +S31A500041E414301BE50040A0E1000053E30200000A10309FE50065 +S31A500041F90093E55E0000EB0400A0E1010000EA50000000DC41BD +S31A5000420E010010A81BE90DC0A0E1F0D82DE9E8009FE5E8609F09 +S31A50004223E50020A0E3E4509FE504B04CE2E0709FE50510A0E1A4 +S31A500042380231A0E1012082E2030081E73F0052E3FAFFFFDAC869 +S31A5000424DC09FE50030A0E3B0009FE5011083E28332A0E1072008 +S31A50004262A0E303008CE7012052E2043083E2FBFFFF5A0130A0E6 +S31A50004277E1020053E3F5FFFFDA98209FE51330A0E3003085E55A +S31A5000428C042085E58C309FE58C209FE5083085E5402085E584D9 +S31A500042A1309FE584209FE5103085E5482085E57C309FE530609A +S31A500042B685E578209FE5347085E5203085E50140E0E31C20858A +S31A500042CBE50400A0E10FE0A0E106F0A0E10400A0E10FE0A0E142 +S31A500042E007F0A0E10030A0E3243085E5283085E54C3085E5449E +S31A500042F53085E53C0085E2720200EB34309FE58C3085E5F0A81C +S31A5000430A1BE9F43E0050083F00505000000014400050B8B000CF +S31A5000431F000480000020000000A83E0050DC3E0050943E0050CD +S31A50004334C0400050D0400050285800500DC0A0E100D82DE90062 +S31A500043490051E304B04CE20700000A011041E20130D0E70300C3 +S31A5000435E53E30100001A0100A0E300A81BE9000051E3F7FFFF4A +S31A500043731A0000A0E300A81BE90DC0A0E100D82DE9000050E327 +S31A500043881C109FE504B04CE23810901514309FE58C2093E5015E +S31A5000439D00A0E10FE0A0E102F0A0E100A81BE9A843005050001A +S31A500043B200000DC0A0E130D82DE90020E0E304B04CE258C09FB8 +S31A500043C7E50040A0E100309CE50150A0E1140053E30600001AF8 +S31A500043DC18309CE5000093E5142093E50610A0E30FE0A0E1027E +S31A500043F1F0A0E10020A0E1020054E10400001A0400A0E1051060 +S31A50004406A0E165FFFFEB000050E30200001A0400A0E10510A0F3 +S31A5000441BE112F1FFEB30A81BE9500000000DC0A0E110D82DE9F0 +S31A50004430FF0000E204B04CE20040A0E10A0054E30100001A0D34 +S31A5000444500A0E335FFFFEB0400A0E133FFFFEB10A81BE90DC041 +S31A5000445AA0E110D82DE90040A0E10030D4E504B04CE200005399 +S31A5000446FE30400000A0000D4E5EAFFFFEB0130F4E5000053E325 +S31A50004484FAFFFF1A10A81BE90DC0A0E100D82DE90030A0E31000 +S31A5000449910A0E32B20A0E304D04DE200308DE504B04CE244008C +S31A500044AE00EB00A81BE90DC0A0E1F0DF2DE904B04CE224D04DB6 +S31A500044C3E20150A0E10040A0E129104BE24C300BE548A04BE232 +S31A500044D804309BE50A00A0E1000053E32090A0033090A013013D +S31A500044ED9041E4000051E1FCFFFFAA0080A0E3053094E1030029 +S31A50004502001A3030A0E348304BE5018088E2150000EA053094F6 +S31A50004517E11300000A0260A0E10070A0E30510A0E10400A0E14A +S31A5000452C0730A0E10620A0E1CF2B00EB68309FE50010D3E708F2 +S31A5000454110CAE70730A0E10620A0E10510A0E10400A0E1018053 +S31A5000455688E2632A00EB0150A0E10040A0E1053094E1EDFFFFF0 +S31A5000456B1A08309BE5080053E10380A0A14C301BE52D0053E334 +S31A500045800600001A013048E20320DAE7090052E10380A0014CC5 +S31A50004595301BE50830CAE7050000EA018048E2030000EABCFA65 +S31A500045AA00500800DAE7018048E29BFFFFEB000058E3FAFFFF2B +S31A500045BFAAF0AF1BE90DC0A0E100D82DE908D04DE200308DE55F +S31A500045D404B04CE204309BE501C0A0E104308DE50010A0E30269 +S31A500045E930A0E10C20A0E1AFFFFFEB00A81BE90DC0A0E100D89F +S31A500045FE2DE9000050E304B04CE201C0A0E31500000A0010A014 +S31A50004613E10030D1E5000053E31000000A44E09FE5013060E00C +S31A500046280E0053E10020D1E500C0A0A30D0052E30A0052130259 +S31A5000463D00000A203042E25E0053E300C0A083011081E20000A9 +S31A500046525CE30200000A0030D1E5000053E3EFFFFF1A0C00A0E3 +S31A50004667E100A81BE9010100000DC0A0E1F0DF2DE904B04CE244 +S31A5000467C0CD04DE20060A0E12C100BE5DAFFFFEB004050E2176F +S31A5000469101001AA4039FE56EFFFFEB0600A0E179FFFFEB98039D +S31A500046A69FE56AFFFFEB2000A0E35CFFFFEB2C301BE5040193F6 +S31A500046BBE772FFFFEB014084E2070054E3F7FFFFDA74039FE5A3 +S31A500046D060FFFFEB090100EA0040D6E5250054E30200000A04DB +S31A500046E500A0E14EFFFFEBFF0000EA0070A0E32BC0A0E3014027 +S31A500046FAF6E50710A0E1300054E30090A0130190A00330304460 +S31A5000470FE2090053E30600008A073187E0833084E00140F6E5BC +S31A50004724307043E2302044E2090052E3F8FFFF9A6C0054E3037B +S31A5000473900001A0140F6E56C0054E30110A0030140F6052530F7 +S31A5000474E44E2530053E303F19F97E00000EAD44A0050E04A00C5 +S31A5000476350E04A0050E04A0050E04A0050E04A0050E04A005039 +S31A50004778E04A0050E04A0050E04A0050E04A0050E04A0050E094 +S31A5000478D4A0050E04A0050E04A0050E04A0050E04A0050E04A15 +S31A500047A20050E04A0050E04A0050E04A0050E04A0050E04A004A +S31A500047B750E04A0050E04A0050E04A0050E04A0050E04A0050E5 +S31A500047CCE04A0050A44A005060490050AC480050E04A0050E033 +S31A500047E14A0050E04A0050E04A0050E04A0050E04A0050E04AC1 +S31A500047F60050E04A0050E04A0050E04A0050E04A0050E04A00F6 +S31A5000480B50E04A0050E04A00507C490050E04A0050E04A0050F5 +S31A50004820E04A0050E04A005008490050E04A0050E04A0050E0C4 +S31A500048354A0050E04A0050E04A0050E04A0050E04A0050E04A6C +S31A5000484A0050E04A0050A44A005060490050AC480050E04A0094 +S31A5000485F50E04A0050E04A0050E04A0050E04A0050E04A00503C +S31A50004874E04A0050E04A0050E04A0050E04A0050E04A0050E097 +S31A500048894A0050E04A0050E04A00507C490050E04A0050E04A7D +S31A5000489E0050E04A0050E04A005008490050000051E30B00008B +S31A500048B30A2C301BE50300B3E82C300BE5000051E3020000AA6A +S31A500048C8000070E20010E1E22DC0A0E30A20A0E300908DE50C35 +S31A500048DD30A0E1100000EA2C301BE5040093E42C300BE50000A2 +S31A500048F250E3000060B22DC0A0B30A10A0E30C20A0E11000007C +S31A50004907EA000051E30900000A00908DE50C30A0E12CC01BE569 +S31A5000491C0300BCE82CC00BE51020A0E304708DE5016086E2DF6C +S31A50004931FEFFEB6E0000EA0C20A0E12CC01BE504009CE410109E +S31A50004946A0E32CC00BE50930A0E100708DE5016086E219FFFF2B +S31A5000495BEB640000EA2C301BE50000D3E5043083E22C300BE5BF +S31A50004970016086E2ABFEFFEB5D0000EA0050A0E32CC01BE50575 +S31A5000498580A0E104409CE405A0A0E12CC00BE5050054E1AC40DA +S31A5000499A9F050C00000A0400A0E113FFFFEB000050E30800003C +S31A500049AF1A98009FE50A90A0E1A6FEFFEB0400A0E1B1FEFFEBA0 +S31A500049C4193047E2190057E30370A0C17C409FE50530D4E701BE +S31A500049D96086E2000053E30300000A015085E20530D4E70000C0 +S31A500049EE53E3FBFFFF1A000057E3070055110750A0C10000595D +S31A50004A03E30780651007A065000830A0E1018048E2000053E3C3 +S31A50004A1801704AE2050000DA2000A0E37FFEFFEB0830A0E101F3 +S31A50004A2D8048E2000053E3F9FFFFCA0030D4E5080000EAD0FAD8 +S31A50004A420050E8FA0050ECFA0050F0FA0050F8FA00500CFB00CE +S31A50004A57500000D4E571FEFFEB0130F4E5000053E30200000A46 +S31A50004A6C015045E2010075E3F7FFFF1A0A30A0E107A0A0E1001C +S31A50004A810053E31A0000DA2000A0E365FEFFEB0A30A0E101A054 +S31A50004A964AE2000053E3F9FFFFCA130000EA000057E32C301BE4 +S31A50004AABE5014047121F40A003005093E55534A0E1010013E356 +S31A50004AC02E00A0033100A01356FEFFEB014044E2F8FFFFEA252C +S31A50004AD500A0E352FEFFEB030000EA2500A0E34FFEFFEB0400E9 +S31A50004AEAA0E14DFEFFEB016086E20030D6E5000053E3F5FEFFCF +S31A50004AFF1AF0AF1BE90DC0A0E10F002DE900D82DE914B04CE23C +S31A50004B1420D04DE208309BE50C209BE504009BE52C300BE528BB +S31A50004B29200BE510309BE514209BE524300BE520200BE51830E1 +S31A50004B3E9BE51C209BE51C300BE518200BE520309BE524209BBD +S31A50004B53E514300BE510200BE52C104BE2C2FEFFEB00A81BE9FF +S31A50004B680DC0A0E1F0DF2DE904B04CE20060A0E1060051E106AE +S31A50004B7D7041800170A091000057E30290A0E13B0000DA000098 +S31A50004B9259E30300000AE4009FE5061069E0D7FFFFEB020000E6 +S31A50004BA7EAD4009FE50610A0E1D3FFFFEB0050A0E3108047E282 +S31A50004BBC10A086E2070055E1030000AAB8009FE50510D6E7CBB3 +S31A50004BD1FFFFEB010000EAAC009FE5C8FFFFEBC54FA0E10530FA +S31A50004BE664E00130C3E3053063E0010053E30100001A90009F50 +S31A50004BFBE5C0FFFFEBA43EA0E1033085E00730C3E3053063E071 +S31A50004C10070053E30100001A70009FE5B8FFFFEB015085E20F85 +S31A50004C250055E3E4FFFFDA60009FE5B3FFFFEB0050A0E30700D6 +S31A50004C3A55E1040000AA0510D6E7203041E25E0053E32E10A074 +S31A50004C4F83000000EA2010A0E338009FE5A8FFFFEB015085E2D5 +S31A50004C640F0055E3F2FFFFDA28009FE5A3FFFFEB0A60A0E100B1 +S31A50004C797058E2C3FFFFCAF0AF1BE910FB005018FB005020FB1F +S31A50004C8E005024FB005028FB00502CFB005030FB00500DC0A02A +S31A50004CA3E100D82DE90020A0E304B04CE2ACFFFFEB00A81BE911 +S31A50004CB80DC0A0E100D82DE904B04CE205FDFFEB00A81BE90DCE +S31A50004CCDC0A0E100D82DE908309FE504B04CE2000083E500A89F +S31A50004CE21BE918B100000DC0A0E100D82DE930109FE530309F9B +S31A50004CF7E5000081E5002093E5002092E504B04CE2000052E3C1 +S31A50004D0C0100001A0200A0E100A81BE90200A0E30FE0A0E102FB +S31A50004D21F0A0E100A81BE91CB1000018B100000DC0A0E100D84E +S31A50004D362DE934309FE504B04CE230C09FE507008CE800209390 +S31A50004D4BE5002092E5000052E30100001A0200A0E100A81BE902 +S31A50004D600300A0E30C10A0E10FE0A0E102F0A0E100A81BE9181E +S31A50004D75B100001CB100000DC0A0E100D82DE934309FE504B07D +S31A50004D8A4CE230C09FE503008CE8002093E5002092E500005224 +S31A50004D9FE30100001A0200A0E100A81BE90400A0E30C10A0E158 +S31A50004DB40FE0A0E102F0A0E100A81BE918B100001CB100000D62 +S31A50004DC9C0A0E100D82DE934309FE504B04CE230C09FE507000B +S31A50004DDE8CE8002093E5002092E5000052E30100001A0200A0D5 +S31A50004DF3E100A81BE90500A0E30C10A0E10FE0A0E102F0A0E1C0 +S31A50004E0800A81BE918B100001CB100000DC0A0E100D82DE9348D +S31A50004E1D309FE504B04CE230C09FE507008CE8002093E50020ED +S31A50004E3292E5000052E30100001A0200A0E100A81BE90700A078 +S31A50004E47E30C10A0E10FE0A0E102F0A0E100A81BE918B1000028 +S31A50004E5C1CB100000DC0A0E12034A0E1FF3C03E2203C83E1001B +S31A50004E71D82DE90024A0E1FF2802E2023083E1000C83E104B07E +S31A50004E864CE200A81BE90DC0A0E100D82DE904B04CE208D04DA4 +S31A50004E9BE214004BE290FFFFEB000050E30300000A10001BE5C0 +S31A50004EB0EAFFFFEB0008A0E12008A0E100A81BE90DC0A0E10098 +S31A50004EC5D82DE9030040E204B04CE2040050E300F19F97080027 +S31A50004EDA00EAF04E0050F04E0050F04E0050F84E0050F84E00FD +S31A50004EEF500A00A0E300A81BE90200A0E300A81BE90500A0E316 +S31A50004F0400A81BE90DC0A0E100D82DE90C309FE5002093E504FE +S31A50004F19B04CE2440092E500A81BE9684101000DC0A0E100D818 +S31A50004F2E2DE90010A0E10F00A0E304B04CE209F9FFEB00A81B4E +S31A50004F43E90DC0A0E110D82DE904B04CE20040A0E11900A0E38F +S31A50004F58FAF8FFEB0020A0E3244EA0E10F0054E304F19F9756B5 +S31A50004F6D0000EAB04F0050BC4F0050C44F0050D04F0050D84F4C +S31A50004F820050E04F0050EC4F0050F84F0050085000501C5000BF +S31A50004F97502C5000504C5000506C50005098500050C050005003 +S31A50004FACC8500050202FA0E1012002E2430000EA202FA0E10D53 +S31A50004FC10000EAA02EA0E1012002E23E0000EAA02EA0E10800C8 +S31A50004FD600EAA02FA0E13A0000EA0020E0E1A22FA0E1370000A8 +S31A50004FEBEA202EA0E1012002E2340000EA202EA0E1012022E28B +S31A50005000012002E2300000EA062200E2020252E30020A013010F +S31A5000501520A0032B0000EA062200E2022252E20120A0132700FB +S31A5000502A00EA092200E2000052E30030A0130130A003090252DB +S31A5000503FE30320A0110120A0031F0000EA092200E2010252E33D +S31A500050540030A0130130A003020152E30320A0110120A0031753 +S31A500050690000EA093200E2000053E309025313202FA0E101203D +S31A5000507E22E20030A0130130A003000053E3012002120020A0E1 +S31A50005093030C0000EA093200E2010253E302015313202FA0E12A +S31A500050A80030A0130130A003000053E3012002020120A01302B5 +S31A500050BD0000EA0120A0E3000000EA0020A0E30200A0E110A832 +S31A500050D21BE90DC0A0E130D82DE904B04CE20050A0E10F00053C +S31A500050E7E296F8FFEB0040A0E1100015E30200001A3E3D05E2BD +S31A500050FCC303A0E1020000EA0F0C05E22004A0E18DF8FFEB60A0 +S31A500051113005E2C332A0E1030053E303F19F97130000EA3451C1 +S31A5000512600503C510050445100504C5100501440A0E10D00003D +S31A5000513BEA3440A0E10B0000EA5440A0E1090000EA000050E3FA +S31A500051500600001AA440A0E11900A0E379F8FFEB020210E3027F +S31A500051653184E30340A011000000EA7440A0E10400A0E130A8D7 +S31A5000517A1BE90DC0A0E1F0D82DE904B04CE20040A0E10150A006 +S31A5000518FE1033305E2233DA0E1030053E303F19F97B90000EAD0 +S31A500051A4B451005034530050E853005044530050D8229FE5FF85 +S31A500051B932C5E3020053E10200001A0F0005E25EF8FFEBF0A891 +S31A500051CE1BE9047084E20F3A05E20F0A53E35200001AB0329F2C +S31A500051E3E5B0229FE5033005E0020053E14D00000A0F0805E283 +S31A500051F82008A0E151F8FFEB0060A0E1020415E30400001A056E +S31A5000520D0AA0E1200AA0E1AEFFFFEB0040A0E1030000EAFF407C +S31A5000522205E20F3C05E2A333A0E17443A0E11E3605E2A33AA0C1 +S31A50005237E10F0053E303F19F97390000EA845200508C52005045 +S31A5000524C945200509C520050A4520050AC520050C8520050EC99 +S31A500052615200502C5300502C5300502C5300502C5300501053A1 +S31A500052760050185300502053005028530050047006E0270000B3 +S31A5000528BEA047026E0250000EA067064E0230000EA047066E0C4 +S31A500052A0210000EA047086E01F0000EA1900A0E324F8FFEBA073 +S31A500052B50EA0E1010000E2043086E0007083E0180000EA190094 +S31A500052CAA0E31DF8FFEBA00EA0E1010000E2063064E00000501B +S31A500052DFE30370A011017043020F0000EA1900A0E314F8FFEB1C +S31A500052F4A00EA0E1010000E2043066E0000050E30370A011016B +S31A50005309704302060000EA047086E1040000EA0470A0E10200D4 +S31A5000531E00EA0470C6E1000000EA0470E0E10700A0E1F0A81BC5 +S31A50005333E964219FE5023005E0020053E10100001A040084E24B +S31A50005348F0A81BE9010615E3FBFFFF0A0F3A05E20F0A53E3F8E5 +S31A5000535DFFFF1A0F4805E22408A0E1F6F7FFEB083080E20F085A +S31A5000537254E30060A0110360A001010415E31600000A0204154C +S31A50005387E30900001A020515E30300000A053AA0E1233AA0E10B +S31A5000539C036086E00E0000EA053AA0E1233AA0E1066063E00A94 +S31A500053B10000EA020515E30400000A050AA0E1200AA0E142FF1E +S31A500053C6FFEB006086E0030000EA050AA0E1200AA0E13DFFFF69 +S31A500053DBEB066060E0000096E5F0A81BE9027415E21A00001A1E +S31A500053F0010615E3D2FFFF0A020915E3D0FFFF0A0F4805E2243C +S31A5000540508A0E1CEF7FFEB083080E20F0854E30060A0110360A8 +S31A5000541AA00107C0A0E10C20A0E178309FE5020505E20310055F +S31A5000542FE05132A0E1010013E301C08C12012082E20E0052E310 +S31A50005444F9FFFFDA000050E30C618610E2FFFF1A046046E2E090 +S31A50005459FFFFEA0500A0E1B7FEFFEB000050E3B5FFFF0AFF34B8 +S31A5000546EC5E30311A0E1020515E33F0381E308008012080081CE +S31A5000548302000084E0F0A81BE90000A0E3F0A81BE910FF2F015E +S31A500054980000BF0F00000F0110000002FFFF00000DC0A0E170FD +S31A500054ADD82DE90118A0E14128A0E1211EA0E1041041E204B077 +S31A500054C24CE20060A0E1023086E2015083E30B0051E301F19F4F +S31A500054D7973E0000EA0C550050D8550050D8550050D855005083 +S31A500054ECD8550050D8550050D8550050D8550050D855005038AC +S31A500055015500506C550050A45500500228A0E1C8309FE52208EF +S31A50005516A0E1033002E0470453E32C00001A780000E2A001A032 +S31A5000552BE185F7FFEB0050A0E1270000EA0238A0E10F0403E239 +S31A500055400002A0E12348A0E17DFEFFEB000050E32000000AFFD0 +S31A500055553004E28300A0E1800014E3800BE011A00BE011090039 +S31A5000556A00EA0238A0E1020313E32318A0E11600001A813AA0EF +S31A5000557FE1A33AA0E18300A0E1010B11E3800AE011A00AE01168 +S31A50005594043080E2033086E0015083E30C0000EA3E1BE0E302B2 +S31A500055A928A0E1013802E02302A0E1010312E38004E011A0041B +S31A500055BEE011B230D6E1013003E0830080E1042080E2022086D2 +S31A500055D3E0015082E30500A0E170A81BE9000087FF0DC0A0E161 +S31A500055E830D82DE90F00A0E304B04CE253F7FFEB0040A0E119B8 +S31A500055FD00A0E350F7FFEB200010E30600000A0400A0E1B01027 +S31A50005612D0E1A3FFFFEB88309FE5000083E580109FE50F000029 +S31A50005627EA005094E50500A0E143FEFFEB000050E30600000A71 +S31A5000563C0400A0E10510A0E15C409FE5CBFEFFEB000084E5505C +S31A50005651109FE5030000EA48209FE5043084E20210A0E1003024 +S31A5000566682E5004091E5010014E30600000A30309FE50120C4EB +S31A5000567BE3B000D2E128109FE5B000C3E1B010C2E130A81BE92F +S31A500056901C309FE5002094E518109FE5002083E5001084E53069 +S31A500056A5A81BE9288300002CB10000BEBEFFFF28B10000FEDE37 +S31A500056BAFFE70DC0A0E100D82DE944309FE50300A0E100109344 +S31A500056CFE504B04CE2000051E30B00000A010011E30400000A5D +S31A500056E428209FE5B020D2E10130C1E3B020C3E1020000EA18BF +S31A500056F9309FE5002093E5002081E50030A0E3003080E500A884 +S31A5000570E1BE9288300002CB1000028B100000DC0A0E100D82D78 +S31A50005723E904B04CE200A81BE90DC0A0E100D82DE904B04CE286 +S31A5000573800A81BE90DC0A0E100D82DE90F00A0E304B04CE2FDAD +S31A5000574DF6FFEB0C309FE5030050E10000A0130100A00300A81E +S31A500057621BE9A40800500DC0A0E110D82DE90F00A0E304B04CFE +S31A50005777E2F2F6FFEB0040A0E11900A0E3EFF6FFEB200010E3D4 +S31A5000578C02408412044084020F00A0E30410A0E1F1F6FFEB1008 +S31A500057A1A81BE90DC0A0E100D82DE96C309FE504B04CE200C0F3 +S31A500057B693E500005CE30100000A0000A0E300A81BE954209F84 +S31A500057CBE5001092E50130C1E3030050E10E00001A010011E3E1 +S31A500057E00200000AB430D2E1B030C0E1010000EA043092E500A4 +S31A500057F53080E50030A0E3003082E50300A0E310F9FFEB0300EE +S31A5000580AA0E3DBF8FFEB0100A0E300A81BE90C00A0E100A81B73 +S31A5000581FE92C83000030B100000DC0A0E130D82DE984209FE511 +S31A500058340030A0E380509FE504B04CE2001095E50040A0E100D5 +S31A500058493082E5030051E10100000A0100A0E1D1FFFFEB0030B1 +S31A5000585E95E5000053E31300001A1900A0E3B5F6FFEB200010A1 +S31A50005873E30600000A013084E3003085E53C209FE5B030D4E130 +S31A50005888B430C5E1B020C4E1040000EA004085E528209FE50052 +S31A5000589D3094E5043085E5002084E50300A0E3E6F8FFEB03007F +S31A500058B2A0E3B1F8FFEB30A81BE92C83000030B10000BEBEFF8E +S31A500058C7FFFEDEFFE70DC0A0E100D82DE910309FE5000093E53D +S31A500058DC04B04CE2000050E20100A01300A81BE930B100000DFF +S31A500058F1C0A0E100D82DE9001090E50000A0E30C0081E51C3057 +S31A50005906A0E31C3081E50820A0E3002081E504B04CE204008169 +S31A5000591BE5173043E2083081E5052042E20C2081E500A81BE9AB +S31A500059300DC0A0E100D82DE9000090E5FF1001E2203090E504A0 +S31A50005945B04CE2040013E30200001A203090E5040013E3FCFF49 +S31A5000595AFF0A141080E500A81BE90DC0A0E100D82DE9000090D8 +S31A5000596FE5203090E504B04CE2023013E20500000A143090E552 +S31A500059840030C1E50420A0E31C2080E50100A0E300A81BE90367 +S31A5000599900A0E100A81BE90DC0A0E130D82DE904B04CE204D054 +S31A500059AE4DE20050A0E115404BE20500A0E10410A0E1E7FFFF0C +S31A500059C3EB000050E3FAFFFF0A15005BE530A81BE90DC0A0E1DA +S31A500059D870D82DE904B04CE20160A0E10240A0E10430A0E101C9 +S31A500059ED4044E2000053E30050A0E10600000A0110D6E4050002 +S31A50005A02A0E1C9FFFFEB0430A0E1014044E2000053E3F8FFFFBE +S31A50005A171A70A81BE90DC0A0E170D82DE904B04CE20160A0E17E +S31A50005A2C0240A0E10430A0E1014044E2000053E30050A0E10623 +S31A50005A4100000A0500A0E1D4FFFFEB0430A0E1014044E2010090 +S31A50005A56C6E4000053E3F8FFFF1A70A81BE90DC0A0E1F0D82D96 +S31A50005A6BE904B04CE20050A0E1043095E50160A0E13C709FE574 +S31A50005A80033183E08340A0E1030000EA483097E56400A0E30F09 +S31A50005A95E0A0E103F0A0E10500A0E10610A0E1AEFFFFEB00001D +S31A50005AAA50E30200001A014044E2010074E3F3FFFF1AF0A81BC5 +S31A50005ABFE9500000000DC0A0E10E002DE910D82DE910B04CE2E5 +S31A50005AD404309BE50040A0E3043043E2030053E303F19F971E16 +S31A50005AE90000EA245B0050FC5A0050505B00505C5B005054207D +S31A50005AFE9FE50130A0E3003082E5001090E50C3091E50830837C +S31A50005B13E30C3081E5080090E5E1EBFFEB100000EA2C209FE5A5 +S31A50005B28004092E50030A0E3003082E5001090E50C3091E508D2 +S31A50005B3D30C3E30C3081E5080090E5CAEBFFEB050000EA084032 +S31A50005B5290E5030000EA4883000008309BE5044090E504308096 +S31A50005B67E50400A0E110A81BE90DC0A0E170D82DE904B04CE21F +S31A50005B7C04D04DE200C090E520409CE514309CE519304BE50463 +S31A50005B9120A0E31C208CE50050A0E3080090E50160A0E18300A4 +S31A50005BA600EB005086E5020014E30600000A19004BE20110A0EE +S31A50005BBBE3DFF9FFEB050050E10130A013003086150150A0E321 +S31A50005BD00500A0E170A81BE90DC0A0E170D82DE984509FE500C4 +S31A50005BE500E0E3343095E504B04CE20FE0A0E103F0A0E170403E +S31A50005BFA9FE50060A0E10400A0E139FFFFEB343095E50000A0B6 +S31A50005C0FE30FE0A0E103F0A0E1141095E550309FE550209FE5CD +S31A50005C24004081E5043081E548309FE5082081E50C3081E54069 +S31A50005C39209FE540309FE5102081E5143081E538209FE53830E4 +S31A50005C4E9FE5182081E51C3081E5342095E50600A0E10FE0A033 +S31A50005C63E102F0A0E170A81BE95000000030830000D4590050E6 +S31A50005C781C5A005030590050A0590050C45A0050705B005064EC +S31A50005C8D5A00500DC0A0E100D82DE91C209FE5003092E504B0AB +S31A50005CA24CE2000053E30200001A0130A0E3003082E5C7FFFF07 +S31A50005CB7EB00A81BE94C8300000DC0A0E130D82DE970E09FE5DC +S31A50005CCC00309EE504B04CE2000053E31700000A0E50A0E100A2 +S31A50005CE1000FE100400FE1C04084E304F029E100E095E5143035 +S31A50005CF69EE5003085E518109EE50020A0E318208EE500300FEE +S31A50005D0BE1C04000E2C030C3E3043083E103F029E100009EE5BC +S31A50005D2010209EE50CC09EE50FE0A0E10CF0A0E1003095E5007F +S31A50005D350053E3E8FFFF1A30A81BE938B100000DC0A0E100D8E2 +S31A50005D4A2DE904B04CE20C209FE5003092E5013083E200308257 +S31A50005D5FE500A81BE9E04101000DC0A0E110D82DE904B04CE2F8 +S31A50005D7434409FE5003094E5010053E30000001ACDFFFFEB001C +S31A50005D8930A0E3003084E51C309FE5002093E5000052E30200C4 +S31A50005D9E000A0130A0E3003084E5F2FFFFEA10A81BE9E041018B +S31A50005DB30038B100000DC0A0E100D82DE904B04CE243EBFFEB66 +S31A50005DC800A81BE90DC0A0E100D82DE904B04CE24BEBFFEB0086 +S31A50005DDDA81BE90DC0A0E1F0DF2DE90000E0E301DC4DE2C0618C +S31A50005DF29FE5343096E504B04CE20FE0A0E103F0A0E10090A0ED +S31A50005E07E1343096E50000A0E30FE0A0E103F0A0E19C019FE5E8 +S31A50005E1C9C319FE50050A0E3005083E5482096E590719FE50FC8 +S31A50005E31E0A0E102F0A0E1005087E584019FE584119FE58421AF +S31A50005E469FE584419FE50234A0E3003084E5D31000EB78019FEC +S31A50005E5BE5D11000EB74019FE5002094E5001097E56C419FE5DC +S31A50005E70CC1000EB68219FE568319FE50180A0E364A19FE54AFF +S31A50005E857F4BE2005083E5020054E10250A0E10300000A0FE048 +S31A50005E9AA0E104F094E4050054E1FBFFFF1A0A50A0E100609593 +S31A50005EAFE5000056E30F00000A30419FE530019FE5001094E51E +S31A50005EC4B71000EB0700A0E1002094E5011CA0E30040A0E382BB +S31A50005ED93262E0032182E0004085E58221A0E1161200EB020081 +S31A50005EEE70E30040850500608A15000058E30200000AF0009F57 +S31A50005F03E50080A0E3A61000EB0740A0E10400A0E1011CA0E3BD +S31A50005F18FA20A0E3091200EB000050E3050000AACC309FE50019 +S31A50005F2D2093E5000052E3EFFFFF0ADC1500EBEDFFFFEA06008E +S31A50005F42001A6C209FE5343092E50900A0E10FE0A0E103F0A062 +S31A50005F57E14EEAFFEBE5FFFFEA0400A0E1A41000EB000050E3B8 +S31A50005F6C0F0000DA88509FE50400A0E184409FE50510A0E1041E +S31A50005F8120A0E1210000EB003050E20400000A000095E504100A +S31A50005F96A0E10FE0A0E10CF093E5020000EA5C009FE50710A0B8 +S31A50005FABE17D1000EB0180A0E3CFFFFFEA50000000400D0300D7 +S31A50005FC0F04101008C42010004FC005034FC005040FC0050F425 +S31A50005FD54101004CFC005070FC0050948500009C8500008442CB +S31A50005FEA010094420100F84101007CFC0050B8FC0050CC43015E +S31A50005FFF008842010000420100C4FC0050F0AF1BE90DC0A0E128 +S31A50006014F0DD2DE904B04CE20040A0E10050A0E30170A0E102D4 +S31A5000602960A0E1D4809FE5D4A09FE5210000EA054186E720007D +S31A5000603E52E3015085E21A0000EA220053E31200001A052186D6 +S31A50006053E0043012E5040053E101408402044002050030D4E5A4 +S31A50006068000053E3220053130300000A0130F4E5000053E322A0 +S31A5000607D005313FBFFFF1A0030D4E5000053E30900001A780085 +S31A500060929FE5431000EB000000EA014084E20030D4E5FF200345 +S31A500060A7E2000052E30300000A200052E3E3FFFF1A0030A0E367 +S31A500060BC0130C4E40030D4E5000053E30800000A200053E30217 +S31A500060D100001A0130F4E5200053E3FCFFFF0A0030D4E5FF20DE +S31A500060E603E2000052E3D1FFFF1A005087E50800A0E100209651 +S31A500060FBE50A10A0E1030000EBF0AD1BE984840000F4840000AB +S31A50006110DCFC00500DC0A0E1F0DF2DE904B04CE20040A0E10224 +S31A5000612580A0E10800A0E101A0A0E1311000EB0450A0E10A0058 +S31A5000613A55E10090A0E12C00000A0800A0E1001095E50920A0A1 +S31A5000614FE1801000EB000050E32300001A000095E5251000EB7F +S31A50006164090050E11D0000DA0170A0E30A0054E11400000A044A +S31A500061790055E10F00000A0800A0E1001094E50920A0E171102F +S31A5000618E00EB006050E20900001A000057E30400000A58009FC7 +S31A500061A3E50810A0E1002095E50670A0E1FC0F00EB48009FE5C0 +S31A500061B8001094E5F90F00EB104084E20A0054E1EAFFFF1A0009 +S31A500061CD0057E30300001A2C009FE5F20F00EB0700A0E1F0AF4D +S31A500061E21BE90500A0E1F0AF1BE9105085E20A0055E1D2FFFF4E +S31A500061F71A0000A0E3F0AF1BE9F0FC005018FD00501CFD0050F3 +S31A5000620C0DC0A0E170D82DE904B04CE20040A0E10150A0E130D6 +S31A50006221009FE50260A0E1DE0F00EB050054E10700000A200068 +S31A500062369FE5002094E5083094E50610A0E1D70F00EB104084F3 +S31A5000624BE2050054E1F7FFFF1A70A81BE920FD005028FD0050BF +S31A500062600DC0A0E100D82DE90010C0E50C0080E904B04CE20487 +S31A50006275309BE50C3080E508209BE5102080E50C309BE5143030 +S31A5000628A80E500A81BE90DC0A0E1F0DF2DE904B04CE20CD04D5A +S31A5000629FE200C0A0E334C00BE50CE09BE501A0A0E32C000BE5DF +S31A500062B40A005EE100C0A01301C0A00308E09BE50180A0E130C5 +S31A500062C9300BE500005EE300C0A00300005CE334101B150010E3 +S31A500062DE8E1534301BE504C09BE530401BE50C0053E111000049 +S31A500062F3AA03C0A0E104009BE5103094E5000053E300C0831587 +S31A50006308041094E5000051E30600001A083094E5000053E30161 +S31A5000631D00000A020053E30100001A0C3094E5001083E5184033 +S31A5000633284E2010050E2EFFFFF1A2CE01BE50270A0E10E0057FC +S31A50006347E1870000AA071198E70030D1E52D0053E35300001A8C +S31A5000635C0050A0E330401BE50500A0E104209BE5016087E2019E +S31A5000637190D1E5020055E1440000AA0030D4E5030059E13C00F3 +S31A50006386001A103094E5000053E30600000A003093E500005398 +S31A5000639BE30300000A94019FE5141094E500A0A0E37D0F00EB57 +S31A500063B0043094E5000053E32000000A070198E70230D0E53DCA +S31A500063C50053E3035080020200000A073188E0017087E2045088 +S31A500063DA93E5082094E5000052E30200000A010052E30C0000BC +S31A500063EF0A0D0000EA0500A0E10C1094E50230A0E15D0000EB2C +S31A50006404006050E20700001A2C019FE50510A0E1142094E50680 +S31A50006419A0A0E1610F00EB010000EA0C3094E5005083E5102014 +S31A5000642E94E50130A0E3003082E5036087E00C0000EA083094B3 +S31A50006443E5000053E30200000A020053E30400000A060000EA91 +S31A500064580C2094E5003092E5013083E2010000EA0C2094E50166 +S31A5000646D30A0E3003082E50150A0E3040000EA010080E2043021 +S31A500064829BE5184084E2030050E1BAFFFFBA000055E330000063 +S31A500064971A0910A0E1A0009FE505A0A0E13F0F00EB2B0000EA4E +S31A500064AC08C09BE500005CE32400000A34E01BE500005EE30378 +S31A500064C100000A10109BE578009FE500A0A0E3340F00EB0C105D +S31A500064D69BE5000051E30200000A010051E30D00000A0F000040 +S31A500064EBEA08109BE50C209BE5070198E70230A0E11E0000EBD5 +S31A50006500004050E20800001A30009FE510209BE5071198E7049D +S31A50006515A0A0E1220F00EB020000EA073198E708209BE5003063 +S31A5000652A82E50130A0E334300BE5036087E0070000EA34FD00AB +S31A5000653F5044FD005060FD005074FD005020009FE5016087E234 +S31A50006554130F00EB08A09BE52CC01BE50670A0E10C0057E17709 +S31A50006569FFFFBA0A00A0E1000000EA84FD0050F0AF1BE90DC059 +S31A5000657EA0E1F0D92DE904B04CE200C0A0E10140A0E30A50A071 +S31A50006593E30060A0E30180A0E10270A0E10000DCE503E0A0E1BD +S31A500065A8200050E30200001A0130FCE5200053E3FCFFFF0A00AD +S31A500065BD30DCE5000053E33F00000A000054E30B00000AFF3088 +S31A500065D203E2300053E30800001A0130DCE5411043E2202083C6 +S31A500065E7E2FF2002E2190051E30230A091780053E31050A00303 +S31A500065FC02C08C020040A0E30110DCE40400A0E1302041E24117 +S31A500066113041E2050053E3090052830200009A613041E205005D +S31A5000662653E30000008A0100A0E3000050E31300000A0000A0D5 +S31A5000663BE3302041E2FF3002E2090053E30200A0910600009A79 +S31A50006650613041E2050053E3570041920200009A413041E20591 +S31A500066650053E337004192050050E1040000AA0030DCE595061A +S31A5000667A26E0000053E3D0FFFF1A0F0000EA00005EE30B00004C +S31A5000668F0A0E20A0E10030D2E5010000EA0130F2E5FF3003E2F9 +S31A500066A4000053E30100000A030051E1F9FFFF1A0030D2E5001D +S31A500066B90053E30100001A0000A0E3F0A91BE9006088E5000038 +S31A500066CE57E300C087150100A0E3F0A91BE90DC0A0E100D82D57 +S31A500066E3E90030D0E504B04CE2200053E30200001A0130F0E524 +S31A500066F8200053E3FCFFFF0A0000D0E5540050E30030A01301BD +S31A5000670D30A003740050E30130A003000053E30400001A460039 +S31A5000672250E3660050130200000A0300A0E100A81BE90130A003 +S31A50006737E3003081E50100A0E300A81BE90DC0A0E110D82DE902 +S31A5000674C020050E304B04CE20140A0E15A00001A040094E56CAC +S31A50006761119FE5CE0E00EB000050E31000001A00C00FE1004024 +S31A500067760FE1C04084E304F029E1101F11EE011A81E303108122 +S31A5000678BE3101F01EE101F11EE0F1081E3101F01EE00300FE1B3 +S31A500067A0C0400CE2C030C3E3043083E103F029E110A81BE904B5 +S31A500067B50094E518119FE5B80E00EB000050E33B00001A00C05A +S31A500067CA0FE100400FE1C04084E304F029E10E02A0E3021A80B0 +S31A500067DFE2202090E4000031E1FCFFFF1A160F07EE9A0F07EEDB +S31A500067F40000A0E10000A0E10000A0E10000A0E10000A0E100B5 +S31A5000680900A0E1101F11EE011AC1E3101F01EE151F07EE00006F +S31A5000681EA0E10000A0E10000A0E10000A0E10000A0E10000A0EA +S31A50006833E1101F11EE0C10C1E3101F01EE161F07EE0E02A0E350 +S31A50006848021A80E2202090E4000031E1FCFFFF1A160F07EE9AD9 +S31A5000685D0F07EE0000A0E10000A0E10000A0E10000A0E10000C8 +S31A50006872A0E10000A0E1151F07EE151F08EE0000A0E10000A045 +S31A50006887E10000A0E10000A0E10000A0E10000A0E1161F07EE97 +S31A5000689C171F08EE00300FE1C0400CE2C030C3E3043083E10326 +S31A500068B1F029E110A81BE91C009FE5041094E5380E00EB10A8B0 +S31A500068C61BE910009FE5350E00EB10A81BE9B0FD0050B4FD0037 +S31A500068DB50B8FD0050D0FD00500DC0A0E130D82DE934309FE58C +S31A500068F004B04CE230409FE50350A0E1030054E10700000A2426 +S31A50006905009FE5041094E5002094E5083094E5230E00EB104060 +S31A5000691A84E2050054E1F7FFFF1A30A81BE9F484000084840007 +S31A5000692F00DCFD00500DC0A0E130D82DE904B04CE208D04DE27F +S31A500069440050A0E1010055E30140A0E1020000CA64009FE51256 +S31A500069590E00EB1F0000EA18104BE20020A0E3040094E502302A +S31A5000696EA0E101FFFFEB000050E30300001A40009FE504109497 +S31A50006983E5070E00EB140000EA020055E30D0000DA1C104BE24C +S31A500069980020A0E3080094E50230A0E1F4FEFFEB000050E308A6 +S31A500069AD00001A10009FE5081094E5FA0D00EB070000EAECFD74 +S31A500069C2005004FE005020FE00502030A0E31C300BE518001B18 +S31A500069D7E51C101BE5221000EB30A81BE90DC0A0E170D82DE99F +S31A500069EC04B04CE23CD04DE23C304BE240204BE200308DE5005B +S31A50006A0140A0E104208DE530604BE284319FE50600A0E108301E +S31A50006A168DE50150A0E178319FE57710A0E300C093E50120A0A1 +S31A50006A2BE344C00BE50030A0E309FEFFEB0120A0E300208DE54F +S31A50006A4044304BE204308DE50010A0E308108DE548319FE50486 +S31A50006A5500A0E10C308DE50510A0E10630A0E109FEFFEB000069 +S31A50006A6A50E34D00000A40301BE5000053E30C00000A20019FBB +S31A50006A7FE544101BE53C201BE5C60D00EB38004BE23C201BE598 +S31A50006A940810A0E3823262E0032182E08221A0E1270F00EB0239 +S31A50006AA90070E33D00000A44301BE500C00FE100400FE1C04094 +S31A50006ABE84E304F029E10E02A0E3021A80E2202090E400003112 +S31A50006AD3E1FCFFFF1A160F07EE9A0F07EE0000A0E10000A0E1A9 +S31A50006AE80000A0E10000A0E10000A0E10000A0E1101F11EE0110 +S31A50006AFD1AC1E3101F01EE151F07EE0000A0E10000A0E1000027 +S31A50006B12A0E10000A0E10000A0E10000A0E1101F11EE0C10C109 +S31A50006B27E3101F01EE161F07EE0E02A0E3021A80E2202090E413 +S31A50006B3C000031E1FCFFFF1A160F07EE9A0F07EE0000A0E1008F +S31A50006B5100A0E10000A0E10000A0E10000A0E10000A0E1151F20 +S31A50006B6607EE151F08EE0000A0E10000A0E10000A0E10000A082 +S31A50006B7BE10000A0E10000A0E1161F07EE171F08EE0FE0A0E106 +S31A50006B9003F0A0E1030000EA40FE00509042010050FE005064D6 +S31A50006BA5FE005070A81BE90DC0A0E100D82DE908009FE504B09F +S31A50006BBA4CE2790D00EB00A81BE9D4FE00500DC0A0E1F0D92DBF +S31A50006BCFE904B04CE20150A0E10070A0E30530A0E1015045E29D +S31A50006BE4070053E10080A0E10260A0E1470000DA0FE0A0E1088E +S31A50006BF9F0A0E1FF4000E20FE0A0E108F0A0E10010A0E33020D3 +S31A50006C0E44E2413044E2050053E309005283FFE000E202000082 +S31A50006C239A613044E2050053E30000008A0110A0E3000051E328 +S31A50006C382F00000A00C0A0E330004EE2FF1000E241204EE2FF94 +S31A50006C4D3002E2050053E3090051830200009A61304EE205004E +S31A50006C6253E30000008A01C0A0E300005CE32100000A0774A03E +S31A50006C77E100C0A0E3301044E2FF3001E2090053E301C0A091E5 +S31A50006C8C0600009A613044E2050053E357C044920200009A4141 +S31A50006CA13044E2050053E337C044920010A0E3FF3000E209007D +S31A50006CB653E30010A0910600009A61304EE2050053E357104EAB +S31A50006CCB920200009AFF3002E2050053E337104E920C2281E12B +S31A50006CE0027087E1000056E30500000A003096E5023083E000E7 +S31A50006CF53086E5010000EA0000E0E3F0A91BE90530A0E1015047 +S31A50006D0A45E2000053E3B7FFFFCA0700A0E1F0A91BE90DC0A0B0 +S31A50006D1FE1F0DF2DE90120A0E304B04CE268D04DE288200BE5BE +S31A50006D340070A0E38C700BE50030E0E390300BE50790A0E180DA +S31A50006D49100BE50080A0E1930000EA530052E30300000A0402C6 +S31A50006D5E9FE50710A0E10F0D00EB910000EA0FE0A0E108F0A024 +S31A50006D73E1027087E200C0A0E10800A0E10110A0E37C204BE2D2 +S31A50006D880030A0E37C300BE5FF600CE28BFFFFEB004050E27CA2 +S31A50006D9DA04BE2030000AAC0019FE50710A0E1FD0C00EB7F00C1 +S31A50006DB200EA017087E2303046E2090053E303F19F976200005F +S31A50006DC7EA946F0050F06D0050F06D0050F06D0050546F00500A +S31A50006DDC546F0050546F0050206F0050206F0050206F00500881 +S31A50006DF100A0E12F1046E20A20A0E171FFFFEB0050A0E12F301A +S31A50006E0647E288201BE5067083E084500BE5000052E30A000074 +S31A50006E1B0A80301BE5000053E30400000A039065E03C019FE575 +S31A50006E300910A0E1DB0C00EB000000EA80901BE50020A0E38866 +S31A50006E45200BE524319FE5001093E5095085E090301BE50520CE +S31A50006E5A69E0030052E10230A03190300BE5010055E103000061 +S31A50006E6F3A00319FE5002093E5020055E10300009AF4009FE5E4 +S31A50006E840510A0E1C60C00EB480000EA2E3084E2034066E004CD +S31A50006E997087E00430A0E1014044E2000053E3080000DA08007B +S31A50006EAEA0E10110A0E30A20A0E142FFFFEB0430A0E101404454 +S31A50006EC3E20100C5E4000053E3F6FFFFCA0800A0E10110A0E3C7 +S31A50006ED80020A0E339FFFFEB017087E20000E0E17C205BE5FF14 +S31A50006EED3000E27C200BE5020053E10200000A84101BE578004E +S31A50006F029FE5A70C00EB8C201BE5053069E0020053E10320A0DF +S31A50006F17218C200BE51C0000EA0800A0E13B1066E20A20A0E185 +S31A50006F2C25FFFFEB4C309FE590201BE50050A0E144009FE500A3 +S31A50006F415083E58C301BE50510A0E1950C00EB170000EA071037 +S31A50006F56A0E12C009FE50620A0E1900C00EB120000EAF0FE0087 +S31A50006F6B501CFF005040FF00508C420100F441010058FF0050C5 +S31A50006F8094FF005090420100D0FF0050F8FF0050017087E20FA1 +S31A50006F95E0A0E108F0A0E10A0050E3FAFFFF1A0FE0A0E108F000 +S31A50006FAAA0E1002050E267FFFFCAF0AF1BE90DC0A0E130D82D54 +S31A50006FBFE9B4309FE504B04CE2085193E50340A0E1000055E367 +S31A50006FD42100001A143194E5000053E30900000A183194E590BE +S31A50006FE9209FE50310D2E78C009FE5013083E2183184E5690C00 +S31A50006FFE00EB183194E5060053E3185184850C3194E5FF0053C5 +S31A50007013E3060000CA143194E5000053E30100000A5C009FE580 +S31A500070285E0C00EB0000E0E330A81BE9043084E20300A0E101EA +S31A5000703D1CA0E3043184E5112E84E20FE0A0E100F094E50C0120 +S31A5000705284E5080184E5000050E3EDFFFFBA083194E5042194B5 +S31A50007067E5013043E2083184E50100D2E4042184E530A81BE9C0 +S31A5000707C3CB100005083000024000150280001500DC0A0E100AD +S31A50007091D82DE920309FE504B04CE200C0A0E308C183E5012C4F +S31A500070A6A0E30C2183E5000083E5141183E518C183E500A81B6E +S31A500070BBE93CB100000DC0A0E100D82DE914309FE5042083E207 +S31A500070D0042183E50C1193E504B04CE2081183E500A81BE93CE8 +S31A500070E5B100000DC0A0E1F0DD2DE90C20A0E304B04CE2C0D03D +S31A500070FA4DE20080A0E130604BE20600A0E10040A0E3B8400BF1 +S31A5000710FE50170A0E1D0400BE50410A0E1BF0C00EB0150A0E31F +S31A50007124BA524BE1BC424BE1B0304BE200308DE504A0A0E104C6 +S31A50007139A08DE538339FE50C20A0E3B8224BE17610A0E30830F4 +S31A5000714E8DE5AC404BE224339FE50400A0E114C093E50A20A0D5 +S31A50007163E130C00BE50230A0E33BFCFFEBB4304BE200308DE577 +S31A5000717894004BE200339FE57210A0E308308DE50A20A0E104D6 +S31A5000718DA08DE50230A0E331FCFFEBB8304BE200308DE5BC2026 +S31A500071A24BE204208DE57C004BE2D4329FE56210A0E308308DD2 +S31A500071B7E50520A0E10A30A0E126FCFFEBC0304BE200308DE55C +S31A500071CCC4204BE204208DE564004BE2AC329FE56D10A0E308B6 +S31A500071E1308DE50520A0E10530A0E11BFCFFEBC8304BE20030EF +S31A500071F68DE5CC204BE204208DE54C004BE284329FE56810A042 +S31A5000720BE308308DE50520A0E10530A0E110FCFFEB0530A0E381 +S31A5000722000308DE5D0204BE224008DE90800A0E15C329FE50708 +S31A5000723510A0E10C308DE50520A0E10430A0E111FCFFEB00005D +S31A5000724A50E3AB00000ACC301BE5000053E30800000AC8001BCA +S31A5000725FE50610A0E1B01100EB000050E30300001A20029FE5A6 +S31A50007274C8101BE5CA0B00EB9F0000EAC4301BE5000053E3164E +S31A5000728900000AC0001BE504129FE5020C00EB000050E301A069 +S31A5000729EA0031000000AC0001BE5F0119FE5FC0B00EB00005041 +S31A500072B3E30700001AE4319FE5002093E500A0A0E1000052E3E5 +S31A500072C80600001AD4019FE5B40B00EB890000EACC019FE5C0B4 +S31A500072DD101BE5B00B00EB850000EA00005AE30700001AD030C3 +S31A500072F21BE5000053E30400001AAC019FE5A80B00EBA8019FC6 +S31A50007307E5A60B00EB7B0000EA00005AE32900001A0610A0E11E +S31A5000731C0120A0E3D4404BE2D0001BE50430A0E1F00D00EB00B4 +S31A500073315050E2070000AAD4001BE5D0401BE5E90E00EB0020D8 +S31A50007346A0E168019FE50410A0E1940B00EB690000EA5C019F00 +S31A5000735BE5B0101BE50A60A0E148FFFFEB50819FE534704BE2E0 +S31A50007370010000EA0650C7E7016086E2030056E30400008A0B25 +S31A50007385FFFFEB005050E2F8FFFFAA103198E5D4300BE50000E0 +S31A5000739A55E3070000AAD4001BE5D00E00EB0010A0E110019FC1 +S31A500073AFE57C0B00EB0400A0E12D0E00EB4F0000EA01005AE3FA +S31A500073C40200001AF8009FE5750B00EB4A0000EA39FFFFEBB451 +S31A500073D9301BE5000053E31100000ABC301BE5000053E30200A4 +S31A500073EE001AD4009FE56B0B00EB3A0000EAB8401BE5C8609F7E +S31A50007403E5000000EA0150C4E4E9FEFFEB005050E2FBFFFFAA60 +S31A500074180600A0E1B8101BE50420A0E15F0B00EB2E0000EA3375 +S31A5000742D004BE29C109FE50320A0E3B20B00EB000050E3020014 +S31A50007442001A8C009FE5D7FDFFEB250000EA34305BE55300539E +S31A50007457E31F00001A33305BE5303043E2090053E31B00008AA2 +S31A5000746C64009FE5B8101BE528FEFFEB1A0000EA84000150A07C +S31A500074814201008C0001509C000150AC000150CC000150E40095 +S31A500074960150F00001500801015010010150CC43010018010113 +S31A500074AB5040010150540101502C0001506801015094AC005027 +S31A500074C03CB1000080010150A4010150D0010150F40101500C38 +S31A500074D5020150B86F005018009FE534101BE52F0B00EB00007D +S31A500074EA5AE30300001AD4004BE2DE0D00EB000000EA10020109 +S31A500074FF50F0AD1BE90DC0A0E100D82DE90010A0E118009FE5C8 +S31A5000751404B04CE2220B00EB10009FE510109FE510209FE537EF +S31A50007529FBFFEB00A81BE970040150148400008484000090046D +S31A5000753E01500DC0A0E1F0DF2DE904B04CE230D04DE20070A03D +S31A50007553E344304BE20060A0E140504BE244700BE50500A0E181 +S31A5000756800308DE50140A0E144329FE56610A0E308308DE507B0 +S31A5000757D20A0E104708DE50230A0E334FBFFEB0130A0E3880012 +S31A500075928DE80600A0E120329FE50410A0E10C308DE50220A0B7 +S31A500075A7E308708DE50530A0E136FBFFEB070050E1A000000AF9 +S31A500075BC00029FE52F0D00EB070050E10200001AF4019FE5F4F6 +S31A500075D10A00EB990000EAEC019FE5F10A00EB44301BE500000C +S31A500075E653E31900000ADCC19FE548304BE2D8E19FE50320A01B +S31A500075FBE1D4119FE50380A0E100409EE50C60A0E100009CE5A6 +S31A500076100EA0A0E1003091E5840080E0043043E2940301E09CE9 +S31A500076251200EB005050E20D00000A48401BE50500A0E13E1305 +S31A5000763A00EB0410A0E10030A0E190019FE50520A0E1D50A001A +S31A5000764FEB040000EA84019FE570619FE570A19FE5D00A00EB3F +S31A5000766448804BE274919FE50010A0E3004099E5012CA0E30438 +S31A5000767900A0E1670B00EB60319FE5030093E8030084E8003096 +S31A5000768E96E5103084E5012CA0E3143084E50050A0E318508451 +S31A500076A3E50510A0E1024084E00400A0E15A0B00EB30C19FE511 +S31A500076B80F009CE80F0084E8003096E500209AE5023083E0106A +S31A500076CD3084E5143084E50510A0E1185084E5012CA0E30240B3 +S31A500076E284E00400A0E14C0B00EBFCC09FE50F009CE804E0A0BB +S31A500076F7E10700AEE8F0609FE50130CEE42324A0E10120CEE458 +S31A5000770C2338A0E10030CEE500209AE5003096E5823043E01024 +S31A500077213084E5182084E50510A0E1143084E5012CA0E302408E +S31A5000773684E00400A0E1370B00EBB0C09FE50F009CE804E0A0C7 +S31A5000774BE10700AEE80130CEE42334A0E10030CEE5017087E2DD +S31A50007760003096E5017087E200109AE5017087E2036061E0101C +S31A500077756084E5017087E2146084E50820A0E1181084E50600E9 +S31A5000778AA0E1421200EB005050E21800000A48401BE50500A003 +S31A5000779FE1E41200EB0410A0E10030A0E128009FE50520A0E125 +S31A500077B47B0A00EB200000EA98040150C0020150C4040150F4E3 +S31A500077C90401500005015058B2000060B2000064B2000024054F +S31A500077DE01504C05015068B20000940501509C050150AC0501A5 +S31A500077F3505CB20000BC0501500600A0E10724A0E1001099E5FA +S31A500078080830A0E1721200EB005050E20900000A48401BE505CB +S31A5000781D00A0E1C41200EB0410A0E10030A0E108009FE50520C7 +S31A50007832A0E15B0A00EB000000EACC050150F0AF1BE90DC0A0FE +S31A50007847E170D82DE96C309FE56C009FE508D04DE268409FE554 +S31A5000785C001093E5002094E504B04CE2015062E04D0A00EB00E9 +S31A500078713094E50060A0E3230456E11400002A0030D5E5FF009B +S31A5000788653E30700000A102085E20C1092E800C08DE51C109530 +S31A5000789BE504108DE524009FE50510A0E13E0A00EB016086E2DD +S31A500078B0003094E5015C85E2230456E1030000EA5CB20000FCAB +S31A500078C505015060B2000040060150EAFFFF3A70A81BE90DC04E +S31A500078DAA0E170D82DE9B4309FE5B4109FE504B04CE2B0C09FC3 +S31A500078EFE5002093E5005091E500009CE50C60A0E1804082E05B +S31A500079040410A0E1050054E11C00002A003094E5010073E315EE +S31A5000791900000A040051E10200000A7C009FE50420A0E11D0AEB +S31A5000792E00EB0410A0E1050054E10B00002A003094E5010073E2 +S31A50007943E30800000A54309FE5002093E50320C2E3021081E009 +S31A50007958050051E10200002A003091E5010073E3F9FFFF1A0152 +S31A5000796D40A0E1E4FFFFEA003096E50330C3E3034084E0E0FF18 +S31A50007982FFEA040051E10200000A14009FE50420A0E1030A0025 +S31A50007997EB70A81BE958B200005CB2000060B200006C06015091 +S31A500079AC0DC0A0E130D82DE9BC309FE5BC409FE5002093E5007C +S31A500079C1E094E504B04CE2B0C09FE58E2082E000E09CE500506B +S31A500079D6A0E102C0A0E10E005CE11A00002A0400A0E1003092AC +S31A500079EBE5010073E31100000A02005CE10200000A02306CE011 +S31A50007A00430151E11600009A02C0A0E10E005CE10700002A0036 +S31A50007A153090E50320C3E302C08CE00E005CE10200002A0030C3 +S31A50007A2A9CE5010073E3F9FFFF1A0C20A0E1020000EA003090AF +S31A50007A3FE50330C3E3032082E00E0052E1E5FFFF3A02005CE1FC +S31A50007A540500000A02306CE0430151E10200008A00C085E5010D +S31A50007A6900A0E330A81BE90000A0E330A81BE958B2000060B2D8 +S31A50007A7E00005CB200000DC0A0E1F0DF2DE904B04CE2B8D04DA5 +S31A50007A93E20040A0E3A8400BE5B0400BE50080A0E1B8400BE542 +S31A50007AA8A0604BE2C0400BE50600A0E1C8400BE5A4304BE200D6 +S31A50007ABD308DE5A8204BE204208DE50170A0E144339FE56210D2 +S31A50007AD2A0E308308DE50120A0E30430A0E1DEF9FFEBAC304BDB +S31A50007AE7E200308DE5B0204BE204208DE588004BE21C339FE595 +S31A50007AFC7210A0E308308DE50120A0E30430A0E1D3F9FFEBB4AD +S31A50007B11304BE200308DE5B8204BE204208DE570004BE2F432AC +S31A50007B269FE56510A0E308308DE50120A0E30430A0E1C8F9FFB5 +S31A50007B3BEB58004BE2C0304BE204308DE5BC504BE2D0329FE5ED +S31A50007B506610A0E308308DE50120A0E300508DE50430A0E1BD4F +S31A50007B65F9FFEBC4304BE200308DE5C8204BE204208DE5400024 +S31A50007B7A4BE2A4329FE56C10A0E308308DE50120A0E30430A0F8 +S31A50007B8FE1B2F9FFEB0530A0E300308DE5CC204BE204208DE50C +S31A50007BA4043043E208308DE50800A0E174329FE50710A0E10C1C +S31A50007BB9308DE50220A0E30630A0E1B1F9FFEB040050E1020098 +S31A50007BCE001A58029FE54AFEFFEB0D0100EAA8301BE5000053FF +S31A50007BE3E30500000AC8301BE5000053E30200000ACC301BE50F +S31A50007BF8000053E30200001A2C029FE53EFEFFEB010100EAC04C +S31A50007C0D301BE5000053E31800000ABC001BE5E91000EB006084 +S31A50007C2250E20600001ABC001BE5C4301BE5030080E001004051 +S31A50007C37E2E21000EB006050E20D00000ABC401BE50600A0E1F7 +S31A50007C4CB91100EB0020A0E1DC019FE50410A0E1510900EBD468 +S31A50007C61019FE5D4319FE5D4C19FE5001093E500209CE54B0914 +S31A50007C7600EBE50000EAC4619FE5A4101BE5003096E5BC419F45 +S31A50007C8BE5030051E10400003AC4301BE5002094E5033081E015 +S31A50007CA0020053E10600003AA0019FE53D0900EB84019FE500A4 +S31A50007CB51096E5002094E5390900EBD30000EACC001BE54B0936 +S31A50007CCA00EB0F0050E30300009A78019FE51010A0E3310900AB +S31A50007CDFEBCB0000EAC0301BE5000053E30800001AC4101BE57E +S31A50007CF40500A0E12BFFFFEB000050E30300001A4C019FE5C4A6 +S31A50007D09101BE5250900EBBF0000EA28319FE53C519FE53C41D2 +S31A50007D1E9FE5001093E5002095E50080A0E3000094E5019062E5 +S31A50007D33E00910A0E1980700EB003095E50860A0E1007094E565 +S31A50007D48230458E11700002A0030D7E5FF0053E30F00000ACC29 +S31A50007D5D001BE50710A0E1310900EB000050E30A00001A102077 +S31A50007D7297E5BC301BE5030052E18900001ADC009FE5CC101B0E +S31A50007D87E53D0B00EB000050E39F00000A0180A0E3040000EAAB +S31A50007D9C016086E2003095E5017C87E2230456E1E7FFFF3ABCEA +S31A50007DB1101BE5C4201BE5000058E30C00001A003095E59400D4 +S31A50007DC69FE50860A0E1007090E5020000EA016086E200309586 +S31A50007DDBE5017C87E2230456E10200002A0030D7E5FF0053E3C7 +S31A50007DF0F7FFFF1A0100A0E1021081E0011041E2701300EB0082 +S31A50007E058050E21700000A54009FE5E40800EB7E0000EA84069E +S31A50007E1A015098060150AC060150C0060150DC060150E4060185 +S31A50007E2F50F006015004070150200701504007015058B20000DB +S31A50007E445CB200008C420100F44101005C07015078070150A894 +S31A50007E5907015060B2000068B20000FC0701501808015001A0D4 +S31A50007E6EA0E3BC001BE5D0404BE2C4101BE50420A0E18510001F +S31A50007E83EB006050E20800000A0600A0E1D0401BE508A0A0E145 +S31A50007E98261100EB0410A0E10030A0E108019FE50620A0E1BD26 +S31A50007EAD0800EB00005AE30E00000ABC001BE5A4101BE5C420CE +S31A50007EC21BE5D0304BE2C31000EB006050E20700000AD0401B9C +S31A50007ED7E50600A0E1151100EB0410A0E10030A0E1C8009FE531 +S31A50007EEC0620A0E1AC0800EB0700A0E10010A0E3012CA0E346D4 +S31A50007F010900EBCC101BE50700A0E1D70800EBBC301BE5B02037 +S31A50007F161BE5103087E5000052E30500001AC0301BE5000053BD +S31A50007F2BE3BC201B150200001AA4201BE5000000EAAC201BE566 +S31A50007F40B8301BE5142087E5000053E30200001A64309FE500E4 +S31A50007F553093E5000000EAB4301BE51C3087E5C4301BE5183057 +S31A50007F6A87E50900A0E1001095E5D0204BE2471000EB0060501D +S31A50007F7FE21000000AD0401BE50600A0E1E91000EB0410A0E18B +S31A50007F940030A0E120009FE50620A0E1800800EB1A0000EA14FB +S31A50007FA9009FE57D0800EB170000EA4C08015070080150904238 +S31A50007FBE010094080150D00701503C309FE5001093E50900A021 +S31A50007FD3E1002095E5D0304BE27E1000EB006050E20A00000A7C +S31A50007FE8D0401BE50600A0E1D01000EB0410A0E10030A0E10C7A +S31A50007FFD009FE50620A0E1670800EB010000EA68B20000B408D3 +S31A500080120150F0AF1BE90DC0A0E1F0D82DE904B04CE254D04D90 +S31A50008027E20040A0E30070A0E14C504BE254400BE50500A0E185 +S31A5000803C5C400BE550304BE200308DE554204BE204208DE501C6 +S31A5000805160A0E128319FE56610A0E308308DE50120A0E304308B +S31A50008066A0E17CF8FFEB58304BE200308DE55C204BE204208D1F +S31A5000807BE534004BE200319FE56C10A0E308308DE50120A0E352 +S31A500080900430A0E171F8FFEB0220A0E314008DE8E4309FE507B0 +S31A500080A500A0E10C308DE50610A0E108408DE50530A0E174F8CE +S31A500080BAFFEB040050E10200001AC4009FE50DFDFFEB4600009E +S31A500080CFEA54301BE5000053E30200000A5C301BE5000053E3D4 +S31A500080E40200001AA4009FE504FDFFEB3D0000EA50001BE5B2D9 +S31A500080F90F00EB005050E20600001A50001BE558301BE50300A5 +S31A5000810E80E0010040E2AB0F00EB005050E20D00000A50401B9A +S31A50008123E50500A0E1821000EB0020A0E160009FE50410A0E1EF +S31A500081381A0800EB58009FE558309FE558C09FE5001093E500C3 +S31A5000814D209CE5140800EB240000EA50101BE558301BE5010028 +S31A50008162A0E1031081E0011041E2951200EB000050E30C0000B8 +S31A500081770A28009FE5090800EB190000EAC0060150DC0601509E +S31A5000818CC0020150F0060150D808015020070150400701505895 +S31A500081A1B200005CB200001808015050001BE558101BE560200A +S31A500081B64BE2B70F00EB005050E20900000A60401BE50500A0A6 +S31A500081CBE1591000EB0410A0E10030A0E108009FE50520A0E19C +S31A500081E0F00700EB000000EA94080150F0A81BE90DC0A0E1F0A1 +S31A500081F5DF2DE904B04CE218D04DE20060A0E300608DE52C3020 +S31A5000820A4BE204308DE50120A0E308208DE548319FE50C308D32 +S31A5000821FE5022082E00630A0E118F8FFEB060050E10200001A87 +S31A5000823430019FE5B1FCFFEB660000EA28319FE528519FE52841 +S31A50008249419FE5001093E5002095E50680A0E1000094E501A0C2 +S31A5000825E62E00A10A0E14D0600EB006094E50270A0E3026C86D8 +S31A50008273E2010000EA017087E2016C86E2EC909FE5003099E576 +S31A50008288230457E10D00002A0030D6E5FF0053E3F6FFFF0A2CAB +S31A5000829D001BE50610A0E1E10700EB000050E3F1FFFF1AC4000C +S31A500082B29FE52C101BE5F10900EB000050E34500000A0180A019 +S31A500082C7E3000058E30300001AA8009FE52C101BE5B20700EB05 +S31A500082DC3E0000EA100096E530704BE2181096E50720A0E16903 +S31A500082F10F00EB005050E20700000A30401BE50500A0E10B1084 +S31A5000830600EB0410A0E10030A0E16C009FE50520A0E1A207009C +S31A5000831BEB0600A0E1FF10A0E3012CA0E33C0800EB0A00A0E189 +S31A50008330001099E50720A0E1570F00EB005050E21000000A308F +S31A50008345401BE50500A0E1F90F00EB0410A0E10030A0E12400AA +S31A5000835A9FE50520A0E1900700EB1C0000EAEC080150F00601CA +S31A5000836F505CB2000060B2000068B20000F80801500C09015062 +S31A500083849408015040309FE5001093E53C309FE5002093E50A93 +S31A5000839900A0E10730A0E18D0F00EB005050E20B00000A3040B2 +S31A500083AE1BE50500A0E1DF0F00EB0410A0E10030A0E110009F10 +S31A500083C3E50520A0E1760700EB020000EA68B2000060B2000044 +S31A500083D8B4080150F0AF1BE90DC0A0E1F0D82DE904B04CE21468 +S31A500083EDD04DE20060A0E300608DE520304BE204308DE501202D +S31A50008402A0E308208DE5D4309FE50C308DE5022082E00630A062 +S31A50008417E19CF7FFEB060050E10200001ABC009FE535FCFFEBEE +S31A5000842C3D0000EAB4309FE5B4409FE5B4509FE5001093E500CE +S31A500084412094E50670A0E1000095E5011062E0D20500EB005061 +S31A5000845695E5010000EA016086E2015C85E2003094E5230456A3 +S31A5000846BE10800002A0030D5E5FF0053E3F7FFFF0A20001BE555 +S31A500084800510A0E1690700EB000050E3F2FFFF1A0170A0E3006F +S31A500084950057E30300001A54009FE520101BE53F0700EB1E00CE +S31A500084AA00EA48209FE5140095E5003092E5030050E105000023 +S31A500084BF3A38309FE518C095E5001093E50C2080E0010052E192 +S31A500084D40B00003A24009FE5310700EB100000EAEC080150F0FE +S31A500084E90601505CB2000060B2000068B200000C0901508C4263 +S31A500084FE0100F441010024090150101095E50C20A0E1A2050070 +S31A50008513EB08209FE51C3095E5003082E5000000EA904201004C +S31A50008528F0A81BE90DC0A0E1F0D92DE944209FE504D04DE20034 +S31A5000853D4092E504B04CE2000054E32700001A30809FE5011875 +S31A50008552A0E3000098E50130A0E3003082E5010840E2820E00B8 +S31A50008567EB001050E20600000A10009FE50B0700EB0400A0E156 +S31A5000857C1B0000EA58830000F44101003C09015060709FE56034 +S31A50008591609FE50100A0E15C409FE50710A0E10620A0E19B0E11 +S31A500085A600EB50509FE50400A0E10510A0E1A80E00EB44009FBC +S31A500085BBE5001097E5002096E500C094E5003095E500C08DE534 +S31A500085D0F40600EB003094E5002098E524109FE5013883E202BD +S31A500085E52063E0002081E50100A0E3050000EA58B200005CB2B7 +S31A500085FA000060B2000064B200006409015068B20000F0A91B62 +S31A5000860FE90DC0A0E130D82DE904B04CE20050A0E1010055E3BF +S31A500086240140A0E1020000CA48009FE5B3FBFFEB30A81BE9BB62 +S31A50008639FFFFEB000050E30C00000A34009FE534109FE5042000 +S31A5000864E94E5AFF6FFEB003050E20400000A0500A0E10410A00F +S31A50008663E10FE0A0E10CF093E530A81BE910009FE5A2FBFFEBF0 +S31A5000867830A81BE9900901501484000084840000A40901500D26 +S31A5000868DC0A0E1F0DD2DE904B04CE264D04DE20080A0E10140D7 +S31A500086A2A0E1080098E502A0A0E1000050E30D00000A80104B1F +S31A500086B7E20120A0E3AE0100EB0C2098E5000052E30200000A4E +S31A500086CC80301BE5000053E35400000A000052E30200001A802E +S31A500086E1301BE5000053E34F00001A28039FE528339FE50410BD +S31A500086F698E5036084E0A90600EB103098E5013043E2050053D0 +S31A5000870BE303F19F97410000EA2C8700504C870050B08700501E +S31A50008720B88700505C87005074870050F0229FE5003096E5ECB4 +S31A50008735129FE5EC029FE5000053E30210A001970600EB33002D +S31A5000874A00EADC029FE5001096E5930600EB2F0000EA0600A0AA +S31A5000875FE1BF0C00EB0010A0E1BC029FE58D0600EB290000EAB4 +S31A500087740050A0E3B4429FE50510D6E70400A0E1870600EB047A +S31A500087890055E30100008AA0029FE5830600EB015085E205006B +S31A5000879E55E3F5FFFF9A90029FE57E0600EB1A0000EA88029FF9 +S31A500087B3E51B0000EA84029FE50650A0E1780600EB0030D6E53C +S31A500087C80640A0E1000053E31100000A6C729FE50030D5E50AD8 +S31A500087DD0053E30200000A0130F4E50A0053E3FCFFFF1A07008A +S31A500087F2A0E10030A0E30030C4E50510A0E1680600EB0A30A046 +S31A50008807E30130C4E40450A0E10030D5E5000053E3EEFFFF1A4F +S31A5000881C00005AE30300000A18029FE55E0600EB0200A0E38AAB +S31A500088310000EA103098E5040053E31300000A74404BE20400F9 +S31A50008846A0E15010A0E30A20A0E1BC0700EB000050E30000E0F7 +S31A5000885BE30470A0E17E0000BA0700A0E1630600EB000050E393 +S31A50008870EDFFFF0A74305BE52E0053E30A00A0017600000A5ED7 +S31A500088850053E30300A0037300000A103098E5013043E2050017 +S31A5000889A53E303F19F976D0000EABC880050D0880050548A00A2 +S31A500088AF5080890050EC8800501C89005074004BE2004096E5A0 +S31A500088C40610A0E183F7FFEB0A0000EA74004BE20610A0E10022 +S31A500088D920A0E3004096E50230A0E124F7FFEB030000EA7400BD +S31A500088EE4BE2004096E50610A0E10B0C00EB000050E30400A0C7 +S31A50008903E35500000A000096E5000054E10100A0130200A003BE +S31A50008918500000EA7C404BE20400A0E10610A0E10620A0E39B71 +S31A5000892D0400EB0050A0E304A0A0E184404BE274304BE288307E +S31A500089420BE588704BE2E8809FE50410A0E10720A0E188001BE9 +S31A50008957E50830A0E106F7FFEB000050E32600000A84305BE5D9 +S31A5000896C0530C6E7015085E2050055E3F3FFFF9A360000EAC45A +S31A50008981009FE50650A0E1060600EB74704BE2B8609FE50A0082 +S31A5000899600EA74305BE50740A0E1000053E30400000A0030D498 +S31A500089ABE50130C5E40120F4E5000052E3FAFFFF1A0A30A0E3A4 +S31A500089C00130C5E40040A0E30040C5E50600A0E1F40500EB0753 +S31A500089D500A0E15010A0E30420A0E1580700EB040050E10000AF +S31A500089EAE0E31B0000BA0700A0E1000600EB040050E1E5FFFFF9 +S31A500089FF1A150000EA0600A0E10A10A0E10620A0E3620400EBD8 +S31A50008A140400A0E3100000EA240A01506CB20000380A01503016 +S31A50008A290A01502C0A0150400A0150440A01504C0A0150500AC5 +S31A50008A3E0150540A0150580A01505C0A0150640A0150900A0109 +S31A50008A535008009FE5D20500EB0100A0E3000000EA540A0150FD +S31A50008A68F0AD1BE90DC0A0E100D82DE9031081E22111A0E1019C +S31A50008A7D30A0E1011041E204B04CE200E0A0E10000A0E300C023 +S31A50008A92A0E1000053E1090000DA0120A0E1011041E204309E39 +S31A50008AA7E40F005CE3133C83E1030020E001C08C1200C0A003BA +S31A50008ABC000052E3F5FFFFCA00A81BE90DC0A0E100D82DE90174 +S31A50008AD10040E204B04CE2050050E300F19F970C0000EAFC8A5B +S31A50008AE60050FC8A00500C8B0050148B0050FC8A0050048B00C4 +S31A50008AFB500400A0E300A81BE90800A0E300A81BE90000A0E3D3 +S31A50008B1000A81BE9020CA0E300A81BE90DC0A0E1F0DF2DE904DA +S31A50008B25B04CE243DE4DE208D04DE24C040BE50080A0E3501409 +S31A50008B3A0BE504A0A0E379FEFFEBB4919FE5080050E10970A03D +S31A50008B4FE18800000A426E4BE2086046E20600A0E19C519FE5E3 +S31A50008B64012BA0E30510A0E10B0400EB433E4BE2083043E20C50 +S31A50008B793043E200308DE5434E4BE204808DE5084044E27431D3 +S31A50008B8E9FE5084044E2008083E50400A0E168319FE56C10A0E4 +S31A50008BA3E308308DE50820A0E10230A0E3AAF5FFEB0120A0E34F +S31A50008BB804018DE84C041BE548319FE508808DE550141BE50C21 +S31A50008BCD308DE50430A0E1ADF5FFEB080050E16500000A1E0094 +S31A50008BE200EA0700A0E144241BE50A10A0E1A5FEFFEB010080A5 +S31A50008BF7E2050050E300F19F97160000EA1C8C00506C8C005092 +S31A50008C0C308C0050348C0050488C0050588C00500500A0E106FD +S31A50008C2110A0E1012BA0E3DC0300EB510000EA0180A0E310008F +S31A50008C3697E5A2FFFFEB00A08AE0147087E2050000EA09005786 +S31A50008C4BE1147047120970A001010000EAB4009FE5510500EB82 +S31A50008C60B0309FE5030057E1DDFFFF1A000058E34000000AA0F0 +S31A50008C75309FE5A0209FE50540A0E1003084E50400A0E1F8239D +S31A50008C8A84E5FF1FA0E375FFFFEBFC0384E584309FE584409F14 +S31A50008C9FE5002093E5001094E57C009FE5817042E0730700EBEC +S31A50008CB4000050E32E00000A001094E50700A0E1114D4BE20846 +S31A50008CC94044E20420A0E1F10C00EB006050E21500000A484410 +S31A50008CDE1BE50600A0E1930D00EB0410A0E10030A0E138009FFC +S31A50008CF3E50620A0E12A0500EB1D0000EAF48400006CB20000D3 +S31A50008D0894420100940A0150C0020150AC0A015094850000CE39 +S31A50008D1DFAAD0BADDEADDE5CB2000060B20000C00A01502405BF +S31A50008D3201500700A0E10510A0E1012BA0E30430A0E1240D00D2 +S31A50008D47EB006050E20900000A48441BE50600A0E1760D00EBB0 +S31A50008D5C0410A0E10030A0E108009FE50620A0E10D0500EB0036 +S31A50008D710000EAEC0A0150F0AF1BE90DC0A0E1F0DF2DE904B0DC +S31A50008D864CE20480A0E30070A0E10150A0E10290A0E1D8609FA0 +S31A50008D9BE5E2FDFFEBD4A09FE5000050E33100000A0A0056E118 +S31A50008DB02C00000AC4309FE50710A0E1000096E5034088E019D3 +S31A50008DC50500EB000050E31F00001A100096E5090050E118000A +S31A50008DDA001A013040E2050053E303F19F97130000EA048E00CD +S31A50008DEF50048E0050748E0050388E0050108E0050248E00508F +S31A50008E04003094E5003085E5F0AF1BE90500A0E10410A0E104FE +S31A50008E1920A0E35F0300EBF0AF1BE90500A0E10410A0E106201A +S31A50008E2EA0E35A0300EBF0AF1BE9004085E5F0AF1BE93C009F43 +S31A50008E43E50710A0E1D60400EBF0AF1BE9100096E51BFFFFEB50 +S31A50008E58008088E0146086E20A0056E1D2FFFF1A18009FE5071D +S31A50008E6D10A0E1CC0400EBF0AF1BE9F4840000948500006CB2FC +S31A50008E820000180B0150440B01500DC0A0E130D82DE90030A035 +S31A50008E97E304B04CE294509FE504D04DE2003085E59FFDFFEB20 +S31A50008EAC000050E33F00000A80309FE580009FE580409FE50063 +S31A50008EC11090E5012BA0E300C093E50400A0E18C1041E0310364 +S31A50008ED600EB0400A0E1FF1FA0E3E1FEFFEBFC3394E50300505C +S31A50008EEBE10700001A002094E54C309FE5030052E10300001A2E +S31A50008F00F82394E540309FE5030052E11100000A38009FE5A3CE +S31A50008F150400EB0400A0E130209FE50030A0E3003082E503104C +S31A50008F2AA0E1012BA0E33A0500EB1E0000EA8442010060B200A1 +S31A50008F3F005CB200006CB20000CEFAAD0BADDEADDE640B015045 +S31A50008F549442010018104BE23C009FE50120A0E384FFFFEB189D +S31A50008F69301BE5000053E30700000A28009FE528109FE504209A +S31A50008F7EA0E37DFFFFEB20009FE520109FE50220A0E379FFFF2B +S31A50008F93EB0130A0E3003085E5040000EAD0090150E8090150E0 +S31A50008FA894420100100A0150F841010030A81BE90DC0A0E100B8 +S31A50008FBDD82DE9803260E0030180E0000180E014209FE50002EA +S31A50008FD2A0E1483092E504B04CE20FE0A0E103F0A0E100A81B3B +S31A50008FE7E9500000000DC0A0E1F0DF2DE904B04CE206DD4DE2BF +S31A50008FFC98010BE5041090E59C110BE50020A0E3A4210BE50003 +S31A500090117091E5A0210BE549F3FFEB51F3FFEB47F3FFEB0430B1 +S31A5000902697E5010053E3A200001A0700A0E10410A0E3C30B0083 +S31A5000903BEB043097E5040053E30200000AD4029FE5550400EB4B +S31A50009050F1FFFFEA0700A0E12010A0E3632F4BE2013CA0E39092 +S31A50009065310BE500C0A0E394C10BE5654F4BE200408DE5193E0D +S31A5000907A4BE28C0A00EB000050E363AF4BE20700000A94329FF5 +S31A5000908FE528104BE2F32091E1410F52E30200000A84029FE50C +S31A500090A43F0400EBDBFFFFEA0700A0E10030A0E394310BE5156B +S31A500090B910A0E3653F4BE200308DE50A20A0E1193E4BE2780A95 +S31A500090CE00EB000050E31B00000A628F4BE20840A0E10130D408 +S31A500090E3E444929FE5000053E30200000A0130D4E4000053E383 +S31A500090F8FCFFFF1A0460A0E10130D4E4000053E3FCFFFF1A04DD +S31A5000910D50A0E10130D4E4000053E3FCFFFF1AA4111BE500003E +S31A5000912251E30100000A04029FE51D0400EB0900A0E10610A0CD +S31A50009137E10820A0E100408DE50530A0E1170400EB0700A0E14D +S31A5000914C1A10A0E30050A0E394510BE5653F4BE200308DE50AE6 +S31A5000916120A0E1193E4BE2510A00EB050050E10800000A0A00E6 +S31A50009176A0E190111BE58C204BE2260B00EB8C301BE5A0111BEF +S31A5000918BE5050050E10310A011A0110BE5A0211BE5000052E303 +S31A500091A00200001A8C019FE5FE0300EB9AFFFFEA0510A0E180B3 +S31A500091B5519FE507CDA0E30500A0E1083097E5813083E00C20A9 +S31A500091CAD3E70120C0E7011081E2050051E3F8FFFFDA0700A094 +S31A500091DFE10030A0E394310BE51B10A0E3653F4BE200308DE5BB +S31A500091F40A20A0E1193E4BE22C0A00EB000050E32900000A0A50 +S31A5000920900A0E190111BE574204BE2C70A00EB000050E3200008 +S31A5000921E000A9C111BE570201BE5003091E5101093E50240819D +S31A50009233E09C211BE5044082E5A0111BE574205BE50700A0E17B +S31A50009248450A00EB1F30D4E51F30C4E50720D4E5800012E3022A +S31A5000925D00001A0730D4E5800013E3FCFFFF0A98111BE5003049 +S31A5000927291E50100A0E1202093E50510A0E10FE0A0E100F09259 +S31A50009287E59C211BE5343092E50140A0E30C4083E5B2F2FFEBF9 +S31A5000929C0400A0E12B0000EA94009FE5BE0300EB5AFFFFEA8C3B +S31A500092B1009FE5BB0300EB57FFFFEA050053E30200001A7C0013 +S31A500092C69FE5B60300EB52FFFFEAA4F2FFEB3200A0E336FFFF72 +S31A500092DBEBA4311BE5000053E30100001A5C009FE5AD0300EB9C +S31A500092F0A4111BE554009FE5011081E2A4110BE5A80300EBA433 +S31A50009305211BE50000A0E30A0052E30F00000A0700A0E1CD01AB +S31A5000931A00EB88F2FFEB3DFFFFEAA80B01509EFEFFFFC40B0106 +S31A5000932F50E00B0150DC0B0150F00B01509C8300000C0C01503B +S31A50009344200C01503C0C01505C0C01507C0C0150F0AF1BE90D66 +S31A50009359C0A0E170D82DE90040A0E1086094E5045096E504B0E5 +S31A5000936E4CE2E70A00EB0000A0E3D80A00EB000085E5344085D7 +S31A50009383E50600A0E117FFFFEB70A81BE90DC0A0E100D82DE9BB +S31A5000939804B04CE204C090E504109CE52130A0E30030C1E5FF11 +S31A500093AD20A0E30720C1E5213043E20F30C1E530308CE500A811 +S31A500093C21BE90DC0A0E110D82DE904E090E504B04CE204C09E53 +S31A500093D7E52130A0E30030CCE54820A0E30E20CCE50000A0E344 +S31A500093EC0B00CCE50A00CCE5013043E20C30CCE5462042E20DC5 +S31A5000940120CCE5203083E20430CCE518008EE514008EE508304B +S31A500094168EE50140A0E12C008EE56010A0E30110CCE53F308370 +S31A5000942BE20330CCE57E2082E20220CCE5203043E210308EE513 +S31A500094407F2082E20720CCE5203043E20F30CCE50C20A0E101D3 +S31A5000945510C2E40710CCE50030D4E70030C2E7010080E2050002 +S31A5000946A50E3FAFFFFDA2230A0E30030CCE50020A0E30D20CC40 +S31A5000947FE51E3043E20C30CCE5012082E230208EE510A81BE939 +S31A500094940DC0A0E100D82DE9010C51E20100A01304B04CE2005B +S31A500094A9A81BE90DC0A0E100D82DE9042090E504B04CE21430B1 +S31A500094BE92E50000A0E3000053E10200000A183092E5000053F7 +S31A500094D3E10000001A0100A0E300A81BE90DC0A0E100D82DE9C7 +S31A500094E804B04CE204C090E504009CE52230A0E30030C0E505CA +S31A500094FD20C0E54224A0E10620C0E50410C0E5043083E200300B +S31A50009512C0E50120A0E32C208CE500A81BE90DC0A0E1F0DF2DF2 +S31A50009527E904B04CE20090A0E10380A0E13F0058E3044099E5BD +S31A5000953C0850A0C14050A0D304309BE50160A0E1087094E5027F +S31A50009551A0A0E1040094E5400057E30400001A147084E51C3040 +S31A5000956684E5245084E55030A0E3030000EA187084E52030849F +S31A5000957BE5285084E54030A0E3083084E52230A0E30030C0E581 +S31A500095900A50C0E54534A0E10B30C0E50020A0E30820C0E50225 +S31A500095A5E0A0E10970C0E54030A0E30730C0E5122082E2002057 +S31A500095BAC0E50A005EE10F0000AA8E31A0E1062083E004C09280 +S31A500095CFE501E08EE2061093E70C20A0E101C04CE2000052E39A +S31A500095E4F4FFFFDA0C20A0E10130D1E401C04CE21030C0E500E9 +S31A500095F90052E3F9FFFFCAEDFFFFEA050058E1040000AA003020 +S31A5000960EA0E305E068E01030C0E501E05EE2FCFFFF1A2C209447 +S31A50009623E50730D0E5400013E3FCFFFF0A000052E30800001A7A +S31A50009638143094E5030057E10130A0030230A0130C3084E50968 +S31A5000964D00A0E10710A0E10520A0E1A0FFFFEBF0AF1BE90DC0FA +S31A50009662A0E170D82DE904D04DE20060A0E1045096E504409532 +S31A50009677E50C20D4E56230A0E30030C4E50710D4E5403043E26B +S31A5000968C0030C4E504B04CE22A0000EA0430A0E30000A0E30A60 +S31A500096A130C4E50B00C4E5800052E30800C4E56020A00309201F +S31A500096B6C4E5103095E5020053E10200001A013041E20330C449 +S31A500096CBE5210000EA0010A0E11C004BE2102085E54030A0E3DD +S31A500096E00730C4E50A20A0E30020C4E51030D4E50130C0E701F7 +S31A500096F51081E2030051E3FAFFFF9A19305BE51A105BE50600D5 +S31A5000970AA0E1002096E5031481E120C092E5041041E20FE0A042 +S31A5000971FE104F09CE51B305BE5013043E20330C4E56220A0E3C7 +S31A500097340020C4E50710D4E52230A0E30030C4E50320D4E5FFA8 +S31A500097491001E2012082E2010052E1CFFFFF1A70A81BE90DC039 +S31A5000975EA0E170D82DE904B04CE200C0A0E30C40A0E10260A0CD +S31A50009773E1040090E5060054E104E090E50150A0E1060000AA1B +S31A500097880520A0E106C0A0E1043092E501C05CE2034084E00830 +S31A5000979D2082E2FAFFFF1A2230A0E30030CEE50A40CEE544349E +S31A500097B2A0E10B30CEE50420A0E30820CEE51010D0E500C0A026 +S31A500097C7E30910CEE54030A0E30730CEE5062082E20020CEE54E +S31A500097DC06005CE10D0000AA8C21A0E1053082E0041093E505D2 +S31A500097F10092E7000051E301208CE20300000A1030DEE5013090 +S31A50009806C0E4011051E2FBFFFF1A02C0A0E106005CE1F1FFFF87 +S31A5000981BBA70A81BE90DC0A0E170D82DE90050A0E1044095E5D1 +S31A50009830043094E50C2094E504B04CE20410D3E5010052E30394 +S31A5000984500001A1C6094E50030A0E3143084E5020000EA2060DD +S31A5000985A94E50030A0E3183084E5141094E50030A0E32C308496 +S31A5000986FE5030051E10500000A242094E50500A0E116FFFFEB23 +S31A500098840130A0E30C3084E5090000EA181094E5000051E30553 +S31A5000989900000A282094E50500A0E10DFFFFEB0230A0E30C302C +S31A500098AE84E5000000EA0C1084E50500A0E1003095E50610A091 +S31A500098C3E120C093E50020A0E30FE0A0E108F09CE570A81BE959 +S31A500098D80DC0A0E100D82DE90C009FE50C109FE504B04CE22DAA +S31A500098ED0200EB00A81BE9800C0150840C01500DC0A0E1F0D8A3 +S31A500099022DE90050A0E1047095E5046097E52230A0E30030C67A +S31A50009917E50720D6E504B04CE2FF4002E2000054E31600000AC2 +S31A5000992C0740C6E5303097E5000053E31400000A0A0014E302AB +S31A5000994100000A0500A0E10410A0E1B3FFFFEB050014E30200FC +S31A50009956000A0500A0E10410A0E13EFFFFEB300014E302000031 +S31A5000996B0A0500A0E10410A0E1D7FFFFEB0730D6E5FF4003E296 +S31A50009980000054E3E8FFFF1A000097E5730900EBF0A81BE90DB9 +S31A50009995C0A0E100D82DE9043090E5002093E504B04CE22000F5 +S31A500099AA92E500A81BE90DC0A0E130D82DE98C209FE58C309F38 +S31A500099BFE504B04CE2001092E50040A0E1005093E5000051E332 +S31A500099D40400001A0130A0E3003082E53500A0E30120A0E1F76E +S31A500099E9F0FFEB0E33A0E3083084E5022CA0E30C2084E53E331D +S31A500099FE83E2103084E50123A0E3142084E5033383E218308445 +S31A50009A13E58300A0E31C2084E53530A0E3203084E58010A0E3A4 +S31A50009A2854DDFFEB010515E30200001A0130A0E3043084E5301D +S31A50009A3DA81BE90030A0E3043084E530A81BE9A48300000000BF +S31A50009A5204900DC0A0E100D82DE924309FE5002093E504B04C69 +S31A50009A67E2010512E30200001A0130A0E3043080E500A81BE9A2 +S31A50009A7C0030A0E3043080E500A81BE9000004900DC0A0E100A5 +S31A50009A91D82DE9803260E0030180E0000180E014209FE500020B +S31A50009AA6A0E1483092E504B04CE20FE0A0E103F0A0E100A81B5C +S31A50009ABBE9500000000DC0A0E170D82DE9040051E304B04CE241 +S31A50009AD04CD04DE20040A0E12900001A045094E5010055E326B0 +S31A50009AE500001A8300A0E38110A0E322DDFFEB1E00A0E3E3FF76 +S31A50009AFAFFEB8300A0E30310A0E30230A0E3043084E50060A029 +S31A50009B0FE31ADDFFEB0500A0E1DBFFFFEB8300A0E30330A0E321 +S31A50009B24043084E50510A0E113DDFFEB0500A0E3D4FFFFEB0282 +S31A50009B390000EA0A00A0E3D1FFFFEB016086E2090056E30C0079 +S31A50009B4E00CA0400A0E12010A0E30030A0E360300BE560204BAC +S31A50009B63E200208DE55C304BE258204BE2CF0700EB000050E3D1 +S31A50009B78EFFFFF0A0430A0E3043084E570A81BE90DC0A0E100CD +S31A50009B8DD82DE93500A0E304B04CE286F0FFEB00A81BE90DC00C +S31A50009BA2A0E100D82DE904B04CE202C0A0E100E0A0E103005C04 +S31A50009BB7E30200009A003081E1030013E30A00000A0C30A0E168 +S31A50009BCC01C04CE2000053E30500000A0C20A0E10130D1E40166 +S31A50009BE1C04CE20130CEE4000052E3F9FFFF1A00A81BE900E076 +S31A50009BF6A0E10F005CE30E00009A043091E404308EE404209189 +S31A50009C0BE404208EE4043091E404308EE4042091E410C04CE28E +S31A50009C2004208EE40F005CE3F4FFFF8A020000EA043091E404E0 +S31A50009C35C04CE204308EE403005CE3FAFFFF8A0C30A0E101C0EE +S31A50009C4A4CE2000053E30500000A0C20A0E10130D1E401C04C9C +S31A50009C5FE20130CEE4000052E3F9FFFF1A00A81BE90DC0A0E195 +S31A50009C74F0DF2DE904B04CE250D04DE20170A0E178404BE20098 +S31A50009C89A0A0E3005050E20260A0E10380A0E10490A0E10300CC +S31A50009C9E001A3030A0E378304BE577404BE2090000EA0500A00A +S31A50009CB3E10610A0E1241700EB0030D8E70610A0E10130C4E449 +S31A50009CC80500A0E1C31500EB005050E2F5FFFF1A090054E10516 +S31A50009CDD00000A0920A0E1013074E501A08AE20130C7E40200F3 +S31A50009CF254E1FAFFFF1A0A00A0E10030A0E30030C7E5F0AF1BEC +S31A50009D07E90DC0A0E1F0DF2DE904B04CE234D04DE24C200BE564 +S31A50009D1C0180A0E148204BE250200BE50060A0E30140D8E40005 +S31A50009D3170A0E158600BE5060054E1FE00000A250054E3ED00A2 +S31A50009D46001A0030A0E354300BE50140D8E40350A0E12D00541F +S31A50009D5BE30200001A0120A0E354200BE50140D8E4300054E332 +S31A50009D700200001A0140D8E40190A0E3060000EA0390A0E10453 +S31A50009D850000EA053185E08330A0E1303043E2045083E001403D +S31A50009D9AD8E4303044E2090053E3F7FFFF9A2E0054E3060000E3 +S31A50009DAF1A0140D8E4019089E2000000EA0140D8E4303044E2C9 +S31A50009DC4090053E3FBFFFF9A00A0A0E36C0054E30140D8045827 +S31A50009DD94044E2200054E304F19F97720000EA8C9E0050B49F0E +S31A50009DEE0050B49F0050B49F0050B49F0050B49F0050B49F00DB +S31A50009E0350B49F0050B49F0050B49F0050B49F0050909F005099 +S31A50009E188C9E0050B49F0050B49F0050B49F0050B49F0050B425 +S31A50009E2D9F0050B49F0050B49F0050B49F0050B49F0050B49FFC +S31A50009E420050B49F00506C9E0050B49F0050B49F0050709F0013 +S31A50009E5750B49F0050B49F0050B49F0050B49F00508C9E00504A +S31A50009E6C3000A0E30FE0A0E107F0A0E17800A0E30FE0A0E1077E +S31A50009E81F0A0E10190A0E30850A0E34C301BE5040093E44C30A3 +S31A50009E960BE5200054E304F19F972F0000EA509F0050649F0094 +S31A50009EAB50649F0050649F0050649F0050649F0050649F00505D +S31A50009EC0649F0050649F0050649F0050649F0050649F00502870 +S31A50009ED59F0050649F0050649F0050649F0050649F0050649FE4 +S31A50009EEA0050649F0050649F0050649F0050649F0050649F006E +S31A50009EFF50649F0050449F0050649F0050649F0050649F005029 +S31A50009F14649F0050649F0050649F0050649F0050449F00500063 +S31A50009F290050E32DA0A0B3000060B248104BE2B4319FE50A2050 +S31A50009F3EA0E3050000EA48104BE2A8319FE5010000EA48104BD6 +S31A50009F53E2A0319FE51020A0E343FFFFEB58000BE548204BE2B0 +S31A50009F6850200BE5140000EA4C301BE5042093E450200BE54C6D +S31A50009F7D300BE50200A0E19C0000EB58000BE50C0000EA4C3095 +S31A50009F921BE5043083E24C300BE5016086E2040053E501908841 +S31A50009FA7E20FE0A0E107F0A0E15D0000EA3F00A0E30FE0A0E10C +S31A50009FBC07F0A0E1016086E258201BE5055062E000005AE301AC +S31A50009FD1504512000059E30800000A3040A0E300005AE30600FA +S31A50009FE6000A0A00A0E10FE0A0E107F0A0E1016086E200A0A08A +S31A50009FFBE3000000EA2040A0E358201BE5019088E254301BE554 +S31A5000A010012042E25C200BE5000053E30800001A030000EA04EB +S31A5000A02500A0E10FE0A0E107F0A0E1016086E20530A0E1015097 +S31A5000A03A45E2000053E3F7FFFFCA00005AE30300000A0A00A0AB +S31A5000A04FE10FE0A0E107F0A0E1016086E25C201BE558301BE510 +S31A5000A0640F0000EA50301BE50140D3E4016086E250300BE504E3 +S31A5000A07900A0E10FE0A0E107F0A0E10A0054E30300001A0D00A8 +S31A5000A08EA0E30FE0A0E107F0A0E1016086E258301BE50320A0E8 +S31A5000A0A3E1012042E258200BE5000053E3ECFFFFCA54301BE556 +S31A5000A0B8000053E31A00000A0530A0E1015045E2000053E31669 +S31A5000A0CD0000DA2000A0E30FE0A0E107F0A0E1016086E20530C5 +S31A5000A0E2A0E1015045E2000053E3F7FFFFCA0D0000EA940C018D +S31A5000A0F750A00C0150B40C01500400A0E10FE0A0E107F0A0E133 +S31A5000A10C016086E20A0054E3019088E20300001A0D00A0E30F27 +S31A5000A121E0A0E107F0A0E1016086E20040D8E50980A0E100002A +S31A5000A13654E300FFFF1A0600A0E1F0AF1BE90DC0A0E100D82DF2 +S31A5000A14BE918309FE5002093E50100C2E40010A0E3002083E59A +S31A5000A16004B04CE20010C2E500A81BE96CB600000DC0A0E10ED1 +S31A5000A175002DE900D82DE918309FE5000083E510B04CE2041045 +S31A5000A18A9BE50C009FE508208BE2DBFEFFEB010000EA6CB600F5 +S31A5000A19F0044A1005000A81BE90DC0A0E10F002DE900D82DE913 +S31A5000A1B410009FE514B04CE204109BE508208BE2CFFEFFEB00DA +S31A5000A1C90000EA48A4005000A81BE90DC0A0E100D82DE90030ED +S31A5000A1DEA0E10120A0E10310A0E108009FE504B04CE2C4FEFF30 +S31A5000A1F3EB00A81BE948A400500DC0A0E100D82DE90020A0E34F +S31A5000A2080130D0E404B04CE2020053E10300000A0130D0E401FB +S31A5000A21D2082E2000053E3FBFFFF1A0200A0E100A81BE90DC00D +S31A5000A232A0E100D82DE90130D1E40020A0E10100D2E404B04C14 +S31A5000A247E2030050E10500001A000050E30400000A0100D2E47F +S31A5000A25C0130D1E4030050E1F9FFFF0A000063E000A81BE90D80 +S31A5000A271C0A0E100D82DE90130D1E4000053E304B04CE2030052 +S31A5000A286000A0130C0E40130D1E4000053E3FBFFFF1A0030A08F +S31A5000A29BE30030C0E500A81BE90DC0A0E100D82DE900E0A0E157 +S31A5000A2B00120DEE404B04CE2020000EA000050E30F00000A0145 +S31A5000A2C520DEE401C0D1E4200082E2FF0000E2413042E21900C3 +S31A5000A2DA53E30200A08120308CE2FF2003E241304CE2190053F3 +S31A5000A2EFE30C30A0810230A091030050E1EEFFFF0A000063E0F4 +S31A5000A30400A81BE90DC0A0E100D82DE9000052E304B04CE200EF +S31A5000A319C0A0E10300001A0200A0E100A81BE9000063E000A861 +S31A5000A32E1BE90100DCE40130D1E4030050E1F9FFFF1A00005084 +S31A5000A343E30100000A012052E2F7FFFF1A0000A0E300A81BE92E +S31A5000A3580DC0A0E110D82DE9000052E304B04CE20040A0E10571 +S31A5000A36D00001A0200A0E110A81BE9000063E010A81BE901200C +S31A5000A38252E21000000A01C0D4E401E0D1E420008CE2FF000086 +S31A5000A397E241304CE2190053E30C00A08120308EE2FFC003E2FA +S31A5000A3AC41304EE2190053E30E30A0810C30A091030050E1EC6A +S31A5000A3C1FFFF1A000050E3ECFFFF1A0000A0E310A81BE90DC0D6 +S31A5000A3D6A0E100D82DE904B04CE202C0A0E1070000EA0120D0A6 +S31A5000A3EBE40130D1E4030052E10300000A013050E5010051E55D +S31A5000A400030060E000A81BE90C30A0E101C04CE2000053E3F32D +S31A5000A415FFFFCA0000A0E300A81BE90DC0A0E100D82DE9012088 +S31A5000A42A52E2FF1001E204B04CE20200004A0110C0E40120524B +S31A5000A43FE2FCFFFF5A00A81BE90DC0A0E1F0D92DE9BC309FE533 +S31A5000A45404B04CE2004093E5FF6000E2000054E31900001AA8B0 +S31A5000A469309FE50000E0E30380A0E1342093E50850A0E10FE079 +S31A5000A47EA0E102F0A0E10070A0E1343095E50400A0E10FE0A09C +S31A5000A493E103F0A0E1143095E5000093E5014084E20C3093E578 +S31A5000A4A80610A0E10FE0A0E103F0A0E1000054E3F2FFFFDA3499 +S31A5000A4BD3098E50700A0E10FE0A0E103F0A0E1F0A91BE940201E +S31A5000A4D29FE5143092E5000053E30500000A000093E50C309354 +S31A5000A4E7E50610A0E10FE0A0E103F0A0E1F0A91BE9183092E54E +S31A5000A4FC000093E50C3093E50610A0E10FE0A0E103F0A0E1F05E +S31A5000A511A91BE9F0410100500000000DC0A0E110D82DE9302014 +S31A5000A5269FE504B04CE2143092E50040A0E1000053E3050000AD +S31A5000A53B0A000093E5103093E50FE0A0E103F0A0E10000C4E5EE +S31A5000A55010A81BE9183092E5F7FFFFEA500000000DC0A0E1F0B8 +S31A5000A565DF2DE9E0309FE504B04CE20060A0E1004093E50390F4 +S31A5000A57AA0E1000054E31C00001A0000E0E3C4309FE50450A059 +S31A5000A58FE10380A0E1342093E50870A0E10FE0A0E102F0A0E1D4 +S31A5000A5A400A0A0E1343097E50500A0E10FE0A0E103F0A0E114CD +S31A5000A5B93097E5000093E51C3093E50610A0E10FE0A0E103F055 +S31A5000A5CEA0E1004050E20C00001A015085E2000055E3F0FFFF2B +S31A5000A5E3DA343098E50A00A0E10FE0A0E103F0A0E1130000EAE6 +S31A5000A5F854209FE5143092E5000053E30800000A080000EA010A +S31A5000A60D30A0E3003089E5302098E50500A0E10FE0A0E102F0DC +S31A5000A622A0E10400A0E1F0AF1BE9183092E5000093E51C30930E +S31A5000A637E50610A0E10FE0A0E103F0A0E10040A0E10400A0E112 +S31A5000A64CF0AF1BE9F0410100500000000DC0A0E1F0D92DE9D879 +S31A5000A661309FE504B04CE2004093E50060A0E1000054E31C000C +S31A5000A676001AC4309FE50000E0E30380A0E1342093E50850A05C +S31A5000A68BE10FE0A0E102F0A0E10070A0E1343095E50400A0E14C +S31A5000A6A00FE0A0E103F0A0E114C095E500005CE30500000A00CF +S31A5000A6B5009CE50710A0E314309CE50620A0E10FE0A0E103F050 +S31A5000A6CAA0E1014084E2000054E3EFFFFFDA343098E50700A077 +S31A5000A6DFE10FE0A0E103F0A0E10A0000EA50309FE514C093E507 +S31A5000A6F40380A0E100005CE30500000A00009CE50710A0E3147A +S31A5000A709309CE50620A0E10FE0A0E103F0A0E118C098E5000054 +S31A5000A71E5CE30500000A00009CE50710A0E314309CE50620A0DC +S31A5000A733E10FE0A0E103F0A0E1F0A91BE9F041010050000000D7 +S31A5000A7480DC0A0E1F0DD2DE904B04CE204D04DE20250A0E100BD +S31A5000A75D60A0E10640A0E10070A0E3B4819FE5002098E50000A0 +S31A5000A77252E30600000A0030D2E5000053E30300000A0130D20A +S31A5000A787E425304BE5002088E5160000EA060054E10030A01353 +S31A5000A79C0130A003000055E30030A0D3000053E30D00000A3224 +S31A5000A7B100A0E3A7FFFFEB000000EA325045E2000055E303005C +S31A5000A7C600DA25004BE263FFFFEB007050E2F8FFFF0A000057B7 +S31A5000A7DBE30300001A0000E0E3510000EA25004BE24AFFFFEB90 +S31A5000A7F025205BE50030A0E30D0052E30030C4E50200A0E11B0D +S31A5000A80500000A080000CA080050E32C00000A020000CA0300CC +S31A5000A81A50E30C00000A380000EA0A0050E31200000A350000DA +S31A5000A82FEA2B0050E32E00000A020000CA240050E32B00000AE6 +S31A5000A8442F0000EA7F0050E31D00000A2C0000EA060054E10363 +S31A5000A85900001AC4009FE550FEFFEB0100E0E3300000EA01001B +S31A5000A86EC4E4B4A09FE5270000EA25205BE5A8A09FE50A005241 +S31A5000A883E30200001A0030DAE50D0053E32000000A0D0052E3CD +S31A5000A8980200001A0030DAE50A0053E31B00000A0D00A0E3E570 +S31A5000A8ADFEFFEB0A00A0E3E3FEFFEB25305BE50030CAE501008B +S31A5000A8C2A0E3190000EA5CA09FE5060054E11000000A0800A028 +S31A5000A8D7E3DAFEFFEB2000A0E3D8FEFFEB0800A0E3D6FEFFEBC5 +S31A5000A8EC014044E2080000EA060054E10200001A33DFFFEB0055 +S31A5000A90100A0E3090000EACEFEFFEB25305BE514A09FE50130C1 +S31A5000A916C4E425305BE50030CAE591FFFFEA94420100C80C0195 +S31A5000A92B50A8830000F0AD1BE90DC0A0E1F0DF2DE904B04CE290 +S31A5000A9400060A0E1060051E1067041800170A091000057E3027E +S31A5000A95590A0E13B0000DA000059E30300000AE4009FE50610AA +S31A5000A96A69E00DFEFFEB020000EAD4009FE50610A0E109FEFF63 +S31A5000A97FEB0050A0E3108047E210A086E2070055E1030000AAF4 +S31A5000A994B8009FE50510D6E701FEFFEB010000EAAC009FE5FE48 +S31A5000A9A9FDFFEBC54FA0E1053064E00130C3E3053063E00100FE +S31A5000A9BE53E30100001A90009FE5F6FDFFEBA43EA0E1033085D1 +S31A5000A9D3E00730C3E3053063E0070053E30100001A70009FE598 +S31A5000A9E8EEFDFFEB015085E20F0055E3E4FFFFDA60009FE5E9A7 +S31A5000A9FDFDFFEB0050A0E3070055E1040000AA0510D6E7203028 +S31A5000AA1241E25E0053E32E10A083000000EA2010A0E338009F4D +S31A5000AA27E5DEFDFFEB015085E20F0055E3F2FFFFDA28009FE5A5 +S31A5000AA3CD9FDFFEB0A60A0E1007058E2C3FFFFCAF0AF1BE9CC60 +S31A5000AA510C0150D80C0150E00C0150E40C0150E80C0150EC0C4D +S31A5000AA660150F00C01500DC0A0E100D82DE90020A0E304B04C08 +S31A5000AA7BE2ACFFFFEB00A81BE90DC0A0E10F002DE930D82DE9BC +S31A5000AA9014B04CE208D04DE248409FE504009BE5005094E50801 +S31A5000AAA5108BE2C9FDFFEB38009FE5BCFDFFEB1C004BE2002051 +S31A5000AABAA0E3002084E50810A0E31FFFFFEB1C305BE55900534A +S31A5000AACFE30000A0130100A003790053E30100A003005084E5D6 +S31A5000AAE4010000EA94420100F40C015030A81BE90DC0A0E1F0DA +S31A5000AAF9DF2DE904B04CE20050A0E10170A0E14C419FE50260E5 +S31A5000AB0EA0E12CC014E503A0A0E100005CE30300000A0A30A02C +S31A5000AB23E300308AE50000E0E3F0AF1BE90100A0E3710C00EBF3 +S31A5000AB380000C4E52004A0E10100C4E50500A0E10030D0E5024D +S31A5000AB4D2084E2000053E30300000A0130C2E40130F0E50000F7 +S31A5000AB6253E3FBFFFF1A0030A0E30130C2E4030056E1E4009FF8 +S31A5000AB77050200000A010056E3E6FFFF1AD8009FE50030D0E5E9 +S31A5000AB8CD4809FE5D4609FE5000053E30300000A0130C2E401B3 +S31A5000ABA130F0E5000053E3FBFFFF1A0840A0E10400A0E100505D +S31A5000ABB6A0E30050C2E50510A0E10C20A0E315FEFFEB144044E0 +S31A5000ABCBE20190A0E3BA91C4E10500A0E13D0C00EB140084E502 +S31A5000ABE0003096E5B000D6E1093083E0003086E5420C00EBB8D0 +S31A5000ABF501C4E1B430D7E1050053E10200001A4500A0E33C0C4E +S31A5000AC0A00EBB400C7E1180088E20720A0E150109FE50830A0B2 +S31A5000AC1FE11F0A00EB000050E3070000BA149008E50C5084E58B +S31A5000AC340030E0E3103084E5085084E5045084E50500A0E1F025 +S31A5000AC49AF1BE90000E0E30930A0E300308AE5F0AF1BE99CB6DA +S31A5000AC5E00000C0D0150180D015084B60000B083000005020037 +S31A5000AC73000DC0A0E100D82DE90000A0E308309FE504B04CE219 +S31A5000AC88000083E500A81BE970B600000DC0A0E1F0DF2DE904F0 +S31A5000AC9DB04CE218D04DE234000BE50030A0E33C300BE53810DC +S31A5000ACB20BE50280A0E10C629FE5010053E1870000AA2C50462A +S31A5000ACC7E20C3095E5000053E3150000DA34001BE538C01BE539 +S31A5000ACDC3C201BE5341295E50C4062E0040053E10340A0B10493 +S31A5000ACF120A0E1A9FBFFEB34C01BE5343295E504C08CE034C0D1 +S31A5000AD060BE50C2095E5043083E0343285E5022064E00C2085CE +S31A5000AD1BE53C101BE5041081E03C100BE5690000EA103095E5DE +S31A5000AD30020C53E36A00003A0530A0E388019FE50020A0E33038 +S31A5000AD45300BE5209085E22C200BE514A085E274119FE53030AC +S31A5000AD5A4BE200308DE50920A0E10A30A0E1140A00EB004050C1 +S31A5000AD6FE20470A0E31C0000AA043095E5013083E2043085E5F8 +S31A5000AD84050053E3020000CA083095E5000053E30100001A0852 +S31A5000AD9930A0E3470000EA0700A0E1D50B00EB0000C6E5200449 +S31A5000ADAEA0E10100C6E5B800D5E1D00B00EB0200C6E50710A075 +S31A5000ADC3E12004A0E10300C6E50920A0E1F4009FE50A30A0E114 +S31A5000ADD8B10900EB000050E33B0000AA0930A0E3340000EA0079 +S31A5000ADED30D6E50100D6E5000483E1C00B00EB030050E32000E0 +S31A5000AE02001A0230D6E50300D6E5000483E1BA0B00EB0830953B +S31A5000AE17E5013083E2030050E10500001A044044E2104085E5DE +S31A5000AE2C0C4085E5043086E2343285E5080085E50700A0E1AEF1 +S31A5000AE410B00EB0000C6E52004A0E10100C6E5B800D5E1A90B92 +S31A5000AE5600EB0200C6E50710A0E12004A0E10300C6E50920A045 +S31A5000AE6BE158009FE50A30A0E18A0900EB000050E3140000AA95 +S31A5000AE800930A0E30D0000EA0030D6E50100D6E5000483E1990C +S31A5000AE950B00EB050050E30600001A0230D6E50300D6E5000455 +S31A5000AEAA83E1930B00EB000088E50000E0E30A0000EA0B30A051 +S31A5000AEBFE3003088E50000E0E3060000EA9CB60000050200009C +S31A5000AED43C201BE538301BE5030052E178FFFFBA3C001BE5F0BD +S31A5000AEE9AF1BE90DC0A0E100D82DE9010040E204B04CE20B00FF +S31A5000AEFE50E300F19F97230000EA38AF005040AF005048AF0015 +S31A5000AF135050AF005058AF005060AF005068AF005070AF0050A8 +S31A5000AF2878AF005080AF005088AF005090AF005060009FE500CE +S31A5000AF3DA81BE95C009FE500A81BE958009FE500A81BE9540095 +S31A5000AF529FE500A81BE950009FE500A81BE94C009FE500A81B51 +S31A5000AF67E948009FE500A81BE944009FE500A81BE940009FE5E6 +S31A5000AF7C00A81BE93C009FE500A81BE938009FE500A81BE934B6 +S31A5000AF91009FE500A81BE930009FE500A81BE9300D0150400DEA +S31A5000AFA60150540D0150780D0150900D0150A40D0150B80D01B1 +S31A5000AFBB50C80D0150DC0D0150F80D01500C0E0150200E01503B +S31A5000AFD0200D01500DC0A0E170D82DE9AC309FE504B04CE201A9 +S31A5000AFE560A0E1004093E50350A0E1000054E31800001AD50D49 +S31A5000AFFA00EB90009FE5043090E5050053E30500001AB831D031 +S31A5000B00FE1000053E30000001AFD0D00EB0400A0E170A81BE90F +S31A5000B024000053E30400001A2D0100EB0A30A0E30030C6E501BB +S31A5000B03900A0E370A81BE950409FE58020A0E30410A0E10F0E24 +S31A5000B04E00EB44309FE5000085E5004083E5000095E5000050D8 +S31A5000B063E30800000A2CC09FE500109CE50130D1E40030C6E5CB +S31A5000B078002095E50100A0E300108CE5012042E2002085E5708F +S31A5000B08DA81BE9B8830000B4B8000008BF000088BF00000DC02A +S31A5000B0A2A0E170D82DE904B04CE204D04DE26440A0E30060A058 +S31A5000B0B7E119504BE2090000EA014054E20200001A0F0000EB37 +S31A5000B0CC6440A0E3040000EA28309FE5482093E56400A0E30F52 +S31A5000B0E1E0A0E102F0A0E10600A0E10510A0E1B7FFFFEB000073 +S31A5000B0F650E3F0FFFF0A19005BE5000000EA5000000070A81BFE +S31A5000B10BE90DC0A0E1F0DD2DE99C709FE504B04CE20760A0E165 +S31A5000B12094509FE594A09FE594809FE50A0000EA0400A0E10093 +S31A5000B1352095E50610A0E10F0E00EB000050E3030000DA003036 +S31A5000B14A95E5006086E0033060E0003085E57D0D00EB00309513 +S31A5000B15FE5000053E30900000A58409FE5043094E5050053E353 +S31A5000B1740100001A0400A0E1A40D00EB043094E5000053E3E869 +S31A5000B189FFFF1AD50000EB00708AE5443098E50040A0E30040B0 +S31A5000B19E85E5040053E10200000A0400A0E172E4FFEB444088C7 +S31A5000B1B3E5F0AD1BE98CBF0000BC8300008CC000005000000085 +S31A5000B1C8B4B800000DC0A0E110D82DE9A8209FE5A8409FE500AC +S31A5000B1DD3092E5FF1001E20110C3E4240051E3003082E504B013 +S31A5000B1F24CE20130A00300308405002094E5230051E30030A077 +S31A5000B207130130A003000052E30030A003000053E30500000AA8 +S31A5000B21C68209FE50130A0E3003082E560109FE5013043E20026 +S31A5000B2313081E558209FE5003092E5013083E2003082E5010C3F +S31A5000B24653E30900000A38309FE5002093E5000052E308000093 +S31A5000B25B0A2C209FE5003092E5013083E2003082E5030053E3A1 +S31A5000B2700200001AA4FFFFEB0030A0E3003084E510A81BE98C36 +S31A5000B285C00000A8B80000ACB80000B0B80000BC8300000DC066 +S31A5000B29AA0E110D82DE904B04CE2760000EB0040A0E114009F13 +S31A5000B2AFE514109FE5EE20A0E3BAFBFFEB0400A0E17F0000EB88 +S31A5000B2C410A81BE9FC0E0150040F01500DC0A0E110D82DE90454 +S31A5000B2D9B04CE2680000EB0040A0E114009FE514109FE5012CAB +S31A5000B2EEA0E3ACFBFFEB0400A0E1710000EB10A81BE9FC0E0139 +S31A5000B30350140F01500DC0A0E1F0D82DE904B04CE20060A0E12C +S31A5000B3180150A0E17AFFFFEB44209FE5003092E540709FE503CF +S31A5000B32D3183E08340A0E1030000EA483097E56400A0E30FE026 +S31A5000B342A0E103F0A0E10600A0E10510A0E11FFFFFEB00005036 +S31A5000B357E30200001A014044E2010074E3F3FFFF1AF0A81BE926 +S31A5000B36CB4830000500000000DC0A0E10E002DE930D82DE9104F +S31A5000B381B04CE204309BE50050A0E3043043E2030053E303F176 +S31A5000B3969F97200000EADCB30050ACB30050FCB3005010B400BB +S31A5000B3AB5054409FE554309FE5001094E50120A0E3002083E512 +S31A5000B3C0000051E30100001A830500EB000084E5000094E5B3CB +S31A5000B3D5D5FFEB100000EA28309FE520209FE5005093E50000EC +S31A5000B3EA92E50010A0E3001083E59FD5FFEB080000EA04309F53 +S31A5000B3FFE5005093E5050000EAC0830000C483000010209FE509 +S31A5000B41408309BE5005092E5003082E50500A0E1000000EAB493 +S31A5000B42983000030A81BE90DC0A0E130D82DE904B04CE204D037 +S31A5000B43E4DE20040A0E10200A0E10150A0E159EAFFEB0400A08D +S31A5000B453E10030A0E3003085E515104BE2DBFEFFEB000050E318 +S31A5000B4680300000A15305BE5030053E30130A00300308505011F +S31A5000B47D00A0E330A81BE90DC0A0E130D82DE92C409FE50000A9 +S31A5000B492E0E3343094E504B04CE20FE0A0E103F0A0E10050A0F9 +S31A5000B4A7E1343094E50000A0E30FE0A0E103F0A0E10500A0E18F +S31A5000B4BC30A81BE9500000000DC0A0E100D82DE910309FE534C5 +S31A5000B4D12093E504B04CE20FE0A0E102F0A0E100A81BE95000B7 +S31A5000B4E600000DC0A0E110D82DE938109FE538209FE50030A037 +S31A5000B4FBE3003081E530409FE5000092E5343094E504B04CE243 +S31A5000B5100FE0A0E103F0A0E11C209FE5303094E5000092E50FCD +S31A5000B525E0A0E103F0A0E110A81BE9F041010000BF00005000E9 +S31A5000B53A000004BF00000DC0A0E170D82DE964309FE50150A02E +S31A5000B54FE3005083E504B04CE258409FE50060E0E3342094E508 +S31A5000B5640600A0E10FE0A0E102F0A0E144309FE5000083E5347E +S31A5000B5792094E50500A0E10FE0A0E102F0A0E1301094E50600A6 +S31A5000B58EA0E10FE0A0E101F0A0E120309FE5000083E5302094CF +S31A5000B5A3E50500A0E10FE0A0E102F0A0E170A81BE9F0410100A1 +S31A5000B5B85000000000BF000004BF00000DC0A0E170D82DE9ACFE +S31A5000B5CD609FE5003096E504B04CE2000053E31E00001A9C4058 +S31A5000B5E29FE5343094E50000E0E30FE0A0E103F0A0E10050A006 +S31A5000B5F7E1343094E50100A0E30FE0A0E103F0A0E1141094E526 +S31A5000B60C74309FE574209FE5043081E570309FE5082081E50C3B +S31A5000B6213081E568209FE568309FE5102081E5143081E5602040 +S31A5000B6369FE560309FE5182081E51C3081E5342094E50500A04F +S31A5000B64BE10FE0A0E102F0A0E10130A0E3003086E540309FE58D +S31A5000B66040409FE5B010D3E10400A0E13E0C00EB34209FE50471 +S31A5000B6753094E5003082E570A81BE9C88300005000000098B229 +S31A5000B68A0050D0B20050CCB10050A0B0005074B3005030B4006B +S31A5000B69F5008B3005080420100B4B80000FCBE00000DC0A0E1AE +S31A5000B6B430D82DE904B04CE2240C00EB78309FE578109FE500D8 +S31A5000B6C92093E50350A0E1040091E50140A0E1000052E1140027 +S31A5000B6DE000A040050E30E00001A94FFFFEB54309FE554009F20 +S31A5000B6F3E5000083E550109FE50130A0E3003081E548109FE595 +S31A5000B70848309FE50D20A0E30020C0E5003081E53C209FE500EF +S31A5000B71D30A0E3003082E5043094E5000053E30000001AA3FFD8 +S31A5000B732FFEB043094E5003085E530A81BE9FCBE0000B4B80079 +S31A5000B7470088BF000008BF0000B88300008CC000008CBF0000B7 +S31A5000B75CBC8300000DC0A0E1F0D92DE968319FE5001093E5046D +S31A5000B771B04CE2000051E30900001A58019FE558219FE501302D +S31A5000B786A0E3003080E5001082E54C319FE54C119FE500308136 +S31A5000B79BE50080A0E1150000EA40019FE530119FE50120A0E330 +S31A5000B7B071F5FFEB34019FE528119FE50220A0E314419FE56C7E +S31A5000B7C5F5FFEB0410A0E120019FE50120A0E368F5FFEB1801FC +S31A5000B7DA9FE518119FE50520A0E364F5FFEB10019FE50480A02F +S31A5000B7EFE10C119FE50520A0E35FF5FFEB04419FE50030A0E30B +S31A5000B804003084E5FC509FE5110300EB480800EBF4309FE5048A +S31A5000B81960A0E1030055E10370A0E10900000A0140A0E30500DA +S31A5000B82EA0E10FE0A0E104F095E5000050E30C4085150C0085A6 +S31A5000B84305105085E2070055E1F6FFFF1ABC309FE5002093E57B +S31A5000B858000052E30200001AB0009FE54FFAFFEBF0A91BE90030 +S31A5000B86D3098E5000053E30600000A9C009FE5C80500EB0000A5 +S31A5000B88250E30200000A90009FE545FAFFEB010000EA0130A023 +S31A5000B897E3003086E5003096E5000053E30A00000A4C009FE503 +S31A5000B8AC6C0000EB0010A0E168009FE53AFAFFEB40009FE56714 +S31A5000B8C10000EB0010A0E158009FE535FAFFEB3BFFFFEBF0A9EE +S31A5000B8D61BE984420100FC410100384401002823000080420173 +S31A5000B8EB00780E0150500E0150A80E0150C40E0150D8830000E7 +S31A5000B900EC0E0150B4420100CC4301009C850000AC8500003CFC +S31A5000B915440100200F0150A0420100400F01506C0F0150740F30 +S31A5000B92A01500DC0A0E1F0DF2DE904B04CE20040A0E10190A05A +S31A5000B93FE100A0A0E30A80A0E10160A0E30070A0E301C0D4E43E +S31A5000B9540A50A0E307005CE13500000A30005CE30030A01301D5 +S31A5000B96930A003030016E10A00000A0030D4E5411043E22020F3 +S31A5000B97E83E2FF2002E2190051E30230A091780053E302000096 +S31A5000B9931A1050A0E3014084E201C0D4E400E0A0E30E60A0E1DA +S31A5000B9A830104CE2FF0001E241204CE2FF3002E2050053E309FE +S31A5000B9BD0050830200009A61304CE2050053E30000008A01E04B +S31A5000B9D2A0E300005EE31200000A0000A0E3FF3001E209005339 +S31A5000B9E7E30100A0910600009A61304CE2050053E357004C9211 +S31A5000B9FC0200009AFF3002E2050053E337004C92050050E104A7 +S31A5000BA110000AA01C0D4E4950727E000005CE3CEFFFF1A0300DC +S31A5000BA2600EA2E005CE30100000A0000A0E3F0AF1BE903306892 +S31A5000BA3BE28331A0E117A38AE1018088E2030058E3BDFFFFDAA6 +S31A5000BA500A00A0E19E0800EB000089E50100A0E3F0AF1BE90DCD +S31A5000BA65C0A0E110D82DE90010A0E108D04DE20230D1E528404F +S31A5000BA7A9FE500308DE50320D1E504208DE50020D1E50130D1F4 +S31A5000BA8FE504B04CE210109FE50400A0E1B3F9FFEB0400A0E141 +S31A5000BAA4010000EA90C000008C0F015010A81BE90DC0A0E1F016 +S31A5000BAB9D82DE904B04CE200E0A0E108C09EE5FF1001E2046050 +S31A5000BACE9BE50250A0E1000096E50370A0E108208EE21400920D +S31A5000BAE3E8044082E000C08CE0140000EA010052E10E00001AE4 +S31A5000BAF80230DCE508009EE502E093E20500000A0E10A0E10060 +S31A5000BB0D30DCE5011051E20130C5E402C08CE2FAFFFF1A00E09C +S31A5000BB2287E50C3060E0003086E50100A0E3F0A81BE90230DC07 +S31A5000BB37E58330A0E1043083E203C08CE004005CE10300002A54 +S31A5000BB4C0020DCE5FF3002E2FF0053E3E4FFFF1A0000A0E3F0F6 +S31A5000BB61A81BE90DC0A0E100D82DE9083090E5FF2002E20120C0 +S31A5000BB76C3E704B04CE200A81BE90DC0A0E100D82DE90610A03A +S31A5000BB8BE3002090E504B04CE201C0D2E45C31A0E1010013E379 +S31A5000BBA00100000A0130D2E4A32382E0011051E2F8FFFF5A008C +S31A5000BBB52080E500A81BE90DC0A0E100D82DE9002090E50130F2 +S31A5000BBCAD2E404B04CE21C1003E21C0051E3012082120330032C +S31A5000BBDFE2030053E301208212002080E500A81BE90DC0A0E1AC +S31A5000BBF4F0DF2DE904B04CE20040A0E30090A0E100C099E50409 +S31A5000BC0960A0E10120DCE401E0A0E1603002E2A332A0E144306E +S31A5000BC1ECEE5800012E34100000A0120DCE40470A0E10F300231 +S31A5000BC33E2013083E240308EE5030057E13A0000AA303002E2E8 +S31A5000BC4823A2A0E12283A0E10750A0E103005AE30AF19F9713C9 +S31A5000BC5D0000EAB0BC005070BC005078BC00508CBC00500160DD +S31A5000BC72DCE40D0000EA0120DCE50030DCE5026483E102C08CC5 +S31A5000BC87E2080000EA0300DCE50020DCE50230DCE50110DCE514 +S31A5000BC9C002C82E10338A0E1013483E1036082E104C08CE20E53 +S31A5000BCB16085E7030058E308F19F97130000EA10BD0050D0BC49 +S31A5000BCC60050D8BC0050ECBC00500140DCE40D0000EA0120DCF2 +S31A5000BCDBE50030DCE5024483E102C08CE2080000EA0300DCE598 +S31A5000BCF00020DCE50230DCE50110DCE5002C82E10338A0E101F7 +S31A5000BD053483E1034082E104C08CE2014084E220308EE20540B7 +S31A5000BD1A83E7017087E240309EE5045085E2030057E1C8FFFFCB +S31A5000BD2FBA00C089E5F0AF1BE90DC0A0E130D82DE904B04CE2D0 +S31A5000BD4404D04DE200C0A0E118000BE50C10A0E10130D1E402C3 +S31A5000BD5950A0E1FF3003E218100BE51B0053E30800000A18C047 +S31A5000BD6E0BE510009FE510109FE50020DCE560E3FFEB0000A094 +S31A5000BD83E3240000EA980F0150BC0F0150010081E218000BE5E4 +S31A5000BD980120D1E5011080E218100BE53F3002E20030C5E58031 +S31A5000BDAD0012E30300000A0130D0E50130C5E5012081E21820AC +S31A5000BDC20BE518301BE50140D3E40240C5E518300BE5010014AD +S31A5000BDD7E30100000A18004BE266FFFFEB020014E30100000A7B +S31A5000BDEC18004BE262FFFFEB040014E30100000A18004BE26DA4 +S31A5000BE01FFFFEB080014E30200000A18004BE2041085E275FFAE +S31A5000BE16FFEB0100A0E330A81BE90DC0A0E100D82DE904B04C3B +S31A5000BE2BE200C0A0E10130DCE402E0A0E11A0053E30500000AD6 +S31A5000BE4090009FE590109FE501205CE52CE3FFEB0000A0E30081 +S31A5000BE55A81BE901C08CE20100DCE40030A0E301C08CE20030D4 +S31A5000BE6A8EE5031010E20500004A0320A0E10130DCE702248365 +S31A5000BE7FE1011051E2FBFFFF5A00208EE5033000E2013083E2A2 +S31A5000BE9403C08CE00010A0E33C3000E22331A0E1013083E204C4 +S31A5000BEA9308EE5030051E1060000AA08008EE20130DCE401300C +S31A5000BEBEC0E704209EE5011081E2020051E1F9FFFFBA0100A0D1 +S31A5000BED3E300A81BE9980F0150D00F01500DC0A0E100D82DE911 +S31A5000BEE8001050E204B04CE20300000A10009FE501E3FFEB005C +S31A5000BEFD00A0E300A81BE904009FE500A81BE9E00F0150B0C0C7 +S31A5000BF1200000DC0A0E130D82DE904B04CE20050A0E31C409FA8 +S31A5000BF27E5005084E50400A0E19EF6FFEB2C4084E2015085E284 +S31A5000BF3C000055E3F8FFFFDA30A81BE9B0C000000DC0A0E100F8 +S31A5000BF51D82DE904B04CE2D8F6FFEB00A81BE90DC0A0E100D82B +S31A5000BF662DE904B04CE205F7FFEB00A81BE90DC0A0E110D82D83 +S31A5000BF7BE940409FE51C3094E504B04CE2000053E30100000A86 +S31A5000BF900000A0E310A81BE9030084E8980200EB000050E305DB +S31A5000BFA500001A083094E50120A0E31C2084E5003063E2103068 +S31A5000BFBA84E510A81BE910A81BE9104401000DC0A0E100D82D93 +S31A5000BFCFE93C209FE50010A0E11C3092E504B04CE2000053E3D2 +S31A5000BFE40100001A0700A0E300A81BE9143092E5030051E103AE +S31A5000BFF900003A183092E50000A0E3030051E10000003A0100F1 +S31A5000C00EA0E300A81BE9104401000DC0A0E100D82DE930009F38 +S31A5000C023E504B04CE21C3090E502C0A0E1000053E30500000AA2 +S31A5000C038143090E5003081E5182090E500208CE50000A0E3008D +S31A5000C04DA81BE90700A0E300A81BE9104401000DC0A0E100D82B +S31A5000C0622DE92C209FE51C3092E504B04CE2000053E3050000AD +S31A5000C0770A083092E5003080E50C2092E5002081E50000A0E364 +S31A5000C08C00A81BE90700A0E300A81BE9104401000DC0A0E1F0D4 +S31A5000C0A1DF2DE904B04CE200A0A0E30050A0E10180A0E108C19E +S31A5000C0B69FE50290A0E11C309CE50C70A0E10A0053E10100007F +S31A5000C0CB1A0700A0E3F0AF1BE9006097E5E8109FE5E8209FE5DF +S31A5000C0E00600A0E1022061E0ACF6FFEB0E02A0E3021A80E2204E +S31A5000C0F52090E4000031E1FCFFFF1A160F07EE9A0F07EE00006E +S31A5000C10AA0E10000A0E10000A0E10000A0E10000A0E10000A0A5 +S31A5000C11FE1101F11EE011AC1E3101F01EE151F07EE0000A0E11F +S31A5000C1340000A0E10000A0E10000A0E10000A0E10000A0E1100B +S31A5000C1493097E5034005E00410A0E1085085E070009FE505204C +S31A5000C15EA0E110F8FFEB68809FE5040000EA083097E560009FF6 +S31A5000C173E50130C3E3034084E009F8FFEB050054E10600002AA9 +S31A5000C1880400A0E10FE0A0E106F0A0E1730200EB00A050E2F2BC +S31A5000C19DFFFF0A004089E5101F11EE011A81E3031081E3101F2E +S31A5000C1B201EE0800A0E1FAF7FFEB0A00A0E1F0AF1BE91044014C +S31A5000C1C70014CC005034CD0050FC0F0150181001501410015042 +S31A5000C1DC0DC0A0E1F0DF2DE904B04CE204D04DE20270A0E100ED +S31A5000C1F190A0E30050A0E1A4C09FE50160A0E11C209CE50CA0CC +S31A5000C206A0E12C300BE5090052E10700A0034300000A00809AB3 +S31A5000C21BE584109FE584209FE50800A0E1022061E05BF6FFEB6C +S31A5000C2300E02A0E3021A80E2202090E4000031E1FCFFFF1A16A2 +S31A5000C2450F07EE9A0F07EE0000A0E10000A0E10000A0E1000069 +S31A5000C25AA0E10000A0E10000A0E1101F11EE011AC1E3101F01D9 +S31A5000C26FEE151F07EE0000A0E10000A0E10000A0E10000A0E149 +S31A5000C2840000A0E10000A0E11C009FE50610A0E1072086E00584 +S31A5000C29930A0E1C1F7FFEB090000EA1044010034CD005074CE0C +S31A5000C2AE00501C10015070009FE5077064E0B9F7FFEB0130C41A +S31A5000C2C3E3035085E0036086E0000057E30D0000DA0500A0E105 +S31A5000C2D808309AE50610A0E1030057E10740A0B10340A0A10452 +S31A5000C2ED20A0E10FE0A0E108F0A0E11A0200EB009050E2EBFFA9 +S31A5000C302FF0A2C301BE5005083E5101F11EE011A81E303108172 +S31A5000C317E3101F01EE0C009FE5A0F7FFEB0900A0E1010000EA34 +S31A5000C32C1410015018100150F0AF1BE90DC0A0E100D82DE904D5 +S31A5000C341B04CE2070050E300F19F97170000EA70C3005078C393 +S31A5000C356005080C3005088C3005090C3005098C30050A0C3004D +S31A5000C36B50A8C3005040009FE500A81BE93C009FE500A81BE980 +S31A5000C38038009FE500A81BE934009FE500A81BE930009FE500D2 +S31A5000C395A81BE92C009FE500A81BE928009FE500A81BE92400B9 +S31A5000C3AA9FE500A81BE920009FE500A81BE93C1001505C10019E +S31A5000C3BF50741001508C100150A8100150C0100150D0100150A6 +S31A5000C3D4F4100150181101500DC0A0E100D82DE9003090E5004E +S31A5000C3E90053E104B04CE20500000A043090E5001083E504306F +S31A5000C3FE90E5090081E8041080E500A81BE9041083E5001083B9 +S31A5000C413E5043081E5003081E500A81BE90DC0A0E100D82DE9C1 +S31A5000C4280010A0E1000091E504B04CE2010050E10400000A0080 +S31A5000C43D3090E5003081E5002090E5041082E500A81BE900009D +S31A5000C452A0E300A81BE90DC0A0E170D82DE93C309FE53C209FB9 +S31A5000C467E53C509FE5043083E504B04CE2003083E50F40A0E38D +S31A5000C47C042082E50260A0E1002082E50600A0E10510A0E1D172 +S31A5000C491FFFFEB615E85E2014054E2F9FFFF5A70A81BE9E4C0A9 +S31A5000C4A60000DCC00000ECC000000DC0A0E130D82DE90620A0B1 +S31A5000C4BBE304B04CE20050A0E1100085E20140A0E1B3F5FFEBB5 +S31A5000C4D00410A0E118009FE50620A0E3AFF5FFEB10309FE500D5 +S31A5000C4E55083E50500A0E1020000EB30A81BE9304401003C44F0 +S31A5000C4FA01000DC0A0E100D82DE90030A0E1101080E204B04C67 +S31A5000C50FE200C093E50020A0E30FE0A0E100F09CE500A81BE977 +S31A5000C5240DC0A0E1F0DF2DE944319FE504B04CE288D04DE23CDB +S31A5000C539C19FE50540A0E34C8093E50090A0E100509CE50270F2 +S31A5000C54EA0E1AC100BE5000058E31000000A0850A0E100C095D2 +S31A5000C563E514219FE520309CE524308CE50C3095E520208CE5D2 +S31A5000C578000053E30700001A0500A0E1F8109FE50320A0E10F3C +S31A5000C58DE0A0E100F09CE50C3095E5013083E30C3085E5D0604E +S31A5000C5A29FE50A0000EA003095E50500A0E10FE0A0E118F0937B +S31A5000C5B7E5C8009FE5483096E5014044E20FE0A0E103F0A0E1AA +S31A5000C5CC000054E33E0000DA003095E50500A0E10FE0A0E10C09 +S31A5000C5E1F093E5000050E3EEFFFF0AA8900BE50EA0A0E3A4A0C1 +S31A5000C5F60BE5AC301BE59C700BE5A0300BE50500A0E17C409F71 +S31A5000C60BE50030A0E3003084E5A8104BE200C095E50220A0E3CF +S31A5000C62000408DE50A3087E00FE0A0E110F09CE558309FE5005F +S31A5000C6352093E50460A0E1000052E31800000A8EFBFFEB004013 +S31A5000C64AA0E140009FE5D4F6FFEB0900A0E10A10A0E102F9FF6D +S31A5000C65FEBAC001BE50710A0E1FFF8FFEB0400A0E193FBFFEB63 +S31A5000C6740B0000EA500000003C440100CC830000304401004091 +S31A5000C6890D0300F02701003844010028110150002095E5050078 +S31A5000C69EA0E10FE0A0E118F092E5003096E5000053E3F8FFFFEA +S31A5000C6B30A000058E30400000A003095E5242093E5202083E5BB +S31A5000C6C80010A0E3241083E5F0AF1BE90DC0A0E100D82DE930C9 +S31A5000C6DD309FE5030051E104B04CE200C0A0E10200001A013099 +S31A5000C6F2A0E3003081E500A81BE900309CE50C00A0E124C09363 +S31A5000C707E50FE0A0E108F09CE500A81BE9F02701000DC0A0E1E7 +S31A5000C71CF0D92DE9DC309FE5DC209FE504B04CE20070A0E14CA4 +S31A5000C7316093E50180A0E1005092E5000056E31000000A065053 +S31A5000C746A0E100C095E5B8209FE520309CE524308CE50C30950A +S31A5000C75BE520208CE5000053E30700001A0500A0E19C109FE5D0 +S31A5000C7700320A0E10FE0A0E100F09CE50C3095E5013083E30C80 +S31A5000C7853085E5003095E50500A0E10FE0A0E118F093E574001B +S31A5000C79A9FE51FFFFFEB004050E20D00000A0700A0E10C1084F7 +S31A5000C7AFE20E20A0E3F9F4FFEB0800A0E1082094E51A1084E2FB +S31A5000C7C40E2042E2F4F4FFEB44009FE50410A0E100FFFFEB0898 +S31A5000C7D90094E5000000EA0400A0E1000056E30400000A003096 +S31A5000C7EE95E5242093E5202083E50010A0E3241083E5F0A91B1F +S31A5000C803E9500000003C440100CC83000030440100E4C00000A8 +S31A5000C818DCC000000DC0A0E1F0D92DE904B04CE20050A0E30235 +S31A5000C82D80A0E1080055E10160A0E10D0000AA34709FE58541DA +S31A5000C842A0E1060094E7001097E5064084E0042094E5D1F4FFF2 +S31A5000C857EB003097E5042094E5015085E2023083E0003087E559 +S31A5000C86C080055E1F2FFFFBAF0A91BE9F42701000DC0A0E1F082 +S31A5000C881D92DE904B04CE280D04DE20060A0E10C019FE5017019 +S31A5000C896A0E1E0FEFFEB008050E20C5088120800001AF5FAFF36 +S31A5000C8ABEB0040A0E1F0009FE5F0109FE50720A0E1EC509FE516 +S31A5000C8C038F6FFEB0400A0E1FDFAFFEBA0500BE50600A0E19C8C +S31A5000C8D5700BE5A0104BE2003096E50120A0E30FE0A0E114F0F8 +S31A5000C8EA93E5C0209FE5003092E5000053E30B00000AE0FAFF3C +S31A5000C8FFEB0040A0E1AC009FE526F6FFEB0500A0E10E10A0E3C5 +S31A5000C91454F8FFEB0E0085E20E1047E251F8FFEB0400A0E1E529 +S31A5000C929FAFFEB003096E5242093E5000052E31200000A1E10D9 +S31A5000C93E85E274009FE50420A0E3A1F6FFEB000050E30C0000C8 +S31A5000C9530A64309FE5002096E5005083E5144092E524C092E5DE +S31A5000C96854309FE50600A0E1143082E50710A0E10FE0A0E1041E +S31A5000C97DF09CE5003096E5144083E5000058E30E00000A0870AC +S31A5000C99288E52C009FE50810A0E18EFEFFEB0C0000EADCC0007C +S31A5000C9A7003811015058110150EC21010038440100681101507C +S31A5000C9BCD8830000F42701001CC80050E4C00000A0001BE59C85 +S31A5000C9D1101BE524F8FFEBF0A91BE90DC0A0E100D82DE91430C8 +S31A5000C9E69FE5000093E5002090E504B04CE20FE0A0E11CF09265 +S31A5000C9FBE500A81BE93C4401000DC0A0E1F0D82DE9F8209FE5F7 +S31A5000CA10F8109FE5022061E004B04CE2F0709FE55CD04DE200AB +S31A5000CA254097E50400A0E15BF4FFEB0E02A0E3021A80E22020DB +S31A5000CA3A90E4000031E1FCFFFF1A160F07EE9A0F07EE0000A09F +S31A5000CA4FE10000A0E10000A0E10000A0E10000A0E10000A0E116 +S31A5000CA64101F11EE011AC1E3101F01EE151F07EE0000A0E100B2 +S31A5000CA7900A0E10000A0E10000A0E10000A0E10000A0E150502D +S31A5000CA8E4BE20500A0E10FE0A0E104F0A0E1101F11EE011A81DB +S31A5000CAA3E3031081E3101F01EE0560A0E140404BE20400A0E198 +S31A5000CAB858109FE50320A0E310F6FFEB000050E31400000A48F8 +S31A5000CACD009FE5B4F5FFEB3430A0E324308DE504E0A0E10F00C6 +S31A5000CAE2BEE80DC0A0E10F00ACE80F00BEE80F00ACE800309E2C +S31A5000CAF7E500308CE50F0096E866E0FFEB0800A0E3150000EA07 +S31A5000CB0C3CCF005074CE005010440100781101507C11015005BF +S31A5000CB2132A0E3143087E530C0D5E52F10D5E52EE0D5E52D208C +S31A5000CB36D5E50C1481E18134A0E10E2482E1012082E208308749 +S31A5000CB4BE50114A0E10C2087E5910203E08330A0E1053283E226 +S31A5000CB60183087E5F0A81BE90DC0A0E110D82DE944309FE504D2 +S31A5000CB75B04CE20040A0E1033004E0000053E30A00000A300025 +S31A5000CB8A9FE50410A0E184F5FFEB28309FE5033004E00000537E +S31A5000CB9FE30100000A0400A0E310A81BE90200A0E310A81BE9B9 +S31A5000CBB40300A0E110A81BE97E007E009C110150100010000DAF +S31A5000CBC9C0A0E100D82DE934309FE50020A0E3030050E104B05F +S31A5000CBDE4CE20100008A030051E10400008A1C309FE50300504D +S31A5000CBF3E10200008A030051E10000009A0120A0E30200A0E174 +S31A5000CC0800A81BE94400005008FA00500DC0A0E130D82DE904BF +S31A5000CC1DB04CE20040A0E1103F11EE2351A0E1015015E2100072 +S31A5000CC32000A0E02A0E3021A80E2202090E4000031E1FCFFFFBC +S31A5000CC471A160F07EE9A0F07EE0000A0E10000A0E10000A0E12D +S31A5000CC5C0000A0E10000A0E10000A0E1101F11EE0C10C1E310EC +S31A5000CC711F01EE161F07EE98C09FE598E09FE598309FE5A41B3D +S31A5000CC86A0E194209FE5811BA0E1003081E58C309FE5002081F6 +S31A5000CC9BE5003084E5000091E50E3000E00E0053E10100000ACF +S31A5000CCB001C05CE2F9FFFF1A6C309FE56C209FE5033000E000C6 +S31A5000CCC52081E5000053E30B00000A043094E40128A0E30100DA +S31A5000CCDA73E30500001A042042E2000052E3020000DA04309459 +S31A5000CCEFE4010073E3F9FFFF0A000052E30000A003000055E38E +S31A5000CD040200000A101F11EE0F1081E3101F01EE30A81BE940CD +S31A5000CD194B4C00800080005000500020002000D000D0007E001A +S31A5000CD2E7E00FF00FF000DC0A0E1F0D82DE904B04CE20040A030 +S31A5000CD43E10160A0E102E0A0E100C0A0E3103F11EE2351A0E1D9 +S31A5000CD58015015E21000000A0E02A0E3021A80E2202090E40049 +S31A5000CD6D0031E1FCFFFF1A160F07EE9A0F07EE0000A0E10000FC +S31A5000CD82A0E10000A0E10000A0E10000A0E10000A0E1101F1181 +S31A5000CD97EE0C10C1E3101F01EE161F07EEAC309FE5A40BA0E1AB +S31A5000CDACA8709FE5800BA0E1003080E5070000EA9C309FE5009E +S31A5000CDC13080E5042094E4043096E4030052E18CC09F151600DC +S31A5000CDD6001A04E04EE200005EE3130000DA7C309FE5003080B6 +S31A5000CDEBE5002096E5002084E500C090E56C109FE507300CE07C +S31A5000CE00070053E10600000A4C209FE5011051E20700000A0037 +S31A5000CE15C090E502300CE0020053E1F9FFFF1A44309FE50330ED +S31A5000CE2A0CE0000053E3E1FFFF0A24309FE5003080E5000055D0 +S31A5000CE3FE30200000A101F11EE0F1081E3101F01EE0C00A0E13D +S31A5000CE54F0A81BE95000500080008000FF00FF001099109910D7 +S31A5000CE69001000404B4C007E007E000DC0A0E100D82DE904B08B +S31A5000CE7E4CE200E0A0E1103F11EE23C1A0E101C01CE210000038 +S31A5000CE930A0E02A0E3021A80E2202090E4000031E1FCFFFF1A3F +S31A5000CEA8160F07EE9A0F07EE0000A0E10000A0E10000A0E100E4 +S31A5000CEBD00A0E10000A0E10000A0E1101F11EE0C10C1E3101F6A +S31A5000CED201EE161F07EE50209FE550309FE50512A0E300308199 +S31A5000CEE7E5012042E2000052E3FCFFFFCA0020A0E3043091E471 +S31A5000CEFC012082E20130CEE4330052E3FAFFFF9A24309FE50091 +S31A5000CF113081E500005CE30200000A101F11EE0F1081E3101FF4 +S31A5000CF2601EE0000A0E300A81BE9400D030098009800FF00FF04 +S31A5000CF3B000DC0A0E110D82DE94C309FE504B04CE2000093E5E5 +S31A5000CF500140A0E1000050E30000000A0FF3FFEB0030D4E502A0 +S31A5000CF650053E30900001A1C0084E224109FE50620A0E315F51B +S31A5000CF7AFFEB000050E30300001A101084E210009FE50420A034 +S31A5000CF8FE302F3FFEB10A81BE9F827010030440100D8830000C9 +S31A5000CFA40DC0A0E1F0DF2DE90010A0E34B2FA0E36C319FE5043A +S31A5000CFB9B04CE252DF4DE2000083E5165E4BE20500A0E113F538 +S31A5000CFCEFFEB54419FE554119FE50030A0E30030C4E50130C48B +S31A5000CFE3E50230C4E50330C4E50100A0E33C219FE528304BE25D +S31A5000CFF80200C3E734319FE528204BE20300C2E72CC19FE506A1 +S31A5000D00D20A0E328304BE20C20C3E720319FE55C310BE5510F08 +S31A5000D0224BE2DDF2FFEBFFC0A0E3053DE0E328104BE203C0C18D +S31A5000D037E74F2FE0E30130A0E102C0C3E7F8309FE503C0C1E731 +S31A5000D04CF4109FE528304BE201C0C3E7EC309FE528104BE203F9 +S31A5000D061C0C1E7E4109FE528304BE201C0C3E70270A0E3D83097 +S31A5000D0769FE528104BE203C0C1E70590A0E1CC109FE528304BE2 +S31A5000D08BE201C0C3E70480A0E1C0309FE528104BE203C0C1E7A4 +S31A5000D0A00850A0E1013083E203C0C1E734004BE2A8209FE5445A +S31A5000D0B510A0E3390000EB5BAF4BE2790700EB0060A0E10900CD +S31A5000D0CAA0E14B1FA0E34430A0E300308DE50A20A0E1013043D5 +S31A5000D0DFE2A90000EBA00200EB0030D5E5000053E30800001AA1 +S31A5000D0F40130D8E5000053E30500001A0230D5E5000053E3026A +S31A5000D10900001A0340D5E5000054E31200000A4400A0E3410049 +S31A5000D11E00EB0000A0E31B0000EAF8270100D883000030440143 +S31A5000D13300C8FEFFFFC9FEFFFFCAFEFFFF55553412BCFEFFFF9A +S31A5000D148BDFEFFFFBEFEFFFFC0FEFFFFC1FEFFFFC2FEFFFFC40E +S31A5000D15DFEFFFF3CCF0050500700EB000066E07D0E50E3DBFFF0 +S31A5000D172FF3A0730A0E1017047E2000053E3CEFFFFCA4400A017 +S31A5000D187E3260000EB08309FE50000E0E3004083E5000000EA38 +S31A5000D19C38440100F0AF1BE90DC0A0E170D82DE90118A0E16C56 +S31A5000D1B1309FE504B04CE20040A0E10250A0E14108A0E100C05F +S31A5000D1C693E50360A0E100005CE30900000A0038A0E12328A0AC +S31A5000D1DBE1B430DCE1020053E10100001A0000E0E370A81BE937 +S31A5000D1F000C09CE500005CE3F7FFFF1A0008A0E12008A0E1BD56 +S31A5000D2050200EBB400C4E1085084E5003096E5003084E5000073 +S31A5000D21AA0E3004086E570A81BE9FC2701000DC0A0E1F0D92DF7 +S31A5000D22FE90008A0E14008A0E15C309FE504B04CE20060A0E384 +S31A5000D244005093E50380A0E1060055E11000000A0078A0E1B4B0 +S31A5000D25940D5E12708A0E1A60200EB000054E10600001A0000DC +S31A5000D26E56E30200000A003095E5003086E5010000EA0030951B +S31A5000D283E5003088E50560A0E1005095E5000055E3EFFFFF1ACF +S31A5000D298F0A91BE9FC2701000DC0A0E1F0D92DE9BC309FE504C9 +S31A5000D2ADD04DE20070A0E1086097E504B04CE2B620D6E1018052 +S31A5000D2C2A0E1045097E5030052E10030A003B630C601B430D640 +S31A5000D2D7E1B230C5E1B400D6E1860200EB0040A0E10500A0E15E +S31A5000D2EC0A0200EB0020A0E10600A0E10410A0E1E30100EB0054 +S31A5000D30108B0E11D00001A60309FE5005093E5000055E31900C4 +S31A5000D316000AB420D5E1B230D6E1030052E11200001AB400D693 +S31A5000D32BE1730200EB084040E2B000D6E1700200EB0038A0E16F +S31A5000D3400500A0E1081086E22338A0E100308DE50420A0E10851 +S31A5000D35530A0E10FE0A0E108F095E50700A0E1BB0100EB0600A5 +S31A5000D36A00EAFFFF0000FC270100005095E5000055E3E5FFFF67 +S31A5000D37F1A0700A0E1B30100EBF0A91BE90DC0A0E1F0DF2DE932 +S31A5000D3940338A0E104B04CE20160A0E100A0A0E10290A0E1E892 +S31A5000D3A9C09FE54378A0E1F450DBE10C0056E13500008AD800BF +S31A5000D3BE9FE5840100EB008050E23100000A083086E2BC30C8CF +S31A5000D3D3E1084098E50508A0E1045098E52008A0E1450200EB0F +S31A5000D3E8B000C4E10708A0E12008A0E1410200EBB200C4E1BC0B +S31A5000D3FD00D8E13E0200EB0030A0E30A10A0E1B400C4E1062014 +S31A5000D412A0E1B630C4E1080084E2DFF1FFEB0C0085E274109FE5 +S31A5000D427E50420A0E3DBF1FFEB100085E20910A0E10420A0E3A0 +S31A5000D43CD7F1FFEB1170A0E30970C5E5B430D4E1B230C5E1BCCF +S31A5000D45160D8E10500A0E1AF0100EB0020A0E10400A0E10610FA +S31A5000D466A0E1880100EB0008A0E12008A0E1210200EB0710A06F +S31A5000D47BE1B600C4E10920A0E10800A0E1F10000EB0800A0E172 +S31A5000D490700100EBF0AF1BE9BE050000EA050000D88300000D18 +S31A5000D4A5C0A0E1F0D92DE904B04CE210D04DE20080A0E10240C8 +S31A5000D4BAA0E10400A0E10170A0E12C604BE20610A0E10350A0CC +S31A5000D4CFE1440600EB000050E30F0000BAB400D4E1060200EB84 +S31A5000D4E40048A0E1B400D5E12448A0E1020200EB0038A0E1080D +S31A5000D4F900A0E10710A0E12338A0E100308DE50620A0E1043056 +S31A5000D50EA0E19DFFFFEB0000A0E3030000EA0C009FE50C109FF0 +S31A5000D523E51FF3FFEB0000E0E3010000EAA8110150CC110150D6 +S31A5000D538F0A91BE90DC0A0E1F0D92DE964009FE50240A0E10013 +S31A5000D54D4080E55C809FE504B04CE2000098E50370A0E1F450D7 +S31A5000D562DBE14C609FE58CF1FFEB003096E5000053E309000021 +S31A5000D5770A0508A0E12008A0E1DE0100EB001096E5B400C1E15D +S31A5000D58C003097E5003081E50020A0E3002088E5F0A91BE91411 +S31A5000D5A1009FE50410A0E1FEF2FFEBF0A91BE90428010000283A +S31A5000D5B6010008280100DC1101500DC0A0E1F0DF2DE904B04C67 +S31A5000D5CBE20CD04DE20050A0E1B400D3E10160A0E104909BE5D9 +S31A5000D5E00270A0E1C50100EB0048A0E134004BE214209FE52436 +S31A5000D5F518A0E1E9FEFFEB000050E3020000AA0000E0E31F00A0 +S31A5000D60A00EA3CD5005078109FE578009FE578309FE504109989 +S31A5000D61FE8005081E50480A0E1006080E501A0A0E1007083E53E +S31A5000D6340060E0E30070A0E1821262E054009FE5012182E090B5 +S31A5000D6491C83E02333A0E1825183E0140600EB0040A0E112060C +S31A5000D65E00EB000064E0050050E10400002A3E0100EB00309ADA +S31A5000D673E5000053E3F7FFFF1A006097E52808A0E1E7FEFFEBC6 +S31A5000D6880600A0E1030000EA002801000428010008280100D369 +S31A5000D69D4D6210F0AF1BE90DC0A0E110D82DE90030D0E504B0DB +S31A5000D6B24CE2FF0053E30A00001A0130D0E5FF0053E307000064 +S31A5000D6C71A0230D0E5FF0053E30400001A0330D0E5FF0053E387 +S31A5000D6DC0100001A0100A0E310A81BE94C409FE50420A0E304CD +S31A5000D6F110A0E136F3FFEB000050E3F7FFFF0A0030D4E500000F +S31A5000D70653E30900001A0130D4E5000053E30600001A0230D419 +S31A5000D71BE5000053E30300001A0330D4E50100A0E3000053E3C5 +S31A5000D7300000000A0000A0E310A81BE9D88300000DC0A0E1F0AC +S31A5000D745D82DE904B04CE20CD04DE20050A0E1044095E50160AE +S31A5000D75AA0E1100084E2CFFFFFEB000050E30700000A0400A0CD +S31A5000D76FE10010D4E50020A0E30F1001E20111A0E1C20000EBC0 +S31A5000D7840008B0E10200000A0500A0E1B00000EB2D0000EA2835 +S31A5000D799704BE20700A0E10C1084E20420A0E3FCF0FFEB2400DD +S31A5000D7AE4BE20610A0E10620A0E3F8F0FFEB0030D4E5B200D462 +S31A5000D7C3E10F3003E20361A0E14B0100EB000066E0BC00C5E132 +S31A5000D7D80930D4E5060053E30C00000A020000CA010053E3039C +S31A5000D7ED00000A140000EA110053E30C00000A110000EA05006C +S31A5000D802A0E1063084E0083085E50710A0E1420100EB0D00002B +S31A5000D817EA0500A0E1063084E0083085E50710A0E1B90200EBBC +S31A5000D82C070000EA0500A0E1063084E0083085E50710A0E196B0 +S31A5000D841FEFFEB010000EA0500A0E1810000EBF0A81BE90DC04E +S31A5000D856A0E1F0DF2DE90060A0E1083086E2080113E8038048B1 +S31A5000D86BE004B04CE2045096E54801A0E1BC30D6E10F0000E263 +S31A5000D880083083E0BC30C6E1400080E30000C5E50070A0E301CE +S31A5000D89570C5E501A0A0E1BC00D6E10290A0E1150100EB8040A5 +S31A5000D8AA9FE5B200C5E1B000D4E1110100EBB400C5E1B030D4C7 +S31A5000D8BFE16C109FE5013083E2B030C4E1B670C5E14030A0E343 +S31A5000D8D40830C5E509A0C5E50420A0E3BA70C5E10C0085E2AC1E +S31A5000D8E9F0FFEB100085E20910A0E10420A0E3A8F0FFEB0500BB +S31A5000D8FEA0E10810A0E10720A0E1600000EB0008A0E12008A061 +S31A5000D913E1F90000EB041089E2BA00C5E1022BA0E30600A0E1CE +S31A5000D928CB0000EBF0AF1BE90C280100D88300000DC0A0E1F06D +S31A5000D93DD82DE97C209FE5003092E504B04CE2000053E31A0098 +S31A5000D952001A03E0A0E10130A0E3003082E50E40A0E15C709F67 +S31A5000D967E504C0A0E158509FE503E0A0E354609FE50500A0E1DB +S31A5000D97C001096E507208CE0023002E2022083E05ECE8CE210DD +S31A5000D9913085E2042083E70CC08CE2001080E501E05EE22830DE +S31A5000D9A69FE50010A0E1BE30C0E1144084E2140081E2F0FFFF53 +S31A5000D9BB5A001086E5F0A81BE9E8830000602801001028010063 +S31A5000D9D010400100EA0500000DC0A0E100D82DE960309FE50458 +S31A5000D9E5B04CE200C093E500005CE31200000A00209CE50020A5 +S31A5000D9FA83E510309CE504308CE540109FE5143083E208308CB3 +S31A5000DA0FE538E09FE50030A0E3BC30CCE1003091E52C209FE569 +S31A5000DA24013083E2003081E5001092E500009EE5033061E000ED +S31A5000DA390053E100308EC50C00A0E100A81BE910400100E083DE +S31A5000DA4E0000DC830000E48300000DC0A0E100D82DE920209F8C +S31A5000DA63E5003092E51C109FE5013043E2003082E5003091E589 +S31A5000DA78003080E504B04CE2000081E500A81BE9E08300001047 +S31A5000DA8D4001000DC0A0E100D82DE9021051E204B04CE202C0C8 +S31A5000DAA2A0E10300004AB230D0E0021051E203C08CE0FBFFFF4C +S31A5000DAB75A010071E30500001A0030D0E5FF20CEE302E083E13B +S31A5000DACCFFECCEE30E38A0E123C88CE00C08A0E12C28A0E1309B +S31A5000DAE1109FE520C882E00C3061E001005CE103C0A0C10C0011 +S31A5000DAF6E0E10008A0E12E0880E160E8A0E1200CA0E10008A0C6 +S31A5000DB0BE10E0C80E12008A0E100A81BE9FFFF00000DC0A0E1B2 +S31A5000DB2000D82DE90020A0E304D04DE2BC30D0E104B04CE21077 +S31A5000DB35204BE50910D0E50F104BE5BE20D0E1B011D0E1B2C1A4 +S31A5000DB4AD0E1023083E0013083E0B0215BE10C3083E0B200D068 +S31A5000DB5FE1023083E0000083E000A81BE90DC0A0E110D82DE98A +S31A5000DB7404B04CE210D04DE2B4009FE594FFFFEB004050E2022C +S31A5000DB8900001AA8009FE584F1FFEBFEFFFFEA101094E5942059 +S31A5000DB9E9FE520004BE2DBFAFFEBBC00C4E10008B0E12600006C +S31A5000DBB30A84209FE5003092E5B4015BE1013083E2003082E510 +S31A5000DBC84C0000EB020B50E30500000A68309FE5030050E10C10 +S31A5000DBDD00000A0400A0E19BFFFFEBE3FFFFEA54309FE50020D7 +S31A5000DBF293E5101094E5012082E2002083E5041084E50400A089 +S31A5000DC07E11A104BE2CBFEFFEBD9FFFFEA30309FE5002093E58A +S31A5000DC1C101094E5012082E2002083E5041084E50400A0E1C72E +S31A5000DC310300EBD0FFFFEAEA05000008120150F4830000060803 +S31A5000DC460000EC830000F08300000400A0E17FFFFFEB10A81BD1 +S31A5000DC5BE90DC0A0E170D82DE904B04CE210D04DE20050A0E107 +S31A5000DC7028604BE20600A0E10240A0E10620A0E3C6EFFFEB22E0 +S31A5000DC85004BE238109FE50620A0E3C2EFFFEB0448A0E12408FE +S31A5000DC9AA0E1170000EBBC014BE1101095E5BC20D5E10600A0E1 +S31A5000DCAFE11BFAFFEB10209FE5003092E5013083E2003082E5A2 +S31A5000DCC4010000EA30440100F883000070A81BE90DC0A0E12090 +S31A5000DCD93CA0E1003C83E1FF2800E200D82DE9FF0C00E200049B +S31A5000DCEEA0E1220480E1000083E104B04CE200A81BE90DC0A064 +S31A5000DD03E100D82DE90008A0E1FF3800E2200CA0E1230480E10F +S31A5000DD1804B04CE200A81BE90DC0A0E130D82DE90040A0E108DD +S31A5000DD2D0094E504B04CE2B030D0E10150A0E1080053E3160079 +S31A5000DD42001ABC10D4E10020A0E34FFFFFEB0008A0E120C8B0DF +S31A5000DD57E11000001A083094E500C0C3E5082094E5B2C0C2E187 +S31A5000DD6C080094E5BC10D4E10C20A0E144FFFFEB0008A0E120C7 +S31A5000DD8108A0E1DDFFFFEB083094E50110A0E3B200C3E1052028 +S31A5000DD96A0E10400A0E1ACFEFFEB0400A0E12BFFFFEB30A81BFC +S31A5000DDABE90DC0A0E1F0DF2DE904B04CE204D04DE20060A0E12B +S31A5000DDC00140A0E1307086E2048097E5020014E3085097E5025F +S31A5000DDD590A0E10F00000A1830A0E3BC30C7E10C30D5E5500113 +S31A5000DDEA9FE59030C3E3603083E30C30C5E5B5FFFFEB2C104BE3 +S31A5000DDFFE22C000BE50420A0E3140085E263EFFFEB0030A0E3AA +S31A5000DE14B831C6E1060000EAB831D6E1143083E2BC30C7E10C3A +S31A5000DE2920D5E5A020C2E3502082E30C20C5E50C30D5E50F306F +S31A5000DE3EC3E30C30C5E5580096E5A1FFFFEB040085E554009638 +S31A5000DE53E59EFFFFEB0030A0E3B031C5E1000059E3080085E510 +S31A5000DE6808A086E21800001AB401D6E1A1FFFFEBB000C5E1B60B +S31A5000DE7D01D6E19EFFFFEBB200C5E10D40C5E5B831D6E100000C +S31A5000DE9253E3083084130D30C515A0009FE596FFFFEBBE00C5E3 +S31A5000DEA7E1B291C5E10420A0E390109FE50C0088E238EFFFEBF4 +S31A5000DEBC100088E20A10A0E10420A0E334EFFFEB0630A0E30970 +S31A5000DED130C8E5BC00D7E188FFFFEBB200C8E1BC40D7E108000D +S31A5000DEE6A0E10BFFFFEB0020A0E10500A0E10410A0E1E4FEFFBF +S31A5000DEFBEB0008A0E12008A0E17DFFFFEB0610A0E3B001C5E149 +S31A5000DF100A20A0E10700A0E14DFEFFEB043096E50A0053E30A45 +S31A5000DF2500001A1C109FE51C0086E218209FE50630A0E1B2021C +S31A5000DF3A00EB110000EAB2050402B2050000D8830000C0D40132 +S31A5000DF4F0054E100500D30D5E5030013E30200001AB831D6E136 +S31A5000DF64000053E30600000A1C0086E2FA1FA0E308209FE5063A +S31A5000DF7930A0E1A10200EB000000EA38E10050F0AF1BE90DC03B +S31A5000DF8EA0E1F0DF2DE904B04CE208D04DE22C000BE52C301B46 +S31A5000DFA3E5089090E5046093E5080099E530100BE546FFFFEB60 +S31A5000DFB800A0A0E1040099E543FFFFEB0080A0E1B200D9E14B77 +S31A5000DFCDFFFFEB0058A0E1B000D9E14558A0E147FFFFEB1490CB +S31A5000DFE286E20048A0E12C301BE51470A0E3BC70C3E10A00A0C6 +S31A5000DFF7E15030A0E30C30C9E54448A0E132FFFFEB040089E557 +S31A5000E00C0800A0E12FFFFFEB080089E5010BA0E337FFFFEBBE25 +S31A5000E02100C9E10030A0E3B231C9E10558A0E1B031C9E1250814 +S31A5000E036A0E130FFFFEBB401C6E10448A0E12408A0E12CFFFFE5 +S31A5000E04BEBB200C9E10D70C9E50420A0E370109FE50C0086E2D9 +S31A5000E060CEEEFFEB100086E230101BE50420A0E3CAEEFFEB06A8 +S31A5000E07550A0E30950C6E52C301BE5BC00D3E11DFFFFEBB200E5 +S31A5000E08AC6E12C301BE5BC40D3E10600A0E19FFEFFEB0020A0AA +S31A5000E09FE10900A0E10410A0E178FEFFEB0008A0E12008A0E184 +S31A5000E0B411FFFFEBB001C9E130201BE52C001BE50510A0E1E1B9 +S31A5000E0C9FDFFEB000000EAD8830000F0AF1BE90DC0A0E100D8F7 +S31A5000E0DE2DE94C309FE50010A0E3002093E504B04CE201005261 +S31A5000E0F3E10D00000A03C0A0E1000052E10600001A000051E3FF +S31A5000E1080200000A003092E5003081E5010000EA003092E500D1 +S31A5000E11D308CE50210A0E1002092E5000052E3F2FFFF1A00A8E5 +S31A5000E1321BE9144001000DC0A0E100D82DE90010A0E30120A099 +S31A5000E147E304B04CE216FFFFEB00A81BE90DC0A0E100D82DE9C1 +S31A5000E15C0030A0E3043080E504B04CE2DAFFFFEB00A81BE90DAE +S31A5000E171C0A0E110D82DE90040A0E1440094E504B04CE20000A4 +S31A5000E18650E30500000A003090E5443084E52FFEFFEB4400947B +S31A5000E19BE5000050E3F9FFFF1A10A81BE90DC0A0E110D82DE9E8 +S31A5000E1B00030A0E304B04CE20040A0E1043084E51C0084E22966 +S31A5000E1C50200EB0400A0E1E7FFFFEB0400A0E1BFFFFFEB10A8C8 +S31A5000E1DA1BE90DC0A0E1F0D82DE90170A0E1082097E5BC10D771 +S31A5000E1EFE104B04CE20C30D2E50050A0E1040092E52332A0E1ED +S31A5000E2040331A0E1014063E0036082E0AFFEFFEB542095E5002C +S31A5000E2193062E0000053E3170000CA023060E0044063E00360B5 +S31A5000E22E86E0000054E3120000DA043082E0543085E54420957F +S31A5000E243E50030A0E3003087E5030052E10600000A000000EA0C +S31A5000E258002092E5003092E5000053E3FBFFFF1A007082E502FB +S31A5000E26D0000EA447085E54C4085E5486085E50100A0E3F0A81A +S31A5000E2821BE90000A0E3F0A81BE90DC0A0E130D82DE9083091D9 +S31A5000E297E50040A0E1080093E504B04CE28AFEFFEB583094E5A1 +S31A5000E2AC0050A0E1053063E0000053E3140000DA1C0084E2EA2E +S31A5000E2C10100EB582094E5B831D4E1051062E0030051E10310D8 +S31A5000E2D6A0A1000051E30B0000DAB831D4E1033061E0B831C4C4 +S31A5000E2EBE1012082E0582084E50338B0E10400000A380094E5F8 +S31A5000E300B821D4E1140080E2011080E023EEFFEB30A81BE90D59 +S31A5000E315C0A0E1F0DD2DE90080A0E1BC00D8E1086098E504B06A +S31A5000E32A4CE2044098E50170A0E171FEFFEBB200C4E100A0A0B7 +S31A5000E33FE3BC50D8E10400A0E1F3FDFFEB0020A0E10600A0E144 +S31A5000E3540510A0E1CCFDFFEB0008B0E1F600001AC4339FE500F1 +S31A5000E3695093E5000000EA005095E5000055E31200000AB200C7 +S31A5000E37ED6E1B441D5E15DFEFFEB000054E1F7FFFF1AB631D58D +S31A5000E393E1000053E30A00000AB000D6E10340A0E155FEFFEB8C +S31A5000E3A8000054E1EFFFFF1A0700A0E1081085E20420A0E3041C +S31A5000E3BDF0FFEB000050E3E9FFFF1A000055E3D800000A0C00C1 +S31A5000E3D285E2041087E20620A0E3EFEDFFEB043095E50200538A +S31A5000E3E7E30700000A0D30D6E5040013E30400000A0500A0E151 +S31A5000E3FC69FFFFEB0800A0E193FDFFEBF0AD1BE9043095E50111 +S31A5000E4113043E2090053E303F19F97C20000EA48E40050A8E42E +S31A5000E426005040E7005010E5005010E50050BCE5005000E60063 +S31A5000E43B5094E60050D8E600501CE700500D30D6E5020013E30B +S31A5000E4501000000A0230A0E3043085E5040096E51BFEFFEB0171 +S31A5000E4653080E2B000D6E1543085E522FEFFEBB601C5E10020DE +S31A5000E47A97E51210A0E3082085E50030A0E3B831C5E10500A09D +S31A5000E48FE1B035C5E18C0000EA0800A0E10710A0E1B9FEFFEB7E +S31A5000E4A4A50000EA1C0085E26F0100EB0D30D6E5041013E2029D +S31A5000E4B900000A0130A0E3043085E59D0000EA020013E303001A +S31A5000E4CE000A0500A0E10120A0E333FEFFEB970000EA100013F0 +S31A5000E4E3E39500000A080096E5F8FDFFEB583095E5013083E252 +S31A5000E4F8030050E18F00001A0430A0E3043085E5580085E58B3A +S31A5000E50D0000EA0D30D6E5544095E5100013E30200000A05009C +S31A5000E522A0E10810A0E157FFFFEB0500A0E10810A0E128FFFFEF +S31A5000E537EB0D30D6E500A0A0E1010013E30800000A040096E5ED +S31A5000E54CE0FDFFEB543095E5030050E10300001A013080E25467 +S31A5000E5613085E50520A0E3042085E5543095E5040053E1020047 +S31A5000E576001AB035D5E1000053E36E00000AB841D5E1000054D4 +S31A5000E58BE30700001A1C0085E2350100EB0500A0E11010A0E354 +S31A5000E5A00420A0E100FEFFEBB045C5E1630000EA0130A0E3B037 +S31A5000E5B535C5E1600000EA0D30D6E5100013E35D00000A05006C +S31A5000E5CAA0E10810A0E12DFFFFEB080096E5BDFDFFEB58309572 +S31A5000E5DFE5013083E2030050E15400001A0030A0E3043085E563 +S31A5000E5F40500A0E1B6FEFFEB4F0000EA0D30D6E5100013E3174A +S31A5000E60900000A0500A0E10810A0E11CFFFFEB080096E5ACFD4C +S31A5000E61EFFEB583095E5013083E2030050E10E00001A0D30D6A0 +S31A5000E633E5010013E30900000A0500A0E11010A0E3543095E566 +S31A5000E6480A20A0E3042085E5013083E2543085E50A2042E2D288 +S31A5000E65DFDFFEB010000EA0830A0E3043085E50D30D6E501002E +S31A5000E67213E33100000A1C0085E2FB0000EB0500A0E11110A05C +S31A5000E687E3543095E50920A0E30A0000EA0500A0E10810A0E188 +S31A5000E69CCEFEFFEB0D30D6E500A0A0E1010013E32300000A051B +S31A5000E6B100A0E11010A0E3543095E50A20A0E3042085E5013070 +S31A5000E6C683E2543085E50020A0E3B5FDFFEB190000EA0D30D641 +S31A5000E6DBE5100013E31600000A0500A0E10810A0E1E6FEFFEBDC +S31A5000E6F0080096E576FDFFEB583095E5013083E2030050E10D06 +S31A5000E70500001A1C0085E2D70000EB0A30A0E3043085E50800E7 +S31A5000E71A00EA0500A0E10010A0E30120A0E39FFDFFEB03000064 +S31A5000E72FEA144001000800A0E10710A0E112FEFFEB00005AE3E8 +S31A5000E7440100001A0800A0E1C1FCFFEBF0AD1BE90DC0A0E10030 +S31A5000E759D82DE904B04CE201FDFFEBD90000EB00A81BE90DC060 +S31A5000E76EA0E130D82DE954209FE504B04CE20040A0E10158A00D +S31A5000E783E14558A0E10010A0E323EFFFEB0130A0E3043084E54C +S31A5000E798B451C4E15C2084E2402084E5342084E524109FE52428 +S31A5000E7AD209FE5703084E2383084E5BE23C4E1003091E500302A +S31A5000E7C284E50000A0E3004081E530A81BE948060000144001DB +S31A5000E7D700EA0500000DC0A0E110D82DE90040A0E1043094E52E +S31A5000E7EC04B04CE2010000EAD6FFFFEB043094E5000053E30251 +S31A5000E80100000AB831D4E1000053E3F8FFFF1A10A81BE90DC035 +S31A5000E816A0E110D82DE904B04CE20040A0E1ECFFFFEB041094F8 +S31A5000E82BE5020051E30030A0130130A003040051E30320A011A4 +S31A5000E8400120A003000052E30600000A0400A0E11110A0E30734 +S31A5000E85530A0E3043084E50020A0E351FDFFEB060000EA050038 +S31A5000E86A51E30400001A0400A0E10630A0E3043084E51110A055 +S31A5000E87FE349FDFFEB0400A0E138FEFFEB10A81BE90DC0A0E16C +S31A5000E894F0D82DE904B04CE20160A0E1005052E20040A0E10230 +S31A5000E8A90000DA4C3094E5000053E30300001A0000A0E3F0A8C7 +S31A5000E8BE1BE94C0084E52B0000EA043094E5040053E30070A02A +S31A5000E8D3E3170000EA481094E50600A0E1AEECFFEB4C3094E525 +S31A5000E8E8440094E5037087E0002090E5036086E0442084E505FE +S31A5000E8FD5063E054FCFFEB440094E5000050E3EBFFFF0A0810E8 +S31A5000E91290E50C30D1E5BC20D0E12332A0E1032142E04C20849A +S31A5000E927E50C30D1E52332A0E1031181E0481084E5000055E36A +S31A5000E93C0D00000A4C2094E5020055E1E2FFFFAA0600A0E148E3 +S31A5000E9511094E50520A0E190ECFFEB483094E5057087E04C208D +S31A5000E96694E5053083E0483084E5022065E04C2084E50700A071 +S31A5000E97BE1F0A81BE90DC0A0E170D82DE904B04CE20040A0E165 +S31A5000E990380094E5005052E2010000CA0000A0E370A81BE90479 +S31A5000E9A53094E5043043E2010053E30100009A0000E0E370A858 +S31A5000E9BA1BE9B861D4E1000056E30C00001A34309FE514008045 +S31A5000E9CFE2030055E10350A0210520A0E16FECFFEB0400A0E13E +S31A5000E9E41010A0E3B851C4E10620A0E1EDFCFFEB0500A0E17007 +S31A5000E9F9A81BE90000A0E370A81BE9B20500000DC0A0E170D81B +S31A5000EA0E2DE904B04CE20060A0E10240A0E1041086E50350A08F +S31A5000EA23E1200100EB080086E50C4086E534309FE5002093E5F1 +S31A5000EA380310A0E1105086E5000052E30400000A060052E10593 +S31A5000EA4D00000A002092E5000052E3FAFFFF1A003091E50030A0 +S31A5000EA6286E5006081E570A81BE9184001000DC0A0E100D82D50 +S31A5000EA77E94C109FE50020A0E3003091E504B04CE2020053E10A +S31A5000EA8C0D00000A000053E10700001A000052E30200000A0072 +S31A5000EAA13093E5003082E500A81BE9003093E5003081E500A839 +S31A5000EAB61BE90320A0E1003093E5000053E3F1FFFF1A00A81BA3 +S31A5000EACBE9184001000DC0A0E170D82DE970309FE504B04CE2EC +S31A5000EAE00050A0E3004093E50360A0E1050054E11500000AEC17 +S31A5000EAF50000EB0C0094E9000063E0020050E10C00003A000086 +S31A5000EB0A55E30200000A003094E5003085E5010000EA0030946A +S31A5000EB1FE5003086E5100094E50FE0A0E10CF094E5004096E5E2 +S31A5000EB340050A0E3010000EA0450A0E1004094E5000054E3E90A +S31A5000EB49FFFF1A70A81BE9184001000DC0A0E1F0D92DE9007037 +S31A5000EB5EA0E1045097E5B200D5E104B04CE263FCFFEB0040A088 +S31A5000EB73E1B000D5E160FCFFEB010050E3020B54033B00001ABD +S31A5000EB88186085E20600A0E1EC809FE50420A0E30810A0E10C80 +S31A5000EB9DEEFFEB000050E33300001AB600D5E153FCFFEB01000F +S31A5000EBB250E31C00001A0200A0E34FFCFFEB0E4085E20410A06C +S31A5000EBC7E1B600C5E10420A0E30600A0E1F1EBFFEB126085E2D9 +S31A5000EBDC0600A0E1085085E20510A0E10620A0E3EBEBFFEB0485 +S31A5000EBF100A0E10810A0E10420A0E3E7EBFFEB0500A0E17C102A +S31A5000EC069FE50620A0E3E3EBFFEB1C30A0E3BC30C7E10700A0B4 +S31A5000EC1BE168209FE50610A0E10CFCFFEB120000EAB600D5E1B0 +S31A5000EC3032FCFFEB020050E30E00001A4C409FE5003094E5004B +S31A5000EC450053E30A00000A0E1085E2080094E50420A0E3DDEDA3 +S31A5000EC5AFFEB006050E20400001A081085E2040094E50620A0F3 +S31A5000EC6FE3CAEBFFEB006084E50700A0E175FBFFEBF0A91BE970 +S31A5000EC84D883000030440100060800001C4001000DC0A0E1F0AC +S31A5000EC99DF2DE904B04CE208D04DE20090A0E12C00A0E30180F1 +S31A5000ECAEA0E148FBFFEB007050E20400001A470000EA0700A0B5 +S31A5000ECC3E163FBFFEB0400A0E1440000EA044097E50100A0E3C6 +S31A5000ECD808FCFFEBB600C4E10100A0E305FCFFEBB000C4E102C2 +S31A5000ECED0BA0E302FCFFEBB200C4E10660A0E30460C4E50450A5 +S31A5000ED02A0E30550C4E50520A0E184109FE50E0084E2A1EBFF68 +S31A5000ED17EB080084E278109FE50620A0E19DEBFFEB180084E295 +S31A5000ED2C0910A0E10520A0E199EBFFEBFF30A0E330304BE52F5D +S31A5000ED41304BE52E304BE52D304BE52C304BE52B304BE5442071 +S31A5000ED569FE5016086E2048082E530A04BE2089082E5FE3043AD +S31A5000ED6BE2003082E50280A0E11C30A0E3BC30C7E10700A0E1D6 +S31A5000ED801C209FE50A10A0E1B3FBFFEB460000EB0050A0E1072C +S31A5000ED950000EAD8830000304401001C400100060800006FFB84 +S31A5000EDAAFFEB004098E5000054E3C1FFFF0A3B0000EB000065CC +S31A5000EDBFE0F90050E3F7FFFF9A0630A0E1016046E2000053E3D8 +S31A5000EDD4E6FFFFCA0700A0E11DFBFFEB0000E0E3F0AF1BE90D29 +S31A5000EDE9C0A0E1F0DD2DE904B04CE20080A0E10150A0E1A0A0A6 +S31A5000EDFE9FE50070A0E30A60A0E10800A0E10640A0E10410A044 +S31A5000EE13E10420A0E36DEDFFEB003050E20E00000A0C6084E27C +S31A5000EE28017087E20F0057E3F4FFFFDA0500A0E10810A0E1046D +S31A5000EE3D20A0E356EBFFEB0800A0E1041085E290FFFFEB00001F +S31A5000EE5250E3050000AA0000E0E3F0AD1BE9070096E8070085FE +S31A5000EE67E80300A0E1F0AD1BE930E09FE500C09EE5070095E8D8 +S31A5000EE7C8C308CE003318AE0070083E801C08CE200C08EE51081 +S31A5000EE91005CE30030A00300308E050000A0E3F0AD1BE92840B5 +S31A5000EEA60100FC8300000DC0A0E100D82DE928309FE5FA0FA0C0 +S31A5000EEBBE3482093E504B04CE20FE0A0E102F0A0E114109FE5BC +S31A5000EED0003091E5013083E20300A0E1003081E500A81BE95085 +S31A5000EEE5000000008400000DC0A0E1F0DF2DE904B04CE214D045 +S31A5000EEFA4DE20270A0E101A0A0E12C000BE5006053E2BF0000F9 +S31A5000EF0F1A0A0057E14200009A010857E30300002AFF0057E3B6 +S31A5000EF240800A0830000A093020000EA010457E31800A023100E +S31A5000EF3900A03340139FE53220A0E10230D1E7003083E0200053 +S31A5000EF4E73E20600000A1770A0E12C101BE5203060E23133A019 +S31A5000EF63E11AA083E11110A0E12C100BE50798A0E12998A0E114 +S31A5000EF780A00A0E12788A0E10810A0E1710200EB0040A0E10AB1 +S31A5000EF8D00A0E10810A0E1110100EB0060A0E1990602E02C1064 +S31A5000EFA21BE52138A0E1044883E1020054E10500002A0160466D +S31A5000EFB7E2074094E00200002A020054E101604632074084301B +S31A5000EFCC044062E00400A0E10810A0E15C0200EB0050A0E10418 +S31A5000EFE100A0E10810A0E1FC0000EB990002E02C101BE50138D4 +S31A5000EFF6A0E12338A0E1055883E1020055E10400002A010040EB +S31A5000F00BE2075095E00100002A020055E10100403206C880E1E7 +S31A5000F020E60000EA000057E30300001A0100A0E30210A0E1E95E +S31A5000F0350000EB0070A0E1010857E30720A0E10300002AFF007D +S31A5000F04A57E30800A0830000A093020000EA010457E31800A0E0 +S31A5000F05F231000A03318129FE53220A0E10230D1E7003083E042 +S31A5000F074200073E20130A00330300B050AA067003400000A2009 +S31A5000F0892060E21770A0E12C101BE53A52A0E13132A0E1111064 +S31A5000F09EA0E12C100BE51AA083E12788A0E10798A0E12998A08B +S31A5000F0B3E10500A0E10810A0E1230200EB0040A0E10500A0E19B +S31A5000F0C80810A0E1C30000EB0060A0E1990602E02A38A0E1044D +S31A5000F0DD4883E1020054E10500002A016046E2074094E0020070 +S31A5000F0F2002A020054E10160463207408430044062E00400A054 +S31A5000F107E10810A0E10F0200EB0050A0E10400A0E10810A0E138 +S31A5000F11CAF0000EB990002E00A38A0E12338A0E1055883E10211 +S31A5000F1310055E10500002A010040E2075095E00200002A0200F1 +S31A5000F14655E10100403207508530066880E105A062E030600B58 +S31A5000F15BE50798A0E12998A0E10A00A0E12788A0E10810A0E1AE +S31A5000F170F60100EB0040A0E10A00A0E10810A0E1960000EB00EC +S31A5000F18560A0E1990602E02C101BE52138A0E1044883E10200F5 +S31A5000F19A54E10500002A016046E2074094E00200002A020054E0 +S31A5000F1AFE10160463207408430044062E00400A0E10810A0E19C +S31A5000F1C4E10100EB0050A0E10400A0E10810A0E1810000EB991F +S31A5000F1D90002E02C101BE50138A0E12338A0E1055883E1020054 +S31A5000F1EE55E10400002A010040E2075095E00100002A020055E1 +S31A5000F203E10100403206C880E16D0000EA0A0056E10020A08342 +S31A5000F21830200B8502C0A0816800008A010856E30620A0E103EA +S31A5000F22D00002AFF0056E30800A0830000A093020000EA0104C5 +S31A5000F24256E31800A0231000A03330109FE53220A0E10230D1D0 +S31A5000F257E7003083E0200073E20800001A2C301BE506005AE19E +S31A5000F26C0700539101C0A0E300C0A0310010A0E330100BE55064 +S31A5000F2810000EA28120150202060E23732A0E1166083E11770E0 +S31A5000F296A0E12C101BE53A52A0E13132A0E11110A0E12C100B76 +S31A5000F2ABE51AA083E12698A0E10628A0E12228A0E10500A0E1B6 +S31A5000F2C034200BE50910A0E1A00100EB0040A0E10500A0E10929 +S31A5000F2D510A0E1400000EB34201BE50080A0E1980202E02A38DF +S31A5000F2EAA0E1044883E1020054E10500002A018048E20640949D +S31A5000F2FFE00200002A020054E10180483206408430044062E0E6 +S31A5000F3140400A0E10910A0E18B0100EB0050A0E10400A0E10999 +S31A5000F32910A0E12B0000EB34201BE5900202E00A38A0E12338EC +S31A5000F33EA0E1055883E1020055E10500002A010040E2065095AD +S31A5000F353E00200002A020055E1010040320650853008C880E15C +S31A5000F36805A062E02C08A0E12738A0E10018CCE10328C7E19195 +S31A5000F37D020EE0900202E0930101E0900303E0011092E001381A +S31A5000F392832201E89EE02138A3E00A0053E10500008A2C101B04 +S31A5000F3A7E50030A0130130A003000053E301005E110000009A1F +S31A5000F3BC01C04CE20020A0E330200BE53CC00BE530301BE54088 +S31A5000F3D1204BE238300BE5030092E9F0AF1BE9000051E31F00B8 +S31A5000F3E6000A0130A0E30020A0E3010050E11900003A01025182 +S31A5000F3FBE3000051310112A0310332A031FAFFFF3A020151E3EF +S31A5000F410000051318110A0318330A031FAFFFF3A010050E101C4 +S31A5000F42500402003208221A10050E1A1004020A32082212101FB +S31A5000F43A50E12101402023218221A10150E1A1014020A32182B2 +S31A5000F44F21000050E32332B0112112A011EFFFFF1A0200A0E17A +S31A5000F4640EF0A0E104E02DE5640100EB0000A0E30080BDE80DC3 +S31A5000F479C0A0E1F0DF2DE904B04CE224D04DE20260A0E1018099 +S31A5000F48EA0E138000BE530C04BE234C00BE5007053E29700002D +S31A5000F4A31A080056E11800009A010856E30300002AFF0056E34C +S31A5000F4B80800A0830000A093020000EA010456E31800A0231076 +S31A5000F4CD00A033D4129FE53220A0E10230D1E7003083E02030F7 +S31A5000F4E273E23C300BE55200000A1663A0E138101BE5203063BD +S31A5000F4F7E23C201BE53133A0E1188283E11112A0E138100BE5AD +S31A5000F50C490000EA000056E30300001A0100A0E30210A0E1AE46 +S31A5000F521FFFFEB0060A0E1010856E30620A0E10300002AFF00A0 +S31A5000F53656E30800A0830000A093020000EA010456E31800A0F1 +S31A5000F54B231000A03354129FE53220A0E10230D1E7003083E015 +S31A5000F560203073E23C300BE5088066003100000A3C201BE53C7E +S31A5000F575304BE2081093E83C101BE5202062E21663A0E13852E7 +S31A5000F58AA0E13C32A0E140200BE51CC1A0E138C00BE5188183F4 +S31A5000F59FE12678A0E106A8A0E12AA8A0E10500A0E10710A0E161 +S31A5000F5B4E50000EB0040A0E10500A0E10710A0E185FFFFEB9A35 +S31A5000F5C90002E02838A0E1044883E1020054E10300002A0640BA +S31A5000F5DE94E00100002A020054E106408430044062E00400A0C8 +S31A5000F5F3E10710A0E1D40000EB0050A0E10400A0E10710A0E187 +S31A5000F60874FFFFEB9A0002E00838A0E12338A0E1055883E1025E +S31A5000F61D0055E10300002A065095E00100002A020055E106509B +S31A5000F6328530058062E006A8A0E12AA8A0E10800A0E12678A0A8 +S31A5000F647E10710A0E1BF0000EB0040A0E10800A0E10710A0E153 +S31A5000F65C5FFFFFEB9A0002E038C01BE52C38A0E1044883E102F0 +S31A5000F6710054E10300002A064094E00100002A020054E106406A +S31A5000F6868430044062E00400A0E10710A0E1AD0000EB0050A03A +S31A5000F69BE10400A0E10710A0E14DFFFFEB9A0002E038101BE50C +S31A5000F6B00138A0E12338A0E1055883E1020055E10300002A062D +S31A5000F6C55095E00100002A020055E106508530055062E0385088 +S31A5000F6DA0BE534201BE5000052E39600000A38301BE53CC01B2D +S31A5000F6EFE5333CA0E148300BE50010A0E344100BE58B0000EA27 +S31A5000F704080057E10500009A48000BE544800BE540204BE20C36 +S31A5000F7190012E930C04BE2860000EA010857E30720A0E103000F +S31A5000F72E002AFF0057E30800A0830000A093020000EA01045767 +S31A5000F743E31800A0231000A03358109FE53220A0E10230D1E711 +S31A5000F758003083E0203073E23C300BE51100001A38301BE50718 +S31A5000F76D0058E1060053910200003A06C053E00780C8E038C0B2 +S31A5000F7820BE534101BE5000051E36C00000A38201BE548200B73 +S31A5000F797E544800BE540204BE20C0012E901C0A0E1640000EA4A +S31A5000F7AC281301503C301BE53CC01BE538201BE5203063E240D1 +S31A5000F7C1300BE540101BE53633A0E1177C83E1166CA0E1385100 +S31A5000F7D6A0E13231A0E1122CA0E138200BE5188C83E12798A0F5 +S31A5000F7EBE10738A0E12338A0E10500A0E14C300BE50910A0E1AA +S31A5000F800520000EB0040A0E10500A0E10910A0E1F2FEFFEB4C59 +S31A5000F815201BE500A0A0E19A0202E02838A0E1044883E1020036 +S31A5000F82A54E10500002A01A04AE2074094E00200002A02005405 +S31A5000F83FE101A04A3207408430044062E00400A0E10910A0E1C0 +S31A5000F8543D0000EB0050A0E10400A0E10910A0E1DDFEFFEB4C20 +S31A5000F869201BE5900202E00838A0E12338A0E1055883E1020040 +S31A5000F87E55E10500002A010040E2075095E00200002A02005548 +S31A5000F893E10100403207508530058062E00A3880E12308A0E194 +S31A5000F8A826C8A0E10018C3E10C28C6E191020EE0900202E09C5E +S31A5000F8BD0101E0900C0CE0011092E001C88C2201E89EE021C82C +S31A5000F8D2ACE008005CE10500008A38101BE50030A0130130A06F +S31A5000F8E703000053E301005E110200009A06205EE007C0CCE09A +S31A5000F8FC02E0A0E134301BE5000053E30D00000A38201BE50E27 +S31A5000F9111052E00C80C8E03CC01BE5313CA0E140101BE5183192 +S31A5000F92683E148300BE5388CA0E144800BE534C01BE540204B12 +S31A5000F93BE20C0012E90C008CE830304BE2030093E8F0AF1BE94A +S31A5000F950000051E32600000A0130A0E3010050E10EF0A0310132 +S31A5000F9650251E3000051310112A0310332A031FAFFFF3A020160 +S31A5000F97A51E3000051318110A0318330A031FAFFFF3A0020A094 +S31A5000F98FE3010050E101004020A10050E1A1004020E32082211E +S31A5000F9A4210150E12101402063218221A10150E1A1014020E344 +S31A5000F9B921822103C0A0E1000050E32332B0112112A011EEFFC1 +S31A5000F9CEFF1A0E2212E20EF0A001EC0112E1A10180106C011261 +S31A5000F9E3E121018010EC0012E1A10080100EF0A0E104E02DE5A1 +S3155000F9F8010000EB0000A0E30080BDE80EF0A0E196 +S31A5000FA0853707572696F757320496E74657272757074212121D9 +S31A5000FA1D202D20766563746F723A2025642C20646174613A205B +S31A5000FA3225780A000000303132333435363738396162636465C6 +S31A5000FA476600000000503031004F4B000065436F73204744422C +S31A5000FA5C207374756273202D206275696C74204175672032349E +S31A5000FA712032303030202F2030383A35383A31310000004530B9 +S31A5000FA863100453033004530320042303100303132333435368D +S31A5000FA9B37383961626364656600000000303132333435363767 +S31A5000FAB038394142434445460000000030313233343536373811 +S31A5000FAC539414243444546000000003C42616420666F726D6190 +S31A5000FADA7420737472696E673A2000000000203A00003E0A009A +S31A5000FAEF003C6E756C6C3E00003C4E6F74206120737472696E39 +S31A5000FB04673A2030780000003E000000253038583A200000258B +S31A5000FB19303258000000002020000020000000207C0000256343 +S31A5000FB2E00007C0A00003C746F7069633E0048656C70206162E1 +S31A5000FB436F75742068656C703F0000000068656C70000000004E +S31A5000FB585B2D77203C74696D656F75743E5D205B656E74727998 +S31A5000FB6D5D00004578656375746520636F6465206174206120AC +S31A5000FB826C6F636174696F6E0000676F00003C6C6F6361746931 +S31A5000FB976F6E3E205B3C6C656E6774683E5D0000004469737084 +S31A5000FBAC6C617920286865782064756D702920612072616E67D3 +S31A5000FBC165206F66206D656D6F72790000000064756D70000010 +S31A5000FBD600005B4F4E207C204F46465D00004D616E616765206F +S31A5000FBEB6D616368696E652063616368657300000063616368C4 +S31A5000FC00650000000A526564426F6F7428746D29206465627589 +S31A5000FC156720656E7669726F6E6D656E74202D206275696C74BB +S31A5000FC2A2025732C2025730A000030383A35383A323600000018 +S31A5000FC3F00417567203234203230303000436F70797269676890 +S31A5000FC54742028432920323030302C20526564204861742C204B +S31A5000FC69496E632E0A0A0052414D3A2025702D25700A003D3DBF +S31A5000FC7E20457865637574696E6720626F6F742073637269703A +S31A5000FC937420696E202564207365636F6E6473202D20656E742F +S31A5000FCA86572205E4320746F2061626F72740A00526564426F48 +S31A5000FCBD6F743E20000000496C6C6567616C20636F6D6D616E46 +S31A5000FCD2643A2025730A00000000556E62616C616E636564205A +S31A5000FCE7737472696E67210A00416D626967756F757320636F52 +S31A5000FCFC6D6D616E6420272573272C2063686F696365732061DF +S31A5000FD1172653A20257300202573000A00000055736167653ACD +S31A5000FD260A002020257325732025730A0000257320616C7265DA +S31A5000FD3B6164207365740A0000696E76616C6964206E756D6269 +S31A5000FD506572202725732720666F722025730A00696E76616C28 +S31A5000FD65696420666C616720272563270A0000257320616C72B5 +S31A5000FD7A65616479207365740A006E6F2064656661756C742FF4 +S31A5000FD8F6E6F6E2D666C616720617267756D656E7473207375F9 +S31A5000FDA470706F727465640A000000006F6E00006F666600498B +S31A5000FDB96E76616C6964206361636865206D6F64653A20257396 +S31A5000FDCE0A00636163686573203F0A00000025730A20202025C9 +S31A5000FDE3732025730A0000000044756D702077686174205B6C2F +S31A5000FDF86F636174696F6E5D3F0A0000496E76616C69642073B3 +S31A5000FE0D7461727420616464726573733A2025730A0000496E16 +S31A5000FE2276616C6964206C656E6774682F656E642061646472A2 +S31A5000FE376573733A2025730A00776169742074696D656F75743D +S31A5000FE4C000000007374617274696E67206164647265737300D9 +S31A5000FE6100000041626F757420746F2073746172742065786588 +S31A5000FE76637574696F6E206174202570202D2061626F72742040 +S31A5000FE8B77697468205E432077697468696E20256420736563D8 +S31A5000FEA06F6E64730A0000005B2D7261775D205B2D62203C6D37 +S31A5000FEB5656D5F616464723E5D5D004C6F616420612066696CC2 +S31A5000FECA65006C6F616400000000454C4620696D61676573203B +S31A5000FEDF6E6F7420737570706F727465640A000000496E7661C9 +S31A5000FEF46C696420532D7265636F7264206174206F6666736523 +S31A5000FF09742025702C20696E7075743A2025630A000000426159 +S31A5000FF1E6420532D7265636F726420636F756E74206174206F28 +S31A5000FF3366667365742025700A000000004164647265737320A6 +S31A5000FF486F6666736574203D2025700A00000000417474656DB0 +S31A5000FF5D707420746F206C6F616420532D7265636F72642064EF +S31A5000FF7261746120746F20616464726573733A202570205B6E0D +S31A5000FF876F7420696E2052414D5D0A00002A2A2A205761726E98 +S31A5000FF9C696E672120436865636B73756D206661696C75726540 +S31A5000FFB1202D20416464723A20256C782C202530326C58203CA7 +S31A5000FFC63E202530326C580A0000456E74727920706F696E74C1 +S31A5000FFDB3A2025702C20616464726573732072616E67653A2013 +S31A5000FFF025702D25700A0000496E76616C696420532D726563A4 +S31A500100056F7264206174206F6666736574203078256C782C2091 +S31A5001001A747970653A2025780A00256308000A000000757361D4 +S31A5001002F67653A206C6F6164203C66696C655F6E616D653E2045 +S31A500100445B2D725D205B2D765D205B2D68203C686F73743E5DB9 +S31A50010059205B2D6D207B54465450207C205A4D4F44454D7D5DEB +S31A5001006E205B2D62203C626173655F616464726573733E5D0A3B +S31A5001008300766572626F7365006C6F61642072617720646174B8 +S31A50010098610000006C6F61642061646472657373000000006491 +S31A500100AD6F776E6C6F6164206D6F6465202854465450206F72A7 +S31A500100C2205A4D4F44454D290000686F7374206E616D652028F6 +S31A500100D74950206164647265737329000066696C65206E616DF9 +S31A500100EC65000000496E76616C69642049502061646472657330 +S31A50010101733A2025730A007A6D6F64656D0000746674700000D9 +S31A50010116000054465450206D6F646520726571756972657320CA +S31A5001012B6120776F726B696E67206E6574776F726B0A000000B2 +S31A50010140496E76616C696420276D6F6465273A2025730A004637 +S31A50010155696C65206E616D65206D697373696E670A000043617B +S31A5001016A6E2774206C6F616420272573273A2025730A0000005E +S31A5001017F004572726F722072656164696E672068656164657287 +S31A500101942076696120544654503A2025730A0000536F72727926 +S31A500101A92C207A6D6F64656D20646F776E6C6F6164206E6F7429 +S31A500101BE2079657420617661696C61626C650A0000005261776E +S31A500101D3206C6F61642072657175697265732061206D656D6F21 +S31A500101E8727920616464726573730A005261772066696C6520A6 +S31A500101FD6C6F616465642025702D25700A0000454C4600556E12 +S31A500102127265636F676E697A656420696D616765207479706551 +S31A500102273A20256C780A0000007B636D64737D00004D616E61E2 +S31A5001023C676520464C41534820696D6167657300666973005BC9 +S31A500102512D6C5D000000004D616E61676520636F6E66696775F7 +S31A50010266726174696F6E206B65707420696E20464C4153482026 +S31A5001027B6D656D6F727900000066636F6E666967005B2D665D57 +S31A5001029000000000496E697469616C697A6520464C4153482042 +S31A500102A5496D6167652053797374656D205B4649535D00696ED4 +S31A500102BA69740000000000000000446973706C617920636F6EC5 +S31A500102CF74656E7473206F6620464C41534820496D61676520EF +S31A500102E453797374656D205B4649535D000000006C69737400B3 +S31A500102F9000000446973706C61792066726565205B61766169E5 +S31A5001030E6C61626C655D206C6F636174696F6E7320776974685E +S31A50010323696E20464C41534820496D6167652053797374656D61 +S31A50010338205B4649535D000066726565000000002D66203C66A8 +S31A5001034D6C6173685F616464723E202D6C203C6C656E677468CD +S31A500103623E00457261736520464C41534820636F6E74656E7458 +S31A50010377730000000065726173650000006E616D6500000000F6 +S31A5001038C446973706C617920616E20696D6167652066726F6D49 +S31A500103A120464C41534820496D6167652053797374656D205B3F +S31A500103B64649535D000064656C65746500004C6F616420696DB3 +S31A500103CB6167652066726F6D20464C41534820496D6167652014 +S31A500103E053797374656D205B4649535D20696E746F2052414D98 +S31A500103F50000006C6F6164000000002D62203C6D656D5F6261B0 +S31A5001040A73653E202D6C203C6C656E6774683E205B2D66203C31 +S31A5001041F666C6173685F616464723E5D205B2D65203C656E741E +S31A5001043472795F706F696E743E5D205B2D72203C72616D5F61D7 +S31A500104496464723E5D203C6E616D653E000000437265617465E3 +S31A5001045E20616E20696D6167650063726561746500002A2A2A2E +S31A5001047320696E76616C696420276669732720636F6D6D616ECB +S31A50010488643A2025730A0000666973200000000066756C6C2073 +S31A5001049D696E697469616C697A6174696F6E2C206572617365AF +S31A500104B27320616C6C206F6620666C6173680000000041626FDD +S31A500104C7757420746F20696E697469616C697A65205B666F72C9 +S31A500104DC6D61745D20464C41534820696D616765207379737471 +S31A500104F1656D002A2A2041626F727465640A002A2A2A20496E39 +S31A50010506697469616C697A6520464C41534820496D616765207D +S31A5001051B53797374656D0A0000202020696E697469616C697AB8 +S31A500105306174696F6E206661696C65642025703A2025782825C6 +S31A5001054573290A00000000202020205761726E696E673A206490 +S31A5001055A657669636520636F6E74656E7473206E6F7420657233 +S31A5001056F617365642C20736F6D6520626C6F636B73206D61797E +S31A50010584206E6F7420626520757361626C650A00526564426F41 +S31A500105996F7400526564426F6F745B6261636B75705D0052657F +S31A500105AE64426F6F7420636F6E66696700004649532064697212 +S31A500105C36563746F72790000004572726F722077726974696E6F +S31A500105D86720696D6167652064657363726970746F72732061DA +S31A500105ED742025703A202578282573290A00004E616D652020CE +S31A50010602202020202020202020202020464C4153482061646455 +S31A50010617722020204D656D2061646472202020204C656E677451 +S31A5001062C6820202020456E74727920706F696E740A00000025EF +S31A500106412D313673202030782530386C58202020307825303878 +S31A500106566C58202030782530366C58202030782530386C580AFA +S31A5001066B00202030782530386C58202E2E2030782530386C5855 +S31A500106800A0000006D656D6F7279206261736520616464726590 +S31A5001069573730072616D20626173652061646472657373000012 +S31A500106AA0000656E74727920706F696E74206164647265737362 +S31A500106BF00464C415348206D656D6F7279206261736520616408 +S31A500106D464726573730000006C656E677468000066696C652057 +S31A500106E96E616D65000000696E76616C696420617267756D657C +S31A500106FE6E7473000000726571756972656420706172616D6544 +S31A50010713746572206D697373696E670000496E76616C6964202E +S31A50010728464C41534820616464726573733A2025702028257322 +S31A5001073D290A0020202076616C69642072616E67652069732064 +S31A5001075225702D25700A00000000496E76616C69642052414D13 +S31A5001076720616464726573733A2025700A000000004E616D65A6 +S31A5001077C20697320746F6F206C6F6E672C206D757374206265D7 +S31A50010791206C657373207468616E2025642063686172730A0076 +S31A500107A6000043616E2774206C6F6361746520256C6420627992 +S31A500107BB746573206672656520696E20464C4153480A00000035 +S31A500107D0496D61676520666F756E642C2062757420464C4153C1 +S31A500107E548206164647265737320696E636F72726563740A0067 +S31A500107FA0000416E20696D616765206E616D6564202725732796 +S31A5001080F20657869737473000043616E27742070726F67726165 +S31A500108246D207468697320726567696F6E202D20636F6E7461FD +S31A50010839696E7320636F646520696E20757365210A000043611B +S31A5001084E6E277420657261736520726567696F6E206174202527 +S31A50010863703A202578282573290A00000043616E277420707220 +S31A500108786F6772616D20726567696F6E2061742025703A202531 +S31A5001088D78282573290A004572726F722065726173696E672061 +S31A500108A261742025703A202578282573290A000000004572724D +S31A500108B76F722070726F6772616D6D696E672061742025703A4D +S31A500108CC202578282573290A000000006D697373696E67206195 +S31A500108E17267756D656E7400000000696D616765206E616D65E5 +S31A500108F6000044656C65746520696D616765202725732700001A +S31A5001090B004E6F20696D616765202725732720666F756E640A54 +S31A50010920000000004E6F742061206C6F616461626C6520696D6F +S31A500109356167650A000000464C4153483A2064726976657220AB +S31A5001094A696E6974206661696C6564212C207374617475733ABD +S31A5001095F2025780A00464C4153483A202570202D2025702C20BA +S31A50010974256420626C6F636B73206F66202570206279746573FF +S31A500109892065612E0A0000746F6F2066657720617267756D658F +S31A5001099E6E7473000000756E7265636F676E697A656420636F99 +S31A500109B36D6D616E640000000052756E20736372697074206160 +S31A500109C87420626F6F740000626F6F745F736372697074004291 +S31A500109DD6F6F742073637269707400626F6F745F736372697073 +S31A500109F2745F6461746100000000426F6F7420736372697074E3 +S31A50010A072074696D656F757400626F6F745F7363726970745F55 +S31A50010A1C74696D656F75740025733A2000000000257320007449 +S31A50010A317275650000000066616C7365000000256420003078B1 +S31A50010A462530325800003A000000200000003F3F00000A000083 +S31A50010A5B002E2E2025730A0000456E746572207363726970745E +S31A50010A702C207465726D696E617465207769746820656D707453 +S31A50010A8579206C696E650A000000003E3E20006C6973742063DF +S31A50010A9A6F6E66696775726174696F6E206F6E6C79002A2A2085 +S31A50010AAF696E76616C696420656E7472790A000000557064610E +S31A50010AC4746520526564426F6F74206E6F6E2D766F6C617469F7 +S31A50010AD96C6520636F6E66696775726174696F6E000000457291 +S31A50010AEE726F722077726974696E6720636F6E666967206461AA +S31A50010B0374612061742025703A202578282573290A000000001D +S31A50010B185265717565737420666F7220636F6E66696720766194 +S31A50010B2D6C75652027257327202D2077726F6E67207479706594 +S31A50010B420A0043616E27742066696E6420636F6E6669672076A3 +S31A50010B57616C756520272573270A000000464C41534820636F1B +S31A50010B6C6E66696775726174696F6E20636865636B73756D20E4 +S31A50010B816572726F72206F7220696E76616C6964206B65790A63 +S31A50010B960000657468300000000073635F6C7065000043462063 +S31A50010BAB6361726420776F6E277420676F207265616479210ADF +S31A50010BC0000000004E6F742061205343204C50452C20736F72C0 +S31A50010BD572790A000000000A00000025733A2025732025732053 +S31A50010BEA25730A000000436F756C646E27742066696E642043D9 +S31A50010BFF4F5220706F696E746572210A0043616E2774207061FF +S31A50010C14727365204349530A0000000043616E27742066657415 +S31A50010C29636820636F6E66696720696E666F0A00000000436F76 +S31A50010C3E6D7061637420466C61736820636172642072656D6F9A +S31A50010C53766564210A000000002E2E2E2057616974696E67202E +S31A50010C68666F72206E6574776F726B20636172643A2000002E6D +S31A50010C7D00000025730A0073635F6C70655F4275664576656EE9 +S31A50010C9274003031323334353637383900003031323334353610 +S31A50010CA737383961626364656600000000303132333435363748 +S31A50010CBC3839414243444546000000005E430A003078253038E6 +S31A50010CD1583A20000000002530325800000000202000002000C6 +S31A50010CE60000207C0000256300007C0A0000202D206172652033 +S31A50010CFB796F7520737572652028792F6E293F20004E45544143 +S31A50010D1053434949000000004F43544554000000556E6B6E6FC5 +S31A50010D25776E206572726F7200000066696C65206E6F7420669C +S31A50010D3A6F756E6400006163636573732076696F6C6174696F9E +S31A50010D4F6E000000006469736B2066756C6C206F7220616C6CF2 +S31A50010D646F636174696F6E206578636565646564000000006976 +S31A50010D796C6C6567616C2054465450206F7065726174696F6E4E +S31A50010D8E0000756E6B6E6F776E207472616E73666572204944B7 +S31A50010DA30066696C6520616C7265616479206578697374730082 +S31A50010DB86E6F20737563682075736572000000006F7065726129 +S31A50010DCD74696F6E2074696D6564206F757400736F6D6520730E +S31A50010DE26F7274206F66206E6574776F726B206572726F7200E7 +S31A50010DF700696E76616C696420706172616D65746572000000C8 +S31A50010E0C70726F746F636F6C2076696F6C6174696F6E000066AD +S31A50010E21696C65206973206C6172676572207468616E206275D0 +S31A50010E3666666572000047444220636F6E6E656374696F6E2070 +S31A50010E4B706F7274006764625F706F7274000000004E65747787 +S31A50010E606F726B20646562756720617420626F6F742074696D80 +S31A50010E756500006E65745F646562756700000055736520424F21 +S31A50010E8A4F545020666F72206E6574776F726B20636F6E666949 +S31A50010E9F6775726174696F6E00626F6F74700000004C6F6361DB +S31A50010EB46C204950206164647265737300000000626F6F747083 +S31A50010EC95F6D795F69700044656661756C7420736572766572C4 +S31A50010EDE2049502061646472657373000000626F6F74705F73F3 +S31A50010EF365727665725F69700025732E25640A00006E65745F38 +S31A50010F08696F5F7772697465000000006E65745F696F5F726567 +S31A50010F1D6164004E6F206E6574776F726B20696E7465726661B3 +S31A50010F3263657320666F756E640A0000000043616E277420679E +S31A50010F47657420424F4F545020696E666F202D206E6574776F5B +S31A50010F5C726B2064697361626C6564210A00000049503A2025B1 +S31A50010F717300002C2044656661756C74207365727665723A207F +S31A50010F8625730A00000025642E25642E25642E256400257320F7 +S31A50010F9B2D2063616C6C6564207769746820696E76616C696455 +S31A50010FB0204349533A2025780A00000063665F70617273655F33 +S31A50010FC563667461626C650000000063665F70617273655F63EA +S31A50010FDA6F6E6669670050434D4349413A20496E76616C6964CA +S31A50010FEF20736C6F742025640A000000002E2E2E2045726173CC +S31A50011004652066726F6D2025702D25703A2000002E0000000A3E +S31A500110190000002E2E2E2050726F6772616D2066726F6D2025D0 +S31A5001102E702D25702061742025703A2000004E6F206572726F8B +S31A5001104372202D206F7065726174696F6E20636F6D706C65747D +S31A5001105865000000496E76616C696420464C4153482061646429 +S31A5001106D726573730000004572726F7220747279696E672074FF +S31A500110826F2065726173650000004572726F7220747279696E03 +S31A500110976720746F206C6F636B2F756E6C6F636B004572726F67 +S31A500110AC7220747279696E6720746F2070726F6772616D004747 +S31A500110C1656E65726963206572726F72000000446576696365B3 +S31A500110D62F726567696F6E2069732077726974652D70726F74C2 +S31A500110EB656374656400000000464C415348207375622D7379A3 +S31A500111007374656D206E6F7420696E697469616C697A656400A3 +S31A50011115000000556E6B6E6F776E206572726F7200000045747B +S31A5001112A6865726E65742073656E643A0A0025733A207061639F +S31A5001113F6B6574206F662025642062797465732064726F7070D6 +S31A5001115465640A006574685F6472765F7265637600000000451C +S31A50011169746865726E657420726563763A0A005152590043616C +S31A5001117E6E2774206964656E7469667920464C4153482C207333 +S31A500111936F7272790A00000000457272203D2025780A000000CD +S31A500111A825733A2043616E27742066696E6420616464726573E8 +S31A500111BD73206F66207365727665720A0000005F5F7564705F37 +S31A500111D273656E64746F000000007564705F7265637666726F85 +S31A500111E76D202D2064726F70706564207061636B6574206F6647 +S31A500111FC2025642062797465730A00005F5F656E65745F706FE5 +S31A500112116C6C3A206E6F206D6F726520627566666572730A0078 +S31A500112260000000102020303030304040404040404040505051C +S31A5001123B050505050505050505050505050606060606060606D6 +S31A50011250060606060606060606060606060606060606060606B4 +S31A500112650606060707070707070707070707070707070707078D +S31A5001127A07070707070707070707070707070707070707070775 +S31A5001128F07070707070707070707070707070707070707070760 +S31A500112A40707070708080808080808080808080808080808083A +S31A500112B908080808080808080808080808080808080808080821 +S31A500112CE0808080808080808080808080808080808080808080C +S31A500112E3080808080808080808080808080808080808080808F7 +S31A500112F8080808080808080808080808080808080808080808E2 +S31A5001130D080808080808080808080808080808080808080808CC +S31A5001132208080808080800010202030303030404040404040402 +S31A50011337040505050505050505050505050505050506060606DE +S31A5001134C060606060606060606060606060606060606060606B7 +S31A5001136106060606060606070707070707070707070707070794 +S31A5001137607070707070707070707070707070707070707070778 +S31A5001138B07070707070707070707070707070707070707070763 +S31A500113A007070707070707070808080808080808080808080841 +S31A500113B508080808080808080808080808080808080808080824 +S31A500113CA0808080808080808080808080808080808080808080F +S31A500113DF080808080808080808080808080808080808080808FA +S31A500113F4080808080808080808080808080808080808080808E5 +S31A50011409080808080808080808080808080808080808080808CF +S30F5001141E080808080808080808081D +S31A5001142800000000B4430050B4430050B4430050B4430050B488 +S31A5001143D430050B4430050B4430050B4430050B4430050B4439D +S31A500114520050B4430050B4430050B4430050B4430050B44300CB +S31A5001146750B4430050B4430050B4430050B4430050B443005066 +S31A5001147CB4430050B4430050B4430050B4430050B4430050B4ED +S31A50011491430050B4430050B4430050B4430050B4430050B44349 +S31A500114A60050B4430050B4430050B4430050B4430050B4430077 +S31A500114BB50B4430050B4430050B4430050B4430050B443005012 +S31A500114D0B4430050B4430050B4430050B4430050B4430050B499 +S31A500114E5430050B4430050B4430050B4430050B4430050B443F5 +S31A500114FA0050B4430050B4430050B4430050B4430050B4430023 +S31A5001150F50B4430050B4430050B443005000000000000000004B +S31A500115240000000000000000000000000000000000000000005B +S31A5001153900000000000000000000000000000000000000000046 +S31A5001154E00000000000000000000000000000000000000000031 +S31A500115630000000000000000000000000000000000000000001C +S31A5001157800000000000000000000000000000000000000000007 +S31A5001158D000000000000000000000000000000000000000000F2 +S31A500115A2000000000000000000000000000000000000000000DD +S31A500115B7000000000000000000000000000000000000000000C8 +S31A500115CC000000000000000000000000000000000000000000B3 +S31A500115E10000000000000000000000000000000000000000009E +S31A500115F600000000000000000000000000000000000000000089 +S31A5001160B00000000000000000000000000000000000000000073 +S31A500116200000000000000000000000000000000000000000005E +S31A5001163500000000000000000000000000000000000000000049 +S31A5001164A00000000000000000000000000000000000000000034 +S31A5001165F0000000000000000000000000000000000000000001F +S31A500116740000000000000000000000000000000000000000000A +S31A50011689000000000000000000000000000000000000000000F5 +S31A5001169E000000000000000000000000000000000000000000E0 +S31A500116B3000000000000000000000000000000000000000000CB +S31A500116C8000000000000000000000000000000000000000000B6 +S31A500116DD000000000000000000000000000000000000000000A1 +S31A500116F2000000000000000000002000000000000000502500F7 +S31A5001170750A0250050000000000000000000000000FFFFFFFF15 +S31A5001171C0000000000000000000000000C3300500000000000D2 +S31A500117310000000041010000000000000000000000000000000A +S31A500117460000FEFFFFFFFEFFFFFF000000000000000000000140 +S31A5001175B80E80300000F00000000000580E80300001100000027 +S31A5001177000000000000000007C2F2D5C7C2D000000000000C46C +S31A500117859300509093005094940050AC940050209500505C97A2 +S31A5001179A0050FC98005094990050CC830000000000005C830004 +S31A500117AF00D0430100980B0150000000000000000000000000C6 +S31A500117C408881234567800000000000000000000141E000014CF +S31A500117D91E0000F4010000000000000000000000000000000091 +S31A500117EE000000000000B0C400507CC80050D4C600500000004D +S31A5001180300000000000000000000000000000000000000000079 +S31A5001181800000000000000000000000000000000000000000064 +S31A5001182D00000000000000000000000000000068040150580436 +S31A50011842015000040150847A0050BC0301508C030150840301CE +S31A5001185750F08100507C03015064030150480301501880005008 +S31A5001186C40030150FC020150C0020150D8780050B802015094DB +S31A500118810201508C02015040750050F4020150C4020150C002A4 +S31A50011896015044780050F8030150C403015084030150E08300EA +S31A500118AB50FCFB0050E4FB0050D8FB005044670050D0FB0050D2 +S31A500118C0A8FB005090FB0050346900504C0201503802015030A7 +S31A500118D5020150108600508402015058020150500201501C8BA2 +S31A500118EA00508CFB005070FB005058FB0050E469005050FB0025 +S31A500118FF503CFB005034FB0050E4680050CCFE0050C0FE005063 +S31A50011914A8FE0050E8700050D0090150BC090150000000000188 +S31A5001192900000001000000E8090150DC090150D00901500100AE +S31A5001193E000004000000100A0150FC090150D00901500100004D +S31A500119530002000000A80E0150840E015000000000010000003B +S31A5001196801000000C40E0150B00E0150A80E01500000000005D4 +S31A5001197D000000EC0E0150D00E0150A80E015000000000050078 +S31A500119920000500E01503C0E015000000000010000000200009C +S31A500119A700780E01505C0E015000000000010000000100000040 +S31A500119BC8C8E005060B70050A00B0150589300508483000000B0 +S30C500119D1000000B84C005064 +S7055000004466 diff --git a/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.ldi b/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.ldi --- a/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.ldi +++ b/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.ldi @@ -11,7 +11,7 @@ SECTIONS { SECTIONS_BEGIN SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) - SECTION_rom_vectors (ram, 0x10000, LMA_EQ_VMA) + SECTION_rom_vectors (ram, 0x20000, LMA_EQ_VMA) SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) diff --git a/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.mlt b/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.mlt --- a/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.mlt +++ b/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.mlt @@ -1,7 +1,7 @@ version 0 region ram 0 2000000 0 ! section fixed_vectors 0 1 0 1 1 0 1 0 20 20 ! -section rom_vectors 0 1 0 1 1 1 1 1 10000 10000 text text ! +section rom_vectors 0 1 0 1 1 1 1 1 20000 20000 text text ! section text 0 4 0 1 0 1 0 1 fini fini ! section fini 0 4 0 1 0 1 0 1 rodata rodata ! section rodata 0 4 0 1 0 1 0 1 rodata1 rodata1 ! diff --git a/packages/hal/arm/sa11x0/assabet/current/misc/cf_test.c b/packages/hal/arm/sa11x0/assabet/current/misc/cf_test.c deleted file mode 100644 --- a/packages/hal/arm/sa11x0/assabet/current/misc/cf_test.c +++ /dev/null @@ -1,150 +0,0 @@ -//========================================================================== -// -// cf_test.c -// -// SA1110/Assabet - Compact Flash test -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): gthomas -// Contributors: gthomas -// Date: 2000-06-05 -// Description: Tool used to test CF stuff -//####DESCRIPTIONEND#### - -#include -#ifdef CYGPKG_IO_PCMCIA -#include // Configuration header -#include -#include - -#include // IO macros -#include // Register state info -#include // HAL interrupt macros - -#include - -#include // Board definitions -#include - -#ifndef FALSE -#define FALSE 0 -#define TRUE 1 -#endif - -#define STACK_SIZE 4096 -static char stack[STACK_SIZE]; -static cyg_thread thread_data; -static cyg_handle_t thread_handle; - -// FUNCTIONS - -static void -cyg_test_exit(void) -{ - while (TRUE) ; -} - -static void -cf_test(cyg_addrword_t p) -{ - int len, ptr; - unsigned char buf[256]; - unsigned char *en0; - unsigned long cor = 0, regs; - struct cf_cftable cftable; - struct cf_config config; - struct cf_slot *slot; - - diag_printf("CF test here\n"); - cf_init(); - slot = cf_get_slot(0); - en0 = slot->io; - while (1) { - if (slot->state == CF_SLOT_STATE_Inserted) { - diag_printf("Compact Flash card inserted!\n"); - cf_change_state(slot, CF_SLOT_STATE_Ready); - diag_dump_buf(slot->attr, slot->attr_length); - len = sizeof(buf); - ptr = 0; - if (cf_get_CIS(slot, CF_CISTPL_MANFID, buf, &len, &ptr)) { - diag_printf("CIS 0x20:\n"); - diag_dump_buf(buf, len); - } - ptr = 0; - if (cf_get_CIS(slot, CF_CISTPL_VERS_1, buf, &len, &ptr)) { - diag_printf("CIS 0x15:\n"); - diag_dump_buf(buf, len); - } - ptr = 0; - if (cf_get_CIS(slot, CF_CISTPL_CONFIG, buf, &len, &ptr)) { - diag_printf("CIS 0x1A:\n"); - diag_dump_buf(buf, len); - } - if (cf_parse_config(buf, len, &config)) { - cor = config.base; - diag_printf("COR = %x\n", cor); - } - ptr = 0; - while (cf_get_CIS(slot, CF_CISTPL_CFTABLE_ENTRY, buf, &len, &ptr)) { - diag_printf("CIS 0x1B:\n"); - diag_dump_buf(buf, len); - if (cf_parse_cftable(buf, len, &cftable)) { - regs = cftable.io_space.base[0]; - cf_set_COR(slot, cor, cftable.cor); - en0[regs+0x00] = 0x21; - en0[regs+0x0E] = 0x49; - en0[regs+0x00] = 0x61; - diag_dump_buf(en0+regs, 0x10); - en0[regs+0x00] = 0x21; - diag_dump_buf(en0+regs, 0x10); - } - } - break; - } - } - cyg_test_exit(); -} - -externC void -cyg_start( void ) -{ - // Create a main thread, so we can run the scheduler and have time 'pass' - cyg_thread_create(10, // Priority - just a number - cf_test, // entry - 0, // entry parameter - "CompactFlash test", // Name - &stack[0], // Stack - STACK_SIZE, // Size - &thread_handle, // Handle - &thread_data // Thread data structure - ); - cyg_thread_resume(thread_handle); // Start it - cyg_scheduler_start(); -} // cyg_package_start() -#endif diff --git a/packages/hal/arm/sa11x0/assabet/current/misc/redboot_RAM.cfg b/packages/hal/arm/sa11x0/assabet/current/misc/redboot_RAM.cfg new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/assabet/current/misc/redboot_RAM.cfg @@ -0,0 +1,73 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware assabet ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_SA11X0 current ; + package -hardware CYGPKG_HAL_ARM_SA11X0_ASSABET current ; + package -hardware CYGPKG_IO_SERIAL_ARM_SA11X0 current ; + package -hardware CYGPKG_DEVS_PCMCIA_ASSABET current ; + package -hardware CYGPKG_DEVS_FLASH_ASSABET current ; + package -template CYGPKG_HAL current ; + package -template CYGPKG_INFRA current ; + package -template CYGPKG_REDBOOT current ; + package CYGPKG_IO_PCMCIA current ; + package CYGPKG_DEVS_ETH_CF current ; + package CYGPKG_IO_FLASH current ; + package CYGPKG_IO_ETH_DRIVERS current ; +}; + +cdl_option CYGBLD_BUILD_GDB_STUBS { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + inferred_value 0 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYG_HAL_STARTUP { + user_value RAM +}; + +cdl_option CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_component CYGPKG_REDBOOT_NETWORKING { + user_value 1 +}; + +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG { + user_value 1 +}; + + diff --git a/packages/hal/arm/sa11x0/assabet/current/misc/redboot_ROM.cfg b/packages/hal/arm/sa11x0/assabet/current/misc/redboot_ROM.cfg new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/assabet/current/misc/redboot_ROM.cfg @@ -0,0 +1,77 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware assabet ; + template redboot ; + package -hardware CYGPKG_HAL_ARM current ; + package -hardware CYGPKG_HAL_ARM_SA11X0 current ; + package -hardware CYGPKG_HAL_ARM_SA11X0_ASSABET current ; + package -hardware CYGPKG_IO_SERIAL_ARM_SA11X0 current ; + package -hardware CYGPKG_DEVS_PCMCIA_ASSABET current ; + package -template CYGPKG_HAL current ; + package -template CYGPKG_INFRA current ; + package -template CYGPKG_REDBOOT current ; + package CYGPKG_IO_PCMCIA current ; + package CYGPKG_DEVS_ETH_CF current ; + package CYGPKG_IO_FLASH current ; + package CYGPKG_IO_ETH_DRIVERS current ; + package CYGPKG_DEVS_FLASH_ASSABET current ; +}; + +cdl_option CYGBLD_BUILD_GDB_STUBS { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + inferred_value 0 +}; + +cdl_option CYGSEM_HAL_ROM_MONITOR { + user_value 1 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYG_HAL_STARTUP { + user_value ROM +}; + +cdl_option CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_component CYGPKG_REDBOOT_NETWORKING { + user_value 1 +}; + +cdl_option CYGSEM_REDBOOT_FLASH_CONFIG { + user_value 1 +}; + + diff --git a/packages/hal/arm/sa11x0/assabet/current/src/assabet_misc.c b/packages/hal/arm/sa11x0/assabet/current/src/assabet_misc.c --- a/packages/hal/arm/sa11x0/assabet/current/src/assabet_misc.c +++ b/packages/hal/arm/sa11x0/assabet/current/src/assabet_misc.c @@ -201,7 +201,7 @@ hal_mmu_init(void) /* Actual Virtual Size Attributes Function */ /* Base Base MB cached? buffered? access permissions */ /* xxx00000 xxx00000 */ - X_ARM_MMU_SECTION(0x000, 0x500, 1, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Boot flash ROMspace */ + X_ARM_MMU_SECTION(0x000, 0x500, 32, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Boot flash ROMspace */ X_ARM_MMU_SECTION(0x080, 0x080, 4, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Application flash ROM */ X_ARM_MMU_SECTION(0x100, 0x100, 128, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* SA-1101 Development Board Registers */ X_ARM_MMU_SECTION(0x180, 0x180, 128, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Ethernet Adaptor */ diff --git a/packages/hal/arm/sa11x0/var/current/src/plf_stub.c b/packages/hal/arm/sa11x0/var/current/src/plf_stub.c deleted file mode 100644 --- a/packages/hal/arm/sa11x0/var/current/src/plf_stub.c +++ /dev/null @@ -1,212 +0,0 @@ -//============================================================================= -// -// plf_stub.c -// -// Platform specific code for GDB stub support. -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): gthomas -// Contributors:gthomas, jskov -// Travis C. Furrer -// Date: 2000-05-08 -// Purpose: Platform specific code for GDB stub support. -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include -#include -#include CYGBLD_HAL_PLATFORM_H - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -#include - -#include // HAL IO macros -#include // Hardware definitions -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -#include // HAL interrupt macros -#include // HAL ISR support -#endif - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -static cyg_interrupt gdb_interrupt; -static cyg_handle_t gdb_interrupt_handle; -#endif - -#if CYGHWR_HAL_ARM_SA11X0_GDB_PORT == 0 -#define CYG_GDB_DEV_UTCR0 SA11X0_UART1_CONTROL0 -#define CYG_GDB_DEV_UTCR1 SA11X0_UART1_CONTROL1 -#define CYG_GDB_DEV_UTCR2 SA11X0_UART1_CONTROL2 -#define CYG_GDB_DEV_UTCR3 SA11X0_UART1_CONTROL3 -#define CYG_GDB_DEV_UTDR SA11X0_UART1_DATA -#define CYG_GDB_DEV_UTSR0 SA11X0_UART1_STATUS0 -#define CYG_GDB_DEV_UTSR1 SA11X0_UART1_STATUS1 -#define CYG_GDB_DEV_INT CYGNUM_HAL_INTERRUPT_UART1 -#else -#define CYG_GDB_DEV_UTCR0 SA11X0_UART3_CONTROL0 -#define CYG_GDB_DEV_UTCR1 SA11X0_UART3_CONTROL1 -#define CYG_GDB_DEV_UTCR2 SA11X0_UART3_CONTROL2 -#define CYG_GDB_DEV_UTCR3 SA11X0_UART3_CONTROL3 -#define CYG_GDB_DEV_UTDR SA11X0_UART3_DATA -#define CYG_GDB_DEV_UTSR0 SA11X0_UART3_STATUS0 -#define CYG_GDB_DEV_UTSR1 SA11X0_UART3_STATUS1 -#define CYG_GDB_DEV_INT CYGNUM_HAL_INTERRUPT_UART3 -#endif - - -//----------------------------------------------------------------------------- -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - -// This ISR is called only for serial receive interrupts. This is true because -// we do not enable Tx FIFO interrupts (in hal_sa11x0_init_serial, below). -static int ISR_count, ISR_c; -int -cyg_hal_gdb_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs) -{ - cyg_uint8 c; - c = hal_sa11x0_get_char(); // Fetch the character - ISR_count++; ISR_c = c; - if( 3 == c ) { // ^C - // Ctrl-C: set a breakpoint at PC so GDB will display the - // correct program context when stopping rather than the - // interrupt handler. - cyg_hal_gdb_interrupt (regs->pc); - // Clear receiver idle status bit, to allow another interrupt to - // occur in the case where the receive fifo is almost empty. - *CYG_GDB_DEV_UTSR0 = SA11X0_UART_RX_IDLE; - } - cyg_drv_interrupt_acknowledge(CYG_GDB_DEV_INT); - return 0; // No need to run DSR -} - -int -hal_sa11x0_interruptible(int state) -{ - if (state) { - cyg_drv_interrupt_unmask(CYG_GDB_DEV_INT); - } else { - cyg_drv_interrupt_mask(CYG_GDB_DEV_INT); - } - return 0; -} -#endif - - -// Initialize the current serial port. -void hal_sa11x0_init_serial(unsigned long baudRate) -{ - cyg_uint32 brd; - - if (baudRate == 0) baudRate = CYGHWR_HAL_ARM_SA11X0_GDB_BAUD; - - // Disable Receiver and Transmitter (clears FIFOs) - *CYG_GDB_DEV_UTCR3 = SA11X0_UART_RX_DISABLED | - SA11X0_UART_TX_DISABLED; - - // Clear sticky (writable) status bits. - *CYG_GDB_DEV_UTSR0 = SA11X0_UART_RX_IDLE | - SA11X0_UART_RX_BEGIN_OF_BREAK | - SA11X0_UART_RX_END_OF_BREAK; - -#if 0 // later -#if CYGHWR_HAL_ARM_SA11X0_GDB_PORT == 1 - - //Set pin 14 as an output (Tx) and pin 15 as in input (Rx). - *SA11X0_REG_GPDR = (*SA11X0_REG_GPDR | SA11X0_GPIO_14) & ~SA11X0_GPIO_15; - - // Use GPIO 14 & 15 pins for serial port 1. - *SA11X0_REG_GAFR |= SA11X0_GPIO_14 | SA11X0_GPIO_15; - - // Pin reassignment for serial port 1. - *SA11X0_REG_PPAR |= SA11X0_UART_PIN_REASSIGNMENT_MASK; - -#endif -#endif - - // Set UART to 8N1 (8 data bits, no partity, 1 stop bit) - *CYG_GDB_DEV_UTCR0 = SA11X0_UART_PARITY_DISABLED | - SA11X0_UART_STOP_BITS_1 | - SA11X0_UART_DATA_BITS_8; - - // Set the desired baud rate. - brd = SA11X0_UART_BAUD_RATE_DIVISOR(baudRate); - *CYG_GDB_DEV_UTCR1 = (brd >> 8) & SA11X0_UART_H_BAUD_RATE_DIVISOR_MASK; - *CYG_GDB_DEV_UTCR2 = brd & SA11X0_UART_L_BAUD_RATE_DIVISOR_MASK; - - // Enable the receiver (with interrupts) and the transmitter. - *CYG_GDB_DEV_UTCR3 = SA11X0_UART_RX_ENABLED | - SA11X0_UART_TX_ENABLED | - SA11X0_UART_RX_FIFO_INT_ENABLED; - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - cyg_drv_interrupt_create(CYG_GDB_DEV_INT, - 99, // Priority - what goes here? - 0, // Data item passed to interrupt handler - cyg_hal_gdb_isr, - 0, - &gdb_interrupt_handle, - &gdb_interrupt); - cyg_drv_interrupt_attach(gdb_interrupt_handle); - cyg_drv_interrupt_unmask(CYG_GDB_DEV_INT); -#endif -} - -// Write C to the current serial port. -void hal_sa11x0_put_char(int c) -{ - // Wait for Tx FIFO not full - while ((*CYG_GDB_DEV_UTSR1 & SA11X0_UART_TX_FIFO_NOT_FULL) == 0) - ; - *CYG_GDB_DEV_UTDR = c; -} - -// Read one character from the current serial port. -// FIXME: shouldn't we check for PARITY_ERROR, FRAMING_ERROR, or -// RECEIVE_FIFO_OVERRUN_ERROR in the received data? This -// means check the appropriate bits in UTSR1. -int hal_sa11x0_get_char(void) -{ - long timeout = 1000000000; // A long time... - int c; - // If receive fifo is empty, block and wait for a new char. - while ((*CYG_GDB_DEV_UTSR1 & SA11X0_UART_RX_FIFO_NOT_EMPTY) == 0) - if ( --timeout == 0 ) - return -1; - c = *CYG_GDB_DEV_UTDR; - // Clear receiver idle status bit, to allow another interrupt to - // occur in the case where the receive fifo is almost empty. - *CYG_GDB_DEV_UTSR0 = SA11X0_UART_RX_IDLE; - return c; -} - -#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -//----------------------------------------------------------------------------- -// End of plf_stub.c diff --git a/packages/hal/common/current/ChangeLog b/packages/hal/common/current/ChangeLog --- a/packages/hal/common/current/ChangeLog +++ b/packages/hal/common/current/ChangeLog @@ -1,3 +1,7 @@ +2000-08-24 Gary Thomas + + * include/hal_tables.h: Need descriminated tables (for proper sorting). + 2000-08-14 Drew Moseley * src/hal_if.c: Added an extern declaration for diff --git a/packages/hal/common/current/include/hal_tables.h b/packages/hal/common/current/include/hal_tables.h --- a/packages/hal/common/current/include/hal_tables.h +++ b/packages/hal/common/current/include/hal_tables.h @@ -90,6 +90,11 @@ CYGBLD_ATTRIB_SECTION(.ecos.table.##_name##.data) #endif +#ifndef CYG_HAL_TABLE_QUALIFIED_ENTRY +#define CYG_HAL_TABLE_QUALIFIED_ENTRY( _name, _qual ) \ + CYGBLD_ATTRIB_SECTION(.ecos.table.##_name##.data.##_qual) +#endif + /*------------------------------------------------------------------------*/ /* EOF hal_tables.h */ #endif // CYGONCE_HAL_TABLES_H diff --git a/packages/hal/powerpc/cogent/current/src/cma_ser.inl b/packages/hal/powerpc/cogent/current/src/cma_ser.inl deleted file mode 100644 --- a/packages/hal/powerpc/cogent/current/src/cma_ser.inl +++ /dev/null @@ -1,382 +0,0 @@ -#ifndef CYGONCE_HAL_CMA_SER_H -#define CYGONCE_HAL_CMA_SER_H -//============================================================================= -// -// cma_ser.inl -// -// Simple driver for the Cogent CMA mother board serial -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 1999-01-27 -// Description: Simple driver for the Cogent CMA mother board serial. -// Clients of this file can configure the behavior with: -// CYG_CMA_PORT: serial port to use (0 or 1) -// CYG_CMA_PUBLIC: define to export init, get, and put functions. -// CYG_CMA_STUB: define to get extra stub functions -// CYG_CMA_NAME_PREFIX: Function prefix. Default is hal_cma_ -// Using different prefixes can be required -// if both serial ports are used from the -// same source file. -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include - -#include // IO macros -#include // HAL_ENABLE/MASK/UNMASK_INTERRUPTS - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -#include // target_register_t -#endif - -// Unless explicitly asked to export functions, keep them local. -#ifndef CYG_CMA_PUBLIC -#define CYG_CMA_PUBLIC static -#endif - -// Function names are prefix with hal_cma_ unless something else is specified. -#ifndef CYG_CMA_NAME_PREFIX -#define CYG_CMA_NAME_PREFIX hal_cma_ -#endif - -//----------------------------------------------------------------------------- -// Name Conversion magic. -#define Str(x, y) x ## y -#define Xstr(x, y) Str(x, y) -#define NC(_name) Xstr(CYG_CMA_NAME_PREFIX, _name) - -//----------------------------------------------------------------------------- -// The exported functions. -// Base: -CYG_CMA_PUBLIC void NC(init_serial)( void ); -CYG_CMA_PUBLIC int NC(get_char)( void ); -CYG_CMA_PUBLIC void NC(put_char)( int c ); -// GDB BREAK support: -#if defined(CYG_CMA_STUB) && defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) -int NC(interruptible)( int state ); -void NC(init_break_irq)( void ); -int cyg_hal_gdb_isr( target_register_t pc ); // called from vectors.S -#endif - -//----------------------------------------------------------------------------- -// Port to use. -#if (1 == CYG_CMA_PORT) -#define CYG_DEVICE_SERIAL_RS232_16550_BASE CYG_DEVICE_SERIAL_RS232_16550_BASE_B -#else -#define CYG_DEVICE_SERIAL_RS232_16550_BASE CYG_DEVICE_SERIAL_RS232_16550_BASE_A -#endif - -//----------------------------------------------------------------------------- -// Controller definitions. -#ifndef CYGONCE_HAL_CMA_SER_INL -#define CYGONCE_HAL_CMA_SER_INL - -//----------------------------------------------------------------------------- -// There are two serial ports. -#define CYG_DEVICE_SERIAL_RS232_16550_BASE_A 0xe900047 // port A -#define CYG_DEVICE_SERIAL_RS232_16550_BASE_B 0xe900007 // port B - -//----------------------------------------------------------------------------- -// Default baud rate is 38400 -#define CYG_DEVICE_SERIAL_RS232_T1_VALUE_B38400 0x00 -#define CYG_DEVICE_SERIAL_RS232_T2_VALUE_B38400 0x06 - -//----------------------------------------------------------------------------- -// Define the serial registers. The Cogent board is equipped with a 16552 -// serial chip. -#define CYG_DEVICE_SERIAL_RS232_16550_RBR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00) - // receiver buffer register, read, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_THR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00) - // transmitter holding register, write, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_DLL \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x00) - // divisor latch (LS), read/write, dlab = 1 -#define CYG_DEVICE_SERIAL_RS232_16550_IER \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08) - // interrupt enable register, read/write, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_DLM \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x08) - // divisor latch (MS), read/write, dlab = 1 -#define CYG_DEVICE_SERIAL_RS232_16550_IIR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x10) - // interrupt identification register, read, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_FCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x10) - // fifo control register, write, dlab = 0 -#define CYG_DEVICE_SERIAL_RS232_16550_AFR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x10) - // alternate function register, read/write, dlab = 1 -#define CYG_DEVICE_SERIAL_RS232_16550_LCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x18) - // line control register, read/write -#define CYG_DEVICE_SERIAL_RS232_16550_MCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x20) - // modem control register, read/write -#define CYG_DEVICE_SERIAL_RS232_16550_MCR_A \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE_A + 0x20) -#define CYG_DEVICE_SERIAL_RS232_16550_MCR_B \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE_B + 0x20) -#define CYG_DEVICE_SERIAL_RS232_16550_LSR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x28) - // line status register, read -#define CYG_DEVICE_SERIAL_RS232_16550_MSR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x30) - // modem status register, read -#define CYG_DEVICE_SERIAL_RS232_16550_SCR \ - ((volatile cyg_uint8 *) CYG_DEVICE_SERIAL_RS232_16550_BASE + 0x38) - // scratch pad register - -// The interrupt enable register bits. -#define SIO_IER_ERDAI 0x01 // enable received data available irq -#define SIO_IER_ETHREI 0x02 // enable THR empty interrupt -#define SIO_IER_ELSI 0x04 // enable receiver line status irq -#define SIO_IER_EMSI 0x08 // enable modem status interrupt - -// The interrupt identification register bits. -#define SIO_IIR_IP 0x01 // 0 if interrupt pending -#define SIO_IIR_ID_MASK 0x0e // mask for interrupt ID bits - -// The line status register bits. -#define SIO_LSR_DR 0x01 // data ready -#define SIO_LSR_OE 0x02 // overrun error -#define SIO_LSR_PE 0x04 // parity error -#define SIO_LSR_FE 0x08 // framing error -#define SIO_LSR_BI 0x10 // break interrupt -#define SIO_LSR_THRE 0x20 // transmitter holding register empty -#define SIO_LSR_TEMT 0x40 // transmitter register empty -#define SIO_LSR_ERR 0x80 // any error condition - -// The modem status register bits. -#define SIO_MSR_DCTS 0x01 // delta clear to send -#define SIO_MSR_DDSR 0x02 // delta data set ready -#define SIO_MSR_TERI 0x04 // trailing edge ring indicator -#define SIO_MSR_DDCD 0x08 // delta data carrier detect -#define SIO_MSR_CTS 0x10 // clear to send -#define SIO_MSR_DSR 0x20 // data set ready -#define SIO_MSR_RI 0x40 // ring indicator -#define SIO_MSR_DCD 0x80 // data carrier detect - -// The line control register bits. -#define SIO_LCR_WLS0 0x01 // word length select bit 0 -#define SIO_LCR_WLS1 0x02 // word length select bit 1 -#define SIO_LCR_STB 0x04 // number of stop bits -#define SIO_LCR_PEN 0x08 // parity enable -#define SIO_LCR_EPS 0x10 // even parity select -#define SIO_LCR_SP 0x20 // stick parity -#define SIO_LCR_SB 0x40 // set break -#define SIO_LCR_DLAB 0x80 // divisor latch access bit - -// The FIFO control register -#define SIO_FCR_FCR0 0x01 // enable xmit and rcvr fifos -#define SIO_FCR_FCR1 0x02 // clear RCVR FIFO -#define SIO_FCR_FCR2 0x04 // clear XMIT FIFO - -#endif // ifndef CYGONCE_HAL_CMA_SER_INL - -//----------------------------------------------------------------------------- -// The minimal init, get and put functions. All by polling. - -CYG_CMA_PUBLIC void NC(init_serial)( void ) -{ - cyg_uint8 lcr; - - // Disable interrupts. -#ifdef CYGPKG_HAL_POWERPC_MPC8xx - HAL_INTERRUPT_MASK(CYGNUM_HAL_INTERRUPT_SIU_IRQ1); -#else -#error "Not supported on CPU" -#endif - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_IER, 0); - - // Disable and clear FIFOs (need to enable to clear). - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_FCR, - (SIO_FCR_FCR0 | SIO_FCR_FCR1 | SIO_FCR_FCR2)); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_FCR, 0); - - // 8-1-no parity. - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, - SIO_LCR_WLS0 | SIO_LCR_WLS1); - - // Set speed to 38400. - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr); - lcr |= SIO_LCR_DLAB; - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr); - - - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLL, - CYG_DEVICE_SERIAL_RS232_T2_VALUE_B38400); - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_DLM, - CYG_DEVICE_SERIAL_RS232_T1_VALUE_B38400); - lcr &= ~SIO_LCR_DLAB; - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LCR, lcr); - - { - // Special initialization for ST16C552 on CMA102 - cyg_uint8 mcr; - - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_MCR_A, mcr); - mcr |= 8; - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_MCR_A, mcr); - - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_MCR_B, mcr); - mcr |= 8; - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_MCR_B, mcr); - } - - // Enable FIFOs (and clear them). - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_FCR, - (SIO_FCR_FCR0 | SIO_FCR_FCR1 | SIO_FCR_FCR2)); - -} - -CYG_CMA_PUBLIC int NC(get_char)( void ) -{ - cyg_uint8 c, lsr; - - do { - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr); - } while ((lsr & SIO_LSR_DR) == 0); - - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_RBR, c); - - return c; -} - -CYG_CMA_PUBLIC void NC(put_char)( int c ) -{ - cyg_uint8 lsr; - - do { - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr); - } while ((lsr & SIO_LSR_THRE) == 0); - - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_THR, c); - - // Hang around until the character has been safely sent. - do { - HAL_READ_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_LSR, lsr); - } while ((lsr & SIO_LSR_THRE) == 0); -} - - -//----------------------------------------------------------------------------- -// Additional functions required to provide GDB BREAK support. - -#if defined(CYG_CMA_STUB) && defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) -int NC(interruptible)( int state ) -{ - int vector; -#ifdef CYGPKG_HAL_POWERPC_MPC8xx - // Serial interrupts are feed to IRQ1 on the 8xx CPUs. - vector = CYGNUM_HAL_INTERRUPT_SIU_IRQ1; -#else -#error "Not supported on CPU" -#endif - - if (state) { - HAL_INTERRUPT_UNMASK(vector); - } else { - HAL_INTERRUPT_MASK(vector); - } - - return 0; -} - -void NC(init_break_irq)( void ) -{ - NC(interruptible)(0); - - // Enable serial receive interrupts. - HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_16550_IER, SIO_IER_ERDAI); - HAL_ENABLE_INTERRUPTS(); - - NC(interruptible)(1); -} - -// This ISR is called from the interrupt handler. This should only -// happen when there is no real serial driver, so the code shouldn't -// mess anything up. -int cyg_hal_gdb_isr( target_register_t pc ) -{ - cyg_uint8 vec; - int break_irq = 0; - -#ifdef CYGPKG_HAL_POWERPC_MPC8xx - // Serial interrupts are feed to IRQ1 (vector 0x08) on the Cogent - // board. - HAL_READ_UINT8(CYGARC_REG_IMM_SIVEC, vec); - if (0x08 == vec) - break_irq = 1; -#else -#error "Not supported on CPU" -#endif - - if ( break_irq ){ - cyg_uint8 c; - - HAL_READ_UINT8( CYG_DEVICE_SERIAL_RS232_16550_RBR, c ); - if ( 3 == c ) - { - // Ctrl-C: set a breakpoint at PC so GDB will display the - // correct program context when stopping rather than the - // interrupt handler. - cyg_hal_gdb_interrupt( pc ); - - // Interrupt handled. Don't call ISR proper. At return - // from the VSR, execution will stop at the breakpoint - // just set. - return 0; - } - } - - // Not caused by GDB. Call ISR proper. - return 1; -} - -#endif - -//----------------------------------------------------------------------------- -// Undefine all macros used in this file. -#undef CYG_CMA_PORT -#undef CYG_CMA_PUBLIC -#undef CYG_CMA_STUB -#undef CYG_CMA_NAME_PREFIX -#undef NC -#undef Str -#undef Xstr -#undef CYG_DEVICE_SERIAL_RS232_16550_BASE - -//----------------------------------------------------------------------------- -// end of cma_ser.inl -#endif // CYGONCE_HAL_CMA_SER_INL diff --git a/packages/hal/powerpc/cogent/current/src/hal_aux.c b/packages/hal/powerpc/cogent/current/src/hal_aux.c deleted file mode 100644 --- a/packages/hal/powerpc/cogent/current/src/hal_aux.c +++ /dev/null @@ -1,59 +0,0 @@ -//============================================================================= -// -// hal_aux.c -// -// HAL auxiliary objects and code; per platform -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): hmt -// Contributors:hmt -// Date: 1999-06-08 -// Purpose: HAL aux objects: startup tables. -// Description: Tables for per-platform initialization -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include -#include // HAL memory definitions - -// The memory map is weakly defined, allowing the application to redefine -// it if necessary. The regions defined below are the minimum requirements. -CYGARC_MEMDESC_TABLE CYGBLD_ATTRIB_WEAK = { - // Mapping for the Cogent CMA101/102 boards. - CYGARC_MEMDESC_NOCACHE( 0xfff00000, 0x00100000 ), // ROM region - CYGARC_MEMDESC_NOCACHE( 0xff000000, 0x00100000 ), // MCP registers - CYGARC_MEMDESC_NOCACHE( 0x0e000000, 0x01000000 ), // IO registers - CYGARC_MEMDESC_CACHE( 0x00000000, 0x00800000 ), // Main memory - - CYGARC_MEMDESC_TABLE_END -}; - -// EOF hal_aux.c diff --git a/packages/hal/sh/arch/current/include/sh3_scif.inl b/packages/hal/sh/arch/current/include/sh3_scif.inl deleted file mode 100644 --- a/packages/hal/sh/arch/current/include/sh3_scif.inl +++ /dev/null @@ -1,307 +0,0 @@ -#ifndef CYGONCE_HAL_SH3_SCIF_H -#define CYGONCE_HAL_SH3_SCIF_H -//============================================================================= -// -// sh3_scif.inl -// -// Simple driver for the SH3 Serial Communication Interface with FIFO -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 2000-03-30 -// Description: Simple driver for the SH Serial Communication Interface -// The driver can be used for either the SCIF or the IRDA -// modules (the latter can act as the former). -// Clients of this file can configure the behavior with: -// CYG_SCIF_IRDA: if used for IrDA instead of SCIF -// CYG_SCIF_PUBLIC: define to export init, get, and put functions. -// CYG_SCIF_STUB: define to get extra stub functions -// CYG_SCIF_NAME_PREFIX: Function prefix. Default is hal_sci_ -// Using different prefixes can be required -// if both serial ports are used from the -// same source file. -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include - -#include // IO macros -#include // HAL_ENABLE/MASK/UNMASK_INTERRUPTS -#include // serial register definitions - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -#include // target_register_t -#endif - -// Unless explicitly asked to export functions, keep them local. -#ifndef CYG_SCIF_PUBLIC -#define CYG_SCIF_PUBLIC static -#endif - -// Function names are prefix with hal_sci_ unless something else is specified. -#ifndef CYG_SCIF_NAME_PREFIX -#define CYG_SCIF_NAME_PREFIX hal_scif_ -#endif - -//----------------------------------------------------------------------------- -// Register base. -// Can be used to drive either the IrDA controller or the SCIF controller -#ifdef CYG_SCIF_IRDA -# define SC_BASE (CYGARC_REG_SCSMR1) -#else -# define SC_BASE (CYGARC_REG_SCSMR2) -#endif - -#define _SCSMR (SC_BASE+0) -#define _SCBRR (SC_BASE+2) -#define _SCSCR (SC_BASE+4) -#define _SCFTDR (SC_BASE+6) -#define _SCSSR (SC_BASE+8) -#define _SCFRDR (SC_BASE+10) -#define _SCFCR (SC_BASE+12) -#define _SCFDR (SC_BASE+14) - -//----------------------------------------------------------------------------- -// Name Conversion magic. -#define Str(x, y) x ## y -#define Xstr(x, y) Str(x, y) -#define NC(_name) Xstr(CYG_SCIF_NAME_PREFIX, _name) - -//----------------------------------------------------------------------------- -// The exported functions. -// Base: -CYG_SCIF_PUBLIC void NC(init_serial)( void ); -CYG_SCIF_PUBLIC int NC(get_char)( void ); -CYG_SCIF_PUBLIC void NC(put_char)( int c ); -// GDB BREAK support: -#if defined(CYG_SCIF_STUB) && defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) -int NC(interruptible)( int state ); -void NC(init_break_irq)( void ); -int cyg_hal_gdb_isr( target_register_t pc ); // called from vectors.S -#endif - -//----------------------------------------------------------------------------- -// The minimal init, get and put functions. All by polling. - -CYG_SCIF_PUBLIC void NC(init_serial)( void ) -{ - cyg_uint16 sr; - - // Disable interrupts. -#ifdef CYG_SCIF_IRDA - // Note: This affects out all IRDA sources, not only RXI1. - HAL_INTERRUPT_MASK(CYGNUM_HAL_INTERRUPT_IRDA_RXI1); -#else - // Note: This affects out all SCIF sources, not only RXI2. - HAL_INTERRUPT_MASK(CYGNUM_HAL_INTERRUPT_SCIF_RXI2); -#endif - - // Disable everything. - HAL_WRITE_UINT8(_SCSCR, 0); - - // Reset FIFO. - HAL_WRITE_UINT8(_SCFCR, CYGARC_REG_SCFCR2_TFRST|CYGARC_REG_SCFCR2_RFRST); - -#ifdef CYG_SCIF_IRDA - // 8-1-no parity, clear IRMOD. - HAL_WRITE_UINT8(_SCSMR, 0); -#else - // 8-1-no parity. - HAL_WRITE_UINT8(_SCSMR, 0); -#endif - -#ifndef CYG_HAL_STARTUP_RAM - { - // Set speed to 38400 - but only if configured for ROM; if - // configured for RAM, we could be hosted by either the eCos - // stub (running 38400, already initialized) or the Hitachi - // ROM (running 9600 - reinitializing to 38400 would cause GDB - // to lose the connection). - cyg_uint8 tmp; - HAL_READ_UINT8(_SCSMR, tmp); - tmp &= ~CYGARC_REG_SCSMR2_CKSx_MASK; - tmp |= CYGARC_SCBRR2_CKSx(38400); - HAL_WRITE_UINT8(_SCSMR, tmp); - HAL_WRITE_UINT8(_SCBRR, CYGARC_SCBRR2_N(38400)); - } -#endif - - // Let things settle: Here we should should wait the equivalent of - // one bit interval, i.e. 1/38400 second, but until we have - // something like the Linux jiffies, it's hard to do reliably. So - // just move on and hope for the best (this is unlikely to cause - // problems since the CPU has just come out of reset anyway). - - // Clear status register (read back first). - HAL_READ_UINT16(_SCSSR, sr); - HAL_WRITE_UINT16(_SCSSR, 0); - - // Bring FIFO out of reset and set to trigger on every char in - // FIFO (or C-c input would not be processed). - HAL_WRITE_UINT8(_SCFCR, CYGARC_REG_SCFCR2_RTRG_1|CYGARC_REG_SCFCR2_TTRG_1); - - // Leave Tx/Rx interrupts disabled, but enable Tx/Rx - HAL_WRITE_UINT8(_SCSCR, CYGARC_REG_SCSCR2_TE|CYGARC_REG_SCSCR2_RE); -} - -CYG_SCIF_PUBLIC int NC(get_char)( void ) -{ - cyg_uint8 c; - cyg_uint16 fdr, sr; - - do { - HAL_READ_UINT16(_SCFDR, fdr); - } while ((fdr & CYGARC_REG_SCFDR2_RCOUNT_MASK) == 0); - - HAL_READ_UINT8(_SCFRDR, c); - - // Clear FIFO full flag (read before clearing) - HAL_READ_UINT16(_SCSSR, sr); - HAL_WRITE_UINT16(_SCSSR, - CYGARC_REG_SCSSR2_CLEARMASK & ~CYGARC_REG_SCSSR2_RDF); - - return c; -} - -CYG_SCIF_PUBLIC void NC(put_char)( int c ) -{ - cyg_uint16 fdr, sr; - - do { - HAL_READ_UINT16(_SCFDR, fdr); - } while (((fdr & CYGARC_REG_SCFDR2_TCOUNT_MASK) >> CYGARC_REG_SCFDR2_TCOUNT_shift) == 16); - - HAL_WRITE_UINT8(_SCFTDR, c); - - // Clear FIFO-empty/transmit end flags (read back SR first) - HAL_READ_UINT16(_SCSSR, sr); - HAL_WRITE_UINT16(_SCSSR, CYGARC_REG_SCSSR2_CLEARMASK - & ~(CYGARC_REG_SCSSR2_TDFE | CYGARC_REG_SCSSR2_TEND )); - - // Hang around until the character has been safely sent. - do { - HAL_READ_UINT16(_SCFDR, fdr); - } while ((fdr & CYGARC_REG_SCFDR2_TCOUNT_MASK) != 0); -} - - -//----------------------------------------------------------------------------- -// Additional functions required to provide GDB BREAK support. - -#if defined(CYG_SCIF_STUB) && defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) -int NC(interruptible)( int state ) -{ - if (state) { -#ifdef CYG_SCIF_IRDA - // Note: This affects out all IRDA sources, not only RXI1. - HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_IRDA_RXI1); -#else - // Note: This affects out all SCIF sources, not only RXI2. - HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_SCIF_RXI2); -#endif - } else { -#ifdef CYG_SCIF_IRDA - // Note: This affects out all IRDA sources, not only RXI1. - HAL_INTERRUPT_MASK(CYGNUM_HAL_INTERRUPT_IRDA_RXI1); -#else - // Note: This affects out all SCIF sources, not only RXI2. - HAL_INTERRUPT_MASK(CYGNUM_HAL_INTERRUPT_SCIF_RXI2); -#endif - } - - return 0; -} - -void NC(init_break_irq)( void ) -{ - cyg_uint8 scr; - - NC(interruptible)(0); - - // Enable serial receive interrupts. - - // Enable Rx interrupts - HAL_READ_UINT8(_SCSCR, scr); - scr |= CYGARC_REG_SCSCR2_RIE; - HAL_WRITE_UINT8(_SCSCR, scr); - HAL_ENABLE_INTERRUPTS(); - - NC(interruptible)(1); -} - -// This ISR is called from the interrupt handler. -int cyg_hal_gdb_isr( target_register_t pc ) -{ - cyg_uint8 c; - cyg_uint16 fdr, sr; - - HAL_READ_UINT16(_SCFDR, fdr); - if ((fdr & CYGARC_REG_SCFDR2_RCOUNT_MASK) != 0) { - HAL_READ_UINT8(_SCFRDR, c); - - // Clear buffer full flag (read back first). - HAL_READ_UINT16(_SCSSR, sr); - HAL_WRITE_UINT16(_SCSSR, - CYGARC_REG_SCSSR2_CLEARMASK & ~CYGARC_REG_SCSSR2_RDF); - - if ( 3 == c ) - { - // Ctrl-C: set a breakpoint at PC so GDB will display the - // correct program context when stopping rather than the - // interrupt handler. - cyg_hal_gdb_interrupt( pc ); - } - - // Interrupt handled. Don't call ISR proper. At return - // from the VSR, execution will stop at the breakpoint - // just set. - return 0; - } - - // Not caused by GDB. Call ISR proper. - return 1; -} - -#endif - -//----------------------------------------------------------------------------- -// Undefine all macros used in this file. -#undef CYG_SCIF_IRDA -#undef CYG_SCIF_PUBLIC -#undef CYG_SCIF_STUB -#undef CYG_SCIF_NAME_PREFIX -#undef NC -#undef Str -#undef Xstr - -//----------------------------------------------------------------------------- -// end of sh3_scif.inl -#endif // CYGONCE_HAL_SH3_SCIF_INL diff --git a/packages/hal/sh/arch/current/include/sh_sci.inl b/packages/hal/sh/arch/current/include/sh_sci.inl deleted file mode 100644 --- a/packages/hal/sh/arch/current/include/sh_sci.inl +++ /dev/null @@ -1,240 +0,0 @@ -#ifndef CYGONCE_HAL_SH_SCI_H -#define CYGONCE_HAL_SH_SCI_H -//============================================================================= -// -// sh_sci.inl -// -// Simple driver for the SH Serial Communication Interface (SCI) -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 1999-05-17 -// Description: Simple driver for the SH Serial Communication Interface -// Clients of this file can configure the behavior with: -// CYG_SCI_PORT: serial port to use (0 or 1) -// CYG_SCI_PUBLIC: define to export init, get, and put functions. -// CYG_SCI_STUB: define to get extra stub functions -// CYG_SCI_NAME_PREFIX: Function prefix. Default is hal_sci_ -// Using different prefixes can be required -// if both serial ports are used from the -// same source file. -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include - -#include // IO macros -#include // HAL_ENABLE/MASK/UNMASK_INTERRUPTS -#include // serial register definitions - -#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT -#include // target_register_t -#endif - -// Unless explicitly asked to export functions, keep them local. -#ifndef CYG_SCI_PUBLIC -#define CYG_SCI_PUBLIC static -#endif - -// Function names are prefix with hal_sci_ unless something else is specified. -#ifndef CYG_SCI_NAME_PREFIX -#define CYG_SCI_NAME_PREFIX hal_sci_ -#endif - -//----------------------------------------------------------------------------- -// Name Conversion magic. -#define Str(x, y) x ## y -#define Xstr(x, y) Str(x, y) -#define NC(_name) Xstr(CYG_SCI_NAME_PREFIX, _name) - -//----------------------------------------------------------------------------- -// The exported functions. -// Base: -CYG_SCI_PUBLIC void NC(init_serial)( void ); -CYG_SCI_PUBLIC int NC(get_char)( void ); -CYG_SCI_PUBLIC void NC(put_char)( int c ); -// GDB BREAK support: -#if defined(CYG_SCI_STUB) && defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) -int NC(interruptible)( int state ); -void NC(init_break_irq)( void ); -int cyg_hal_gdb_isr( target_register_t pc ); // called from vectors.S -#endif - -//----------------------------------------------------------------------------- -// The minimal init, get and put functions. All by polling. - -CYG_SCI_PUBLIC void NC(init_serial)( void ) -{ - // Disable interrupts. - // Note: This affects out all SCI sources, not only RXI. - HAL_INTERRUPT_MASK(CYGNUM_HAL_INTERRUPT_SCI_RXI); - - // Disable Tx/Rx interrupts, but enable Tx/Rx - HAL_WRITE_UINT8(CYGARC_REG_SCSCR, CYGARC_REG_SCSCR_TE|CYGARC_REG_SCSCR_RE); - - // 8-1-no parity. - HAL_WRITE_UINT8(CYGARC_REG_SCSMR, 0); - -#ifndef CYG_HAL_STARTUP_RAM - { - // Set speed to 38400 - but only if configured for ROM; if - // configured for RAM, we could be hosted by either the eCos - // stub (running 38400, already initialized) or the Hitachi - // ROM (running 9600 - reinitializing to 38400 would cause GDB - // to lose the connection). - cyg_uint8 tmp; - HAL_READ_UINT8(CYGARC_REG_SCSMR, tmp); - tmp &= ~CYGARC_REG_SCSMR_CKSx_MASK; - tmp |= CYGARC_SCBRR_CKSx(38400); - HAL_WRITE_UINT8(CYGARC_REG_SCSMR, tmp); - HAL_WRITE_UINT8(CYGARC_REG_SCBRR, CYGARC_SCBRR_N(38400)); - } -#endif -} - -CYG_SCI_PUBLIC int NC(get_char)( void ) -{ - cyg_uint8 c, sr; - - do { - HAL_READ_UINT8(CYGARC_REG_SCSSR, sr); - } while ((sr & CYGARC_REG_SCSSR_RDRF) == 0); - - HAL_READ_UINT8(CYGARC_REG_SCRDR, c); - - // Clear buffer full flag. - HAL_WRITE_UINT8(CYGARC_REG_SCSSR, sr & ~CYGARC_REG_SCSSR_RDRF); - - return c; -} - -CYG_SCI_PUBLIC void NC(put_char)( int c ) -{ - cyg_uint8 sr; - - do { - HAL_READ_UINT8(CYGARC_REG_SCSSR, sr); - } while ((sr & CYGARC_REG_SCSSR_TDRE) == 0); - - HAL_WRITE_UINT8(CYGARC_REG_SCTDR, c); - - // Clear empty flag. - HAL_WRITE_UINT8(CYGARC_REG_SCSSR, sr & ~CYGARC_REG_SCSSR_TDRE); - - // Hang around until the character has been safely sent. - do { - HAL_READ_UINT8(CYGARC_REG_SCSSR, sr); - } while ((sr & CYGARC_REG_SCSSR_TDRE) == 0); -} - - -//----------------------------------------------------------------------------- -// Additional functions required to provide GDB BREAK support. - -#if defined(CYG_SCI_STUB) && defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) -int NC(interruptible)( int state ) -{ - if (state) { - // Note: This affects out all SCI sources, not only RXI. - HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_SCI_RXI); - } else { - // Note: This affects out all SCI sources, not only RXI. - HAL_INTERRUPT_MASK(CYGNUM_HAL_INTERRUPT_SCI_RXI); - } - - return 0; -} - -void NC(init_break_irq)( void ) -{ - cyg_uint8 scr; - - hal_diag_led_off(); - - NC(interruptible)(0); - - // Enable serial receive interrupts. - - // Enable Rx interrupts - HAL_READ_UINT8(CYGARC_REG_SCSCR, scr); - scr |= CYGARC_REG_SCSCR_RIE; - HAL_WRITE_UINT8(CYGARC_REG_SCSCR, scr); - HAL_ENABLE_INTERRUPTS(); - - NC(interruptible)(1); -} - -// This ISR is called from the interrupt handler. -int cyg_hal_gdb_isr( target_register_t pc ) -{ - cyg_uint8 c, sr; - - HAL_READ_UINT8(CYGARC_REG_SCSSR, sr); - if (sr & CYGARC_REG_SCSSR_RDRF) { - HAL_READ_UINT8(CYGARC_REG_SCRDR, c); - - // Clear buffer full flag. - HAL_WRITE_UINT8(CYGARC_REG_SCSSR, - CYGARC_REG_SCSSR_CLEARMASK & ~CYGARC_REG_SCSSR_RDRF); - - if ( 3 == c ) - { - // Ctrl-C: set a breakpoint at PC so GDB will display the - // correct program context when stopping rather than the - // interrupt handler. - cyg_hal_gdb_interrupt( pc ); - } - - // Interrupt handled. Don't call ISR proper. At return - // from the VSR, execution will stop at the breakpoint - // just set. - return 0; - } - - // Not caused by GDB. Call ISR proper. - return 1; -} - -#endif - -//----------------------------------------------------------------------------- -// Undefine all macros used in this file. -#undef CYG_SCI_PORT -#undef CYG_SCI_PUBLIC -#undef CYG_SCI_STUB -#undef CYG_SCI_NAME_PREFIX -#undef NC -#undef Str -#undef Xstr - -//----------------------------------------------------------------------------- -// end of sh_sci.inl -#endif // CYGONCE_HAL_SH_SCI_INL diff --git a/packages/hal/sh/cq7708/current/src/plf_stub.c b/packages/hal/sh/cq7708/current/src/plf_stub.c deleted file mode 100644 --- a/packages/hal/sh/cq7708/current/src/plf_stub.c +++ /dev/null @@ -1,58 +0,0 @@ -//============================================================================= -// -// plf_stub.c -// -// Platform specific code for GDB stub support. -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 1999-05-18 -// Purpose: Platform specific code for GDB stub support. -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -#include - -//---------------------------------------------------------------------------- -// Include the serial driver. -#define CYG_SCI_STUB -#define CYG_SCI_PUBLIC -#define CYG_SCI_NAME_PREFIX hal_sci_stub_ -#include - -#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -//----------------------------------------------------------------------------- -// End of plf_stub.c diff --git a/packages/hal/sh/edk/current/src/plf_stub.c b/packages/hal/sh/edk/current/src/plf_stub.c deleted file mode 100644 --- a/packages/hal/sh/edk/current/src/plf_stub.c +++ /dev/null @@ -1,58 +0,0 @@ -//============================================================================= -// -// plf_stub.c -// -// Platform specific code for GDB stub support. -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 1999-05-18 -// Purpose: Platform specific code for GDB stub support. -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -#include - -//---------------------------------------------------------------------------- -// Include the serial driver. -#define CYG_SCI_STUB -#define CYG_SCI_PUBLIC -#define CYG_SCI_NAME_PREFIX hal_sci_stub_ -#include - -#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -//----------------------------------------------------------------------------- -// End of plf_stub.c diff --git a/packages/hal/v85x/ceb_v850/current/images/gdb_module.bin b/packages/hal/v85x/ceb_v850/current/images/gdb_module.bin deleted file mode 100644 index d825c44dc60db0364f6877fe4ea6f9e1276031c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@ + + * include/eth_drv_stats.h (ether_drv_stats): A little further + diddling; have a bool to say whether the dot3 info is filled in. + +2000-08-24 Hugo Tyson + + * src/net/eth_drv.c (eth_drv_ioctl): Implement ioctl() calls. + sockio.h numbers SIOCGIFSTATS and SIOCGIFSTATSUD map to + ETH_DRV_GET_IF_STATS and ETH_DRV_GET_IF_STATS_UD respectively. + + * include/eth_drv.h (ETH_DRV_GET_IF_STATS_UD): Add new device + interface ioctl() numbers, to get the struct below filled in. + Also pull in the definition include file (below). + + * include/eth_drv_stats.h (ether_drv_stats): New file: Define + common structure for ether devices to return stats info to higher + up, via an ioctl() call. SNMP uses this. + +2000-08-23 Gary Thomas + + * src/stand_alone/eth_drv.c: + * include/eth_drv.h: Low level drivers now need to export a + function which returns the interrupt vector used by that interface. + This allows outside code to determine this in a portable fashion. + 2000-08-16 Gary Thomas * src/stand_alone/eth_drv.c: diff --git a/packages/io/eth/current/include/eth_drv.h b/packages/io/eth/current/include/eth_drv.h --- a/packages/io/eth/current/include/eth_drv.h +++ b/packages/io/eth/current/include/eth_drv.h @@ -129,6 +129,8 @@ struct eth_hwr_funs { int sg_len); // Poll for interrupts/device service void (*poll)(struct eth_drv_sc *sc); + // Get interrupt information from hardware driver + int (*int_vector)(struct eth_drv_sc *sc); // Logical driver interface struct eth_drv_funs *eth_drv, *eth_drv_old; }; @@ -147,7 +149,7 @@ struct eth_drv_sc { struct arpcom sc_arpcom; /* ethernet common */ }; -#define ETH_DRV_SC(sc,priv,name,start,stop,control,can_send,send,recv,poll) \ +#define ETH_DRV_SC(sc,priv,name,start,stop,control,can_send,send,recv,poll,int_vector) \ static void start(struct eth_drv_sc *sc, unsigned char *enaddr, int flags); \ static void stop(struct eth_drv_sc *sc); \ static int control(struct eth_drv_sc *sc, unsigned long key, void *data, int data_length); \ @@ -155,6 +157,7 @@ static int can_send(struct eth_drv_sc * static void send(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, int sg_len, int total, unsigned long key); \ static void recv(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, int sg_len); \ static void poll(struct eth_drv_sc *sc); \ +static int int_vector(struct eth_drv_sc *sc); \ static struct eth_hwr_funs sc##_funs = { \ start, \ stop, \ @@ -163,6 +166,7 @@ static struct eth_hwr_funs sc##_funs = { send, \ recv, \ poll, \ + int_vector, \ ð_drv_funs, \ (struct eth_drv_funs *)0 }; \ struct eth_drv_sc sc = {&sc##_funs, priv, name}; @@ -182,6 +186,12 @@ cyg_netdevtab_entry_t *eth_drv_netdev(ch // Control 'key's #define ETH_DRV_SET_MAC_ADDRESS 0x0100 +#ifdef CYGPKG_NET +#define ETH_DRV_GET_IF_STATS_UD 0x0101 +#define ETH_DRV_GET_IF_STATS 0x0102 +#include // The struct * for these ops. +#endif + #ifndef ETHER_ADDR_LEN #define ETHER_ADDR_LEN 6 #endif @@ -190,6 +200,7 @@ cyg_netdevtab_entry_t *eth_drv_netdev(ch extern void eth_drv_buffers_init(void); extern int eth_drv_read(char *eth_hdr, char *buf, int len); extern void eth_drv_write(char *eth_hdr, char *buf, int len); +extern int eth_drv_int_vector(void); extern unsigned char __local_enet_addr[]; extern struct eth_drv_sc *__local_enet_sc; #endif diff --git a/packages/io/eth/current/include/eth_drv_stats.h b/packages/io/eth/current/include/eth_drv_stats.h new file mode 100644 --- /dev/null +++ b/packages/io/eth/current/include/eth_drv_stats.h @@ -0,0 +1,123 @@ +#ifndef CYGONCE_IO_ETH_ETH_DRV_STATS_H +#define CYGONCE_IO_ETH_ETH_DRV_STATS_H +//========================================================================== +// +// include/eth_drv_stats.h +// +// High level networking driver interfaces - statistics gathering +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//####BSDCOPYRIGHTBEGIN#### +// +// ------------------------------------------- +// +// Portions of this software may have been derived from OpenBSD or other sources, +// and are covered by the appropriate copyright disclaimers included herein. +// +// ------------------------------------------- +// +//####BSDCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): hmt +// Contributors: hmt +// Date: 2000-08-23 +// Purpose: +// Description: High level networking driver interfaces - stats gathering +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +#ifdef CYGPKG_NET +#include +#include + +#include + +// This information is oriented towards SNMP's needs. + +#define DESC_LEN (48) +#define SNMP_CHIPSET_LEN (20) + +struct ether_drv_stats { + struct ifreq ifreq; // tell ioctl() which interface. + + char description[ DESC_LEN ]; // Textual description of hardware + unsigned char snmp_chipset[ SNMP_CHIPSET_LEN ]; + // SNMP ID of chipset + unsigned char duplex; // 1 = UNKNOWN, 2 = SIMPLEX, 3 = DUPLEX + unsigned char operational; // 1 = UNKNOWN, 2 = DOWN, 3 = UP + // These are general status information: + unsigned int speed; // 10,000,000 or 100,000,000 + // to infinity and beyond? + + // These are typically kept by device hardware - and there may be some + // cost for getting up to date values: + + unsigned int supports_dot3; /* Boolean value if the device supports dot3*/ + unsigned int tx_good; + unsigned int tx_max_collisions; + unsigned int tx_late_collisions; + unsigned int tx_underrun; + unsigned int tx_carrier_loss; + unsigned int tx_deferred; + unsigned int tx_sqetesterrors; + unsigned int tx_single_collisions; + unsigned int tx_mult_collisions; + unsigned int tx_total_collisions; + unsigned int rx_good; + unsigned int rx_crc_errors; + unsigned int rx_align_errors; + unsigned int rx_resource_errors; + unsigned int rx_overrun_errors; + unsigned int rx_collisions; + unsigned int rx_short_frames; + unsigned int rx_too_long_frames; + unsigned int rx_symbol_errors; + + // These are typically kept by driver software: + unsigned int interrupts; + unsigned int rx_count; + unsigned int rx_deliver; + unsigned int rx_resource; + unsigned int rx_restart; + unsigned int tx_queue_len; + unsigned int tx_count; + unsigned int tx_complete; + unsigned int tx_dropped; + + // Add any others here... + +}; +#endif // CYGPKG_NET +#endif // CYGONCE_IO_ETH_ETH_DRV_STATS_H + +// EOF include/eth_drv_stats.h diff --git a/packages/io/eth/current/src/net/eth_drv.c b/packages/io/eth/current/src/net/eth_drv.c --- a/packages/io/eth/current/src/net/eth_drv.c +++ b/packages/io/eth/current/src/net/eth_drv.c @@ -210,6 +210,21 @@ eth_drv_ioctl(struct ifnet *ifp, u_long } break; +#ifdef SIOCGIFSTATS + case SIOCGIFSTATS: +#ifdef SIOCGIFSTATSUD + case SIOCGIFSTATSUD: +#endif + // Get interface statistics: + if ((sc->funs->control)(sc, (cmd == SIOCGIFSTATS) + ? ETH_DRV_GET_IF_STATS + : ETH_DRV_GET_IF_STATS_UD, + data, 0 ) ) { + error = EINVAL; + } + break; +#endif // SIOCGIFSTATS + case SIOCSIFFLAGS: if ((ifp->if_flags & IFF_UP) == 0 && (ifp->if_flags & IFF_RUNNING) != 0) { diff --git a/packages/io/eth/current/src/stand_alone/eth_drv.c b/packages/io/eth/current/src/stand_alone/eth_drv.c --- a/packages/io/eth/current/src/stand_alone/eth_drv.c +++ b/packages/io/eth/current/src/stand_alone/eth_drv.c @@ -422,3 +422,13 @@ eth_drv_recv(struct eth_drv_sc *sc, int dump_buf(sg_list[0].buf, sg_list[0].len); } } + +// +// Determine the interrupt vector used by an interface +// +int +eth_drv_int_vector(void) +{ + struct eth_drv_sc *sc = __local_enet_sc; + return sc->funs->int_vector(sc); +} diff --git a/packages/io/fileio/current/ChangeLog b/packages/io/fileio/current/ChangeLog --- a/packages/io/fileio/current/ChangeLog +++ b/packages/io/fileio/current/ChangeLog @@ -1,3 +1,8 @@ +2000-08-22 Jonathan Larmour + + * doc/fileio.txt: Add Nick's text description of plug-in filesystems + and sockets here for now. + 2000-08-18 Nick Garnett * include/fileio.h: Added CYG_FAPPEND flag for preservation in diff --git a/packages/io/flash/current/ChangeLog b/packages/io/flash/current/ChangeLog --- a/packages/io/flash/current/ChangeLog +++ b/packages/io/flash/current/ChangeLog @@ -1,3 +1,10 @@ +2000-08-22 Hugo Tyson + + * src/flash.c (flash_program): Add HAL_ICACHE_DISABLE/ENABLE pairs + around calls to RAM copy of programming/erasing function - this is + necessary to get reliable operation on EBSA285 and similar. + Otherwise, what is in the instruction cache might be run instead. + 2000-08-14 Gary Thomas * include/flash.h: Add block size mask for finding block boundaries. diff --git a/packages/io/flash/current/src/flash.c b/packages/io/flash/current/src/flash.c --- a/packages/io/flash/current/src/flash.c +++ b/packages/io/flash/current/src/flash.c @@ -57,7 +57,7 @@ flash_init(void *work_space, int work_sp if (flash_info.init) return FLASH_ERR_OK; flash_info.work_space = work_space; - flash_info.work_space_size = flash_info.work_space_size; + flash_info.work_space_size = work_space_size; if ((err = flash_hwr_init()) != FLASH_ERR_OK) { return err; } @@ -121,6 +121,7 @@ flash_erase(void *addr, int len, void ** _flash_erase_block = (code_fun *)flash_info.work_space; memcpy(_flash_erase_block, &flash_erase_block, code_len); HAL_DCACHE_SYNC(); // Should guarantee this code will run + HAL_ICACHE_DISABLE(); // is also required to avoid old contents block = (unsigned short *)((unsigned long)addr & flash_info.block_mask); end_addr = (unsigned short *)((unsigned long)addr+len); @@ -137,6 +138,7 @@ flash_erase(void *addr, int len, void ** block += flash_info.block_size / sizeof(*block); printf("."); } + HAL_ICACHE_ENABLE(); printf("\n"); return (stat); } @@ -161,6 +163,7 @@ flash_program(void *_addr, void *_data, _flash_program_buf = (code_fun *)flash_info.work_space; memcpy(_flash_program_buf, &flash_program_buf, code_len); HAL_DCACHE_SYNC(); // Should guarantee this code will run + HAL_ICACHE_DISABLE(); // is also required to avoid old contents printf("... Program from %p-%p at %p: ", data, ((unsigned long)data)+len, addr); @@ -178,6 +181,7 @@ flash_program(void *_addr, void *_data, addr += size/sizeof(*addr); data += size/sizeof(*data); } + HAL_ICACHE_ENABLE(); printf("\n"); return (stat); } diff --git a/packages/io/pcmcia/current/ChangeLog b/packages/io/pcmcia/current/ChangeLog --- a/packages/io/pcmcia/current/ChangeLog +++ b/packages/io/pcmcia/current/ChangeLog @@ -1,3 +1,9 @@ +2000-08-23 Gary Thomas + + * src/pcmcia.c: + * include/pcmcia.h: Export new function to forceably clear interrupts + on a card [slot]. Use in non-kernel environments. + 2000-07-16 Gary Thomas * cdl/io_pcmcia.cdl: diff --git a/packages/io/pcmcia/current/include/pcmcia.h b/packages/io/pcmcia/current/include/pcmcia.h --- a/packages/io/pcmcia/current/include/pcmcia.h +++ b/packages/io/pcmcia/current/include/pcmcia.h @@ -116,6 +116,7 @@ bool cf_parse_config(unsigned char *buf, struct cf_slot *cf_get_slot(int indx); void cf_change_state(struct cf_slot *slot, int desired_state); void cf_register_handler(struct cf_slot *, void (*handler)(void *), void *); +void cf_clear_interrupt(struct cf_slot *); void cf_init(void); #endif // CYGONCE_PCMCIA_H diff --git a/packages/io/pcmcia/current/src/pcmcia.c b/packages/io/pcmcia/current/src/pcmcia.c --- a/packages/io/pcmcia/current/src/pcmcia.c +++ b/packages/io/pcmcia/current/src/pcmcia.c @@ -56,6 +56,7 @@ static struct cf_slot cf_slots[CF_NUM_SL // Implementation routines void cf_hwr_init(struct cf_slot *slot); void cf_hwr_change_state(struct cf_slot *slot, int desired_state); +void cf_hwr_clear_interrupt(struct cf_slot *slot); bool cf_get_CIS(struct cf_slot *slot, unsigned char id, @@ -283,3 +284,12 @@ cf_register_handler(struct cf_slot *slot slot->irq_handler.param = param; } +// +// Allow interrupt function to acknowledge interrupt +// +void +cf_clear_interrupt(struct cf_slot *slot) +{ + cf_hwr_clear_interrupt(slot); +} + diff --git a/packages/kernel/current/include/memfixed.hxx b/packages/kernel/current/include/memfixed.hxx deleted file mode 100644 --- a/packages/kernel/current/include/memfixed.hxx +++ /dev/null @@ -1,121 +0,0 @@ -#ifndef CYGONCE_KERNEL_MEMFIXED_HXX -#define CYGONCE_KERNEL_MEMFIXED_HXX - -//========================================================================== -// -// memfixed.hxx -// -// Memory pool with fixed block class declarations -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): hmt -// Contributors: hmt -// Date: 1998-03-23 -// Purpose: Define Memfixed class interface -// Description: Inline class for constructing a fixed block allocator -// Usage: #include -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include // kernel types -#include // assertion macros - -#ifdef CYGIMP_MEM_USE_MEMPOOLT_PLAIN -#include // kernel safe mempool template -#else -#include // kernel safe mempool template -#endif - -#include // implementation of a fixed mem pool - -class Cyg_Mempool_Fixed { -private: -#ifdef CYGIMP_MEM_USE_MEMPOOLT_PLAIN - Cyg_Mempoolt mypool; -#else - Cyg_Mempolt2 mypool; -#endif - -public: - // this API makes concrete a class which implements a thread-safe - // kernel-savvy memory pool which manages fixed size blocks. - - CYGDBG_DEFINE_CHECK_THIS - - // Constructor: gives the base and size of the arena in which memory is - // to be carved out, note that management structures are taken from the - // same arena. Alloc_unit is the blocksize allocated. - Cyg_Mempool_Fixed( - cyg_uint8 *base, - cyg_int32 size, - CYG_ADDRWORD alloc_unit ); - - // Destructor - ~Cyg_Mempool_Fixed(); - - // get some memory; wait if none available - cyg_uint8 *alloc(); - -#ifdef CYGFUN_KERNEL_THREADS_TIMER - // get some memory with a timeout - cyg_uint8 *alloc(cyg_tick_count delay_timeout ); -#endif - - // get some memory, return NULL if none available - cyg_uint8 *try_alloc(); - - // free the memory back to the pool - cyg_bool free( cyg_uint8 *p); - - // is anyone waiting for memory? - cyg_bool waiting(); - - // read the fixed allocation size - cyg_int32 get_blocksize(); - - // these two are obvious and generic - cyg_int32 get_totalmem(); - cyg_int32 get_freemem(); - - // get information about the construction parameters for external - // freeing after the destruction of the holding object - void - get_arena( cyg_uint8 * &base, cyg_int32 &size, CYG_ADDRWORD &alloc ); - - // Return the size of the memory allocation (previously returned - // by alloc() or try_alloc() ) at ptr. Returns -1 if not found - cyg_int32 - get_allocation_size( cyg_uint8 * /* ptr */ ); -}; - -#endif // ifndef CYGONCE_KERNEL_MEMFIXED_HXX -// EOF memfixed.hxx diff --git a/packages/kernel/current/include/mempolt2.hxx b/packages/kernel/current/include/mempolt2.hxx deleted file mode 100644 --- a/packages/kernel/current/include/mempolt2.hxx +++ /dev/null @@ -1,124 +0,0 @@ -#ifndef CYGONCE_KERNEL_MEMPOLT2_HXX -#define CYGONCE_KERNEL_MEMPOLT2_HXX - -//========================================================================== -// -// mempolt2.hxx -// -// Mempolt2 (Memory pool template) class declarations -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): hmt -// Contributors: hmt -// Date: 1998-02-10 -// Purpose: Define Mempolt2 class interface - -// Description: The class defined here provides the APIs for thread-safe, -// kernel-savvy memory managers; make a class with the -// underlying allocator as the template parameter. -// Usage: #include -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include -#include // assertion macros -#include - -template -class Cyg_Mempolt2 -{ -private: - T pool; // underlying memory manager - Cyg_ThreadQueue queue; // queue of waiting threads - - class Mempolt2WaitInfo { - private: - Mempolt2WaitInfo() {} - public: - cyg_int32 size; - cyg_uint8 *addr; - Mempolt2WaitInfo( cyg_int32 allocsize ) - { size = allocsize; addr = 0; } - }; - -public: - - CYGDBG_DEFINE_CHECK_THIS - - Cyg_Mempolt2( - cyg_uint8 *base, - cyg_int32 size, - CYG_ADDRWORD arg_thru ); // Constructor - ~Cyg_Mempolt2(); // Destructor - - // get some memory; wait if none available; return NULL if failed - // due to interrupt - cyg_uint8 *alloc( cyg_int32 size ); - -#ifdef CYGFUN_KERNEL_THREADS_TIMER - // get some memory with a timeout; return NULL if failed - // due to interrupt or timeout - cyg_uint8 *alloc( cyg_int32 size, cyg_tick_count abs_timeout ); -#endif - - // get some memory, return NULL if none available - cyg_uint8 *try_alloc( cyg_int32 size ); - - // free the memory back to the pool - cyg_bool free( cyg_uint8 *p, cyg_int32 size ); - - // if applicable: return -1 if not fixed size - cyg_int32 get_blocksize(); - - // is anyone waiting for memory? - cyg_bool waiting() { return ! queue.empty(); } - - // these two are obvious and generic - cyg_int32 get_totalmem(); - cyg_int32 get_freemem(); - - // get information about the construction parameters for external - // freeing after the destruction of the holding object. - void get_arena( - cyg_uint8 * &base, - cyg_int32 &size, - CYG_ADDRWORD &arg_thru ); - - // Return the size of the memory allocation (previously returned - // by alloc() or try_alloc() ) at ptr. Returns -1 if not found - cyg_int32 - get_allocation_size( cyg_uint8 * /* ptr */ ); -}; - -// ------------------------------------------------------------------------- -#endif // ifndef CYGONCE_KERNEL_MEMPOLT2_HXX -// EOF mempolt2.hxx diff --git a/packages/kernel/current/include/mempolt2.inl b/packages/kernel/current/include/mempolt2.inl deleted file mode 100644 --- a/packages/kernel/current/include/mempolt2.inl +++ /dev/null @@ -1,418 +0,0 @@ -#ifndef CYGONCE_KERNEL_MEMPOLT2_INL -#define CYGONCE_KERNEL_MEMPOLT2_INL - -//========================================================================== -// -// mempolt2.inl -// -// Mempolt2 (Memory pool template) class declarations -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): hmt -// Contributors: hmt -// Date: 1998-02-10 -// Purpose: Define Mempolt2 class interface - -// Description: The class defined here provides the APIs for thread-safe, -// kernel-savvy memory managers; make a class with the -// underlying allocator as the template parameter. -// Usage: #include -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include // implementation eg. Cyg_Thread::self(); -#include // implementation eg. Cyg_Scheduler::lock(); - -// ------------------------------------------------------------------------- -// Constructor; we _require_ these arguments and just pass them through to -// the implementation memory pool in use. -template -Cyg_Mempolt2::Cyg_Mempolt2( - cyg_uint8 *base, - cyg_int32 size, - CYG_ADDRWORD arg_thru) // Constructor - : pool( base, size, arg_thru ) -{ -} - - -template -Cyg_Mempolt2::~Cyg_Mempolt2() // destructor -{ - // Prevent preemption - Cyg_Scheduler::lock(); - - while ( ! queue.empty() ) { - Cyg_Thread *thread = queue.dequeue(); - thread->set_wake_reason( Cyg_Thread::DESTRUCT ); - thread->wake(); - } - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); -} - -// ------------------------------------------------------------------------- -// get some memory; wait if none available -template -inline cyg_uint8 * -Cyg_Mempolt2::alloc( cyg_int32 size ) -{ - CYG_REPORT_FUNCTION(); - - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - cyg_uint8 *ret; - ret = pool.alloc( size ); - if ( ret ) { - Cyg_Scheduler::unlock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - CYG_REPORT_RETVAL( ret ); - return ret; - } - - Cyg_Thread *self = Cyg_Thread::self(); - - Mempolt2WaitInfo waitinfo( size ); - - self->set_wait_info( (CYG_ADDRWORD)&waitinfo ); - self->set_sleep_reason( Cyg_Thread::WAIT ); - self->sleep(); - queue.enqueue( self ); - - CYG_ASSERT( 1 == Cyg_Scheduler::get_sched_lock(), - "Called with non-zero scheduler lock"); - - // Unlock scheduler and allow other threads to run - Cyg_Scheduler::unlock(); - - cyg_bool result = true; // just used as a flag here - switch( self->get_wake_reason() ) - { - case Cyg_Thread::DESTRUCT: - case Cyg_Thread::BREAK: - result = false; - break; - - case Cyg_Thread::EXIT: - self->exit(); - break; - - default: - break; - } - - if ( ! result ) - ret = NULL; - else - ret = waitinfo.addr; - - CYG_ASSERT( (!result) || (NULL != ret), "Good result but no alloc!" ); - CYG_ASSERTCLASS( this, "Bad this pointer"); - CYG_REPORT_RETVAL( ret ); - return ret; -} - -#ifdef CYGFUN_KERNEL_THREADS_TIMER -// ------------------------------------------------------------------------- -// get some memory with a timeout -template -inline cyg_uint8 * -Cyg_Mempolt2::alloc( cyg_int32 size, cyg_tick_count abs_timeout ) -{ - CYG_REPORT_FUNCTION(); - - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - cyg_uint8 *ret; - ret = pool.alloc( size ); - if ( ret ) { - Cyg_Scheduler::unlock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - CYG_REPORT_RETVAL( ret ); - return ret; - } - - Cyg_Thread *self = Cyg_Thread::self(); - - Mempolt2WaitInfo waitinfo( size ); - - self->set_timer( abs_timeout, Cyg_Thread::TIMEOUT ); - - // If the timeout is in the past, the wake reason will have been set to - // something other than NONE already. If so, skip the wait and go - // straight to unlock. - - if( Cyg_Thread::NONE == self->get_wake_reason() ) { - self->set_wait_info( (CYG_ADDRWORD)&waitinfo ); - self->sleep(); - queue.enqueue( self ); - } - - CYG_ASSERT( 1 == Cyg_Scheduler::get_sched_lock(), - "Called with non-zero scheduler lock"); - - // Unlock scheduler and allow other threads to run - Cyg_Scheduler::unlock(); - - // clear the timer; if it actually fired, no worries. - self->clear_timer(); - - cyg_bool result = true; // just used as a flag here - switch( self->get_wake_reason() ) - { - case Cyg_Thread::TIMEOUT: - result = false; - break; - - case Cyg_Thread::DESTRUCT: - case Cyg_Thread::BREAK: - result = false; - break; - - case Cyg_Thread::EXIT: - self->exit(); - break; - - default: - break; - } - - if ( ! result ) - ret = NULL; - else - ret = waitinfo.addr; - - CYG_ASSERT( (!result) || (NULL != ret), "Good result but no alloc!" ); - CYG_ASSERTCLASS( this, "Bad this pointer"); - CYG_REPORT_RETVAL( ret ); - return ret; -} -#endif - -// ------------------------------------------------------------------------- -// get some memory, return NULL if none available -template -inline cyg_uint8 * -Cyg_Mempolt2::try_alloc( cyg_int32 size ) -{ - CYG_REPORT_FUNCTION(); - - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - cyg_uint8 *ret = pool.alloc( size ); - - CYG_ASSERTCLASS( this, "Bad this pointer"); - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); - return ret; -} - - -// ------------------------------------------------------------------------- -// free the memory back to the pool -template -cyg_bool -Cyg_Mempolt2::free( cyg_uint8 *p, cyg_int32 size ) -{ - CYG_REPORT_FUNCTION(); - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - cyg_int32 ret = pool.free( p, size ); - - // anyone waiting? - if ( !(queue.empty()) ) { - Mempolt2WaitInfo *p; - Cyg_Thread *thread; - -#ifdef CYGIMP_MEM_T_ONEFREE_TO_ONEALLOC - thread = queue.dequeue(); - p = (Mempolt2WaitInfo *)(thread->get_wait_info()); - CYG_ASSERT( NULL == p->addr, "Thread already awoken?" ); - - cyg_uint8 *mem; - mem = pool.alloc( p->size ); - CYG_ASSERT( NULL != mem, "That should have succeeded" ); - thread->set_wake_reason( Cyg_Thread::DONE ); - thread->wake(); - // return the successful value to it - p->addr = mem; -#else - Cyg_ThreadQueue holding; - do { - thread = queue.dequeue(); - p = (Mempolt2WaitInfo *)(thread->get_wait_info()); - CYG_ASSERT( NULL == p->addr, "Thread already awoken?" ); - - cyg_uint8 *mem; - if ( NULL != (mem = pool.alloc( p->size )) ) { - // success! awaken the thread - thread->set_wake_reason( Cyg_Thread::DONE ); - thread->wake(); - // return the successful value to it - p->addr = mem; - } - else { - // preserve the entry on the holding queue - holding.enqueue( thread ); - } - } while ( !(queue.empty()) ); - - // Now re-queue the unaffected threads back into the pool queue - // (no pun intended) - while ( !(holding.empty()) ) { - queue.enqueue( holding.dequeue() ); - } -#endif // CYGIMP_MEM_T_ONEFREE_TO_ONEALLOC - } - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); - CYG_REPORT_RETVAL( ret ); - return ret; -} - -// ------------------------------------------------------------------------- -// if applicable: return -1 if not fixed size -template -inline cyg_int32 -Cyg_Mempolt2::get_blocksize() -{ - // there should not be any atomicity issues here - return pool.get_blocksize(); -} - -// ------------------------------------------------------------------------- -// these two are obvious and generic, but need atomicity protection (maybe) -template -inline cyg_int32 -Cyg_Mempolt2::get_totalmem() -{ - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - cyg_int32 ret = pool.get_totalmem(); - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); - return ret; -} - -template -inline cyg_int32 -Cyg_Mempolt2::get_freemem() -{ - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - cyg_int32 ret = pool.get_freemem(); - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); - return ret; -} - -// ------------------------------------------------------------------------- -// get information about the construction parameters for external -// freeing after the destruction of the holding object -template -inline void -Cyg_Mempolt2::get_arena( - cyg_uint8 * &base, cyg_int32 &size, CYG_ADDRWORD &arg_thru ) -{ - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - pool.get_arena( base, size, arg_thru ); - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); -} - -// ------------------------------------------------------------------------- -// Return the size of the memory allocation (previously returned -// by alloc() or try_alloc() ) at ptr. Returns -1 if not found -template -cyg_int32 -Cyg_Mempolt2::get_allocation_size( cyg_uint8 *ptr ) -{ - cyg_int32 ret; - - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - ret = pool.get_allocation_size( ptr ); - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); - - return ret; -} - -// ------------------------------------------------------------------------- -// debugging/assert function - -#ifdef CYGDBG_USE_ASSERTS - -template -inline cyg_bool -Cyg_Mempolt2::check_this(cyg_assert_class_zeal zeal) const -{ - CYG_REPORT_FUNCTION(); - - if ( Cyg_Thread::DESTRUCT == Cyg_Thread::self()->get_wake_reason() ) - // then the whole thing is invalid, and we know it. - // so return OK, since this check should NOT make an error. - return true; - - // check that we have a non-NULL pointer first - if( this == NULL ) return false; - - return true; -} -#endif - -// ------------------------------------------------------------------------- -#endif // ifndef CYGONCE_KERNEL_MEMPOLT2_INL -// EOF mempolt2.inl diff --git a/packages/kernel/current/include/mempoolt.hxx b/packages/kernel/current/include/mempoolt.hxx deleted file mode 100644 --- a/packages/kernel/current/include/mempoolt.hxx +++ /dev/null @@ -1,114 +0,0 @@ -#ifndef CYGONCE_KERNEL_MEMPOOLT_HXX -#define CYGONCE_KERNEL_MEMPOOLT_HXX - -//========================================================================== -// -// mempoolt.hxx -// -// Mempoolt (Memory pool template) class declarations -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): hmt -// Contributors: hmt -// Date: 1998-02-10 -// Purpose: Define Mempoolt class interface - -// Description: The class defined here provides the APIs for thread-safe, -// kernel-savvy memory managers; make a class with the -// underlying allocator as the template parameter. -// Usage: #include -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include -#include // assertion macros -#include - -template -class Cyg_Mempoolt -{ -private: - T pool; // underlying memory manager - Cyg_ThreadQueue queue; // queue of waiting threads - -public: - - CYGDBG_DEFINE_CHECK_THIS - - Cyg_Mempoolt( - cyg_uint8 *base, - cyg_int32 size, - CYG_ADDRWORD arg_thru ); // Constructor - ~Cyg_Mempoolt(); // Destructor - - // get some memory; wait if none available; return NULL if failed - // due to interrupt - cyg_uint8 *alloc( cyg_int32 size ); - -#ifdef CYGFUN_KERNEL_THREADS_TIMER - // get some memory with a timeout; return NULL if failed - // due to interrupt or timeout - cyg_uint8 *alloc( cyg_int32 size, cyg_tick_count abs_timeout ); -#endif - - // get some memory, return NULL if none available - cyg_uint8 *try_alloc( cyg_int32 size ); - - // free the memory back to the pool - cyg_bool free( cyg_uint8 *p, cyg_int32 size ); - - // if applicable: return -1 if not fixed size - cyg_int32 get_blocksize(); - - // is anyone waiting for memory? - cyg_bool waiting() { return ! queue.empty(); } - - // these two are obvious and generic - cyg_int32 get_totalmem(); - cyg_int32 get_freemem(); - - // get information about the construction parameters for external - // freeing after the destruction of the holding object. - void get_arena( - cyg_uint8 * &base, - cyg_int32 &size, - CYG_ADDRWORD &arg_thru ); - - // Return the size of the memory allocation (previously returned - // by alloc() or try_alloc() ) at ptr. Returns -1 if not found - cyg_int32 - get_allocation_size( cyg_uint8 * /* ptr */ ); -}; - -// ------------------------------------------------------------------------- -#endif // ifndef CYGONCE_KERNEL_MEMPOOLT_HXX -// EOF mempoolt.hxx diff --git a/packages/kernel/current/include/mempoolt.inl b/packages/kernel/current/include/mempoolt.inl deleted file mode 100644 --- a/packages/kernel/current/include/mempoolt.inl +++ /dev/null @@ -1,384 +0,0 @@ -#ifndef CYGONCE_KERNEL_MEMPOOLT_INL -#define CYGONCE_KERNEL_MEMPOOLT_INL - -//========================================================================== -// -// mempoolt.inl -// -// Mempoolt (Memory pool template) class declarations -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): hmt -// Contributors: hmt -// Date: 1998-02-10 -// Purpose: Define Mempoolt class interface - -// Description: The class defined here provides the APIs for thread-safe, -// kernel-savvy memory managers; make a class with the -// underlying allocator as the template parameter. -// Usage: #include -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include // implementation eg. Cyg_Thread::self(); -#include // implementation eg. Cyg_Scheduler::lock(); - -// ------------------------------------------------------------------------- -// Constructor; we _require_ these arguments and just pass them through to -// the implementation memory pool in use. -template -Cyg_Mempoolt::Cyg_Mempoolt( - cyg_uint8 *base, - cyg_int32 size, - CYG_ADDRWORD arg_thru) // Constructor - : pool( base, size, arg_thru ) -{ -} - - -template -Cyg_Mempoolt::~Cyg_Mempoolt() // destructor -{ - // Prevent preemption - Cyg_Scheduler::lock(); - - while ( ! queue.empty() ) { - Cyg_Thread *thread = queue.dequeue(); - thread->set_wake_reason( Cyg_Thread::DESTRUCT ); - thread->wake(); - } - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); -} - -// ------------------------------------------------------------------------- -// get some memory; wait if none available -template -inline cyg_uint8 * -Cyg_Mempoolt::alloc( cyg_int32 size ) -{ - CYG_REPORT_FUNCTION(); - - Cyg_Thread *self = Cyg_Thread::self(); - - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - // Loop while we got no memory, sleeping each time around the - // loop. This copes with the possibility of a higher priority thread - // grabbing the freed storage between the wakeup in free() and this - // thread actually starting. - cyg_uint8 *ret; - cyg_bool result = true; - while( result && (NULL == (ret = pool.alloc( size ))) ) { - self->set_sleep_reason( Cyg_Thread::WAIT ); - self->sleep(); - queue.enqueue( self ); - - CYG_ASSERT( 1 == Cyg_Scheduler::get_sched_lock(), - "Called with non-zero scheduler lock"); - - // Unlock scheduler and allow other threads to run - Cyg_Scheduler::unlock(); - Cyg_Scheduler::lock(); - - CYG_ASSERTCLASS( this, "Bad this pointer"); - - switch( self->get_wake_reason() ) - { - case Cyg_Thread::DESTRUCT: - case Cyg_Thread::BREAK: - result = false; - break; - - case Cyg_Thread::EXIT: - self->exit(); - break; - - default: - break; - } - } - CYG_ASSERTCLASS( this, "Bad this pointer"); - - if ( ! result ) - ret = NULL; - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); - CYG_REPORT_RETVAL( ret ); - return ret; -} - -#ifdef CYGFUN_KERNEL_THREADS_TIMER -// ------------------------------------------------------------------------- -// get some memory with a timeout -template -inline cyg_uint8 * -Cyg_Mempoolt::alloc( cyg_int32 size, cyg_tick_count abs_timeout ) -{ - CYG_REPORT_FUNCTION(); - - Cyg_Thread *self = Cyg_Thread::self(); - - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - // Loop while we got no memory, sleeping each time around the - // loop. This copes with the possibility of a higher priority thread - // grabbing the freed storage between the wakeup in free() and this - // thread actually starting. - cyg_uint8 *ret; - cyg_bool result = true; - // Set the timer _once_ outside the loop. - self->set_timer( abs_timeout, Cyg_Thread::TIMEOUT ); - - // If the timeout is in the past, the wake reason will have been - // set to something other than NONE already. Set the result false - // to force an immediate return. - - if( self->get_wake_reason() != Cyg_Thread::NONE ) - result = false; - - while( result && (NULL == (ret = pool.alloc( size ))) ) { - self->set_sleep_reason( Cyg_Thread::TIMEOUT ); - self->sleep(); - queue.enqueue( self ); - - CYG_ASSERT( 1 == Cyg_Scheduler::get_sched_lock(), - "Called with non-zero scheduler lock"); - - // Unlock scheduler and allow other threads to run - Cyg_Scheduler::unlock(); - Cyg_Scheduler::lock(); - - CYG_ASSERTCLASS( this, "Bad this pointer"); - switch( self->get_wake_reason() ) - { - case Cyg_Thread::TIMEOUT: - result = false; - break; - - case Cyg_Thread::DESTRUCT: - case Cyg_Thread::BREAK: - result = false; - break; - - case Cyg_Thread::EXIT: - self->exit(); - break; - - default: - break; - } - } - - CYG_ASSERTCLASS( this, "Bad this pointer"); - - if ( ! result ) - ret = NULL; - - // clear the timer; if it actually fired, no worries. - self->clear_timer(); - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); - CYG_REPORT_RETVAL( ret ); - return ret; -} -#endif - -// ------------------------------------------------------------------------- -// get some memory, return NULL if none available -template -inline cyg_uint8 * -Cyg_Mempoolt::try_alloc( cyg_int32 size ) -{ - CYG_REPORT_FUNCTION(); - - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - cyg_uint8 *ret = pool.alloc( size ); - - CYG_ASSERTCLASS( this, "Bad this pointer"); - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); - CYG_REPORT_RETVAL( ret ); - return ret; -} - - -// ------------------------------------------------------------------------- -// free the memory back to the pool -template -cyg_bool -Cyg_Mempoolt::free( cyg_uint8 *p, cyg_int32 size ) -{ - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - cyg_int32 ret = pool.free( p, size ); - - CYG_ASSERTCLASS( this, "Bad this pointer"); - - while ( ret && !queue.empty() ) { - // we succeeded and there are people waiting - Cyg_Thread *thread = queue.dequeue(); - - CYG_ASSERTCLASS( thread, "Bad thread pointer"); - - // we wake them all up (ie. broadcast) to cope with variable block - // allocators freeing a big block when lots of small allocs wait. - thread->set_wake_reason( Cyg_Thread::DONE ); - thread->wake(); - // we cannot yield here; if a higher prio thread can't satisfy its - // request it would re-queue and we would loop forever - } - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); - return ret; -} - -// ------------------------------------------------------------------------- -// if applicable: return -1 if not fixed size -template -inline cyg_int32 -Cyg_Mempoolt::get_blocksize() -{ - // there should not be any atomicity issues here - return pool.get_blocksize(); -} - -// ------------------------------------------------------------------------- -// these two are obvious and generic, but need atomicity protection (maybe) -template -inline cyg_int32 -Cyg_Mempoolt::get_totalmem() -{ - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - cyg_int32 ret = pool.get_totalmem(); - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); - return ret; -} - -template -inline cyg_int32 -Cyg_Mempoolt::get_freemem() -{ - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - cyg_int32 ret = pool.get_freemem(); - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); - return ret; -} - -// ------------------------------------------------------------------------- -// get information about the construction parameters for external -// freeing after the destruction of the holding object -template -inline void -Cyg_Mempoolt::get_arena( - cyg_uint8 * &base, cyg_int32 &size, CYG_ADDRWORD &arg_thru ) -{ - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - pool.get_arena( base, size, arg_thru ); - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); -} - -// ------------------------------------------------------------------------- -// Return the size of the memory allocation (previously returned -// by alloc() or try_alloc() ) at ptr. Returns -1 if not found -template -cyg_int32 -Cyg_Mempoolt::get_allocation_size( cyg_uint8 *ptr ) -{ - cyg_int32 ret; - - // Prevent preemption - Cyg_Scheduler::lock(); - CYG_ASSERTCLASS( this, "Bad this pointer"); - - ret = pool.get_allocation_size( ptr ); - - // Unlock the scheduler and maybe switch threads - Cyg_Scheduler::unlock(); - - return ret; -} - -// ------------------------------------------------------------------------- -// debugging/assert function - -#ifdef CYGDBG_USE_ASSERTS - -template -inline cyg_bool -Cyg_Mempoolt::check_this(cyg_assert_class_zeal zeal) const -{ - CYG_REPORT_FUNCTION(); - - if ( Cyg_Thread::DESTRUCT == Cyg_Thread::self()->get_wake_reason() ) - // then the whole thing is invalid, and we know it. - // so return OK, since this check should NOT make an error. - return true; - - // check that we have a non-NULL pointer first - if( this == NULL ) return false; - - return true; -} -#endif - -// ------------------------------------------------------------------------- -#endif // ifndef CYGONCE_KERNEL_MEMPOOLT_INL -// EOF mempoolt.inl diff --git a/packages/kernel/current/include/memvar.hxx b/packages/kernel/current/include/memvar.hxx deleted file mode 100644 --- a/packages/kernel/current/include/memvar.hxx +++ /dev/null @@ -1,131 +0,0 @@ -#ifndef CYGONCE_KERNEL_MEMVAR_HXX -#define CYGONCE_KERNEL_MEMVAR_HXX - -//========================================================================== -// -// memvar.hxx -// -// Memory pool with variable block class declarations -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): dsm -// Contributors: dsm -// Date: 1998-05-21 -// Purpose: Define Memvar class interface -// Description: Inline class for constructing a variable block allocator -// Usage: #include -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include // kernel types -#include // assertion macros - -#ifdef CYGIMP_MEM_USE_MEMPOOLT_PLAIN -#include // kernel safe mempool template -#else -#include // kernel safe mempool template -#endif - -#include // implementation of a variable mem pool - -class Cyg_Mempool_Variable { -private: -#ifdef CYGIMP_MEM_USE_MEMPOOLT_PLAIN - Cyg_Mempoolt mypool; -#else - Cyg_Mempolt2 mypool; -#endif - -public: - // this API makes concrete a class which implements a thread-safe - // kernel-savvy memory pool which manages variable size blocks. - - CYGDBG_DEFINE_CHECK_THIS - - // Constructor: gives the base and size of the arena in which memory is - // to be carved out, note that management structures are taken from the - // same arena. Alignment is the alignment of allocated blocks. - Cyg_Mempool_Variable( - cyg_uint8 * /* base */, - cyg_int32 /* size */); - - // Destructor - ~Cyg_Mempool_Variable(); - - // get some memory; wait if none available - cyg_uint8 * - alloc(cyg_int32 /* size */); - -#ifdef CYGFUN_KERNEL_THREADS_TIMER - // get some memory with a timeout - cyg_uint8 * - alloc(cyg_int32 /* size */, cyg_tick_count /* delay_timeout */ ); -#endif - - // get some memory, return NULL if none available - cyg_uint8 * - try_alloc(cyg_int32 /* size */ ); - - // free the memory back to the pool - cyg_bool - free( cyg_uint8 * /* ptr */, cyg_int32 /* size */ ); - - // is anyone waiting for memory? - cyg_bool - waiting( void ); - - // read the fixed allocation size (-1 indicates variable) - cyg_int32 - get_blocksize( void ); - - // these two are obvious and generic - cyg_int32 - get_totalmem( void ); - - cyg_int32 - get_freemem( void ); - - // get information about the construction parameters for external - // freeing after the destruction of the holding object - // also finds largest free block - void - get_arena( cyg_uint8 * & /* base */, cyg_int32 & /* size */, - CYG_ADDRWORD & /* maxfree */ ); - - // Return the size of the memory allocation (previously returned - // by alloc() or try_alloc() ) at ptr. Returns -1 if not found - cyg_int32 - get_allocation_size( cyg_uint8 * /* ptr */ ); -}; - -#endif // ifndef CYGONCE_KERNEL_MEMVAR_HXX -// EOF memvar.hxx diff --git a/packages/kernel/current/include/mfiximpl.hxx b/packages/kernel/current/include/mfiximpl.hxx deleted file mode 100644 --- a/packages/kernel/current/include/mfiximpl.hxx +++ /dev/null @@ -1,120 +0,0 @@ -#ifndef CYGONCE_KERNEL_MFIXIMPL_HXX -#define CYGONCE_KERNEL_MFIXIMPL_HXX - -//========================================================================== -// -// mfiximpl.hxx -// -// Memory pool with fixed block class declarations -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): hmt -// Contributors: hmt -// Date: 1998-03-23 -// Purpose: Define Mfiximpl class interface -// Description: Inline class for constructing a fixed block allocator -// Usage: #include -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include -#include // assertion macros -#include - -class Cyg_Mempool_Fixed_Implementation { -private: - // these constructors are explicitly disallowed - Cyg_Mempool_Fixed_Implementation() {}; -// Cyg_Mempool_Fixed_Implementation( Cyg_Mempool_Fixed_Implementation &ref ) -// {}; - Cyg_Mempool_Fixed_Implementation & - operator=( Cyg_Mempool_Fixed_Implementation &ref ) - { return ref; }; - -private: - cyg_uint32 *bitmap; - cyg_int32 maptop; - cyg_uint8 *mempool; - cyg_int32 numblocks; - cyg_int32 freeblocks; - cyg_int32 blocksize; - cyg_int32 firstfree; - cyg_uint8 *top; - -public: - // THIS is the public API of memory pools generally that can have the - // kernel oriented thread-safe package layer atop. - // - // The kernel package is a template whose type parameter is one of - // these. That is the reason there are superfluous parameters here and - // more genereralization than might be expected in a fixed block - // allocator. - - // Constructor: gives the base and size of the arena in which memory is - // to be carved out, note that management structures are taken from the - // same arena. The alloc_unit may be any other param in general; it - // comes through from the outer constructor unchanged. - Cyg_Mempool_Fixed_Implementation( - cyg_uint8 *base, - cyg_int32 size, - CYG_ADDRWORD alloc_unit ); - - // Destructor - ~Cyg_Mempool_Fixed_Implementation(); - - // get some memory; size is ignored in a fixed block allocator - inline cyg_uint8 *alloc( cyg_int32 size ); - - // free the memory back to the pool; size ignored here - inline cyg_bool free( cyg_uint8 *p, cyg_int32 size ); - - // if applicable: return -1 if not fixed size - inline cyg_int32 get_blocksize() { return blocksize; } - - // these two are obvious and generic - inline cyg_int32 get_totalmem() { return blocksize * numblocks; } - inline cyg_int32 get_freemem() { return blocksize * freeblocks; } - - // get information about the construction parameters for external - // freeing after the destruction of the holding object - inline void get_arena( cyg_uint8 * &base, cyg_int32 &size, CYG_ADDRWORD &alloc ) - { - base = (cyg_uint8 *)bitmap; - size = top - base; - alloc = blocksize; - } - -}; - -// ------------------------------------------------------------------------- -#endif // ifndef CYGONCE_KERNEL_MFIXIMPL_HXX -// EOF mfiximpl.hxx diff --git a/packages/kernel/current/include/mfiximpl.inl b/packages/kernel/current/include/mfiximpl.inl deleted file mode 100644 --- a/packages/kernel/current/include/mfiximpl.inl +++ /dev/null @@ -1,159 +0,0 @@ -#ifndef CYGONCE_KERNEL_MFIXIMPL_INL -#define CYGONCE_KERNEL_MFIXIMPL_INL - -//========================================================================== -// -// mfiximpl.inl -// -// Memory pool with fixed block class declarations -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): hmt -// Contributors: hmt -// Date: 1998-03-23 -// Purpose: Define Mfiximpl class interface -// Description: Inline class for constructing a fixed block allocator -// Usage: #include -// #include -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include // HAL_LSBIT_INDEX magic asm code - - -Cyg_Mempool_Fixed_Implementation::Cyg_Mempool_Fixed_Implementation( - cyg_uint8 *base, - cyg_int32 size, - CYG_ADDRWORD alloc_unit ) -{ - cyg_int32 i; - bitmap = (cyg_uint32 *)base; - blocksize = alloc_unit; - - CYG_ASSERT( blocksize > 0, "Bad blocksize" ); - CYG_ASSERT( size > 2, "Bad blocksize" ); - CYG_ASSERT( blocksize < size, "blocksize, size bad" ); - - numblocks = size / blocksize; - top = base + size; - - CYG_ASSERT( numblocks >= 2, "numblocks bad" ); - - i = (numblocks + 31)/32; // number of words to map blocks - while ( (i * 4 + numblocks * blocksize) > size ) { - numblocks --; // steal one block for admin - i = (numblocks + 31)/32; // number of words to map blocks - } - - CYG_ASSERT( 0 < i, "Bad word count for bitmap after fitment" ); - CYG_ASSERT( 0 < numblocks, "Bad block count after fitment" ); - - maptop = i; - // this should leave space for the bitmap and maintain alignment - mempool = top - (numblocks * blocksize); - CYG_ASSERT( base < mempool && mempool < top, "mempool escaped" ); - CYG_ASSERT( (cyg_uint8 *)(&bitmap[ maptop ]) <= mempool, - "mempool overwrites bitmap" ); - CYG_ASSERT( &mempool[ numblocks * blocksize ] <= top, - "mempool overflows top" ); - freeblocks = numblocks; - firstfree = 0; - - // clear out the bitmap; no blocks allocated yet - for ( i = 0; i < maptop; i++ ) - bitmap[ i ] = 0; - // apart from the non-existent ones at the top - for ( i = ((numblocks-1)&31) + 1; i < 32; i++ ) - bitmap[ maptop - 1 ] |= ( 1 << i ); -} - -Cyg_Mempool_Fixed_Implementation::~Cyg_Mempool_Fixed_Implementation() -{ -} - -inline cyg_uint8 * -Cyg_Mempool_Fixed_Implementation::alloc( cyg_int32 size ) -{ - // size parameter is not used - CYG_UNUSED_PARAM( cyg_int32, size ); - if ( 0 >= freeblocks ) - return NULL; - cyg_int32 i = firstfree; - cyg_uint8 *p = NULL; - do { - if ( 0xffffffff != bitmap[ i ] ) { - // then there is a free block in this bucket - register cyg_uint32 j, k; - k = ~bitmap[ i ]; // look for a 1 in complement - HAL_LSBIT_INDEX( j, k ); - CYG_ASSERT( 0 <= j && j <= 31, "Bad bit index" ); - CYG_ASSERT( 0 == (bitmap[ i ] & (1 << j)), "Found bit not clear" ); - bitmap[ i ] |= (1 << j); // set it allocated - firstfree = i; - freeblocks--; - CYG_ASSERT( freeblocks >= 0, "allocated too many" ); - p = &mempool[ ((32 * i) + j) * blocksize ]; - break; - } - if ( ++i >= maptop ) - i = 0; // wrap if at top - } while ( i != firstfree ); // prevent hang if internal error - CYG_ASSERT( NULL != p, "Should have a block here" ); - CYG_ASSERT( mempool <= p && p <= top, "alloc mem escaped" ); - return p; -} - -inline cyg_bool -Cyg_Mempool_Fixed_Implementation::free( cyg_uint8 *p, cyg_int32 size ) -{ - // size parameter is not used - CYG_UNUSED_PARAM( cyg_int32, size ); - if ( p < mempool || p >= top ) - return false; // address way out of bounds - cyg_int32 i = p - mempool; - i = i / blocksize; - if ( &mempool[ i * blocksize ] != p ) - return false; // address not aligned - cyg_int32 j = i / 32; - CYG_ASSERT( 0 <= j && j < maptop, "map index escaped" ); - i = i - 32 * j; - CYG_ASSERT( 0 <= i && i < 32, "map bit index escaped" ); - if ( ! ((1 << i) & bitmap[ j ] ) ) - return false; // block was not allocated - bitmap[ j ] &=~(1 << i); // clear the bit - freeblocks++; // count the block - CYG_ASSERT( freeblocks <= numblocks, "freeblocks overflow" ); - return true; -} - -// ------------------------------------------------------------------------- -#endif // ifndef CYGONCE_KERNEL_MFIXIMPL_INL -// EOF mfiximpl.inl diff --git a/packages/kernel/current/include/mvarimpl.hxx b/packages/kernel/current/include/mvarimpl.hxx deleted file mode 100644 --- a/packages/kernel/current/include/mvarimpl.hxx +++ /dev/null @@ -1,132 +0,0 @@ -#ifndef CYGONCE_KERNEL_MVARIMPL_HXX -#define CYGONCE_KERNEL_MVARIMPL_HXX - -//========================================================================== -// -// mvarimpl.hxx -// -// Memory pool with variable block class declarations -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): dsm -// Contributors: dsm -// Date: 1998-05-21 -// Purpose: Define Mvarimpl class interface -// Description: Inline class for constructing a variable block allocator -// Usage: #include -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include -#include - -class Cyg_Mempool_Variable_Implementation { -private: - // these constructors are explicitly disallowed - Cyg_Mempool_Variable_Implementation() {}; -// Cyg_Mempool_Variable_Implementation( Cyg_Mempool_Variable_Implementation &ref ) -// {}; - Cyg_Mempool_Variable_Implementation & - operator=( Cyg_Mempool_Variable_Implementation &ref ) - { return ref; }; - -private: - struct memdq { - struct memdq *prev, *next; - cyg_int32 size; - }; - - struct memdq head; - cyg_uint8 *obase; - cyg_int32 osize; - cyg_int32 oalign; - cyg_uint8 *bottom; - cyg_uint8 *top; - cyg_int32 alignment; - cyg_int32 freemem; - - // round up size passed to alloc/free to a size that will be used - // for allocation - cyg_int32 - roundup(cyg_int32 size); - -public: - // THIS is the public API of memory pools generally that can have the - // kernel oriented thread-safe package layer atop. - - // Constructor: gives the base and size of the arena in which memory is - // to be carved out. - Cyg_Mempool_Variable_Implementation( - cyg_uint8 * /* base */, - cyg_int32 /* size */, - CYG_ADDRWORD /* alignment */); - - // Destructor - ~Cyg_Mempool_Variable_Implementation(); - - // get size bytes of memory - inline cyg_uint8 * - alloc( cyg_int32 /* size */ ); - - // free size bytes of memory back to the pool - inline cyg_bool - free( cyg_uint8 * /* ptr */, - cyg_int32 /* size */ ); - - // returns -1 as not variable size - inline cyg_int32 - get_blocksize( void ) { return -1; } - - // these two are obvious and generic - inline cyg_int32 - get_totalmem( void ) { return top-bottom; } - - inline cyg_int32 - get_freemem( void ) { return freemem; } - - // get information about the construction parameters for external - // freeing after the destruction of the holding object - inline void - get_arena( cyg_uint8 * & /* base */, - cyg_int32 & /* size */, - CYG_ADDRWORD & /* maxfree */ ); - - // Return the size of the memory allocation (previously returned - // by alloc() or try_alloc() ) at ptr. Returns -1 if not found - inline cyg_int32 - get_allocation_size( cyg_uint8 * /* ptr */ ); - -}; - -// ------------------------------------------------------------------------- -#endif // ifndef CYGONCE_KERNEL_MVARIMPL_HXX -// EOF mvarimpl.hxx diff --git a/packages/kernel/current/include/mvarimpl.inl b/packages/kernel/current/include/mvarimpl.inl deleted file mode 100644 --- a/packages/kernel/current/include/mvarimpl.inl +++ /dev/null @@ -1,284 +0,0 @@ -#ifndef CYGONCE_KERNEL_MVARIMPL_INL -#define CYGONCE_KERNEL_MVARIMPL_INL - -//========================================================================== -// -// mvarimpl.inl -// -// Memory pool with variable block class declarations -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): hmt -// Contributors: hmt -// Date: 1998-03-23 -// Purpose: Define Mvarimpl class interface -// Description: Inline class for constructing a variable block allocator -// Usage: #include -// #include -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -// Simple non-coalescing allocator - -// The free list is stored on a doubly linked list, each member of -// which is stored in the body of the free memory. The head of the -// list has the same structure but its size field is zero. This -// resides in the memory pool structure. Always having at least one -// item on the list simplifies the alloc and free code. - -// -inline cyg_int32 -Cyg_Mempool_Variable_Implementation::roundup( cyg_int32 size ) -{ - - size += sizeof(struct memdq); - size = (size + alignment - 1) & -alignment; - return size; -} - -Cyg_Mempool_Variable_Implementation::Cyg_Mempool_Variable_Implementation( - cyg_uint8 *base, - cyg_int32 size, - CYG_ADDRWORD align ) -{ - CYG_ASSERT( align > 0, "Bad alignment" ); - CYG_ASSERT( size > 0, "Bad size" ); - CYG_ASSERT(0!=align ,"align is zero"); - CYG_ASSERT(0==(align & align-1),"align not a power of 2"); - - obase=base; - osize=size; - oalign=align; - - alignment = align; - while(alignment < (cyg_int32)sizeof(struct memdq)) - alignment += alignment; - CYG_ASSERT(0==(alignment & alignment-1),"alignment not a power of 2"); - - bottom = (cyg_uint8 *)roundup((cyg_int32)base); - top = (cyg_uint8 *)((cyg_int32)(base+size) & -alignment); - - CYG_ASSERT( top > bottom , "heap too small" ); - CYG_ASSERT( ((cyg_int32)bottom & alignment-1)==0, "bottom badly aligned" ); - CYG_ASSERT( ((cyg_int32)top & alignment-1)==0, "top badly aligned" ); - - struct memdq *hdq = &head, *dq = (struct memdq *)bottom; - - hdq->prev = hdq->next = dq; - hdq->size = 0; - dq->prev = dq->next = hdq; - - freemem = dq->size = top-bottom; -} - -Cyg_Mempool_Variable_Implementation::~Cyg_Mempool_Variable_Implementation() -{ -} - -// allocation is simple -// First we look down the free list for a large enough block -// If we find a block the right size, we unlink the block from -// the free list and return a pointer to it. -// If we find a larger block, we chop a piece off the end -// and return that -// Otherwise we will eventually get back to the head of the list -// and return NULL -inline cyg_uint8 * -Cyg_Mempool_Variable_Implementation::alloc( cyg_int32 size ) -{ - struct memdq *dq = &head; - cyg_uint8 *alloced; - - size = roundup(size); - - do { - CYG_ASSERT( dq->next->prev==dq, "Bad link in dq"); - dq = dq->next; - if(0 == dq->size) { - CYG_ASSERT(dq == &head, "bad free block"); - return NULL; - } - } while(dq->size < size); - - if( size == dq->size ) { - // exact fit -- unlink from free list - dq->prev->next = dq->next; - dq->next->prev = dq->prev; - alloced = (cyg_uint8 *)dq; - } else { - - CYG_ASSERT( dq->size > size, "block found is too small"); - - // allocate portion of memory from end of block - - dq->size -=size; - - // The portion left over has to be large enough to store a - // struct memdq. This is guaranteed because the alignment is - // larger than the size of this structure. - - CYG_ASSERT( (cyg_int32)sizeof(struct memdq)<=dq->size , - "not enough space for list item" ); - - alloced = (cyg_uint8 *)dq + dq->size; - } - - CYG_ASSERT( bottom<=alloced && alloced<=top, "alloced outside pool" ); - - // Set size on allocated block - - dq = (struct memdq *)alloced; - dq->size = size; - dq->next = dq->prev = (struct memdq *)0xd530d53; // magic number - - freemem -=size; - return alloced + sizeof(struct memdq); -} - -// When no coalescing is done, free is simply a matter of using the -// freed memory as an element of the free list linking it in at the -// start. - -inline cyg_bool -Cyg_Mempool_Variable_Implementation::free( cyg_uint8 *p, cyg_int32 size ) -{ - if(!(bottom<=p&&p<=top)) - return false; - - struct memdq *hdq=&head,*dq=(struct memdq *)(p-sizeof(struct memdq)); - - // check magic number in block to be freed - if(dq->next != dq->prev || dq->next != (struct memdq *)0xd530d53) - return false; - - if(0==size) { - size = dq->size; - } else { - size = roundup(size); - } - - if(dq->size != size) - return false; - - CYG_ASSERT( (cyg_int32)sizeof(struct memdq)<=size , - "not enough space for list item" ); - -#ifdef CYGSEM_KERNEL_MEMORY_COALESCE -// For simple coalescing have the free list be sorted by memory base address - struct memdq *idq; - - for (idq = hdq->next; idq != hdq; idq = idq->next) { - if (idq->next > dq) - break; - } - if (idq != hdq) { - dq->prev = idq; - dq->next = idq->next; - idq->next = dq; - dq->next->prev = dq; - } else { - dq->next = idq; - dq->prev = idq->prev; - idq->prev = dq; - dq->prev->next = dq; - } - // Now do coalescing, but leave the head of the list alone. - if (dq->next != hdq && (char *)dq + dq->size == (char *)dq->next) { - dq->size += dq->next->size; - dq->next = dq->next->next; - dq->next->prev = dq; - } - if (dq->prev != hdq && (char *)dq->prev + dq->prev->size == (char *)dq) { - dq->prev->size += dq->size; - dq->prev->next = dq->next; - dq->next->prev = dq->prev; - dq = dq->prev; - } -#else - dq->prev = hdq; - dq->next = hdq->next; - dq->size = size; - hdq->next = dq; - dq->next->prev=dq; -#endif - - freemem +=size; - return true; -} - - -inline void -Cyg_Mempool_Variable_Implementation::get_arena( - cyg_uint8 * &base, - cyg_int32 &size, - CYG_ADDRWORD &maxfree) -{ - struct memdq *dq = &head; - cyg_int32 mf = 0; - - do { - CYG_ASSERT( dq->next->prev==dq, "Bad link in dq"); - dq = dq->next; - if(0 == dq->size) { - CYG_ASSERT(dq == &head, "bad free block"); - break; - } - if(dq->size > mf) - mf = dq->size; - } while(1); - - base = obase; - size = osize; - maxfree = mf; -} - - -inline cyg_int32 -Cyg_Mempool_Variable_Implementation::get_allocation_size( cyg_uint8 *ptr ) -{ - CYG_CHECK_DATA_PTR(ptr, "Requested allocation size of bad data pointer!"); - - if(!(bottom<=ptr && ptr<=top)) - return -1; - - struct memdq *dq=(struct memdq *)(ptr-sizeof(struct memdq)); - - // check magic number in block to be freed - if(dq->next != dq->prev || dq->next != (struct memdq *)0xd530d53) - return -1; - - return dq->size; - -} // get_allocation_size() - -// ------------------------------------------------------------------------- -#endif // ifndef CYGONCE_KERNEL_MVARIMPL_INL -// EOF mvarimpl.inl diff --git a/packages/kernel/current/src/mem/memfixed.cxx b/packages/kernel/current/src/mem/memfixed.cxx deleted file mode 100644 --- a/packages/kernel/current/src/mem/memfixed.cxx +++ /dev/null @@ -1,171 +0,0 @@ -//========================================================================== -// -// memfixed.cxx -// -// Memory pool with fixed block class declarations -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): hmt -// Contributors: hmt -// Date: 1998-03-23 -// Purpose: Define Memfixed class interface -// Description: Inline class for constructing a fixed block allocator -// Usage: #include -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include - -#include // base kernel types -#include // tracing macros -#include // assertion macros -#include // instrumentation - -#include - -// implementation that we want to make concrete -#ifdef CYGIMP_MEM_USE_MEMPOOLT_PLAIN -#include // kernel safe mempool template -#else -// tell it to optimize for the fixed block one-to-one case -#define CYGIMP_MEM_T_ONEFREE_TO_ONEALLOC -#include // kernel safe mempool template -#endif - -#include // implementation of a fixed mem pool - -// ------------------------------------------------------------------------- -// debugging/assert function - -#ifdef CYGDBG_USE_ASSERTS -cyg_bool -Cyg_Mempool_Fixed::check_this(cyg_assert_class_zeal zeal) const -{ - CYG_REPORT_FUNCTION(); - // check that we have a non-NULL pointer first - if( this == NULL ) return false; - return mypool.check_this( zeal ); -} -#endif - -// ------------------------------------------------------------------------- -// Constructor: gives the base and size of the arena in which memory is -// to be carved out, note that management structures are taken from the -// same arena. Alloc_unit is the blocksize allocated. -Cyg_Mempool_Fixed::Cyg_Mempool_Fixed( - cyg_uint8 *base, - cyg_int32 size, - CYG_ADDRWORD alloc_unit ) - : mypool( base, size, alloc_unit ) -{ -} - -// Destructor -Cyg_Mempool_Fixed::~Cyg_Mempool_Fixed() -{ -} - -// ------------------------------------------------------------------------- -// get some memory; wait if none available -cyg_uint8 * -Cyg_Mempool_Fixed::alloc() -{ - return mypool.alloc( 0 ); -} - -#ifdef CYGFUN_KERNEL_THREADS_TIMER -// get some memory with a timeout -cyg_uint8 * -Cyg_Mempool_Fixed::alloc(cyg_tick_count delay_timeout ) -{ - return mypool.alloc( 0, delay_timeout ); -} -#endif - -// get some memory, return NULL if none available -cyg_uint8 * -Cyg_Mempool_Fixed::try_alloc() -{ - return mypool.try_alloc( 0 ); -} - -// free the memory back to the pool -cyg_bool -Cyg_Mempool_Fixed::free( cyg_uint8 *p ) -{ - return mypool.free( p, 0 ); -} - -// is anyone waiting for memory? -cyg_bool -Cyg_Mempool_Fixed::waiting() -{ - return mypool.waiting(); -} - -// read the fixed allocation size -cyg_int32 -Cyg_Mempool_Fixed::get_blocksize() -{ - return mypool.get_blocksize(); -} - -// these two are obvious and generic -cyg_int32 -Cyg_Mempool_Fixed::get_totalmem() { - return mypool.get_totalmem(); -} -cyg_int32 -Cyg_Mempool_Fixed::get_freemem() { - return mypool.get_freemem(); -} - -// get information about the construction parameters for external -// freeing after the destruction of the holding object -void -Cyg_Mempool_Fixed::get_arena( - cyg_uint8 * &base, cyg_int32 &size, CYG_ADDRWORD &alloc ) -{ - mypool.get_arena( base, size, alloc ); -} - -// Return the size of the memory allocation (previously returned -// by alloc() or try_alloc() ) at ptr. Returns -1 if not found -cyg_int32 -Cyg_Mempool_Fixed::get_allocation_size( cyg_uint8 *ptr ) -{ - // can only be one size for the fixed block allocator - return mypool.get_blocksize(); -} -// ------------------------------------------------------------------------- - -// End of memfixed.cxx diff --git a/packages/kernel/current/src/mem/memvar.cxx b/packages/kernel/current/src/mem/memvar.cxx deleted file mode 100644 --- a/packages/kernel/current/src/mem/memvar.cxx +++ /dev/null @@ -1,166 +0,0 @@ -//========================================================================== -// -// memvar.cxx -// -// Memory pool with variable block class declarations -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): dsm -// Contributors: dsm -// Date: 1998-05-22 -// Description: -// Usage: #include -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include - -#include // base kernel types -#include // tracing macros -#include // assertion macros -#include // instrumentation - -#include - -// implementation that we want to make concrete -#ifdef CYGIMP_MEM_USE_MEMPOOLT_PLAIN -#include // kernel safe mempool template -#else -#include // kernel safe mempool template -#endif - -#include // mem pool implementation - -// ------------------------------------------------------------------------- -// debugging/assert function - -#ifdef CYGDBG_USE_ASSERTS -cyg_bool -Cyg_Mempool_Variable::check_this(cyg_assert_class_zeal zeal) const -{ - CYG_REPORT_FUNCTION(); - // check that we have a non-NULL pointer first - if( this == NULL ) return false; - return mypool.check_this( zeal ); -} -#endif - -// ------------------------------------------------------------------------- -// Constructor: gives the base and size of the arena in which memory is -// to be carved out -Cyg_Mempool_Variable::Cyg_Mempool_Variable( - cyg_uint8 *base, - cyg_int32 size) - : mypool( base, size, (CYG_ADDRWORD)4 ) -{ -} - -// Destructor -Cyg_Mempool_Variable::~Cyg_Mempool_Variable() -{ -} - -// ------------------------------------------------------------------------- -// get some memory; wait if none available -cyg_uint8 * -Cyg_Mempool_Variable::alloc(cyg_int32 size) -{ - return mypool.alloc( size ); -} - -#ifdef CYGFUN_KERNEL_THREADS_TIMER -// get some memory with a timeout -cyg_uint8 * -Cyg_Mempool_Variable::alloc(cyg_int32 size, cyg_tick_count delay_timeout ) -{ - return mypool.alloc( size , delay_timeout ); -} -#endif - -// get some memory, return NULL if none available -cyg_uint8 * -Cyg_Mempool_Variable::try_alloc(cyg_int32 size) -{ - return mypool.try_alloc( size ); -} - -// free the memory back to the pool -cyg_bool -Cyg_Mempool_Variable::free( cyg_uint8 *p, cyg_int32 size ) -{ - return mypool.free( p, size ); -} - -// is anyone waiting for memory? -cyg_bool -Cyg_Mempool_Variable::waiting() -{ - return mypool.waiting(); -} - -// read the fixed allocation size (will be -1 as variable) -cyg_int32 -Cyg_Mempool_Variable::get_blocksize() -{ - return mypool.get_blocksize(); -} - -// these two are obvious and generic -cyg_int32 -Cyg_Mempool_Variable::get_totalmem() { - return mypool.get_totalmem(); -} -cyg_int32 -Cyg_Mempool_Variable::get_freemem() { - return mypool.get_freemem(); -} - -// get information about the construction parameters for external -// freeing after the destruction of the holding object -void -Cyg_Mempool_Variable::get_arena( - cyg_uint8 * &base, cyg_int32 &size, CYG_ADDRWORD &maxfree ) -{ - mypool.get_arena( base, size, maxfree ); -} - -// Return the size of the memory allocation (previously returned -// by alloc() or try_alloc() ) at ptr. Returns -1 if not found -cyg_int32 -Cyg_Mempool_Variable::get_allocation_size( cyg_uint8 *ptr ) -{ - return mypool.get_allocation_size( ptr ); -} - -// ------------------------------------------------------------------------- - -// End of memvar.cxx diff --git a/packages/kernel/current/tests/kmemfix1.c b/packages/kernel/current/tests/kmemfix1.c deleted file mode 100644 --- a/packages/kernel/current/tests/kmemfix1.c +++ /dev/null @@ -1,191 +0,0 @@ -/*========================================================================== -// -// kmemfix1.cxx -// -// Kernel C API Fixed memory pool test 1 -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): dsm -// Contributors: dsm -// Date: 1998-06-09 -// Description: Tests basic fixed memory pool functionality -//####DESCRIPTIONEND#### -*/ - -#include // CYGNUM_HAL_STACK_SIZE_TYPICAL - -#include - -#include - -#include - -#ifdef CYGFUN_KERNEL_API_C - -#include "testaux.h" - -#define NTHREADS 2 -#define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL - -static cyg_handle_t thread[NTHREADS]; - -static cyg_thread thread_obj[NTHREADS]; -static char stack[NTHREADS][STACKSIZE]; - - -#define MEMSIZE 10240 - -static cyg_uint8 mem[2][MEMSIZE]; - -static cyg_mempool_fix mempool_obj[2]; -static cyg_handle_t mempool0, mempool1; - -static void check_in_mp0(cyg_uint8 *p, cyg_int32 size) -{ - CYG_TEST_CHECK(NULL != p, - "Allocation failed"); - CYG_TEST_CHECK(mem[0] <= p && p+size < mem[1], - "Block outside memory pool"); -} - -static void entry0( cyg_addrword_t data ) -{ - cyg_uint8 *p0, *p1, *p2; - cyg_mempool_info info0, info1, info2; - - cyg_mempool_fix_get_info(mempool0, &info0); - CYG_TEST_CHECK(mem[0] == info0.base, "get_arena: base wrong"); - CYG_TEST_CHECK(MEMSIZE == info0.size, "get_arena: size wrong"); - - CYG_TEST_CHECK(0 < info0.maxfree && info0.maxfree <= info0.size, - "get_arena: maxfree wildly wrong"); - - CYG_TEST_CHECK(100 == info0.blocksize, "get_blocksize wrong" ); - - CYG_TEST_CHECK(info0.totalmem > 0, "Negative total memory" ); - CYG_TEST_CHECK(info0.freemem > 0, "Negative free memory" ); - CYG_TEST_CHECK(info0.totalmem <= MEMSIZE, - "info.totalsize: Too much memory"); - CYG_TEST_CHECK(info0.freemem <= info0.totalmem , - "More memory free than possible" ); - - CYG_TEST_CHECK( !cyg_mempool_fix_waiting(mempool0) , - "Thread waiting for memory; there shouldn't be"); - - p0 = cyg_mempool_fix_alloc(mempool0); - check_in_mp0(p0, 100); - - cyg_mempool_fix_get_info(mempool0, &info1); - CYG_TEST_CHECK(info1.freemem > 0, "Negative free memory" ); - CYG_TEST_CHECK(info1.freemem < info0.freemem, - "Free memory didn't decrease after allocation" ); - - p1 = NULL; - while((p2 = cyg_mempool_fix_try_alloc(mempool0) )) - p1 = p2; - - cyg_mempool_fix_get_info(mempool0, &info1); - cyg_mempool_fix_free(mempool0, p0); - - cyg_mempool_fix_get_info(mempool0, &info2); - CYG_TEST_CHECK(info2.freemem > info1.freemem, - "Free memory didn't increase after free" ); - - // should be able to reallocate now a block is free - p0 = cyg_mempool_fix_try_alloc(mempool0); - check_in_mp0(p0, 100); - - CYG_TEST_CHECK(p1+100 <= p0 || p1 >= p0+100, - "Ranges of allocated memory overlap"); - - cyg_mempool_fix_free(mempool0, p0); - cyg_mempool_fix_free(mempool0, p1); - -#ifdef CYGFUN_KERNEL_THREADS_TIMER - // This shouldn't have to wait - p0 = cyg_mempool_fix_timed_alloc(mempool0, cyg_current_time()+100000); - check_in_mp0(p0, 100); - p1 = cyg_mempool_fix_timed_alloc(mempool0, cyg_current_time()+20); - check_in_mp0(p1, 10); - p1 = cyg_mempool_fix_timed_alloc(mempool0, cyg_current_time()+20); - CYG_TEST_CHECK(NULL == p1, "Timed alloc unexpectedly worked"); - - // Expect thread 1 to have run while processing previous timed - // allocation. It should therefore be waiting. - CYG_TEST_CHECK(cyg_mempool_fix_waiting(mempool1), - "There should be a thread waiting"); -#endif - - CYG_TEST_PASS_FINISH("Kernal C API Fixed memory pool 1 OK"); -} - -static void entry1( cyg_addrword_t data ) -{ - while(NULL != cyg_mempool_fix_alloc(mempool1)) - ; - CYG_TEST_FAIL("alloc returned NULL"); -} - - -void kmemfix1_main( void ) -{ - CYG_TEST_INIT(); - - cyg_thread_create(4, entry0 , (cyg_addrword_t)0, "kmemfix1-0", - (void *)stack[0], STACKSIZE, &thread[0], &thread_obj[0]); - cyg_thread_resume(thread[0]); - - cyg_thread_create(4, entry1 , (cyg_addrword_t)1, "kmemfix1-1", - (void *)stack[1], STACKSIZE, &thread[1], &thread_obj[1]); - cyg_thread_resume(thread[1]); - - cyg_mempool_fix_create(mem[0], MEMSIZE, 100, &mempool0, &mempool_obj[0]); - cyg_mempool_fix_create(mem[1], MEMSIZE, 316, &mempool1, &mempool_obj[1]); - - cyg_scheduler_start(); - - CYG_TEST_FAIL_FINISH("Not reached"); -} - -externC void -cyg_start( void ) -{ - kmemfix1_main(); -} - -#else /* def CYGFUN_KERNEL_API_C */ -externC void -cyg_start( void ) -{ - CYG_TEST_INIT(); - CYG_TEST_NA("Kernel C API layer disabled"); -} -#endif /* def CYGFUN_KERNEL_API_C */ - -/* EOF kmemfix1.c */ diff --git a/packages/kernel/current/tests/kmemvar1.c b/packages/kernel/current/tests/kmemvar1.c deleted file mode 100644 --- a/packages/kernel/current/tests/kmemvar1.c +++ /dev/null @@ -1,199 +0,0 @@ -/*========================================================================== -// -// kmemvar1.cxx -// -// Kernel C API Variable memory pool test 1 -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): dsm -// Contributors: dsm -// Date: 1998-06-08 -// Description: Tests basic variable memory pool functionality -//####DESCRIPTIONEND#### -*/ - -#include // CYGNUM_HAL_STACK_SIZE_TYPICAL - -#include - -#include - -#include - -#ifdef CYGFUN_KERNEL_API_C - -#include "testaux.h" - -#define NTHREADS 2 -#define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL - -static cyg_handle_t thread[NTHREADS]; - -static cyg_thread thread_obj[NTHREADS]; -static char stack[NTHREADS][STACKSIZE]; - - -#define MEMSIZE 10240 - -static cyg_uint8 mem[2][MEMSIZE]; - -static cyg_mempool_var mempool_obj[2]; -static cyg_handle_t mempool0, mempool1; - -static void check_in_mp0(cyg_uint8 *p, cyg_int32 size) -{ - CYG_TEST_CHECK(NULL != p, - "Allocation failed"); - CYG_TEST_CHECK(mem[0] <= p && p+size < mem[1], - "Block outside memory pool"); -} - -static void entry0( cyg_addrword_t data ) -{ - cyg_uint8 *p0, *p1; - cyg_int32 most_of_mem=MEMSIZE/4*3; - cyg_mempool_info info0, info1, info2; - - cyg_mempool_var_get_info(mempool0, &info0); - - CYG_TEST_CHECK(mem[0] == info0.base, "get_arena: base wrong"); - CYG_TEST_CHECK(MEMSIZE == info0.size, "get_arena: size wrong"); - - CYG_TEST_CHECK(0 < info0.maxfree && info0.maxfree <= info0.size, - "get_arena: maxfree wildly wrong"); - - CYG_TEST_CHECK(-1 == info0.blocksize, "get_blocksize wrong" ); - - CYG_TEST_CHECK(info0.totalmem > 0, "Negative total memory" ); - CYG_TEST_CHECK(info0.freemem > 0, "Negative free memory" ); - CYG_TEST_CHECK(info0.totalmem <= MEMSIZE, - "info.totalsize: Too much memory"); - CYG_TEST_CHECK(info0.freemem <= info0.totalmem , - "More memory free than possible" ); - - CYG_TEST_CHECK( !cyg_mempool_var_waiting(mempool0), - "Thread waiting for memory; there shouldn't be"); - - CYG_TEST_CHECK( NULL == cyg_mempool_var_try_alloc(mempool0, MEMSIZE+1), - "Managed to allocate too much memory"); - - p0 = cyg_mempool_var_alloc(mempool0, most_of_mem); - check_in_mp0(p0, most_of_mem); - - cyg_mempool_var_get_info(mempool0, &info1); - - CYG_TEST_CHECK(info1.freemem > 0, "Negative free memory" ); - CYG_TEST_CHECK(info1.freemem < info0.freemem, - "Free memory didn't decrease after allocation" ); - - CYG_TEST_CHECK( NULL == cyg_mempool_var_try_alloc(mempool0, most_of_mem), - "Managed to allocate too much memory"); - - cyg_mempool_var_free(mempool0, p0); - - cyg_mempool_var_get_info(mempool0, &info2); - CYG_TEST_CHECK(info2.freemem > info1.freemem, - "Free memory didn't increase after free" ); - - // should be able to reallocate now memory is free - p0 = cyg_mempool_var_try_alloc(mempool0, most_of_mem); - check_in_mp0(p0, most_of_mem); - - p1 = cyg_mempool_var_try_alloc(mempool0, 10); - check_in_mp0(p1, 10); - - CYG_TEST_CHECK(p1+10 <= p0 || p1 >= p0+MEMSIZE, - "Ranges of allocated memory overlap"); - - cyg_mempool_var_free(mempool0, p0); - cyg_mempool_var_free(mempool0, p1); - -#ifdef CYGFUN_KERNEL_THREADS_TIMER - // This shouldn't have to wait - p0 = cyg_mempool_var_timed_alloc(mempool0, most_of_mem, - cyg_current_time()+100000); - check_in_mp0(p0, most_of_mem); - p1 = cyg_mempool_var_timed_alloc(mempool0, most_of_mem, - cyg_current_time()+2); - CYG_TEST_CHECK(NULL == p1, "Timed alloc unexpectedly worked"); - p1 = cyg_mempool_var_timed_alloc(mempool0, 10, - cyg_current_time()+2); - check_in_mp0(p1, 10); - - // Expect thread 1 to have run while processing previous timed - // allocation. It should therefore tbe waiting. - CYG_TEST_CHECK(cyg_mempool_var_waiting(mempool1), "There should be a thread waiting"); -#endif - - CYG_TEST_PASS_FINISH("Kernel C API Variable memory pool 1 OK"); -} - -static void entry1( cyg_addrword_t data ) -{ - cyg_mempool_var_alloc(mempool1, MEMSIZE+1); - CYG_TEST_FAIL("Oversized alloc returned"); -} - - -void kmemvar1_main( void ) -{ - CYG_TEST_INIT(); - - cyg_thread_create(4, entry0 , (cyg_addrword_t)0, "kmemvar1-0", - (void *)stack[0], STACKSIZE, &thread[0], &thread_obj[0]); - cyg_thread_resume(thread[0]); - - cyg_thread_create(4, entry1 , (cyg_addrword_t)1, "kmemvar1-1", - (void *)stack[1], STACKSIZE, &thread[1], &thread_obj[1]); - cyg_thread_resume(thread[1]); - - cyg_mempool_var_create(mem[0], MEMSIZE, &mempool0, &mempool_obj[0]); - cyg_mempool_var_create(mem[1], MEMSIZE, &mempool1, &mempool_obj[1]); - - cyg_scheduler_start(); - - CYG_TEST_FAIL_FINISH("Not reached"); -} - -externC void -cyg_start( void ) -{ - kmemvar1_main(); -} - -#else /* def CYGFUN_KERNEL_API_C */ -externC void -cyg_start( void ) -{ - CYG_TEST_INIT(); - CYG_TEST_NA("Kernel C API layer disabled"); -} -#endif /* def CYGFUN_KERNEL_API_C */ - -/* EOF kmemvar1.c */ diff --git a/packages/kernel/current/tests/memfix1.cxx b/packages/kernel/current/tests/memfix1.cxx deleted file mode 100644 --- a/packages/kernel/current/tests/memfix1.cxx +++ /dev/null @@ -1,174 +0,0 @@ -//========================================================================== -// -// memfix1.cxx -// -// Fixed memory pool test 1 -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): dsm -// Contributors: dsm -// Date: 1998-06-09 -// Description: Tests basic fixed memory pool functionality -//####DESCRIPTIONEND#### - -#include - -#include // Cyg_Scheduler::start() -#include // Cyg_Thread - -#include - -#include - -#include -#include - -#include // Cyg_Timer -#include // Cyg_Clock - - -#define NTHREADS 2 -#include "testaux.hxx" - -static const cyg_int32 memsize = 10240; - -static cyg_uint8 mem[2][memsize]; - -static Cyg_Mempool_Fixed mempool0(mem[0], memsize, 100); - -static Cyg_Mempool_Fixed mempool1(mem[1], memsize, 316); - - -static void check_in_mp0(cyg_uint8 *p, cyg_int32 size) -{ - CYG_TEST_CHECK(NULL != p, - "Allocation failed"); - CYG_TEST_CHECK(mem[0] <= p && p+size < mem[1], - "Block outside memory pool"); -} - - -static void entry0( CYG_ADDRWORD data ) -{ - cyg_uint8 *base; - cyg_int32 size; - CYG_ADDRWORD bs; - cyg_int32 f0,f1,f2,t0; - cyg_uint8 *p0, *p1, *p2; - - mempool0.get_arena(base, size, bs); - cyg_int32 blocksize=(cyg_int32)bs; - CYG_TEST_CHECK(mem[0] == base, "get_arena: base wrong"); - CYG_TEST_CHECK(memsize == size, "get_arena: size wrong"); - CYG_TEST_CHECK(100 == blocksize, "get_arena: blocksize wrong"); - - CYG_TEST_CHECK(316 == mempool1.get_blocksize(), "get_blocksize wrong" ); - - t0=mempool0.get_totalmem(); - CYG_TEST_CHECK(t0 > 0, "Negative total memory" ); - f0=mempool0.get_freemem(); - CYG_TEST_CHECK(f0 > 0, "Negative free memory" ); - CYG_TEST_CHECK(t0 <= memsize, "get_totalsize: Too much memory"); - CYG_TEST_CHECK(f0 <= t0 , "More memory free than possible" ); - - CYG_TEST_CHECK( !mempool0.waiting(), - "Thread waiting for memory; there shouldn't be"); - - CYG_TEST_CHECK( !mempool0.free(NULL), "Bogus free worked"); - - p0 = mempool0.alloc(); - check_in_mp0(p0, 100); - - f1 = mempool0.get_freemem(); - CYG_TEST_CHECK(f1 > 0, "Negative free memory" ); - CYG_TEST_CHECK(f1 < f0, "Free memory didn't decrease after allocation" ); - - p1 = NULL; - while((p2 = mempool0.try_alloc())) - p1 = p2; - - f1 = mempool0.get_freemem(); - CYG_TEST_CHECK(mempool0.free(p0), "Couldn't free"); - - f2 = mempool0.get_freemem(); - CYG_TEST_CHECK(f2 > f1, "Free memory didn't increase after free" ); - - // should be able to reallocate now a block is free - p0 = mempool0.try_alloc(); - check_in_mp0(p0, 100); - - CYG_TEST_CHECK(p1+100 <= p0 || p1 >= p0+100, - "Ranges of allocated memory overlap"); - - CYG_TEST_CHECK(mempool0.free(p0), "Couldn't free"); - CYG_TEST_CHECK(mempool0.free(p1), "Couldn't free"); - -#ifdef CYGFUN_KERNEL_THREADS_TIMER - // This shouldn't have to wait - p0 = mempool0.alloc(Cyg_Clock::real_time_clock->current_value()+100000); - check_in_mp0(p0, 100); - p1 = mempool0.alloc(Cyg_Clock::real_time_clock->current_value()+20); - check_in_mp0(p1, 10); - p1 = mempool0.alloc(Cyg_Clock::real_time_clock->current_value()+20); - CYG_TEST_CHECK(NULL == p1, "Timed alloc unexpectedly worked"); - - // Expect thread 1 to have run while processing previous timed - // allocation. It should therefore tbe waiting. - CYG_TEST_CHECK(mempool1.waiting(), "There should be a thread waiting"); -#endif - - CYG_TEST_PASS_FINISH("Fixed memory pool 1 OK"); -} - -static void entry1( CYG_ADDRWORD data ) -{ - while(NULL != mempool1.alloc()) - ; - CYG_TEST_FAIL("alloc returned NULL"); -} - - -void memfix1_main( void ) -{ - CYG_TEST_INIT(); - - new_thread(entry0, 0); - new_thread(entry1, 1); - - Cyg_Scheduler::start(); - - CYG_TEST_FAIL_FINISH("Not reached"); -} - -externC void -cyg_start( void ) -{ - memfix1_main(); -} -// EOF memfix1.cxx diff --git a/packages/kernel/current/tests/memfix2.cxx b/packages/kernel/current/tests/memfix2.cxx deleted file mode 100644 --- a/packages/kernel/current/tests/memfix2.cxx +++ /dev/null @@ -1,129 +0,0 @@ -//========================================================================== -// -// memfix2.cxx -// -// Fixed memory pool test 2 -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): dsm -// Contributors: dsm -// Date: 1998-06-08 -// Description: test allocation and freeing in fixed memory pools -//####DESCRIPTIONEND#### - -#include - -#include // Cyg_Scheduler::start() -#include // Cyg_Thread -#include -#include - -#include - -#include - -#include - - -#define NTHREADS 1 -#include "testaux.hxx" - -static const cyg_int32 memsize = 1024; - -static cyg_uint8 mem[memsize]; - -#define NUM_PTRS 16 // Should be even -#define BLOCKSIZE 12 - -static Cyg_Mempool_Fixed mempool(mem, memsize, BLOCKSIZE); - -static cyg_uint8 *ptr[NUM_PTRS]; - -// We make a number of passes over a table of pointers which point to -// blocks of allocated memory. The block is freed and a new block -// allocated. The order of the processing of blocks is varied. -static void entry( CYG_ADDRWORD data ) -{ - for(cyg_ucount32 passes = 0; passes < 10; passes++) { - - - // The order which the table is processed varies according to - // stepsize. - cyg_ucount8 stepsize = (passes*2 + 1) % NUM_PTRS; // odd - - - for(cyg_ucount8 c=0, i=0; c < NUM_PTRS; c++) { - i = (i+stepsize) % NUM_PTRS; - if(ptr[i]) { - for(cyg_ucount32 j=BLOCKSIZE;j--;) { - CYG_TEST_CHECK(ptr[i][j]==i, "Memory corrupted"); - } - CYG_TEST_CHECK(mempool.free(ptr[i]), "bad free"); - } - ptr[i] = mempool.try_alloc(); - - CYG_TEST_CHECK(NULL != ptr[i], "Memory pool not big enough"); - CYG_TEST_CHECK(mem<=ptr[i] && ptr[i]+BLOCKSIZE < mem+memsize, - "Allocated region not within pool"); - - // Scribble over memory to check whether region overlaps - // with other regions. The contents of the memory are - // checked on freeing. This also tests that the memory - // does not overlap with allocator memory structures. - for(cyg_ucount32 j=BLOCKSIZE;j--;) { - ptr[i][j]=i; - } - } - } - - CYG_TEST_PASS_FINISH("Fixed memory pool 2 OK"); -} - - -void memfix2_main( void ) -{ - CYG_TEST_INIT(); - - new_thread(entry, 0); - - for(cyg_ucount32 i = 0; i - -#include // Cyg_Scheduler::start() -#include // Cyg_Thread - -#include - -#include - -#include -#include - -#include // Cyg_Timer -#include // Cyg_Clock - - -#define NTHREADS 2 -#include "testaux.hxx" - -static const cyg_int32 memsize = 10240; - -static cyg_uint8 mem[2][memsize]; - -static Cyg_Mempool_Variable mempool0(mem[0], memsize); - -static Cyg_Mempool_Variable mempool1(mem[1], memsize); - - -static void check_in_mp0(cyg_uint8 *p, cyg_int32 size) -{ - CYG_TEST_CHECK(NULL != p, - "Allocation failed"); - CYG_TEST_CHECK(mem[0] <= p && p+size < mem[1], - "Block outside memory pool"); -} - - -static void entry0( CYG_ADDRWORD data ) -{ - cyg_uint8 *base; - cyg_int32 size; - CYG_ADDRWORD maxf; - cyg_int32 f0,f1,f2,t0; - cyg_uint8 *p0, *p1; - cyg_int32 most_of_mem=memsize/4*3; - - mempool0.get_arena(base, size, maxf); - cyg_int32 maxfree=(cyg_int32)maxf; - - CYG_TEST_CHECK(mem[0] == base, "get_arena: base wrong"); - CYG_TEST_CHECK(memsize == size, "get_arena: size wrong"); - - CYG_TEST_CHECK(0 < maxfree && maxfree <= size, - "get_arena: maxfree wildly wrong"); - - CYG_TEST_CHECK(-1 == mempool0.get_blocksize(), "get_blocksize wrong" ); - - t0=mempool0.get_totalmem(); - CYG_TEST_CHECK(t0 > 0, "Negative total memory" ); - f0=mempool0.get_freemem(); - CYG_TEST_CHECK(f0 > 0, "Negative free memory" ); - CYG_TEST_CHECK(t0 <= memsize, "get_totalsize: Too much memory"); - CYG_TEST_CHECK(f0 <= t0 , "More memory free than possible" ); - - CYG_TEST_CHECK( !mempool0.waiting(), - "Thread waiting for memory; there shouldn't be"); - - CYG_TEST_CHECK( !mempool0.free(0,32), "Bogus free worked"); - - CYG_TEST_CHECK( NULL == mempool0.try_alloc(memsize+1), - "Managed to allocate too much memory"); - - p0 = mempool0.alloc(most_of_mem); - check_in_mp0(p0, most_of_mem); - - f1 = mempool0.get_freemem(); - CYG_TEST_CHECK(f1 > 0, "Negative free memory" ); - CYG_TEST_CHECK(f1 < f0, "Free memory didn't decrease after allocation" ); - - CYG_TEST_CHECK( NULL == mempool0.try_alloc(most_of_mem), - "Managed to allocate too much memory"); - - CYG_TEST_CHECK(mempool0.free(p0, most_of_mem), "Couldn't free"); - - f2 = mempool0.get_freemem(); - CYG_TEST_CHECK(f2 > f1, "Free memory didn't increase after free" ); - - // should be able to reallocate now memory is free - p0 = mempool0.try_alloc(most_of_mem); - check_in_mp0(p0, most_of_mem); - - p1 = mempool0.try_alloc(10); - check_in_mp0(p1, 10); - - CYG_TEST_CHECK(p1+10 <= p0 || p1 >= p0+memsize, - "Ranges of allocated memory overlap"); - - CYG_TEST_CHECK(mempool0.free(p0, 0), "Couldn't free"); - CYG_TEST_CHECK(mempool0.free(p1, 10), "Couldn't free"); - -#ifdef CYGFUN_KERNEL_THREADS_TIMER - // This shouldn't have to wait - p0 = mempool0.alloc(most_of_mem, - Cyg_Clock::real_time_clock->current_value() + 100000); - check_in_mp0(p0, most_of_mem); - p1 = mempool0.alloc(most_of_mem, - Cyg_Clock::real_time_clock->current_value() + 2); - CYG_TEST_CHECK(NULL == p1, "Timed alloc unexpectedly worked"); - p1 = mempool0.alloc(10, - Cyg_Clock::real_time_clock->current_value() + 2); - check_in_mp0(p1, 10); - - // Expect thread 1 to have run while processing previous timed - // allocation. It should therefore tbe waiting. - CYG_TEST_CHECK(mempool1.waiting(), "There should be a thread waiting"); -#endif - - CYG_TEST_PASS_FINISH("Variable memory pool 1 OK"); -} - -static void entry1( CYG_ADDRWORD data ) -{ - mempool1.alloc(memsize+1); - CYG_TEST_FAIL("Oversized alloc returned"); -} - - -void memvar1_main( void ) -{ - CYG_TEST_INIT(); - - new_thread(entry0, 0); - new_thread(entry1, 1); - - Cyg_Scheduler::start(); - - CYG_TEST_FAIL_FINISH("Not reached"); -} - -externC void -cyg_start( void ) -{ - memvar1_main(); -} -// EOF memvar1.cxx diff --git a/packages/kernel/current/tests/memvar2.cxx b/packages/kernel/current/tests/memvar2.cxx deleted file mode 100644 --- a/packages/kernel/current/tests/memvar2.cxx +++ /dev/null @@ -1,138 +0,0 @@ -//========================================================================== -// -// memvar2.cxx -// -// Variable memory pool test 2 -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): dsm -// Contributors: dsm -// Date: 1998-06-08 -// Description: test allocation and freeing in variable memory pools -//####DESCRIPTIONEND#### - -#include - -#include // Cyg_Scheduler::start() -#include // Cyg_Thread -#include -#include - -#include - -#include - -#include - - -#define NTHREADS 1 -#include "testaux.hxx" - -static const cyg_int32 memsize = 10240; - -static cyg_uint8 mem[memsize]; - -static Cyg_Mempool_Variable mempool(mem, memsize); - -#define NUM_PTRS 16 // Should be even - -static cyg_uint8 *ptr[NUM_PTRS]; -static cyg_int32 size[NUM_PTRS]; - -// We make a number of passes over a table of pointers which point to -// blocks of allocated memory. The block is freed and a new block -// allocated. The size and the order of the processing of blocks -// is varied. -static void entry( CYG_ADDRWORD data ) -{ - cyg_uint32 s = 1; - - // The number of passes that can be successfully performed - // depends on the fragmentation performance of the memory - // allocator. - for(cyg_ucount32 passes = 0; passes < 10; passes++) { - - - // The order which the table is processed varies according to - // stepsize. - cyg_ucount8 stepsize = (passes*2 + 1) % NUM_PTRS; // odd - - - for(cyg_ucount8 c=0, i=0; c < NUM_PTRS; c++) { - i = (i+stepsize) % NUM_PTRS; - if(ptr[i]) { - for(cyg_ucount32 j=size[i];j--;) { - CYG_TEST_CHECK(ptr[i][j]==i, "Memory corrupted"); - } - CYG_TEST_CHECK(mempool.free(ptr[i], size[i]), - "bad free"); - } - s = (s*2 + 17) % 100; // size always odds therefore non-0 - ptr[i] = mempool.try_alloc(s); - size[i] = s; - - CYG_TEST_CHECK(NULL != ptr[i], "Memory pool not big enough"); - CYG_TEST_CHECK(mem<=ptr[i] && ptr[i]+s < mem+memsize, - "Allocated region not within pool"); - - // Scribble over memory to check whether region overlaps - // with other regions. The contents of the memory are - // checked on freeing. This also tests that the memory - // does not overlap with allocator memory structures. - for(cyg_ucount32 j=size[i];j--;) { - ptr[i][j]=i; - } - } - } - - CYG_TEST_PASS_FINISH("Variable memory pool 2 OK"); -} - - -void memvar2_main( void ) -{ - CYG_TEST_INIT(); - - new_thread(entry, 0); - - for(cyg_ucount32 i = 0; i - - * include/time.inl (__gmtime_r): Don't save leap year status when - calculating tm_wday - -2000-06-17 Jonathan Larmour - - * tests/time/gmtime.c (test): Add a couple more test cases - - * include/time.inl (__gmtime_r): Deal with boundary case correctly - -2000-05-25 Hugo Tyson - - * src/clibincl/stream.inl (set_error): If the error is EEOF, set - the EOF flag (flags.at_eof) so that clients know. - - * src/stdio/input/fgetc.cxx (__fgetc): - * src/stdio/input/fgets.cxx (_fgets): - * src/stdio/input/fread.cxx (_fread): Correctly handle an error, - or EOF indication, from real_stream->refill_read_buffer(). - -2000-05-16 Jesper Skov - - * tests/signal/signal2.c: Also reset DIV_BY_ZERO vector. - -2000-04-05 Jesper Skov - - * src/time/settime.cxx: - * src/time/time.cxx: - Wallclock moved to io/. - -2000-03-28 John Dallaway - - * cdl/string.cdl, - cdl/stdlib.cdl, - cdl/stdio.cdl, - cdl/libc.cdl: - - Adjust documentation URLs. - -2000-03-27 Jesper Skov - - * src/clibincl/stream.inl (check_this): Use cyb_bool instead of bool. - -2000-03-06 Jesper Skov - - * tests/time/strftime.c (test): Adjust test to match below change. - -2000-03-02 Jonathan Larmour - - * src/time/strftime.cxx (do_format): Make sure %m counts from - 1..12 rather than 0..11. Fix for case 103300 - -2000-02-29 Jonathan Larmour - - * src/stdio/output/vfnprintf.cxx: Correctly use 'n' parameter to - restrict length. Credit due to Andrew Lunn here as well. - Resolves 103057-CR-1 - - * tests/stdio/sprintf2.c (test): - Add snprintf tests to verify the correct behaviour of restricting - output length - -2000-02-10 Jesper Skov - - * tests/signal/signal2.c (main): - Also reclaim DATA_TLB_MISS vector if available. - -2000-01-31 Simon FitzMaurice - * cdl/*.cdl: - - Adjust help URLs in line with new doc layout. - -2000-01-28 Simon FitzMaurice - * cdl/*.cdl: - - Adjust help URLs in line with new doc layout. - -2000-01-19 Hugo Tyson - - * cdl/*.cdl: Add descriptions to a number of options &c which were - lacking same, also tidied up other typos as noticed en passant. - -1999-11-11 Bart Veer - - * cdl/string.cdl: - Switch to a single boolean configuration option for code size vs. - speed optimization. - -1999-11-03 John Dallaway - - * cdl/libc.cdl: Define tests. - -1999-10-19 Jonathan Larmour - - * src/stdio/output/vfnprintf.cxx: We can now remove Berkeley - advertising clause - * src/stdlib/div.cxx: ditto - * src/stdlib/ldiv.cxx: ditto - * src/stdlib/strtol.cxx: ditto - * src/stdlib/strtoul.cxx: ditto - * src/string/strtok.cxx: ditto - -1999-10-19 John Dallaway - - * cdl/libc.cdl: - - Define CDL options for package-specific CFLAGS. - -1999-10-08 Jonathan Larmour - - * include/pkgconf/libc.h (CYGNUM_LIBC_MAIN_THREAD_PRIORITY): Change - default to 10 to keep test farm happy - * cdl/startup.cdl: Likewise - -1999-10-07 John Dallaway - - * cdl/stdlib.cdl, cdl/string.cdl: - - Specify radio buttons using CDL interfaces. - -1999-10-06 Jonathan Larmour - - * cdl/stdio.cdl: Change default to /dev/ttydiag as per 1999-10-01 - change below - * cdl/startup.cdl: Add new form CDL for the startup changes as - per 1999-10-05 - -1999-10-05 Jonathan Larmour - - * include/libc.h: Add CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM to allow - the user to supply their own stack. - Rename CYGNUM_LIBC_MAIN_STACK_SIZE to - CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE and reparent under - CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM - Add CYGNUM_LIBC_MAIN_THREAD_PRIORITY to provide main() thread - priority - - * src/support/mainthread.cxx: Add support for user-supplied stack - Allow user to specify thread priority - - These changes fix CR 101069 - -1999-10-01 Jonathan Larmour - - * include/pkgconf/libc.h (CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE): Change - default to /dev/ttydiag to get correct console-like behaviour - Also don't preclude use if haldiag package isn't included - (case 102065) - -1999-09-15 Jesper Skov - - * tests/signal/signal2.c (cause_fpe): Try both float and integer - division by zero. - -1999-09-10 Jesper Skov - - * src/stdlib/malloc.cxx (cyg_libc_get_malloc_pool): Added for - stress_threads test. - -1999-09-07 Jesper Skov - PRs 20243, 20433 - * tests/signal/signal2.c: Disabled test3 on ARM. - -1999-09-02 Hugo Tyson - - * include/assert.h: Make the sense of NDEBUG correct; it is "set" - when NOT debugging. Fix for CR 101983-CR-1 - See Stroustrup, "The C++ Programming Language." - -1999-08-18 Jonathan Larmour - - * src/stdio/common/fopen.cxx (_fopen): Set buffer size 0 when not - buffering - Fix for case 101868 - -1999-08-17 John Dallaway - - * cdl/stdlib.cdl, cdl/string.cdl: - - Implement radio buttons using "FIXME radio" hack in - description field for now. - -1999-08-12 John Dallaway - - * cdl/stdlib.cdl: - Take advantage of MACRONAME_ENUMVAL macros output by CDL. - -1999-08-06 Jonathan Larmour - - * tests/stdio/sprintf2.c (test): Don't rely on 2.345 being exactly - representable in binary as a difference of 1 ulp will make it round - the wrong way. - -1999-07-16 Jonathan Larmour - - * src/stdio/input/fgetc.cxx: - Include outline versions of getc() (actually just a symbol alias for - fgetc() ) and getchar() - Some minor clean-ups - Add tracing/assertions - - * src/stdio/input/fputc.cxx: - Likewise (except applied to putc() and putchar()) - - * src/stdio/common/stdioinlines.cxx (_puts): - Call fputc() not _fputc() - - * src/clibincl/stdiosupp.hxx: - Remove now obsolete prototypes for _fgetc() and _fputc() - - * include/stdio.h: - Don't bother with getc()/putc() macros any more, just call - them as functions - Include protos for getc(), putc(), getchar() and putchar() functions - -1999-06-21 Jesper Skov - - * tests/signal/signal2.c: Disabled test 3 for SH EDK7708. - -1999-06-11 Jonathan Larmour - - * include/stdio.h: Make FILEs array types so they won't be - given $gp relocations on MIPS targets - -1999-05-27 Jesper Skov - - * tests/time/ctime.c: Fixed compiler warning. - -1999-05-25 Jonathan Larmour - - * tests/signal/signal2.c (main): - Update CYGPKG_HAL_TX39 -> CYGPKG_HAL_MIPS_TX39 due to recent MIPS - HAL changes - Fix for PR 20116 - -1999-04-30 Jesper Skov - PR 19945/19946 workaround - * tests/signal/signal2.c: Disabled test 3 for PowerPC sim. - -1999-04-19 Jonathan Larmour - - * include/time.inl: - Ensure all calls to cyg_libc_time_year_is_leap() are with the full - year, and not the direct contents of a struct tm, which are (year-1900) - -1999-04-19 Jesper Skov - PR 19308, 19410, 19528 - * tests/time/clock.c (test): Also disable data cache which may - affect timing when tracing/assertions are enabled. - -1999-04-15 Jonathan Larmour - - * src/clibincl/stdiosupp.hxx: - Add prototype for new cyg_libc_stdio_flush_all_but() function - - * src/clibincl/stream.hxx: - Don't include stdiosupp.hxx any more to prevent circular dependency, - therefore manually provide _setvbuf prototype - Make sure pkgconf/kernel.h is included before mutex.hxx - - * src/clibincl/stream.inl (Cyg_StdioStream::set_error()): - Add missing unlock_me() - - * src/stdio/common/fflush.cxx: - Separate most of code for fflush(NULL) into separate - cyg_libc_stdio_flush_all_but() function, which has the extra - capability of omitting one stream - - * src/stdio/common/stderr.cxx: - * src/stdio/common/stdin.cxx: - * src/stdio/common/stdout.cxx: - * src/stdio/common/vsnprintf.cxx: - * src/stdio/common/vsscanf.cxx: - Add missing clibincl/stdiosupp.hxx include - - * src/stdio/common/stream.cxx (Cyg_StdioStream::read()): - When reading, ensure we flush all output streams - - * src/stdio/common/stream.cxx (Cyg_StdioStream::flush_output_unlocked): - Flush the device as well - -1999-04-15 Jonathan Larmour - - * src/stdio/common/streambuf.cxx (set_buffer): - * src/stdio/common/stdioinlines.cxx (_setbuf): - * src/clibincl/streambuf.inl: - * src/clibincl/streambuf.hxx: - * src/clibincl/stream.hxx (class Cyg_StdioStream): - * include/pkgconf/libc.h: - * include/stdio.inl (setbuf): - Fix dumb typo: BUFSIZE -> BUFSIZ - This fixes PR19837 - -1999-04-15 Jonathan Larmour - - * src/stdio/common/stdioinlines.cxx (_setbuf): - * include/stdio.inl (setbuf): - Use _IONBF when buf==NULL, and _IOLBF otherwise. - Fix for PR 19836 - -1999-04-15 John Dallaway - - * include/pkgconf/libc.h: Tidy display string capitalization. - -1999-04-12 Jonathan Larmour - - * include/pkgconf/libc.h: - Clarify CDL description of CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE - - * tests/signal/signal2.c: Try harder to generate an exception by - accessing a misaligned address - Don't handle SIGTRAP any more - Part of fix for PRs 19731/19607 - -1999-04-07 Jesper Skov - PR 19667 - * src/support/mainthread.cxx: - Changed to use the new Cyg_Thread constructor. - -1999-04-07 Hugo Tyson - - * tests/signal/signal2.c (main): Use new macro - HAL_VSR_SET_TO_ECOS_HANDLER if defined, to wrest control from - CygMon, for example, by reinstalling eCos' default VSRs for - exceptions that we are provoking. - -1999-03-29 Jonathan Larmour - - * src/signal/siginit.cxx: Include stdlib.h for exit() - Fix for PR 19720 - -1999-03-29 Jonathan Larmour - - * tests/time/clock.c (test): Disable instruction cache - Hopefully fixes PR 19308 - -1999-03-29 Jesper Skov - - * tests/signal/signal2.c: Disabled test 3 for PPC as it cannot - trap division by zero. - -1999-03-26 Jonathan Larmour - - * src/support/main.cxx (main): Invoke cyg_user_start() if no kernel - Only sensible thing to do in our default main in a non-kernel config - -1999-03-25 Jonathan Larmour - - * tests/time/time.c: - Increase MAX_TIMEOUT since the sparclite gets very close to overrunning - it even when working. - Should return -1 iff CYGSEM_LIBC_TIME_TIME_WORKING isn't defined - Cosmetic changes - -1999-03-25 Hugo Tyson - - * tests/time/time.c (test): Take into account setting of - CYGSEM_LIBC_TIME_SETTIME_WORKING ie. does cyg_libc_time_settime() - work? If not, check that it returns an error. - This was exposed by the random combo in PR#19479. - -1999-03-23 Jonathan Larmour - - * include/pkgconf/libc.h: - Rename CYGSEM_LIBC_RAND_SIMPLEST and CYGSEM_LIBC_RAND_KNUTH1 to - CYGIMP_... - - Add another rand implementation CYGIMP_LIBC_RAND_SIMPLE1 which is - the default - - Part of fix for PR 19562 - - * include/sys/cstartup.h: - Tidy and remove unnecessary dependencies - - * src/stdlib/rand.cxx: - Rename algorithms from CYGSEM_... to CYGIMP_... - Add new "simple1" algorithm - - * tests/ctype/ctype.c: - Tidy - - * tests/stdlib/rand3.c: - Fix so that 0..RAND_MAX is split evenly over buckets, which it wasn't - before - Deal with case of RAND_MAX not being divisible by NUM_BUCKETS - exactly - Increase TEST_LENGTH to 200000 to provide more representative sample - Add CYG_TEST_INFO output to help ensure it doesn't time out - Tidy - - * tests/stdlib/rand4.c: - Only fail if more than _two_ thirds (rather than one third) match. - This is because half would match for a perfectly random distribution - This is the rest of the fix for PR 19562 - Cosmetic changes - -1999-03-22 Hugo Tyson - - * src/support/mainthread.cxx (CYGNUM_LIBC_MAIN_STACK_SIZE): - Use CYGNUM_HAL_STACK_SIZE_TYPICAL for the stack size instead of - CYGNUM_HAL_MINIMUM_STACK_SIZE. - -1999-03-22 Jonathan Larmour - - * tests/PKGconf.mak: Add -Wno-format when building strftime otherwise - it generates warnings for things that we do want to test (null - string, and %y format) - -1999-03-19 Jonathan Larmour - - * include/pkgconf/libc.h (CYGNUM_LIBC_TIME_DST_DEFAULT_STATE): - Put brackets back round negative number since sdf says the config - tool is fixed now (PR 19537) - - Add new CYGSEM_LIBC_RAND_SIMPLEST and CYGSEM_LIBC_RAND_KNUTH1 - options for different rand() algorithms in a so far failed attempt - to fix PR 19562 - - * src/stdlib/rand.cxx: - Add new optional algorithm from Knuth vol.2 - - * tests/stdlib/rand4.c: - Some tidies - Don't run test when using simplest algorithm - - * tests/signal/signal2.c (main): - Don't try to make an FPE on tx39 - its possible to detect but requires - too much HAL work to be sensible - -1999-03-18 Jonathan Larmour - - * src/signal/siginit.cxx (cyg_libc_signals_hwexcept_handler): - Use HAL_ENABLE_INTERRUPTS() rather than kernel to enable interrupts - -1999-03-18 Mark Galassi - - * tests/PKGconf.mak (TESTS): added rand4 compilation. - - * tests/stdlib/rand4.c: added this test for periodicity in the - least significant bit of rand(). - -1999-03-18 Jonathan Larmour - - * include/pkgconf/libc.h: Remove CYGFUN_LIBC_TIME_POSIX dependency - on CYGPKG_LIBC_STDIO - - * src/stdlib/itoa.cxx: - New file to convert integers to ascii - - * include/stdlib.h: - Add proto for new cyg_libc_itoa() function - - * include/time.inl: - Rework __asctime_r() to use memcpy() and cyg_libc_itoa() rather than - sprintf() - - * src/PKGconf.mak: - Build stdlib/itoa.cxx - - The above changes fix PR 19448 - -1999-03-17 Jonathan Larmour - - * include/time.h: Add #define of __time_t_defined to placate newlib - if it is used by accident. This is just a temporary workaround though. - -1999-03-16 Gary Thomas - - * src/PKGconf.mak: Add compile option to step around ARM compiler bug. - -1999-03-16 Jonathan Larmour - - * include/pkgconf/libc.h (CYGNUM_LIBC_TIME_DST_DEFAULT_STATE): - Don't use parentheses for now - - * src/stdio/common/stream.cxx (refill_read_buffer): - Silence bogus compiler warning - -1999-03-16 Jesper Skov - - * tests/signal/signal2.c (main): Enable SIGSEGV test for - i386/Linux. - - -1999-03-15 Jonathan Larmour - - * src/signal/siginit.cxx (cyg_libc_signals_hwexcept_handler): - Only enable interrupts if they were disabled - - * include/sys/timeutil.h: - * src/time/timeutil.cxx: - Add FIX ME line as a reminder that the workaround there can go away - in future - - * include/pkgconf/libc.h: - Add proper define for CYGSEM_LIBC_EXIT_CALLS_FFLUSH - Put brackets round negative CYGNUM_LIBC_TIME_DST_DEFAULT_STATE define - Fix run time typo - - * include/time.inl (__localtime_r): - Include sys/timeutil.h before this to get - cyg_libc_time_normalize_structtm() - -1999-03-12 Gary Thomas - - * include/sys/timeutil.h: - * src/time/timeutil.cxx: Remove 'const' from char arrays since - this fails [silently] on ARM when -fwritable-strings (PR19440) - -1999-03-12 Jesper Skov - - * tests/signal/signal2.c (main): Compiler warnings fix was - slightly broken. - -1999-03-12 Jesper Skov - PR 19473 - * tests/signal/signal2.c (main): - Disabling SIGTRAP handling on i386/Linux is not a good idea. -1999-03-11 Jesper Skov - PR 19473 - * tests/signal/signal2.c: - Added compiler warnings fix. - Added N/A handling for i386/Linux. - -1999-03-10 Gary Thomas - - * include/pkgconf/libc.h: Force "haldiag" device to be present. - 'asctime' and friends need 'stdio' as well. - - * include/time.inl: Fix syntax error on difftime() declaration. - -1999-03-08 Gary Thomas - - * src/clibincl/stream.hxx: needed for this file. - - * src/stdio/common/vsscanf.cxx (str_read): Fix problem with string - pointer [created by merge with new I/O package]. - -1999-03-05 John Dallaway - - * include/pkgconf/libc.h: - Add legal values for CYGNUM_LIBC_TIME_STD_DEFAULT_OFFSET - and CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET. - -1999-03-05 Jonathan Larmour - - * include/time.inl (cyg_libc_time_year_is_leap): - Fix bug with modulo year 400 - Fix typo in asctime_r macro - Fix gmtime_r, and mktime as a result of testing - - * tests/time/asctime.c, tests/time/ctime.c, tests/time/gmtime.c, - tests/time/gmtime.c, tests/time/localtime.c, tests/time/mktime.c, - tests/time/strftime.c, tests/time/time.c: - New tests - - * tests/PKGconf.mak: - Build above new tests - - * include/pkgconf/libc.h: - Add reminder FIX ME about extra config option - - * src/time/strftime.cxx: - Fix %w and %Y parameters as a result of testing - - * src/time/timeutil.cxx: - Fix cyg_libc_time_normalize_structtm() as a result of testing - of mktime() - - * tests/time/clock.c: - Reformat, remove obsolete bits and tidy - - * include/time.h: - Add Cyg_libc_time_dst type and new functions - cyg_libc_time_setzoneoffsets(), cyg_libc_time_setdst(), - cyg_libc_time_getzoneoffsets(), cyg_libc_time_settime() - - * include/time.inl: - Implement the above functions. This allows us to adjust for timezone - diffences and set the time. - Change localtime() to adjust for STD/DST - Change mktime() to adjust for STD/DST - - * include/libc.h: - Add new config options CYGSEM_LIBC_TIME_SETTIME_WORKING - and component CYGPKG_LIBC_TIME_ZONES containing options - CYGNUM_LIBC_TIME_DST_DEFAULT_STATE, - CYGNUM_LIBC_TIME_STD_DEFAULT_OFFSET, - CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET - - * src/strftime.cxx: - Adjust handling of %Z to _not_ deal with STD/DST - - * src/time/settime.cxx: - New file to implement cyg_libc_time_settime() - - * src/PKGconf.mak: - Build settime.cxx - - * src/time/timeutil.cxx: - Supply outline versions of cyg_libc_time_setzoneoffsets(), - cyg_libc_time_setdst(), and cyg_libc_time_getzoneoffsets() - Add variables for STD/DST state - Some minor comment changes - - * include/errno.h: - Use CYGBLD_ATTRIB_CONST instead of __attribute__((const)) directly - - * include/signal.h: - Change format of function comment headers - - * include/signal.inl: - Restrict errno.h inclusion to when its actually used - Fix a spelling typo - - * include/stdlib.h: - Add CYGBLD_ATTRIB_CONST to abs, div, labs, ldiv - - * include/stdlib.inl: - Reformat and tidy - Include new versions of div and ldiv which are more portable and - are cleanly rewritten so aren't covered by the BSD licence, which - is now removed - - * src/stdlib/div.cxx, src/stdlib/ldiv.cxx: - Non-inline, non-BSD and portable versions of the new versions of div - and ldiv from stdlib.inl - - * include/time.h: - Much reformatting, tidying and improving comments - Change CLOCKS_PER_SEC from 1000 to 1000000 - Add new functions asctime_r, ctime_r, gmtime_r, localtime_r, clock, - difftime, mktime, time, asctime, ctime, gmtime, localtime, strftime - Include new time.inl file - - * include/pkgconf/libc.h: - Add new options CYGSEM_LIBC_TIME_CLOCK_WORKING, - CYGSEM_LIBC_TIME_TIME_WORKING, CYGFUN_LIBC_TIME_POSIX, - CYGNUM_LIBC_TIME_CLOCK_TRACE_LEVEL, CYGIMP_LIBC_TIME_ASCTIME_INLINE, - CYGIMP_LIBC_TIME_CTIME_INLINE, CYGIMP_LIBC_TIME_DIFFTIME_INLINE, - CYGIMP_LIBC_TIME_GMTIME_INLINE, CYGIMP_LIBC_TIME_LOCALTIME_INLINE, - CYGIMP_LIBC_TIME_MKTIME_INLINE, CYGIMP_LIBC_TIME_ASCTIME_R_INLINE, - CYGIMP_LIBC_TIME_CTIME_R_INLINE, CYGIMP_LIBC_TIME_GMTIME_R_INLINE, - and CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE - - * time/asctime.cxx, time/asctime_r.cxx, time/clock.cxx, time/ctime.cxx, - time/ctime_r.cxx, time/difftime.cxx, time/gmtime.cxx, - time/gmtime_r.cxx, time/localtime.cxx, time/localtime_r.cxx, - time/mktime.cxx, time/strftime.cxx, time/time.cxx, time/timeutil.cxx, - include/time.inl: - New files to implement the new time functions. Many of them simply - provide the outline definitions, but the real body of the function - comes from time.inl - - * src/PKGconf.mak: - Build new .cxx files - - * src/clibincl/stdlibsupp.hxx: - Remove _div and _ldiv prototypes since they're no longer needed - - * src/clibincl/timesupp.hxx: - Delete as its now obsolete - - * src/time/clock.cxx: - Use new CYGSEM_LIBC_TIME_CLOCK_WORKING option to control whether it - just returns (clock_t)-1 or not. - Much reformatting and tidying - Change real imlpementation from _clock to __clock - Use CYGBLD_ATTRIB_WEAK_ALIAS now - - * tests/stdlib/div.c, tests/stdlib/ldiv.c: - Add some extra tests for handling of negative numbers - Reformat and tidy a bit, including removing the test for CYGPKG_LIBC - since its now always defined if the test is to be compiled - - * tests/time/clock.c: - Remove duplication CYG_TEST_INFO line - Check if unimplemented using "(clock_t)-1" and not just "-1" - -1999-03-04 Jonathan Larmour - - * src/stdlib/system.cxx: - Make sure system() is a weak alias for __system() - - * include/pkgconf/libc.h: Rework CDL description for - CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE and change its default to - "/dev/haldiag" - - * src/stdio/common/stream.cxx: - Check that dev is valid when passed to stream constructor - - * src/stdio/common/stdiosupp.cxx: - Tidy - - * src/support/mainthread.cxx: Make this depend on - CYGSEM_LIBC_STARTUP_MAIN_THREAD rather than just CYGPKG_KERNEL - -1999-03-04 Gary Thomas - - Merged in changes from 'ecos-new_devs-19990216-branch' - - (1999-02-24 Jonathan Larmour ) - - * src/stdio/common/stream.cxx: - Add "fix me" comments and remove a couple of commented out lines - - * src/stdio/common/vsnprintf.cxx: - * src/stdio/common/vsscanf.cxx: - Revert to using pointer to string for private data, not just string. - This preserves the state across multiple calls - - (1999-02-24 Gary Thomas ) - - * src/stdio/common/vsscanf.cxx: - * src/stdio/common/vsnprintf.cxx: - * src/stdio/common/stream.cxx: - * src/stdio/common/stdiosupp.cxx: - * src/stdio/common/fopen.cxx: - * src/clibincl/stream.inl: - * src/clibincl/stream.hxx: - * src/clibincl/stdiosupp.hxx: - * include/pkgconf/libc.h: Changes for new I/O system. - -1999-03-03 Jonathan Larmour - - * tests/stdlib/atexit.c: Forgot to config atexit test for - CYGFUN_LIBC_ATEXIT option - - * include/pkgconf/libc.h: - Require CYGVAR_KERNEL_THREADS_DATA for CYGSEM_LIBC_PER_THREAD_STRTOK - This fixes PR 19362 - Require CYGPKG_KERNEL for thread safe streams - Also don't need "requires CYGPKG_KERNEL" for per-thread rand and errno - if we already require a finer granularity kernel option - -1999-02-25 Jonathan Larmour - - * include/pkgconf/libc.h: Fix CYGNUM_LIBC_MAIN_STACK_SIZE by changing - CYGPKG_LIBC_STARTUP_MAIN_THREAD -> CYGSEM_LIBC_STARTUP_MAIN_THREAD - Fix for PR 19304 - -1999-02-23 Jonathan Larmour - - * src/stdlib/system.cxx: Add to implement trivial system() call - * include/stdlib.h: Add system() prototype - * src/PKGconf.mak: Build system.cxx - - * tests/ctype/ctype.c, tests/i18n/setlocale.c, tests/setjmp/setjmp.c, - tests/signal/signal1.c, tests/signal/signal2.c, - tests/stdio/sprintf1.c, tests/stdio/sprintf2.c, tests/stdio/sscanf.c, - tests/stdio/stdiooutput.c, tests/stdlib/atexit.c, - tests/stdlib/atoi.c, tests/stdlib/atol.c, tests/stdlib/bsearch.c, - tests/stdlib/div.c, tests/stdlib/getenv.c, tests/stdlib/labs.c, - tests/stdlib/ldiv.c, tests/stdlib/malloc1.c, tests/stdlib/malloc2.c, - tests/stdlib/malloc3.c, tests/stdlib/qsort.c, tests/stdlib/rand1.c, - tests/stdlib/rand2.c, tests/stdlib/rand3.c, tests/stdlib/realloc.c, - tests/stdlib/srand.c, tests/stdlib/strtol.c, tests/stdlib/strtoul.c, - tests/string/memchr.c, tests/string/memcmp1.c, - tests/string/memcmp2.c, tests/string/memcpy1.c, - tests/string/memcpy2.c, tests/string/memmove1.c, - tests/string/memmove2.c, tests/string/memset.c, - tests/string/strcat1.c, tests/string/strcat2.c, - tests/string/strchr.c, tests/string/strcmp1.c, - tests/string/strcmp2.c, tests/string/strcoll1.c, - tests/string/strcpy1.c, tests/string/strcpy2.c, - tests/string/strcspn.c, tests/string/strlen.c, - tests/string/strncat1.c, tests/string/strncat2.c, - tests/string/strncpy1.c, tests/string/strncpy2.c, - tests/string/strpbrk.c, tests/string/strrchr.c, - tests/string/strspn.c, tests/string/strstr.c, tests/string/strtok.c, - tests/string/strxfrm1.c, tests/string/strxfrm2.c, tests/time/clock.c: - Use CYG_TEST_NA() macro for non-applicable test configurations - -1999-02-20 Jonathan Larmour - - * include/signal.h: - * include/signal.inl: - * src/signal/raise.cxx: - * src/signal/siginit.cxx: - * src/signal/signal.cxx: - * tests/signal/signal1.c - * tests/signal/signal2.c: - New files to implement ISO standard signals - - * src/PKGconf.mak (TESTS): - * tests/PKGconf.mak (TESTS): - Update to build new files above - - * include/stdlib.h: - * src/clibincl/stdlibsupp.hxx: - Comment and QA changes (including giving better names to some types) - - * include/libc.h: - Add new configuration options for signals - Add new CYGSEM_LIBC_STARTUP_MAIN_THREAD option - Add a note to CYGNUM_LIBC_MAIN_STACK_SIZE option that it may be - overriden by HAL - Add new CYGFUN_LIBC_ATEXIT option and move ...ATEXIT_HANDLERS under - it - Add new CYGSEM_LIBC_EXIT_CALLS_FFLUSH option - Require CYGSEM_LIBC_STARTUP_MAIN_THREAD for "Invoke default static - constructors" option - - * src/stdlib/atexit.cxx: - Support above CYGFUN_LIBC_ATEXIT and QA changes - - * src/stdlib/exit.cxx: - Support for above new libc.h options, and some QA changes - - * src/support/cstartup.cxx: - Add support for new CYGSEM_LIBC_STARTUP_MAIN_THREAD option - - * src/support/mainthread.cxx: - Override main stack size if the HAL has a minimum - - * src/string/strncpy.cxx: - Use improved algorithm for aligned copies - imported from newlib - QA changes - - * src/stdlib/abort.cxx: - Support raise(SIGABRT), and some QA - - * include/errno.h: - Add const attribute - - * tests/stdlib/abs.c: - QA improvements - -1999-02-04 Jesper Skov - - * src/support/cstartup.cxx: Only define cyg_libc_main_thread when - the kernel is around. - -1999-02-01 Jesper Skov - - * tests/time/clock.c: Joined the two test/NOP checks into - one. - Increased tolerance in attempt to fix PRs 18737,18787,18846. - Fixed typo. - -1999-01-28 Jonathan Larmour - - * src/string/strtok.cxx: - * src/stdlib/rand.cxx: - Include if we use kernel header files - -1999-01-25 Jonathan Larmour - - * tests/stdio/sscanf.c (test): - CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT should be - CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT - Fix for PR 18786 - - * src/string/strtok.cxx: - * src/stdio/common/stdiofiles.cxx: - * src/errno/errno.cxx: - * src/stdlib/rand.cxx: - Give mutex protection objects a libc constructor priority - - * src/support/invokemain.cxx: - Add prototype for cyg_hal_invoke_constructors() - - * src/support/mainthread.cxx: - Give cyg_libc_dummy_constructor_obj a libc constructor priority, - and make its class have a public constructor - - * src/stdio/common/stderr.cxx: - * src/stdio/common/stdout.cxx: - * src/stdio/common/stdin.cxx: - Give cyg_libc_stdio_stdin/out/err static objects a libc constructor - priority - - * src/clibincl/streambuf.hxx (class Cyg_StdioStreamBuffer): - * src/clibincl/stream.hxx (class Cyg_StdioStream): - Remove private copy constructor. Needed to make prioritised - static constructors work. Fix for PR 18898 - -1999-01-22 Jonathan Larmour - - * src/errno/errno.cxx: - Include pkgconf/kernel.h otherwise it fails with per-thread errno - enabled - - * include/pkgconf/libc.h: - Enable per-thread errno by default since that is what POSIX would - want - - * tests/time/clock.c (test): - Placate compiler by initializing clock_first/second/third anyway, - even though they won't be in practice. This is only a test program - so adding an extra instruction doesn't matter. - - * src/i18n/locale.cxx (_setlocale): - Placate compiler, since it is dumb, by nesting, not serializing, if's - This is an idempotent change, but screws up the formatting :-(. - - * src/string/strpbrk.cxx (_strpbrk): - Change while loop to do loop to placate compiler. It'll even save an - instruction too (wow!) - -1999-01-22 John Dallaway - - * include/pkgconf/libc.h: - Add closing curly brace to CYGPKG_LIBC_STRING_STRTOK definition - -1999-01-21 Jonathan Larmour - - * include/errno.h: - Tidy up and add to header description - Change cyg_get_errno_p() to cyg_libc_get_errno_p() - Remove ifdef CYGPKG_LIBC - - * include/sys/file_if.h: - Remove - move contents to stdio.h - - * include/stdio.h: - Tidy up header description - Move FILE typedef here from sys/file_if.h - SEEK_SET, SEEK_CUR, SEEK_END defined to 0, 1, 2 respectively - for backwards compatibility with old UNIX - Change definitions of stdin/out/err to be addresses of FILE - globals - even though they're actually Cyg_StdioStream it'll work - - * include/pkgconf/libc.h: - Make CYGPRI_LIBC_WEAK et al macros depend on new ones in infra - Reorganise trace options under the individual components they are - associated with. - Reorganise thread-safety options under the individual components - they are associated with. - Add new CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS option - Misc. reformatting - Remove dependency on pkgconf/kernel.h - Configuration Tool will - generate check macros anyway. - Remove CYGPKG_LIBC_TRACE, CYGFUN_LIBC_strtok, CYGPKG_LIBC_RAND - options - Tidy up description header - - * src/clibincl/clibdata.hxx: - * src/clibincl/clibdata.inl: - * src/support/clibdata.cxx: - Remove and instead rely on each component to initialise its own data - - * src/clibincl/stdiofiles.hxx, src/clibincl/stdiofiles.inl: - New files to contain global file list and lock (if applicable). - Implemented as class with member access functions - - * src/errno/errno.cxx: - Reorganise with self-contained per-thread data, if applicable - Remove ifdef CYGPKG_LIBC - Tidy up description header - Rename cyg_get_errno_p() to cyg_libc_get_errno_p() - - * src/stdio/common/fclose.cxx: - * src/stdio/common/fflush.cxx: - * src/stdio/common/fopen.cxx: - * src/stdio/common/freopen.cxx: - Remove ifdef CYGPKG_LIBC - Use new global file access method from stdiofiles.hxx - Tidy up description header - Use new CYGBLD_ATTRIB_WEAK_ALIAS - Access errno "normally" rather than clibdata way - - * src/stdio/common/stdin.cxx: - * src/stdio/common/stdout.cxx - * src/stdio/common/stderr.cxx: - New files. Implement Cyg_StdioStream objects for each stream. In - separate self-contained files so using one doesn't bring in the - others - - * src/stdio/common/stdiofiles.cxx: - New file. Implements global files array and lock - - * src/stdlib/_exit.cxx: - Tidy up description header - Remove ifdef CYGPKG_LIBC - Use infra CYGBLD* macros - - * src/stdlib/malloc.cxx: - Tidy up description header - Remove ifdef CYGPKG_LIBC - Add pkgconf/kernel.h now that pkgconf/libc.h doesn't have it - Use infra CYGBLD* macros - Make pool visible externally with weak attribute and new name - cyg_libc_malloc_memorypool - - * src/stdlib/rand.cxx: - * src/stdlib/strtok.cxx: - Reorganise with self-contained per-thread data, if applicable - Remove ifdef CYGPKG_LIBC - Tidy up description header - Use infra CYGBLD* macros - - * src/support/cstartup.cxx: - Split into smaller files to make selective linking work better, - fix i386 port problem and make GDB happy - - * src/support/environ.cxx: - * src/support/invokemain.cxx: - * src/support/main.cxx: - * src/support/mainthread.cxx: - New files from bits of the old cstartup.cxx - Add support for CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG - - * src/PKGconf.mak: - Update to reflect file additions/deletion - - * tests/stdlib/rand1.c: - * tests/stdlib/rand2.c: - * tests/stdlib/rand3.c: - * tests/stdlib/srand.c: - Make conform to coding standards - Remove ifdef CYGPKG_LIBC_RAND - Tidy up description header - - * tests/string/strtok.c: - Make conform to coding standards - Remove ifdef CYGFUN_LIBC_strtok - Tidy up description header - -1999-01-15 Mark Galassi - - * tests/stdlib/getenv.c (main): added tests for the case in which - the user does not supply environ and in which the user supplies a - NULL environ. - -1999-01-15 Jesper Skov - - * src/support/cstartup.cxx: Added workaround for weak aliasing - problem in i386 gcc. - - -1999-01-15 Gary Thomas - - * include/pkgconf/libc.h (CYGNUM_LIBC_MAIN_STACK_SIZE): - (CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE): Change defaults to be - more reasonable on small systems. - -1999-01-04 Jonathan Larmour - - * src/support/clibdata.cxx: - Minor bug with environ not being initialised correctly by - default - -1998-12-24 Bart Veer - - * src/clibincl/stream.inl (Cyg_StdioStream): - check_this() member functions should now be const - -1998-12-22 Jonathan Larmour - - * src/string/memchr.cxx (_memchr): - treat search value parameter to memchr as an unsigned byte, - not a signed int - copied fix from newlib PR 18471 - -1998-12-21 Jonathan Larmour - - * tests/stdlib/realloc.c: - * tests/stdlib/malloc3.c: - * tests/stdlib/malloc2.c: - Warning cleanup - -1998-12-14 Jonathan Larmour - - * tests/stdlib/malloc2.c, tests/stdlib/malloc3.c, - tests/stdlib/realloc.c: - Only run these tests when we have a coalescing memory allocator - -1998-12-14 Jonathan Larmour - - * src/stdio/common/stream.cxx: - Only check buffer init success if buffering - - * src/stdio/common/streambuf.cxx (set_buffer): - Check for diff of requested size against buffer_size, not - get_buffer_size(), since this may return -1, which won't be - equal to size, and will cause malloc to be called - -1998-12-01 Jesper Skov - - * tests/stdlib/getenv.c (main): Don't declare variables when they - are not used. - -Thu Nov 26 17:59:12 1998 Jonathan Larmour - - * tests/string/strncpy1.c: - Fix off-by-one error since it called my_strcmp() and not - my_strncmp(), which meant in included the trailing NULL when it - shouldn't have. - -1998-11-26 Jesper Skov - - * src/stdlib/qsort.cxx (_qsort): - * src/stdlib/rand.cxx (_srand): - Changed CYG_REPORT_FUNCNAMETYPE to CYG_REPORT_FUNCNAME in void - functions. - -Mon Oct 26 18:49:00 1998 Jonathan Larmour - - * src/support/cstartup.cxx (cyg_libc_dummy_main): - Silence compiler warning with cast of char * to CYG_ADDRWORD - -Wed Oct 28 17:31:21 1998 Jonathan Larmour - - * src/time/clock.cxx (_clock): - Reorder scaling expression as it was both incorrect and risked - overflow. - Fix for PR 18076 - -Mon Oct 19 14:40:06 1998 Jonathan Larmour - - * include/stdio.h (EOF): - Change from -64 to (-1), to allow broken code to work :-/ - Also change other negative defines to be within parentheses - -1998-10-19 Mark Galassi - - * include/pkgconf/libc.h: updated the doc URL - -Thu Oct 15 21:33:44 1998 Jonathan Larmour - - * src/clibincl/clibdata.hxx: - Only include kernel thread headers when we're in thread-safe mode - - * src/time/clock.cxx: - Only include kernel clock headers if there's a kernel with the - right functionality available - - * tests/time/clock.c: - Remove unnecessary inclusion of - - Above changes are required for PR 17229 - -Wed Oct 14 16:38:55 1998 Jonathan Larmour - - * src/clibincl/clibdata.hxx, src/clibincl/clibdata.inl: - Conditionalise inclusion of clibincl/stdiosupp.hxx and - clibincl/stream.hxx. Tidying up PR 17502 - -Wed Oct 14 14:08:56 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Rename CYGPKG_LIBC_STRING_OPTIMISATIONS to - CYGPKG_LIBC_STRING_OPTIMIZATIONS to make it truely merkin. - -Tue Oct 13 19:34:41 1998 Jonathan Larmour - - * include/pkgconf/libc.h (CYGDAT_LIBC_ARGUMENTS): - Add a default argv[0] of "" as many programs assume argc>0 - The standard allows argv[0] to be "" if the program name - is not available - -1998-09-26 Bart Veer - - * src/clibincl/stdiosupp.hxx: - PR 17502: this header file now does nothing if the stdio option - is disabled completely. This is the same behaviour is - clibincl/stream.hxx, although arguably the #ifdef protection - should happen wherever the header file is #include'd rather than - in the header file itself. - - * src/clibincl/clibdata.hxx: - PR 17502: this header file still #include's internal stdio-related - header files and references the FILE structure, even if stdio is - disabled. There were some #ifdef's for CYGPKG_LIBC_STDIO already. - One more has been added for _fopen() and _fclose(). - -1998-09-25 Bart Veer - - * src/clibincl/streambuf.inl (Cyg_StdioStreamBuffer): - PR 17487: Reorder the calls to initialize member fields, to - eliminate a compiler warning. - -Fri Sep 25 19:04:29 1998 Jonathan Larmour - - * src/errno/errno.cxx, src/stdlib/bsearch.cxx, - src/stdlib/qsort.cxx, src/stdlib/rand.cxx, src/string/strtok.cxx, - src/time/clock.cxx: - Only define tracing variable and tracing level macro when - the relevant tracing level config options are set. Otherwise - keep the tracing level fixed at 0 - Fix for PR 17476 - - * include/pkgconf/libc.h: - Define trace levels only if parent CYGPKG_LIBC_TRACE is defined - for consistency with Configuration Tool - - -Fri Sep 25 17:24:45 1998 Jonathan Larmour - - * src/stdio/common/stdioinlines.cxx: - Make definition of vscanf() dependent on CYGFUN_LIBC_STDIO_ungetc - otherwise _vfscanf() won't be compiled. This therefore would - cause a link fail iff selective linking is not enabled. - Fix for PR 17455 - -Fri Sep 25 17:23:17 1998 Jonathan Larmour - - * src/stdlib/rand.cxx: - Make compilation dependent on CYGPKG_LIBC_RAND - Fix for PR 17473 - - * tests/stdlib/srand.c: - Make definition of dummy test pass conditional on CYGPKG_LIBC_RAND - not being defined, as well as CYGPKG_LIBC - Caused compilation failure when testing PR 17473 fix - -Mon Sep 21 17:11:04 1998 Jonathan Larmour - - * tests/stdio/sscanf.c: - Make sscanf test conditional on CYGFUN_LIBC_STDIO_ungetc since - _vfscanf() only gets compiled if this is defined - Fix for PR 17346 - -1998-09-20 Mark Galassi - - * include/pkgconf/libc.h: updated CDL doc strings. - -Fri Sep 18 22:18:47 1998 Jonathan Larmour - - * src/clibincl/clibdata.inl (get_errno_p): - Rather than this function only being available in thread-safe mode, - instead make what it returns be either the per-thread errno, or - global errno depending on the configuration. - Include (conditionally) to support this change - -Wed Sep 16 11:20:31 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Remove "fix me" comment which I forgot to remove before - -Tue Sep 15 19:27:57 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Updated descriptions and a few other minor things after review. - Notably though, the NDEBUG config option has been removed - -1998-09-15 Bart Veer - - * include/pkgconf/libc.h: - PR 17201: removed dependency on CYGPKG_KERNEL in the option - CYGNUM_LIBC_MAIN_STACK_SIZE, since the actual dependencies cannot - be expressed sensibly in the current system. - -1998-09-11 Bart Veer - - * include/pkgconf/libc.h: - Sorting out dependencies for error package. - -1998-09-10 Mark Galassi - - * include/pkgconf/libc.h: started adding doc fields to the - cdl_package data, as a pilot for now. - -Wed Sep 9 17:41:23 1998 Hugo Tyson - - * include/pkgconf/libc.h: - Add option CYGIMP_LIBC_MALLOC_CXX_DELETE_CALLS_FREE to explicitly - control whether the empty delete functions (currently) in - kernel/.../common/delete.cxx are enabled; controls code bloat, see - the comments in delete.cxx. - -Fri Sep 4 16:43:38 1998 Jonathan Larmour - - * tests/stdio/stdiooutput.c: - Add a default CYG_TEST_PASS() to make sure the test infra doesn't - complain. - Also remove the unused string functionsa - -Fri Sep 4 15:43:48 1998 Hugo Tyson - - * src/stdlib/exit.cxx (__libc_exit): - * src/stdlib/_exit.cxx (__libc__exit): - * src/stdlib/malloc.cxx (_free): - * src/stdlib/abort.cxx (abort): - * src/support/cstartup.cxx (invoke_main): - Tracing system asserted cos it was being called incorrectly; these - are void functions so you shouldn't give a type to the function - reporting call. - -Fri Sep 4 15:03:10 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Fix CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE description to refer to - the table.cxx file, not table.h - -Fri Sep 4 14:38:52 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Add description for CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE since - Proven won't be making any changes to the device driver - implementation after all. - Fix for PR 17148 - - * src/clibincl/stream.inl (set_position): - Remove "fix me" line. It is obvious that this will have to change - with a filesystem interface - Fix for PR 17147 - - * src/stdio/common/freopen.cxx: - Remove "fix me" - I know about this issue - Fix for PR 17145 - - * src/stdio/common/stream.cxx (read): - Remove "fix me" and change to use memcpy - Fix for PR 17144 - -Fri Sep 4 14:36:47 1998 Jonathan Larmour - - * tests/stdio/stdiooutput.c: - Actually add it this time! - -Fri Sep 4 13:48:13 1998 Jonathan Larmour - - * tests/stdio/stdiooutput.c: - Add new tests for misc stdio output functions - - * tests/PKGconf.mak: - Build stdiooutput.c test - -Fri Sep 4 12:52:10 1998 Jonathan Larmour - - * src/clibincl/stream.inl (write_byte): - Remove bogus assert - - * tests/stdlib/getenv.c (main): - Check whether str is NULL before doing a strcmp() - - * tests/stdio/sprintf2.c (main): - Reformat to 76 columns - -Fri Sep 4 02:10:54 1998 Jonathan Larmour - - * src/clibincl/stream.hxx, src/stdio/common/stream.cxx: - Add new peek_byte method to Cyg_StdioStream - - * src/stdio/input/vfscanf.cxx (_vfscanf): - Fix up buffer access to work with new peek_byte method above - Fix for PR 16954 - -Thu Sep 3 19:40:11 1998 Jonathan Larmour - - * tests/stdlib/rand1.c, tests/stdlib/rand2.c, - tests/stdlib/rand3.c: - Add extra check for CYGPKG_LIBC_RAND to decide whether the test - is applicable or not - - * tests/stdlib/rand2.c (test): - Use CYGNUM_LIBC_RAND_SEED for default seed, not 1 - - * tests/string/strtok.c: - Add extra check for CYGFUN_LIBC_strtok to decide whether the - test is applicable or not - -Wed Sep 2 19:11:40 1998 Jonathan Larmour - - * src/stdio/input/fread.cxx, src/stdio/output/fwrite.cxx: - Add fread() and fwrite() functions - - * src/PKGconf.mak: - Build fread.cxx and fwrite.cxx from above - - * src/stdio/common/stream.cxx: - Reformat to 76 columns - In write(), move initialisation of *bytes_written to start - In read(), move initialisation of *bytes_read to start - - * include/stdio.h: - Reformat to 76 columns - - Replace all references to the ANSI - standard to instead by the ISO C standard - - Add commented argument names for "documentation" - - Add fread() and fwrite() prototypes - - * src/clibincl/stdiosupp.hxx: - Copy the above changes from stdio.h, and add _fread() and _fwrite() - prototypes - - * src/stdio/output/fputs.cxx, src/stdio/input/fgets.cxx: - Reformat to 76 columns - -Wed Sep 2 15:41:15 1998 Jonathan Larmour - - * src/stdio/input/vfscanf.cxx: - Reformat to 76 columns - -Wed Sep 2 14:46:18 1998 Jonathan Larmour - - * src/stdio/common/fflush.cxx: - Use trylock_me() instead of lock_me(), and loop to prevent - deadlocks - - * src/clibincl/stream.hxx, src/clibincl/stream.inl: - Add trylock_me() method - - * src/clibincl/stream.hxx, src/clibincl/stream.inl, - src/stdio/common/fflush.cxx: - Reformat to 76 columns - -Wed Sep 2 12:24:27 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Change 0x7fff to 0x7fffffff. Oops! - give main stack size option a legal_values field - Undefine tracing by default - Add some more description in the header - -Tue Sep 1 20:02:07 1998 Jonathan Larmour - - * tests/i18n/setlocale.c (cyg_package_start): - Fix typo - extra "x" for no reason at all! :-) - -Tue Sep 1 19:44:58 1998 Jonathan Larmour - - * src/i18n/locale.cxx: - Fix bug in find_locale_data() that miscalculated size of - all_locales - - Make find_locale_data() match the locale "" and add some - other things in _setlocale() to ensure that "C" gets returned - when the default locale "" is passed. - - Only check the locale pointer when it is non-NULL - - * tests/i18n/setlocale.c: - New tests for setlocale() - - * tests/PKGconf.mak: - Update to build setlocale.c test - - * src/support/cstartup.cxx: - Don't actually call system default main() "main" otherwise GDB - gets confused and thinks its the entry point. Instead make a weak - alias and call the real function something different. - -Tue Sep 1 18:31:42 1998 Jonathan Larmour - - * src/i18n/locale.cxx (_setlocale): - Fix tracing macro name and remove "str maybe used before - initialised" warning - - * tests/stdlib/qsort.c: - Correct file description header - -Tue Sep 1 17:04:32 1998 Jonathan Larmour - - * include/locale.h, src/clibincl/i18nsupp.hxx, src/i18n/locale.cxx: - New files to add support for locales as defined by the ISO C - standard. i.e. setlocale() and localeconv() functions and some - other bits - - * include/pkgconf/libc.h: - Add CYGNUM_LIBC_MAX_LOCALE_NAME_SIZE config option for locale - support - - * src/PKGconf.mak: - build locale.cxx - - * include/errno.h, src/clibincl/ctypesupp.hxx: - Tidy up to 76 columns - -Tue Sep 1 00:24:22 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Move environment-related options from stdlib into new - CYGPKG_LIBC_STARTUP component. Also add options for main()'s - arguments (CYGPKG_LIBC_ARGUMENTS), main()'s default stack size - (CYGNUM_LIBC_MAIN_STACK_SIZE), number of atexit handlers - (CYGNUM_LIBC_ATEXIT_HANDLERS), and whether _exit() stops the - system (CYGSEM_LIBC_EXIT_STOPS_SYSTEM). - - * src/clibincl/stdlibsupp.hxx: - Fix a few comment bugs, and add new - cyg_libc_invoke_atexit_handlers() function prototype - - * src/stdlib/_exit.cxx, src/stdlib/atexit.cxx, src/stdlib/exit.cxx: - Implement exit(), atexit() and _exit() correctly now. Also - includes cyg_libc_invoke_atexit_handlers() in atexit.cxx. Now - we get the correct behaviour of atexit(), and exit() invokes the - atexit handlers and fflushs all the stdio streams. Add plenty of - tracing of asserts too. - - * src/support/cstartup.cxx: - Make main_thread object an exported global. Allow user-settable - arguments. Add MUCH more tracing and asserts. Improve comments. - Tidy up to 76 columns - - * tests/stdlib/atexit.c: - Add simple test for atexit() and it calling registered functions - - * tests/PKGconf.mak: - Build atexit.c test - -Mon Aug 31 18:54:48 1998 Jonathan Larmour - - * src/stdlib/getenv.cxx, tests/stdlib/getenv.c: - Add support for getenv(), and some tests to ensure it works - - * src/PKGconf.mak, tests/PKGconf.mak: - Update to include getenv.cxx and getenv.c test - - * src/clibincl/clibdata.hxx: - remove prototype for environ - we expect files needing it to - define it themselves - - * src/support/clibdata.cxx: - Tidy up to 76 columns and add definition of char **environ, but - with a configurable initialiser (see libc.h below) - - * tests/stdlib/abs.c (main): - Tidy up to 76 columns - - * src/stdlib/malloc.cxx: - Tidy up to 76 columns and remove warning for undefined _memcpy() - by changing to memcpy(), and casting away signedness - - * include/pkgconf/libc.h: - Add CYGPKG_LIBC_ENVIRONMENT and CYGDAT_LIBC_DEFAULT_ENVIRONMENT - configuration options - - * include/pkgconf/libc.h, src/clibincl/clibdata.hxx: - Tidy up to 76 columns - - * include/stdlib.h: - Add getenv() prototype and tidy up to 76 columns - - * src/clibincl/stdlibsupp.hxx: - Add _getenv() prototype - -Mon Aug 31 13:37:08 1998 Jonathan Larmour - - * src/stdlib/malloc.cxx: - Add realloc() - - * tests/stdlib/realloc.c: - Add this file to test new realloc() functionality - - * tests/PKGconf.mak: - Build realloc test - - * tests/stdlib/malloc3.c (main), tests/stdlib/malloc2.c (main), - tests/stdlib/malloc1.c (main): - Conditionalise local vars to prevent warnings - - * tests/stdlib/malloc3.c (fill_with_data): - Move '{' into "verb" line - - * include/pkgconf/libc.h: - Require infra tracing support to allow tracing - - * include/stdlib.h: - Add realloc() - - * src/clibincl/stdlibsupp.hxx: - Update the commented argument names from stdlib.h, including realloc() - -1998-08-28 Bart Veer - - * include/pkgconf/libc.h: - * src/clibincl/clibdata.hxx, src/time/clock.cxx: - - Updated for new kernel configuration option symbol names - -Fri Aug 28 19:18:25 1998 Hugo Tyson - - Changed the entry below to sat "tx39" instead of "mn10300". - It's been a long week. - -Fri Aug 28 18:59:20 1998 Hugo Tyson - - * src/support/cstartup.cxx: Add a weakly named main to allow the - default configuration to link on the tx39 which has no - scalextric linking yet. The static Cyg_Thread main_thread object - below continues to exist, though unreferenced, so all its - descendants must exist too. - -Fri Aug 28 08:54:29 1998 Jonathan Larmour - - * include/stdlib.h: - Add commented argument names Add exit(), and atexit(). And move - these along with abort() and _exit() to a new section. - - * src/stdlib/atexit.cxx, src/stdlib/exit.cxx: - Add trivial versions of atexit() and exit() - - * include/pkgconf/libc.h: - Add CYGNUM_LIBC_MAIN_STACK_SIZE config option - - * include/sys/cstartup.h, src/support/cstartup.cxx, src/PKGconf.mak: - New files to provide a new function cyg_iso_c_support(), which - invokes main "correctly". - - * tests/ctype/ctype.c, tests/setjmp/setjmp.c, tests/stdio/sprintf1.c, - tests/stdio/sprintf2.c, tests/stdio/sscanf.c, tests/stdlib/abs.c, - tests/stdlib/atoi.c, tests/stdlib/atol.c, tests/stdlib/bsearch.c, - tests/stdlib/div.c, tests/stdlib/labs.c, tests/stdlib/ldiv.c, - tests/stdlib/malloc1.c, tests/stdlib/malloc2.c, - tests/stdlib/malloc3.c, tests/stdlib/qsort.c, tests/stdlib/rand1.c, - tests/stdlib/rand2.c, tests/stdlib/rand3.c, tests/stdlib/srand.c, - tests/stdlib/strtol.c, tests/stdlib/strtoul.c, - tests/string/memchr.c, tests/string/memcmp1.c, - tests/string/memcmp2.c, tests/string/memcpy1.c, - tests/string/memcpy2.c, tests/string/memmove1.c, - tests/string/memmove2.c, tests/string/memset.c, - tests/string/strcat1.c, tests/string/strcat2.c, - tests/string/strchr.c, tests/string/strcmp1.c, - tests/string/strcmp2.c, tests/string/strcoll1.c, - tests/string/strcoll2.c, tests/string/strcpy1.c, - tests/string/strcpy2.c, tests/string/strcspn.c, - tests/string/strlen.c, tests/string/strncat1.c, - tests/string/strncat2.c, tests/string/strncpy1.c, - tests/string/strncpy2.c, tests/string/strpbrk.c, - tests/string/strrchr.c, tests/string/strspn.c, - tests/string/strstr.c, tests/string/strtok.c, - tests/string/strxfrm1.c, tests/string/strxfrm2.c, - tests/time/clock.c: - - Modify all tests to use new startup mechanism, and cyg_iso_c_start() - -Fri Aug 28 00:29:38 1998 Jonathan Larmour - - * src/stdio/common/stream.cxx: - Add #ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO around all accesses to - flags.last_buffer_op_was_read. Fix for PR 16997 - -Thu Aug 27 01:12:42 1998 Jonathan Larmour - - * include/sys/file_if.h: - Fix comments and remove cyg_get_file_star() - -Wed Aug 26 20:24:32 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Remove #define CYGPKG_LIBC is that is meant to live in - after all - -Wed Aug 26 19:39:23 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - More fixes to CDL stuff to make it work better, and look better on - the screen - -Tue Aug 25 20:21:41 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Make some fixes after running the ConfigTool - -Tue Aug 25 16:46:28 1998 Jonathan Larmour - - * include/pkgconf/libc.h (CYGNUM_LIBC_STDIO_BUFSIZE): - Fix typo of CYGNUM_LIBC_STDIO_BUFSIZE - -Tue Aug 25 15:10:57 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Tidy up CDL stuff a bit more, prior to checking it actually works. - -Tue Aug 25 11:38:52 1998 Jonathan Larmour - - * tests/stdlib/malloc2.c (main): - Prevent calls to CYG_TEST_STILL_ALIVE for now - -Tue Aug 25 05:39:28 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Change cosmetic paragraph alignment. - -Tue Aug 25 03:11:34 1998 Jonathan Larmour - - * src/support/clibdata.cxx: - Make stderr initialise with buffer size 0. - For PR 16955 - -Mon Aug 24 17:38:46 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - First pass at CDL-ifying the C library configuration. Currently - deliberately disabled as there a few outstanding issues. - -Mon Aug 24 16:14:22 1998 Jonathan Larmour - - * src/stdio/output/vfnprintf.cxx (_vfnprintf): - clear up warning for unused argument - - * tests/stdlib/malloc2.c (NUM_ITERATIONS): - Lower to 100 from 50000 so it won't take too long under the simulator - -Thu Aug 20 17:48:43 1998 Jonathan Larmour - - * src/stdlib/malloc.cxx: - Remove now unnecessary inclusion of kernel/ktypes.h - -Wed Aug 19 19:19:14 1998 Jonathan Larmour - - * tests/stdio/sprintf1.c, tests/stdio/sprintf2.c, - tests/stdio/sscanf.c, tests/stdlib/atoi.c, tests/stdlib/atol.c, - tests/stdlib/rand1.c, tests/stdlib/rand2.c, tests/stdlib/rand3.c, - tests/stdlib/srand.c, tests/stdlib/strtol.c, - tests/stdlib/strtoul.c, tests/string/strtok.c, - tests/time/clock.c: - Add parameters to "main()" to silence warnings - -Wed Aug 19 18:52:59 1998 Jonathan Larmour - - * src/stdio/common/stream.cxx (refill_read_buffer): - Put conditional error check into same #ifdef and if as what was being - checked in the first place! - -Wed Aug 19 18:49:19 1998 Jonathan Larmour - - * src/clibincl/stream.inl: - Reorder Cyg_StdioStream::check_this() to be first to silence - warnings - -Tue Aug 18 16:10:03 1998 Jonathan Larmour - - * ecc/language/c/libc/current/src/clibincl/clibdata.hxx, - ecc/language/c/libc/current/src/errno/errno.cxx, - ecc/language/c/libc/current/src/stdio/common/fopen.cxx, - ecc/language/c/libc/current/src/stdlib/rand.cxx, - ecc/language/c/libc/current/src/string/strtok.cxx: - Rename CYGIMP_LIBC_INTERNAL_DATA_PREAMBLE, - CYGIMP_LIBC_INTERNAL_DATA_ALLOC_CHECK_PREAMBLE, - CYGVAR_LIBC_INTERNAL_DATA, and - CYGIMP_LIBC_INTERNAL_DATA_CHECK to all have CYGPRI_ prefix instead - as recommended by the config name rules - - -Tue Aug 18 14:31:19 1998 Jonathan Larmour - - * src/stdio/common/setvbuf.cxx (_setvbuf): - Rename variable names in assert line, otherwise doesn't build - with asserts on! - -Sun Aug 16 18:15:12 1998 Jonathan Larmour - - * src/stdio/input/vfscanf.cxx (_vfscanf): - Fix some bugs, although there are some left to fix still. Unrelated - to the rest of the checkins, so I will check the partial fix in now. - - * src/clibincl/stream.hxx, src/clibincl/stream.inl, - src/stdio/common/stream.cxx: - Add parameters to constructor to allow more things to be done at - construction time. - - Now we have "new", remove separate "construct" method - - Add more documentation on constructor - - As requested by code review, where possible, move boolean flags - into separate packed bitfield structure for space efficiency - - Make readbuf_char be usable all the time rather than when configured - not to be buffering, as it is also needed for non-buffered mode i.e. - _IONBF - - * src/stdio/common/fopen.cxx: - Change to use new method of construction from above, using new - - Use thread-specific data, rather than global. And so change errnos - to access errno entry specifically - - Make process_mode() check for append mode too - - Reformat for coding standards to have { in same line as "verb" - - * src/stdio/common/setvbuf.cxx: - - Change to cope with different way of dealing with buffering policy - flags etc. in Cyg_StdioStream - - * src/stdio/common/vsnprintf.cxx, src/stdio/common/vsscanf.cxx, - src/support/clibdata.cxx: - Change construction of streams to use new parameters added above, - and change to use _IONBF mode for string stdio functions, - otherwise its a waste of memory. And use _IONBF for stderr as the - ISO standard tells us to! - - Reformat for coding standards to have { in same line as "verb" - - * src/clibincl/streambuf.hxx, src/clibincl/streambuf.inl: - Change constructor so that it can be set with default size and - dynamic buffer (if applicable) - - Fix minor bug in destructor - should only call free when allocated - dynamically - - Change get_buffer_size to return -1 if the buffer was not allowed - to be set up - - * src/stdio/common/streambuf.cxx: - Remove unnecessary stdio.h include and add extra comment to whether - to free bit in set_buffer() - - * src/stdio/common/freopen.cxx: - Change @@@ to standard fix me string - - * src/stdio/output/fputc.cxx: - Remove unnecessary "written" variable - -Thu Aug 13 15:37:28 1998 Jonathan Larmour - - * src/stdlib/_exit.cxx: - Included use of "fix me" line to ensure this is discussed before - release - - * include/stdlib.h, src/stdlib/abort.cxx, src/PKGconf.mak: - Add abort.cxx to implement abort(), albeit naively - -Thu Jul 30 18:03:09 1998 Jonathan Larmour - - * src/stdio/common/vsscanf.cxx (_vsscanf), - src/stdio/common/vsnprintf.cxx (_vsnprintf): - Fix initialiser of pseudo string device table that didn't get updated - when the table changed (Bad proven, no biscuit). - - * src/clibincl/stream.inl (~Cyg_StdioStream): - Move invalidation of magic_validity_word to after unlock_me(), - otherwise it always fails! - -Tue Jul 28 21:29:53 1998 Jonathan Larmour - - * src/clibincl/clibdata.hxx: - Shorten over-long lines - -Tue Jul 28 20:28:23 1998 Jonathan Larmour - - * src/clibincl/stream.hxx (class Cyg_StdioStream), - src/clibincl/stream.inl, src/stdio/common/stream.cxx: - Clarify some comments and get the CYGDBG_DEFINE_CHECK_THIS and - CYG_ASSERTCLASS stuff going - - * src/clibincl/stream.inl: - Put '{'s on same line as "action" as per coding standards - Shorten over-long lines - -Tue Jul 28 15:31:06 1998 Jonathan Larmour - - * src/clibincl/streambuf.inl, src/stdio/common/streambuf.cxx: - Move set_buffer() from streambuf.inl to new file streambuf.cxx - - * src/PKGconf.mak (COMPILE): - Build new file streambuf.cxx - - * src/clibincl/streambuf.hxx (class Cyg_StdioStreamBuffer): - Add METHODS comment - - * src/stdio/common/stream.cxx: - Put '{'s on same line as "action" as per coding standards - Shorten over-long lines - -Tue Jul 28 00:26:36 1998 Jonathan Larmour - - * include/stdlib.inl, src/stdio/input/vfscanf.cxx, - src/stdio/output/vfnprintf.cxx, src/stdlib/div.cxx, - src/stdlib/ldiv.cxx, src/stdlib/qsort.cxx, src/stdlib/strtol.cxx, - src/stdlib/strtoul.cxx, src/string/strtok.cxx: - - Include proper Berkeley license inline in the file, rather than - referring to an external file - - * doc/COPYING.UCB: - Remove, now that it isn't referred to any more - -Mon Jul 27 23:34:26 1998 Jonathan Larmour - - * include/ctype.h, include/ctype.inl, include/errno.h, - include/stdio.h, include/stdio.inl, include/stdlib.h, - include/stdlib.inl, include/string.h, include/string.inl, - include/time.h, include/sys/file_if.h, src/PKGconf.mak, - src/clibincl/clibdata.hxx, src/clibincl/clibdata.inl, - src/clibincl/ctypesupp.hxx, src/clibincl/stdiosupp.hxx, - src/clibincl/stream.hxx, src/clibincl/streambuf.hxx, - src/clibincl/streambuf.inl, src/clibincl/stringsupp.hxx, - src/clibincl/timesupp.hxx, src/ctype/isalnum.cxx, - src/ctype/isalpha.cxx, src/ctype/iscntrl.cxx, - src/ctype/isdigit.cxx, src/ctype/isgraph.cxx, - src/ctype/islower.cxx, src/ctype/isprint.cxx, - src/ctype/ispunct.cxx, src/ctype/isspace.cxx, - src/ctype/isupper.cxx, src/ctype/isxdigit.cxx, - src/ctype/tolower.cxx, src/ctype/toupper.cxx, - src/errno/errno.cxx, src/stdio/common/snprintf.cxx, - src/stdio/common/sprintf.cxx, src/stdio/common/sscanf.cxx, - src/stdio/common/stdioinlines.cxx, src/stdio/common/stream.cxx, - src/stdio/common/ungetc.cxx, src/stdio/common/vsnprintf.cxx, - src/stdio/common/vsscanf.cxx, src/stdio/input/fgetc.cxx, - src/stdio/input/fgets.cxx, src/stdio/input/fscanf.cxx, - src/stdio/input/gets.cxx, src/stdio/input/scanf.cxx, - src/stdio/output/fnprintf.cxx, src/stdio/output/fprintf.cxx, - src/stdio/output/fputc.cxx, src/stdio/output/fputs.cxx, - src/stdio/output/printf.cxx, src/stdlib/_exit.cxx, - src/stdlib/abs.cxx, src/stdlib/atof.cxx, src/stdlib/atoi.cxx, - src/stdlib/atol.cxx, src/stdlib/div.cxx, src/stdlib/labs.cxx, - src/stdlib/ldiv.cxx, src/stdlib/rand.cxx, src/stdlib/strtod.cxx, - src/string/memchr.cxx, src/string/memcmp.cxx, - src/string/memmove.cxx, src/string/strcat.cxx, - src/string/strchr.cxx, src/string/strcmp.cxx, - src/string/strcoll.cxx, src/string/strcpy.cxx, - src/string/strcspn.cxx, src/string/strlen.cxx, - src/string/strncat.cxx, src/string/strncmp.cxx, - src/string/strncpy.cxx, src/string/strpbrk.cxx, - src/string/strrchr.cxx, src/string/strspn.cxx, - src/string/strstr.cxx, src/string/strsuppt.cxx, - src/string/strtok.cxx, src/string/strxfrm.cxx, - src/support/clibdata.cxx, src/time/clock.cxx: - Untabify - -Mon Jul 27 23:14:18 1998 Jonathan Larmour - - * src/errno/errno.cxx, src/stdio/input/vfscanf.cxx, - src/stdio/output/vfnprintf.cxx, src/stdlib/strtol.cxx, - src/stdlib/strtoul.cxx, src/stdlib/malloc.cxx, src/stdlib/qsort.cxx, - tests/ctype/ctype.c, tests/stdlib/rand3.c, tests/stdlib/malloc3.c: - Remove all mentions of "register" in variable declarations. Also - untabify where needed - - * src/stdlib/bsearch.cxx: - Untabify this too - - -Mon Jul 27 22:18:51 1998 Jonathan Larmour - - * src/stdio/output/fputc.cxx (_fputc): - Replace call to stream write() with call to write_byte() - - * src/clibincl/stream.inl (write_byte): - Add asserts for stream write() returning odd values for how much has - been written - - (bytes_available_to_read): - Remove "register" def for variable declaration - -Mon Jul 27 22:06:22 1998 Jonathan Larmour - - * src/stdio/common/stdiosupp.cxx: - Remove #if 0'd cyg_get_file_star() and unnecessary pseudo string - device definition - -Mon Jul 27 21:57:25 1998 Jonathan Larmour - - * include/pkgconf/libc.h, src/support/clibdata.cxx: - Change CYGXXX_LIBC_STDIO_DEFAULT_CONSOLE to - CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE - -Mon Jul 27 21:49:23 1998 Jonathan Larmour - - * src/clibincl/clibdata.hxx, src/clibincl/clibdata.inl, - src/clibincl/ctypesupp.hxx, src/clibincl/setjmpsupp.hxx, - src/clibincl/stdiosupp.hxx, src/clibincl/stdlibsupp.hxx, - src/clibincl/stream.hxx, src/clibincl/stream.inl, - src/clibincl/streambuf.hxx, src/clibincl/streambuf.inl, - src/clibincl/stringsupp.hxx, src/clibincl/timesupp.hxx: - - Change CYGONCE_LIBC_*_{HXX,INL} to CYGONCE_LIBC_CLIBINCL_*_{HXX,INL} - -Mon Jul 27 21:34:05 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Change #define XXXXX 1 to #define XXXXX where applicable as per code - review - - Also remove obsolete CYGIMP_LIBC_THREAD_START_SUSPENDS_SELF - -Mon Jul 27 19:42:27 1998 Jonathan Larmour - - * src/stdio/common/fopen.cxx (_fopen): - Use #ifdef, not #if for config options - -Mon Jul 27 15:01:51 BST 1998 Chris Provenzano - - * src/stdio/common/stream.cxx, src/stdio/common/vsnprintf.cxx - * src/stdio/common/vsscanf.cxx: - Fixes to compile with the new Cyg_IORB field names. - -Thu Jul 9 03:40:21 1998 Jonathan Larmour - - * tests/stdlib/atoi.c, tests/stdlib/atol.c, - tests/stdlib/strtol.c, tests/stdlib/strtoul.c: - Adjust starting of tests to possibly start scheduler since - strtol/stroul rely on errno, which may be a per-thread variable - -Thu Jul 9 03:06:25 1998 Jonathan Larmour - - * src/clibincl/stream.hxx, src/clibincl/stream.inl, - src/stdio/common/stream.cxx, src/stdio/common/setvbuf.cxx: - Consolidate read and write buffers into single buffer, as it should - have been all along - - * src/clibincl/streambuf.hxx, src/clibincl/streambuf.inl: - Add drain_buffer() method to speed up the case when we want the - buffer completely emptied - -Tue Jul 7 21:26:33 1998 Jonathan Larmour - - * tests/stdio/sprintf1.c: - Add a couple of new tests that check that very long strings work too - -Wed Jul 1 19:52:39 1998 Jonathan Larmour - - * src/clibincl/stream.hxx, src/clibincl/streambuf.hxx: - Do not permit copy constructors - - * src/clibincl/stream.inl, src/stdio/common/fclose.cxx: - Make sure we use #ifdef and not #if - - * src/clibincl/streambuf.inl: - Use member initialisation list rather than explicit initialisation to - reduce warnings - -Wed Jul 1 19:17:55 1998 Jonathan Larmour - - * include/pkgconf/libc.h and all files using config options: - Rename configuration defines to make them more standard - -Thu Jun 25 20:09:30 1998 Jonathan Larmour - - * src/string/strcat.cxx: - Add parentheses on check to silence warning - (Verified by proven) - -Thu Jun 25 19:30:01 1998 Jonathan Larmour - - * src/stdlib/malloc.cxx: - Make sure that the malloc pool is initialised before other things - can use it. This is done with the hot new constructor ordering - feature. - -Thu Jun 25 18:27:03 1998 Jonathan Larmour - - * src/stdio/input/vfscanf.cxx: - Remove bogus ifdef if floating point is _not_ wanted - -Thu Jun 25 17:31:42 1998 Jonathan Larmour - - * src/string/strtok.cxx: - Fix argument checking to allow first argument of NULL - -Thu Jun 25 04:18:50 1998 Jonathan Larmour - - * src/clibincl/clibdata.inl (get_strtok_last_p): - Remove bogus assertion - - * src/stdlib/malloc.cxx: - Got sense of alignment check assertion the wrong way round, so negate - it - -Thu Jun 25 03:56:35 1998 Jonathan Larmour - - * src/string/strxfrm.cxx: - Fix argument checking assertions with legitimate nulls here too - -Thu Jun 25 03:46:32 1998 Jonathan Larmour - - * src/stdlib/strtoul.cxx, src/stdlib/strtol.cxx: - Fix argument checking assertions to cope with legitimate nulls - -Wed Jun 24 09:01:45 1998 Jonathan Larmour - - * tests/stdio/sprintf1.c: - Remove extraneous info messages - -Wed Jun 24 05:59:17 1998 Jonathan Larmour - - * tests/stdio/sprintf1.c, tests/stdio/sprintf2.c, tests/stdio/sscanf.c, - tests/stdlib/rand1.c, tests/stdlib/rand2.c, tests/stdlib/rand3.c, - tests/stdlib/srand.c: - - Change large automatic arrays to static arrays to prevent overuse - of a potentially small stack - -Wed Jun 24 05:45:28 1998 Jonathan Larmour - - * tests/stdio/sprintf1.c, tests/stdio/sprintf2.c, tests/stdio/sscanf.c, - tests/stdlib/rand1.c, tests/stdlib/rand2.c, tests/stdlib/rand3.c, - tests/stdlib/srand.c, tests/string/strtok.c, tests/time/clock.c: - - Increase thread stack size from 4K to 32K as in some cases it was - too small. - - -Tue Jun 23 20:12:31 1998 Jonathan Larmour - - * tests/stdio/sscanf.c: - Add extra tests, including floating point conversion testing - -Tue Jun 23 17:01:06 1998 Jonathan Larmour - - * src/string/strtok.cxx: - Make sure this is only compiled if CYGFUN_LIBC_strtok is defined - -Tue Jun 23 06:10:13 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - add some comments - that's all - - * src/stdio/common/stream.cxx: - fix case in refill_read_buffer() for what to do when there's nothing - left. Now return EAGAIN - - * src/stdio/common/vsscanf.cxx, src/stdio/input/vfscanf.cxx: - Get sscanf working properly and passing tests. Also make sure it - ignores FP when its not configured - - * src/stdlib/atof.cxx: - Only compile at all if strtod() is present - - -Mon Jun 22 19:13:42 1998 Jonathan Larmour - - * src/clibincl/clibdata.hxx, src/clibincl/clibdata.inl: - Conditionalise strtok_last and rand_seed better - -Mon Jun 22 14:14:12 1998 Jonathan Larmour - - * tests/stdlib/malloc3.c: - Add test for checking that mallocing and freeing repeatedly works - - * tests/PKGconf.mak: - Update to reflect addition of the above - -Mon Jun 22 13:09:33 BST 1998 Chris Provenzano - - * src/stdio/common/fopen.cxx - * src/stdio/common/stream.cxx - * src/stdio/common/vsnprintf.cxx - * src/stdio/common/vsscanf.cxx - Include cyg/devs/common/iorb.h instead of iorb.hxx - - * src/stdio/common/stream.cxx - Use read_blocking and write_blocking instead of just read and - write when accessing devices through the virtual device table. - -Sun Jun 21 18:19:13 1998 Jonathan Larmour - - * src/stdio/common/stdioinlines.cxx: - Propagate change of return code handling for puts from stdio.inl - into here - - * src/stdio/output/fputc.cxx: - make sure the right type is used for output - byte not int - - * src/support/clibdata.cxx: - Fix #define config mistook. #endif was in wrong place - -Sun Jun 21 16:11:04 1998 Jonathan Larmour - - * src/clibincl/clibdata.hxx, src/clibincl/clibdata.inl: - Allow explicit construction to get around a bug when - dynamically allocating per-thread structure - -Sun Jun 21 16:02:51 1998 Jonathan Larmour - - * tests/ctype/ctype.c, tests/setjmp/setjmp.c, tests/stdio/sprintf1.c, - tests/stdio/sprintf2.c, tests/stdio/sscanf.c, tests/stdlib/abs.c, - tests/stdlib/atoi.c, tests/stdlib/atol.c, tests/stdlib/bsearch.c, - tests/stdlib/div.c, tests/stdlib/labs.c, tests/stdlib/ldiv.c, - tests/stdlib/malloc1.c, tests/stdlib/malloc2.c, tests/stdlib/qsort.c, - tests/stdlib/rand1.c, tests/stdlib/rand2.c, tests/stdlib/rand3.c, - tests/stdlib/srand.c, tests/stdlib/strtol.c, tests/stdlib/strtoul.c, - tests/string/memchr.c, tests/string/memcmp1.c, - tests/string/memcmp2.c, tests/string/memcpy1.c, - tests/string/memcpy2.c, tests/string/memmove1.c, - tests/string/memmove2.c, tests/string/memset.c, - tests/string/strcat1.c, tests/string/strcat2.c, - tests/string/strchr.c, tests/string/strcmp1.c, - tests/string/strcmp2.c, tests/string/strcoll1.c, - tests/string/strcpy1.c, tests/string/strcpy2.c, - tests/string/strcspn.c, tests/string/strlen.c, - tests/string/strncat1.c, tests/string/strncat2.c, - tests/string/strncpy1.c, tests/string/strncpy2.c, - tests/string/strpbrk.c, tests/string/strrchr.c, - tests/string/strspn.c, tests/string/strstr.c, tests/string/strtok.c, - tests/string/strxfrm1.c, tests/string/strxfrm2.c, tests/time/clock.c: - - Update tests to "do the right thing" with all configuration settings - - -Sun Jun 21 04:54:14 1998 Jonathan Larmour - - * tests/setjmp/setjmp.c: - I have to be careful not to use setjmp() in a way not exactly - defined by the standard, so make sure I do, and add a comment - documenting these ways. - - Also ensure this test does the right thing in all configurations - -Sun Jun 21 04:38:15 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Add extra checks for invalid configurations - Also make default for thread safety OFF - - * src/clibincl/clibdata.inl: - Adjust indentation - - * src/stdio/output/vfnprintf.cxx: - Make printf of -0.0 floating point do the right thing - -Sun Jun 21 04:28:00 1998 Jonathan Larmour - - * src/stdio/common/snprintf.cxx, src/stdio/common/sprintf.cxx, - src/stdio/common/sscanf.cxx, src/stdio/input/fscanf.cxx, - src/stdio/input/scanf.cxx, src/stdio/output/fnprintf.cxx, - src/stdio/output/fprintf.cxx, src/stdio/output/printf.cxx: - - Had to remove inline functions with varargs. Which means separating - out each function from stdioinlines.cxx into a separate file, as they - no longer belong there. So all the above files were created. - - * include/stdio.inl, src/PKGconf.mak, - src/stdio/common/stdioinlines.cxx: - Changed to take account of the above - - -Sun Jun 21 03:58:42 1998 Jonathan Larmour - - * tests/stdio/sprintf1.c, tests/stdio/sprintf2.c: - Update with floating-point tests. Also make sure they DTRT in all - configurations - -Fri Jun 19 19:33:06 1998 Jonathan Larmour - - * src/support/clibdata.cxx: - accidentally initialised stdin/out/err twice - -Fri Jun 19 19:09:29 1998 Jonathan Larmour - - * src/support/clibdata.cxx: - Another typo - -Fri Jun 19 18:59:07 1998 Jonathan Larmour - - * src/support/clibdata.cxx: - Missing #endif typo - -Fri Jun 19 18:51:42 1998 Jonathan Larmour - - * src/support/clibdata.cxx: - Fix initialisation of static data members. Unsure how it worked at - all before! - -Fri Jun 19 18:01:01 1998 Jonathan Larmour - - * include/stdio.inl: - puts should check whether fputs returns non-negative, rather than - non-zero - -Fri Jun 19 17:22:52 1998 Jonathan Larmour - - * src/clibincl/clibdata.inl: - Make inclusion of get_errno_p conditional on thread-safety - -Wed Jun 17 10:55:32 1998 Jonathan Larmour - - * src/stdio/input/vfscanf.cxx: - Add weak alias of vfscanf() to _vfscanf() - -Wed Jun 17 09:10:41 1998 Jonathan Larmour - - * src/stdio/common/fflush.cxx: - Initialise err to silence compiler warning - -Wed Jun 17 08:59:20 1998 Jonathan Larmour - - * Most important is the addition of floating point support in - src/stdio/output/vfnprintf.cxx and src/stdio/input/vfscanf.cxx. This - also required the addition of atof() and strtod() in stdlib which is - definitely no bad thing! Other than that... - - * Fix a whole bunch of stuff I messed up first time round. Also the - sprintf and sscanf tests are included again. - -Tue Jun 16 16:38:02 1998 Jonathan Larmour - - * tests/PKGconf.mak: - Typo with not putting comment character at the beginning. Sigh. - -Tue Jun 16 14:53:09 1998 Jonathan Larmour - - * tests/PKGconf.mak: - Forgot to (temporarily) remove fputs test for now - -Mon Jun 15 20:40:03 1998 Jonathan Larmour - - Everything to do with stdio has almost completely changed, so there's - not much point documenting individual changes. - -Mon Jun 15 18:36:01 1998 Jonathan Larmour - - * tests/stdlib/malloc2.c: - Stop it moaning quite as much when it fails by making it exit sooner - - * tests/time/clock.c : - This isn't a compound testcase - -Thu Jun 11 17:59:13 1998 Jonathan Larmour - - * include/assert.h - Reverse sense of NDEBUG ifdef, that was left in accidentally due - to testing - -Thu Jun 11 04:58:08 1998 Jonathan Larmour - - * include/errno.h, include/string.h, src/clibincl/stringsupp.hxx: - Modify as I've now added an "error" package which defines the error - codes and strerror() - - * src/errno/strerror.cxx: - Moved to new error package and thus deleted - -Wed Jun 10 18:37:37 1998 Jonathan Larmour - - * include/assert.h: - create this header and add assert() function - -Wed Jun 10 16:23:57 1998 Jonathan Larmour - - * include/stdlib.h, src/clibincl/stdlibsupp.hxx, src/stdlib/malloc.cxx: - Add malloc(), calloc() and free() functions - - * include/pkgconf/libc.h: - Add malloc memory pool size option - - * tests/stdlib/malloc1.c, tests/stdlib/malloc2.c: - new tests for malloc - - * src/PKGconf.mak, tests/PKGconf.mak: - Update for new files - -Wed Jun 10 15:06:16 1998 Jonathan Larmour - - * tests/setjmp/setjmp.c: - Add another test - -Tue Jun 9 18:20:31 1998 Jonathan Larmour - - * include/pkgconf/libc.h: - Add some setjmp config's and a macro for the noreturn attribute - - * include/setjmp.h, include/setjmp.inl, src/clibincl/setjmpsupp.hxx, - src/setjmp/longjmp.cxx, tests/setjmp/setjmp.c: - Added to implement and test setjmp() and longjmp() - - * src/PKGconf.mak, tests/PKGconf.mak: - Update for newly added files - -Thu Jun 4 01:29:18 1998 Jonathan Larmour - - * src/string/memchr.cxx, src/string/memcmp.cxx, src/string/strcat.cxx, - src/string/strchr.cxx, src/string/strcmp.cxx, src/string/strcpy.cxx, - src/string/strlen.cxx, src/string/strncat.cxx, - src/string/strncmp.cxx, src/string/strncpy.cxx: - Rename CYGIMP_LIBC_PREFER_SMALL_TO_FAST to - CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST - - Also use slower but smaller version when __OPTIMIZE_SIZE__ is - defined (which comes from using gcc -Os) - -Fri May 29 16:15:04 1998 Jonathan Larmour - - * include/ctype.inl, src/ctype/isxdigit.cxx: - Fix bug that numerals aren't considered hex digits - - * include/time.h: - Change clock_t and time_t to be signed so that they can accept -1, as - required by other libc functions - - * src/clibincl/clibdata.hxx: - Fix typo that CYGIMP_LIBC_THREAD_SUPPORT should be ..._SAFETY - Also fix macro to allocate thread-specific data to not set variables - in a different stack-frame - - * tests/ctype/ctype.c: - Fix some misunderstandings in tests, and add a few new ones - - * tests/stdlib/qsort.c: - make ctr unsigned to prevent warnings - - * tests/stdlib/strtol.c, tests/stdlib/strtoul.c: - Fix some misunderstandings in tests, and add a few new ones - - * tests/string/strrchr.c: - Fix off by one error - - * tests/string/strspn.c: - Fix case-sensitivity problem, and off-by-one error - - * tests/string/strxfrm1.c: - Remove bogus bit of test that doesn't apply to strxfrm, and fix typo - - -Fri May 22 16:33:04 1998 Jonathan Larmour - - * src/PKGconf.mak - Remove CXXFLAGS line now that its redundant - - * tests/everything! - Do a blitz change of all tests - break some of them down into - different files, add new tests, standardize format, fix bugs, - update for recent header file changes and much more! - -Wed May 20 17:50:04 1998 Jonathan Larmour - - * tests/PKGconf.mak: - interim checkin for different dir structure for Bart - -Fri May 15 20:30:46 1998 Jonathan Larmour - - * Tidy up some loose ends I forgot: rename src/include directory to - src/clibincl. And add clibdata.inl and timesupp.hxx in there. - -Thu May 14 19:56:32 1998 Jonathan Larmour - - * Basically everything has changed in the C library. Files have - been moved, renamed, deleted and reworked. This is a major - revision, and now starts from this new baseline rather than doing - incremental changes. - -Fri Apr 17 18:43:02 1998 Jonathan Larmour - - * src/ECCconf.mak: - added for new build system (actually Bart did this, but didn't - update this ChangeLog) - -Fri Apr 17 15:03:25 1998 Hugo Tyson - - * src/stdio/device/sim.cxx: - Make it build with CYG_EMPTY_STATEMENT; the unadorned one is being - removed. - -Thu Apr 16 00:24:24 1998 Jonathan Larmour - - * All source files: - replace ECCIMP_LIBC_* conditional ifdef with CYGIMP_LIBC_* - - * include/eccconf/libc.h: - improve comments and reorder a bit - -Wed Apr 8 14:35:20 1998 Jonathan Larmour - - * Makefile.am, src/Makefile.am, tests/Makefile.am, configure.in: - many changes to integrate build structure from release tree - - * src/ctype/Makefile.am, src/ctype/Makefile.in, src/errno/Makefile.am, - src/errno/Makefile.in, src/stdio/Makefile.am, src/stdio/Makefile.in, - src/stdio/common/Makefile.am, src/stdio/common/Makefile.in, - src/stdio/device/Makefile.am, src/stdio/device/Makefile.in, - src/stdio/output/Makefile.am, src/stdio/output/Makefile.in, - src/stdio/input/Makefile.am, src/stdio/input/Makefile.in, - src/stdlib/Makefile.am, src/stdlib/Makefile.in, - src/string/Makefile.am, src/string/Makefile.in, - src/support/Makefile.am, src/support/Makefile.in, - src/time/Makefile.am, src/time/Makefile.in: - Remove as they are now redundant with above changes - - * include/Makefile.am: - Add to support above changes - - * include/eccconf/libc.h: - Change include file for configuration from kernel to system - - * src/include/kerndiag.hxx, src/stdio/device/kerndiag.cxx, - src/time/clockfn.cxx: - Change kernel include file to eccconf/kernel.h - - * src/include/strngdev.h: - remove unnecessary kernel include - - * Makefile.in, aclocal.m4, configure, src/Makefile.in, - tests/Makefile.in, include/Makefile.in: - regenerate - -Mon Apr 6 20:55:07 1998 Jonathan Larmour - - * src/stdlib/abs.cxx, src/stdlib/atoi.cxx, src/stdlib/atol.cxx, - src/stdlib/div.cxx, src/stdlib/labs.cxx, src/stdlib/ldiv.cxx: - Separated out functions from stdlib.cxx into separate files - - * src/stdlib/stdlib.cxx: - removed to be replaced by above files - - * Makefile.am, src/stdlib/Makefile.am: - modified to support building above and not building stdlib.cxx - - * src/support/tsd.cxx: - Remove unnecessary header file includes - - * Makefile.in, src/stdlib/Makefile.in: - regenerated - -Mon Apr 6 19:19:42 1998 Jonathan Larmour - - * src/support/tsd.cxx, include/eccconf/libc.h: - remove lame hack for tx39 compiler now that its fixed - - * src/include/sim.hxx: - define constants as static to placate compiler - -Thu Apr 2 21:01:21 1998 Jonathan Larmour - - * src/ctype/ctype.cxx: - deleted and separated out into below files - - * src/ctype/isalnum.cxx, src/ctype/isalpha.cxx, src/ctype/iscntrl.cxx, - src/ctype/isdigit.cxx, src/ctype/isgraph.cxx, src/ctype/islower.cxx, - src/ctype/isprint.cxx, src/ctype/ispunct.cxx, src/ctype/isspace.cxx, - src/ctype/isupper.cxx, src/ctype/isxdigit.cxx, src/ctype/tolower.cxx, - src/ctype/toupper.cxx: - Separated out individual ctype functions from ctype.cxx into separate - files - - * Makefile.am, src/ctype/Makefile.am: - modified to reflect above deletion/additions - - * Makefile.in, src/ctype/Makefile.in: - regenerated - -Thu Apr 2 19:08:26 1998 Jonathan Larmour - - * src/string/strxfrm.cxx: optimise using prefix increments - -Thu Apr 2 15:18:15 1998 Jonathan Larmour - - * src/string/strchr.cxx: optimise setting of mask a little - -Thu Mar 26 14:07:01 1998 Jonathan Larmour - - * src/support/tsd.cxx: fixed some typos - -Thu Mar 26 11:58:47 1998 Jonathan Larmour - - * include/eccconf/libc.h, src/support/tsd.cxx: - Implement workaround for tx39 compiler bug. - - * src/include/strsuppt.hxx: - remove prototypes for _memcpy() and _memset() as they are now in the - kernel - -Wed Mar 25 18:31:53 1998 Jonathan Larmour - - * Makefile.am, src/string/Makefile.am: memcpy() and memset() are - now in the kernel so remove them from build - * include/string.h: add a comment to say as much - * Makefile.in, src/string/Makefile.in: regenerate - -Wed Mar 25 15:30:42 1998 Jonathan Larmour - - * src/stdlib/_exit.cxx, src/include/file_if.inl: - Change _exit workaround to not cause a compiler optimisation - problem. Now just references _exit rather than calls it. - -Wed Mar 25 14:59:49 1998 Jonathan Larmour - - * src/string/strxfrm.cxx: Fix bug causing tests to fail completely - for this function - -Wed Mar 25 12:55:53 1998 Jonathan Larmour - - * src/include/sim.hxx: add types to constants (oops!) - * Makefile.am: link src/stdio/device/sim.cxx - * Makefile.in: regenerated - -Wed Mar 25 04:14:30 1998 Jonathan Larmour - - * src/include/file_if.hxx, src/include/file_if.inl, - src/include/kerndiag.hxx, src/include/sim.hxx, - src/include/stdio_if.hxx, src/include/strngdev.hxx, - src/include/tsd.hxx, src/stdio/common/clearerr.cxx, - src/stdio/common/clearerr.cxx, src/stdio/common/feof.cxx, - src/stdio/common/ferror.cxx, src/stdio/common/file_if.cxx, - src/stdio/common/vsprintf.cxx, - src/stdio/device/kerndiag.cxx, src/stdio/device/sim.cxx, - src/stdio/device/strngdev.cxx, src/stdio/output/fputc.cxx, - src/stdio/output/fputs.cxx, src/stdio/output/puts.cxx, - src/stdio/output/vfnprintf.cxx, src/support/tsd.cxx: - Modified to support buffered reads including renaming - _EccInternalFileStruct to __EccStdioStream which is what affects - most of these files - * src/include/file_if.inl, src/stdio/common/file_if.cxx: added for - the above reason - * src/stdio/common/sscanf.cxx, src/stdio/input/vfscanf.cxx, - src/stdio/input/Makefile.am: added to provide sscanf() functionality - * include/ctype.h, include/stdio.h, include/stdlib.h, - include/string.h, include/eccconf/libc.h, src/ctype/ctype.cxx, - src/stdlib/stdlib.cxx, src/string/strcoll.cxx, - src/stdio/common/stdio.cxx: - rename *_INLINES macros with prefix CYG rather than ECC - * include/errno.h, src/errno/errno.cxx, src/errno/strerror.cxx: - rename ErrNo to _ErrNo and add EAGAIN and EWOULDBLOCK error codes - * configure.in, Makefile.am, src/stdio/Makefile.am, - src/stdio/input/Makefile.am: add support for building - file_if.cxx sscanf.cxx and vfscanf.cxx - * src/stdio/Makefile.in, src/stdio/common/Makefile.in, - src/stdio/input/Makefile.in, configure, Makefile.in: regenerated - -Tue Mar 24 19:51:40 1998 Jonathan Larmour - - * src/time/clockfn.cxx, src/time/clock.cxx: - Renamed clock.cxx to clockfn.cxx (preserving CVS history) - * Makefile.am, src/time/Makefile.am: updated to reflect name change - * Makefile.in, src/time/Makefile.in: regenerated - -Tue Mar 24 16:28:06 1998 Jonathan Larmour - - * include/ctype.inl: Swap around definitions to get right order so - inlining works - -Tue Mar 24 14:43:05 1998 Jonathan Larmour - - * include/ctype.h, include/stdio.h, include/stdlib.h, include/string.h: - modify to only conditionally include inlines - * src/ctype/ctype.cxx, src/stdio/common/stdio.cxx, - src/stdlib/stdlib.cxx, src/string/strcoll.cxx, - src/ctype/Makefile.am: Add to provide real linkable alternatives - to inline functions - * Makefile.am, configure.in, src/Makefile.am, - src/stdio/common/Makefile.am, src/stdlib/Makefile.am, - src/string/Makefile.am: modified to support previous additions - * include/eccconf/libc.h: redefine inline macro to add extern inline, - and add conditional defines for inline functions. Also rename - space vs. speed macro to have CYG instead of ECC prefix - * include/stdio.inl: fix comment typo - * src/stdlib/qsort.cxx: fix to define inline functions properly - * src/string/memchr.cxx, src/string/memcmp.cxx, src/string/memcpy.cxx, - src/string/memset.cxx, src/string/strcat.cxx, src/string/strchr.cxx, - src/string/strcmp.cxx, src/string/strcpy.cxx, src/string/strlen.cxx, - src/string/strncat.cxx, src/string/strncmp.cxx, - src/string/strncpy.cxx - * Makefile.in, configure, src/Makefile.in, src/ctype/Makefile.in, - src/stdio/common/Makefile.in, src/stdlib/Makefile.in, - src/string/Makefile.in: regenerate - - -Mon Mar 23 19:19:49 1998 Jonathan Larmour - - * src/stdlib/_exit.cxx: added to support temporary _exit - * include/stdlib.h, include/stdlib.inl: added support for _exit and - added abs(), labs(), div() and ldiv() functions - * src/include/file_if.hxx: added support for _exit kludge - * src/stdlib/qsort.cxx: Added Berkeley copyright message - * src/time/clock.cxx: Include correct kernel config header as - CYG_CONFIGURATION rather than - * Makefile.am src/stdlib/Makefile.am: added support for _exit - * Makefile.in, src/stdlib/Makefile.in: regenerated - -Mon Mar 23 14:41:07 1998 Jonathan Larmour - - * Replace ECCPKG_ANSI_LIBC with CYGPKG_ANSI_LIBC in all source files - -Mon Mar 23 14:28:44 1998 Jonathan Larmour - - * include/string.inl: add file to provide strcoll() - * include/string.h: include string.inl - * ctype.h: include ctype.inl (oops!) - * include/stdlib.h: include stdlib.inl (oops!) - -Mon Mar 23 13:30:38 1998 Jonathan Larmour - - * include/ctype.h, include/ctype.inl: added to provide ANSI ctype - functionality - * include/stdlib.h, include/stdlib.inl, src/include/stdlibbsp.hxx, - src/stdlib/Makefile.am, src/stdlib/bsearch.cxx, - src/stdlib/qsort.cxx, src/stdlib/rand.cxx, src/stdlib/srand.cxx, - src/stdlib/strtol.cxx, src/stdlib/strtoul.cxx: Added to provide - many stdlib functions - * src/include/tsd.hxx: modified to support rand() random number - seed, and added some comments - * configure.in, Makefile.am, src/Makefile.am: modified to support - addition of above new sources - * include/eccconf/libc.h: Add extra helpful comments, and #include - kernel config file - * src/time/clock.cxx: #include clock.inl and fix to call - get_resolution() properly now - * Makefile.in, configure, src/Makefile.in, src/errno/Makefile.in, - src/stdio/Makefile.in, src/stdio/common/Makefile.in, - src/stdio/device/Makefile.in, src/stdio/output/Makefile.in, - src/stdlib/Makefile.in, src/strings/Makefile.in, - src/support/Makefile.in, src/time/Makefile.in, - tests/Makefile.in: regenerated - - -Sun Mar 22 21:29:25 1998 Jonathan Larmour - - * include/time.h, src/include/timesupp.hxx, src/time/clock.cxx, - src/time/Makefile.am: added to provide clock() function - * src/Makefile.am: modified to try to build in src/time directory - * include/eccconf/libc.h: added and is now the main configuration - file for this package - * acconfig.h, include/libcconf.h.in, include/stamp-h.in: removed - due to usage of libc.h above instead - * Almost all *.h, *.hxx and *.cxx: replaced LIBC_CONFIG_HEADER - defined include with simple - * configure.in: remove AM_CONFIG_HEADER of libcconf.h and - LIBC_CONFIG_HEADER definition. Also remove usage of builtin - memcpy() etc. from gcc, and generate src/time/Makefile - * Makefile.am: link in src/time/clock.o - * src/include/file_if.hxx, src/include/sim.hxx: use config header - to decide whether C library is to be used - * Makefile.in, aclocal.m4, configure, src/Makefile.in: regenerated - -Fri Mar 20 18:08:10 1998 Jonathan Larmour - - * src/string/strxfrm.cxx: Fixed bug with ignoring terminating NULL - -1998-03-20 Chris Tarpy - - * configure: - regenerated - * Makefile.am: - Support added for libc testcases - * Makefile.in: regenerated - * configure.in: set c compiler, descend test dir - * tests/Makefile.in: added - * tests/Makefile.am: added - * tests/tcdiag.cxx : added - - -Thu Mar 19 11:41:56 1998 Jonathan Larmour - - * Initial check-in of everything - -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== diff --git a/packages/language/c/libc/current/cdl/libc.cdl b/packages/language/c/libc/current/cdl/libc.cdl deleted file mode 100644 --- a/packages/language/c/libc/current/cdl/libc.cdl +++ /dev/null @@ -1,344 +0,0 @@ -# ==================================================================== -# -# libc.cdl -# -# C library configuration data -# -# ==================================================================== -#####COPYRIGHTBEGIN#### -# -# ------------------------------------------- -# The contents of this file are subject to the Red Hat eCos Public License -# Version 1.1 (the "License"); you may not use this file except in -# compliance with the License. You may obtain a copy of the License at -# http://www.redhat.com/ -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -# License for the specific language governing rights and limitations under -# the License. -# -# The Original Code is eCos - Embedded Configurable Operating System, -# released September 30, 1998. -# -# The Initial Developer of the Original Code is Red Hat. -# Portions created by Red Hat are -# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -# All Rights Reserved. -# ------------------------------------------- -# -#####COPYRIGHTEND#### -# ==================================================================== -######DESCRIPTIONBEGIN#### -# -# Author(s): bartv -# Original data: jlarmour -# Contributors: -# Date: 1999-06-13 -# -#####DESCRIPTIONEND#### -# -# ==================================================================== - -cdl_package CYGPKG_LIBC { - display "C library" - description " - This package enables compatibility with the ISO - C standard - ISO/IEC 9899:1990. This allows the - user application to use well known standard - C library functions, and in eCos starts a - thread to invoke the user function main()" - doc redirect/the-iso-standard-c-and-math-libraries.html - compile ctype/isalnum.cxx ctype/isalpha.cxx ctype/iscntrl.cxx \ - ctype/isdigit.cxx ctype/isgraph.cxx ctype/islower.cxx \ - ctype/isprint.cxx ctype/ispunct.cxx ctype/isspace.cxx \ - ctype/isupper.cxx ctype/isxdigit.cxx ctype/tolower.cxx \ - ctype/toupper.cxx \ - \ - errno/errno.cxx \ - \ - i18n/locale.cxx \ - \ - setjmp/longjmp.cxx \ - \ - signal/raise.cxx signal/siginit.cxx \ - signal/signal.cxx \ - \ - stdio/common/fclose.cxx stdio/common/fflush.cxx \ - stdio/common/fopen.cxx stdio/common/freopen.cxx \ - stdio/common/setvbuf.cxx stdio/common/snprintf.cxx \ - stdio/common/sprintf.cxx stdio/common/sscanf.cxx \ - stdio/common/stderr.cxx stdio/common/stdin.cxx \ - stdio/common/stdiofiles.cxx \ - stdio/common/stdioinlines.cxx stdio/common/stdiosupp.cxx \ - stdio/common/stdout.cxx stdio/common/stream.cxx \ - stdio/common/streambuf.cxx stdio/common/ungetc.cxx \ - stdio/common/vsnprintf.cxx stdio/common/vsscanf.cxx \ - stdio/input/fgetc.cxx stdio/input/fgets.cxx \ - stdio/input/fread.cxx stdio/input/fscanf.cxx \ - stdio/input/gets.cxx stdio/input/scanf.cxx \ - stdio/input/vfscanf.cxx stdio/output/fnprintf.cxx \ - stdio/output/fprintf.cxx stdio/output/fputc.cxx \ - stdio/output/fputs.cxx stdio/output/fwrite.cxx \ - stdio/output/printf.cxx stdio/output/vfnprintf.cxx \ - \ - stdlib/_exit.cxx stdlib/abort.cxx stdlib/abs.cxx \ - stdlib/atexit.cxx stdlib/atof.cxx stdlib/atoi.cxx \ - stdlib/atol.cxx stdlib/bsearch.cxx stdlib/div.cxx \ - stdlib/exit.cxx stdlib/getenv.cxx stdlib/itoa.cxx \ - stdlib/labs.cxx stdlib/ldiv.cxx stdlib/malloc.cxx \ - stdlib/qsort.cxx stdlib/rand.cxx stdlib/strtod.cxx \ - stdlib/strtol.cxx stdlib/strtoul.cxx stdlib/system.cxx \ - \ - string/memchr.cxx string/memcmp.cxx string/memmove.cxx \ - string/strcat.cxx string/strchr.cxx string/strcmp.cxx \ - string/strcoll.cxx string/strcpy.cxx string/strcspn.cxx \ - string/strlen.cxx string/strncat.cxx string/strncmp.cxx \ - string/strncpy.cxx string/strpbrk.cxx string/strrchr.cxx \ - string/strspn.cxx string/strstr.cxx string/strsuppt.cxx \ - string/strtok.cxx string/strxfrm.cxx \ - \ - support/cstartup.cxx support/environ.cxx \ - support/invokemain.cxx support/main.cxx \ - support/mainthread.cxx \ - \ - time/asctime.cxx time/asctime_r.cxx time/clock.cxx \ - time/ctime.cxx time/ctime_r.cxx time/difftime.cxx \ - time/gmtime.cxx time/gmtime_r.cxx time/localtime.cxx \ - time/localtime_r.cxx time/mktime.cxx time/settime.cxx \ - time/strftime.cxx time/time.cxx time/timeutil.cxx - - - cdl_option CYGIMP_LIBC_CTYPE_INLINES { - display "Inline versions of functions" - default_value 1 - description " - This option chooses whether the simple character - classification and conversion functions (e.g. - isupper(), isalpha(), toupper(), etc.) - from are available as inline - functions. This may improve performance and as - the functions are small, may even improve code - size." - } - - # STRING CONFIGURATION OPTIONS - cdl_component CYGPKG_LIBC_STRING { - display "String functions" - flavor none - description " - Options associated with the standard string functions" - - script string.cdl - } - - # SETJMP CONFIGURATION OPTIONS - cdl_option CYGIMP_LIBC_SETJMP_INLINES { - display "Inline version of the longjmp() function" - default_value 1 - description " - This option chooses whether the longjmp() function - is available as an inline function. This may - improve performance, and as the function is small - may even improve code size. " - } - - # STDLIB CONFIGURATION OPTIONS - cdl_component CYGPKG_LIBC_STDLIB { - display "Standard utility functions" - flavor none - description " - Options associated with the standard utility functions in " - - script stdlib.cdl - } - - # STDIO CONFIGURATION OPTIONS - cdl_component CYGPKG_LIBC_STDIO { - display "Standard input/output functions" - flavor bool - requires CYGPKG_IO - requires CYGPKG_IO_SERIAL_HALDIAG - default_value 1 - description " - This enables support for standard I/O functions from ." - - script stdio.cdl - } - - - # INTERNATIONALIZATION AND LOCALIZATION OPTIONS - cdl_option CYGNUM_LIBC_MAX_LOCALE_NAME_SIZE { - display "Size of locale name strings" - flavor data - legal_values 2 to 0x7fffffff - default_value 16 - description " - This option controls the maximum size of - locale names and is used, among other things - to instantiate a static string used - as a return value from the - setlocale() function. When requesting the - current locale settings with LC_ALL, a string - must be constructed to contain this data, rather - than just returning a constant string. This - string data is stored in the static string. - This depends on the length of locale names, - hence this option. If just the C locale is - present, this option can be set as low as 2." - } - - # SIGNAL CONFIGURATION OPTIONS - cdl_component CYGPKG_LIBC_SIGNALS { - display "Signals" - flavor bool - default_value 1 - description " - This component controls signal functionality, - as implemented in ISO C chapter 7.7 with the - signal() and raise() functions. As well as - allowing a program to send itself signals, it is - also possible to cause hardware exceptions to - be signalled to the program in a similar way." - - script signals.cdl - } - - - # STARTUP OPTIONS - cdl_component CYGPKG_LIBC_STARTUP { - display "ISO C startup/termination" - flavor none - doc redirect/c-library-startup.html - description " - This component manages the control of the - environment (in the general sense) that the - C library provides for use for full ISO C - compatibility, including a main() entry point - supplied with arguments and an environment - (as retrievable by the getenv() function). - It also includes at the other end of things, - what happens when main() returns or exit() is - called." - - script startup.cdl - } - - # ERRNO OPTIONS - cdl_component CYGPKG_LIBC_ERRNO { - display "errno" - flavor none - description " - This package controls the behaviour of the - errno variable (or more strictly, expression) - from ." - - cdl_option CYGSEM_LIBC_PER_THREAD_ERRNO { - display "Per-thread errno" - requires CYGVAR_KERNEL_THREADS_DATA - default_value 1 - description " - This option controls whether the standard error - code reporting variable errno is a per-thread - variable, rather than global. Enabling this - option will use one slot of kernel per-thread data. - You should ensure you have enough slots configured - for all your per-thread data." - } - - cdl_option CYGNUM_LIBC_ERRNO_TRACE_LEVEL { - display "Tracing level" - flavor data - legal_values 0 to 1 - default_value 0 - description " - Trace verbosity level for debugging the errno - retrieval mechanism in errno.cxx. Increase this - value to get additional trace output." - } - } - - # TIME OPTIONS - cdl_component CYGPKG_LIBC_TIME { - display "Date/time" - flavor none - description " - Options for date and time related functions from " - - script time.cdl - } - - define_proc { - puts $::cdl_header "/***** proc output start *****/" - puts $::cdl_header "#include " - - # MISCELLANEOUS DEFINES - # These are not really adjustable by the user. Do not change these unless - # you know what you are doing! - - # How to define inline functions - puts $::cdl_header "#define CYGPRI_LIBC_INLINE extern __inline__" - - # The following isn't supported yet - I'm leaving it for now - puts $::cdl_header "#ifdef __GNUC__xxxxxx" - puts $::cdl_header "# define CYGPRI_LIBC_ATTRIB_FORMAT_STRFTIME __attribute__ ((format (strftime, 3)))" - puts $::cdl_header "#else" - puts $::cdl_header "# define CYGPRI_LIBC_ATTRIB_FORMAT_STRFTIME" - puts $::cdl_header "#endif" - - # The following are only for compatibility, and will - # eventually be removed once they are eliminated entirely from - # the code base - puts $::cdl_header "#define CYGPRI_LIBC_WEAK CYGBLD_ATTRIB_WEAK" - - # How to define aliases - puts $::cdl_header "#define CYGPRI_LIBC_ALIAS(__symbol__) __attribute__ ((alias (__symbol__)))" - - puts $::cdl_header "# define CYGPRI_LIBC_WEAK_ALIAS(__symbol__) CYGBLD_ATTRIB_WEAK CYGPRI_LIBC_ALIAS(__symbol__)" - - # How to define functions that don't return - puts $::cdl_header "#define CYGPRI_LIBC_NORETURN CYGBLD_ATTRIB_NORET" - puts $::cdl_header "/****** proc output end ******/" - } - - cdl_component CYGPKG_LIBC_OPTIONS { - display "C library build options" - flavor none - description " - Package specific build options including control over - compiler flags used only in building this package, - and details of which tests are built." - - - cdl_option CYGPKG_LIBC_CFLAGS_ADD { - display "Additional compiler flags" - flavor data - no_define - default_value { "" } - description " - This option modifies the set of compiler flags for - building the C library. These flags are used in addition - to the set of global flags." - } - - cdl_option CYGPKG_LIBC_CFLAGS_REMOVE { - display "Suppressed compiler flags" - flavor data - no_define - default_value { "" } - description " - This option modifies the set of compiler flags for - building the C library. These flags are removed from - the set of global flags if present." - } - - cdl_option CYGPKG_LIBC_TESTS { - display "C library tests" - flavor data - no_define - calculated { "tests/ctype/ctype tests/i18n/setlocale tests/setjmp/setjmp tests/signal/signal1 tests/signal/signal2 tests/stdio/sprintf1 tests/stdio/sprintf2 tests/stdio/sscanf tests/stdio/stdiooutput tests/stdlib/abs tests/stdlib/atexit tests/stdlib/atoi tests/stdlib/atol tests/stdlib/bsearch tests/stdlib/div tests/stdlib/getenv tests/stdlib/labs tests/stdlib/ldiv tests/stdlib/qsort tests/stdlib/malloc1 tests/stdlib/malloc2 tests/stdlib/malloc3 tests/stdlib/rand1 tests/stdlib/rand2 tests/stdlib/rand3 tests/stdlib/rand4 tests/stdlib/realloc tests/stdlib/srand tests/stdlib/strtol tests/stdlib/strtoul tests/string/memchr tests/string/memcmp1 tests/string/memcmp2 tests/string/memcpy1 tests/string/memcpy2 tests/string/memmove1 tests/string/memmove2 tests/string/memset tests/string/strcat1 tests/string/strcat2 tests/string/strchr tests/string/strcmp1 tests/string/strcmp2 tests/string/strcoll1 tests/string/strcoll2 tests/string/strcpy1 tests/string/strcpy2 tests/string/strcspn tests/string/strcspn tests/string/strlen tests/string/strncat1 tests/string/strncat2 tests/string/strncpy1 tests/string/strncpy2 tests/string/strpbrk tests/string/strrchr tests/string/strspn tests/string/strstr tests/string/strtok tests/string/strxfrm1 tests/string/strxfrm2 tests/time/asctime tests/time/clock tests/time/ctime tests/time/gmtime tests/time/localtime tests/time/mktime tests/time/strftime tests/time/time" } - description " - This option specifies the set of tests for the C library." - } - } -} diff --git a/packages/language/c/libc/current/cdl/signals.cdl b/packages/language/c/libc/current/cdl/signals.cdl deleted file mode 100644 --- a/packages/language/c/libc/current/cdl/signals.cdl +++ /dev/null @@ -1,195 +0,0 @@ -# ==================================================================== -# -# signals.cdl -# -# C library signal related configuration data -# -# ==================================================================== -#####COPYRIGHTBEGIN#### -# -# ------------------------------------------- -# The contents of this file are subject to the Red Hat eCos Public License -# Version 1.1 (the "License"); you may not use this file except in -# compliance with the License. You may obtain a copy of the License at -# http://www.redhat.com/ -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -# License for the specific language governing rights and limitations under -# the License. -# -# The Original Code is eCos - Embedded Configurable Operating System, -# released September 30, 1998. -# -# The Initial Developer of the Original Code is Red Hat. -# Portions created by Red Hat are -# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -# All Rights Reserved. -# ------------------------------------------- -# -#####COPYRIGHTEND#### -# ==================================================================== -######DESCRIPTIONBEGIN#### -# -# Author(s): jskov -# Original data: jlarmour -# Contributors: -# Date: 1999-07-06 -# -#####DESCRIPTIONEND#### -# -# ==================================================================== - - -cdl_option CYGSEM_LIBC_SIGNALS_THREAD_SAFE { - display "Thread safe signals" - requires CYGPKG_KERNEL - default_value 1 - description " - Because signal handlers are global, and not - thread-specific (as mandated by POSIX 1003.1) - it is possible for multiple threads to clash - and corrupt data if setting the same signal - handler at the same time. With this option - enabled, a kernel mutex will be used to protect - the shared data." -} - -cdl_component CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS { - display "Hardware exceptions cause signals" - flavor bool - requires CYGSEM_KERNEL_EXCEPTIONS_GLOBAL - requires CYGSEM_KERNEL_EXCEPTIONS_DECODE - default_value 0 - description " - This causes hardware exceptions like - arithmetic exceptions (e.g. divide by zero) - or bad memory accesses to be passed through as - signals. It is thus possible for a program to - handle these exceptions in a generic way using - the appropriate signal handlers. The details of - exactly which exceptions are passed through - under what circumstances depend on the - underlying HAL implementation. Consequently it - must be remembered that signal handlers cannot - be guaranteed to be invoked in the expected - circumstances if you do not know about the - underlying HAL implementation - it is possible - that the architecture is unable to detect that - exception." - - cdl_option CYGSEM_LIBC_SIGNALS_CHAIN_HWEXCEPTIONS { - display "Chain old exception handlers" - requires !CYGPKG_HAL_I386_LINUX - default_value 1 - description " - When hardware exceptions are generated, it - is possible to chain into the old kernel exception - handler before calling any registered signal - handler. If this is not required, disable this - option and only the signal handler will be - called when this exception occurs. Disabling - this option will also save some space and code - usage." - } -} - -cdl_component CYGPKG_LIBC_SIGNALS_INLINE { - display "Inline versions of functions" - flavor none - description " - Some functions can be made inline instead of - being function calls. These can be set here." - - cdl_option CYGIMP_LIBC_SIGNALS_RAISE_INLINE { - display "raise()" - default_value 1 - description " - Enabling this option makes raise() an inline function." - } - - cdl_option CYGIMP_LIBC_SIGNALS_SIGNAL_INLINE { - display "signal()" - default_value 1 - description " - Enabling this option makes signal() an inline function." - } -} - -cdl_component CYGPKG_LIBC_SIGNALS_ERROR_HANDLING { - display "Error handling" - flavor none - description " - You may or may not want errno to be set by - certain functions. Not using errno could save - both space, code, and avoid worrying about - interactions between multiple threads when - setting it." - - cdl_option CYGSEM_LIBC_SIGNALS_BAD_SIGNAL_FATAL { - display "Bad signal fatal" - requires CYGDBG_USE_ASSERTS - default_value 0 - description " - Enabling this option will cause an assertion - failure if the signal handling code is - passed a bad signal. Otherwise an error will - be returned, or in the case of a - hardware-generated exception it will be silently - ignored." - } - - cdl_option CYGSEM_LIBC_SIGNALS_RAISE_SETS_ERRNO { - display "raise() sets errno" - default_value 1 - description " - You may or may not want errno to be set by - raise() on error conditions. Not using errno - could save both space, code, and avoid worrying - about interactions between multiple threads when - setting it. Strictly ISO C does not mandate - that errno be set by raise()." - } - - cdl_option CYGSEM_LIBC_SIGNALS_SIGNAL_SETS_ERRNO { - display "signal() sets errno" - default_value 1 - description " - You may or may not want errno to be set by - signal() on error conditions. Not using errno - could save both space, code, and avoid worrying - about interactions between multiple threads when - setting it. Strictly ISO C mandates - that errno be set by signal()." - } -} - -cdl_component CYGPKG_LIBC_SIGNALS_TRACING { - display "Tracing" - flavor none - description " - These options control the trace output for the C - library internal signal implementation." - - cdl_option CYGNUM_LIBC_SIGNALS_RAISE_TRACE_LEVEL { - display "Default trace level for raise()" - flavor data - legal_values 0 to 1 - default_value 0 - description " - This gives the default tracing level for the - raise() function. Higher numbers are more - verbose." - } - - cdl_option CYGNUM_LIBC_SIGNALS_HWHANDLER_TRACE_LEVEL { - display "Default hardware exception handler trace level" - flavor data - legal_values 0 to 1 - default_value 0 - description " - This gives the default tracing level for the - hardware exception handler function (if enabled). - Higher numbers are more verbose." - } -} diff --git a/packages/language/c/libc/current/cdl/startup.cdl b/packages/language/c/libc/current/cdl/startup.cdl deleted file mode 100644 --- a/packages/language/c/libc/current/cdl/startup.cdl +++ /dev/null @@ -1,224 +0,0 @@ -# ==================================================================== -# -# startup.cdl -# -# C library startup related configuration data -# -# ==================================================================== -#####COPYRIGHTBEGIN#### -# -# ------------------------------------------- -# The contents of this file are subject to the Red Hat eCos Public License -# Version 1.1 (the "License"); you may not use this file except in -# compliance with the License. You may obtain a copy of the License at -# http://www.redhat.com/ -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -# License for the specific language governing rights and limitations under -# the License. -# -# The Original Code is eCos - Embedded Configurable Operating System, -# released September 30, 1998. -# -# The Initial Developer of the Original Code is Red Hat. -# Portions created by Red Hat are -# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -# All Rights Reserved. -# ------------------------------------------- -# -#####COPYRIGHTEND#### -# ==================================================================== -######DESCRIPTIONBEGIN#### -# -# Author(s): jskov -# Original data: jlarmour -# Contributors: -# Date: 1999-07-06 -# -#####DESCRIPTIONEND#### -# -# ==================================================================== - -cdl_option CYGDAT_LIBC_ARGUMENTS { - display "Arguments to main()" - flavor data - default_value {"{\"\", NULL}"} - description " - This option allows the setting of the arguments - to the main function. This only has any effect - when cyg_iso_c_start() is used to start the - ISO C compatibility. This will automatically - invoke main() in an ISO C compatible fashion. - This option is in fact used as argv, and so is - an n-tuple of string constants. The final - entry must be NULL. Conventionally if argv\[0\] - is supplied, it is used to inform the program - of its name." -} - -cdl_component CYGSEM_LIBC_STARTUP_MAIN_THREAD { - display "main() invoked as thread" - requires CYGPKG_KERNEL - flavor bool - default_value 1 - description " - It is normally expected (e.g. in a POSIX 1003.1 - environment) that main() is run in the context - of a thread just like any other thread. If this - option is disabled then main() will instead be - called in the context of the initialization - routines, without the scheduler running and - using the interrupt stack. This means that - any functions that may require interactions - with a running kernel will not work (including - libc functions, if configured to be thread safe - for example), so you should restrict yourself - to only calling fully re-entrant functions from - within main() in this case." - - cdl_component CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM { - display "System provides stack for main()'s thread" - description " - This option controls whether the stack of - main()'s thread is provided by the application or - provided by the system. When disabled, the - application must declare a pointer variable - cyg_libc_main_stack which is a pointer to an - appropriately aligned region of memory. The - application must also declare a variable of - type `int' called cyg_libc_main_stack_size - which contains the size of the stack in bytes. - This must be a multiple of 8." - flavor bool - default_value 1 - - cdl_option CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE { - display "main()'s default thread stack size" - flavor data - legal_values 16 to 0x7fffffff - default_value 8192 - description " - With an eCos kernel, when the cyg_iso_c_start() - function is used to invoke the user-supplied - main() function in an ISO C compatible fashion, - a separate thread is created to call main(). - This option controls the size of that thread's - stack, which is allocated in the BSS. It - must be a multiple of 8. Note, a low number - here may be overriden by the HAL if there is - a minimum requirement to process interrupts - etc." - } - } - - cdl_option CYGNUM_LIBC_MAIN_THREAD_PRIORITY { - display "Priority of main()'s thread" - description " - This option is used to provide the thread - priority which main()'s thread runs at. Be - sure to check that this number is appropriate - for the kernel scheduler chosen. Different - kernel schedulers impose different restrictions - on the usable priorities." - flavor data - legal_values 0 to 0x7fffffff - default_value 10 - } -} - -cdl_component CYGFUN_LIBC_ATEXIT { - display "Include atexit() function" - flavor bool - default_value 1 - description " - This option enables the use of the atexit() - function, and ensure that the atexit handlers - are invoked from within exit() as defined in - the ISO C standard." - - cdl_option CYGNUM_LIBC_ATEXIT_HANDLERS { - display "Number of functions atexit() supports" - flavor data - legal_values 1 to 0x7fffffff - default_value 32 - description " - This option sets the number of functions - that atexit() has room for. In other words, - the number of separate atexit() calls that - can be made before calling exit() or returning - from main() ( in an environment controlled by - cyg_iso_c_start() ). For strict compliance - with the ISO C standard this should be at - least 32." - } -} - -cdl_option CYGSEM_LIBC_EXIT_CALLS_FFLUSH { - display "Make exit() call fflush()" - requires CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - default_value 1 - description " - This option will ensure that all output - streams are flushed when exitting using - exit() as prescribed by the ISO C standard." -} - -cdl_option CYGSEM_LIBC_EXIT_STOPS_SYSTEM { - display "_exit() stops all threads" - requires CYGPKG_KERNEL - default_value 0 - description " - If this option is enabled then _exit(), - which is called from exit() which itself is - called on return from main(), stops the eCos - scheduler. For strict POSIX 1003.1 - compatibility this would be the normal - behaviour. To allow the thread to simply - exit, without affecting other threads, simply - disable this option. If there is no eCos - scheduler, then _exit() simply loops - irrespective of the setting of this option." -} - -cdl_component CYGPKG_LIBC_ENVIRONMENT { - display "Provide a system environment" - flavor bool - default_value 1 - description " - This option allows use of the getenv() function - and the global environment pointer - char **environ defined by POSIX 1003.1. - Disabling this saves a small amount of space." - - cdl_option CYGDAT_LIBC_DEFAULT_ENVIRONMENT { - display "Default environment" - flavor data - default_value {"{ NULL }"} - description " - This option allows the setting of the default - contents of the environment. This is in fact - the contents of the global environment pointer - char **environ defined by POSIX 1003.1. Strings - must be of the form NAME=VALUE, and the final - entry must be NULL." - } -} - -cdl_option CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS { - display "Invoke default static constructors" - requires CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG - requires CYGSEM_LIBC_STARTUP_MAIN_THREAD - default_value 0 - description " - This option causes the C library to call - static constructors with default priority - from within the context of the main() thread, - working with the co-operation of the HAL. - This may be needed for environments that - expect static constructors to be run in a - thread context. Note that this uses an object - with priority 65534. Therefore do not use - priority 65534 for any other static objects - with this option enabled." -} diff --git a/packages/language/c/libc/current/cdl/stdio.cdl b/packages/language/c/libc/current/cdl/stdio.cdl deleted file mode 100644 --- a/packages/language/c/libc/current/cdl/stdio.cdl +++ /dev/null @@ -1,265 +0,0 @@ -# ==================================================================== -# -# stdio.cdl -# -# C library stdio related configuration data -# -# ==================================================================== -#####COPYRIGHTBEGIN#### -# -# ------------------------------------------- -# The contents of this file are subject to the Red Hat eCos Public License -# Version 1.1 (the "License"); you may not use this file except in -# compliance with the License. You may obtain a copy of the License at -# http://www.redhat.com/ -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -# License for the specific language governing rights and limitations under -# the License. -# -# The Original Code is eCos - Embedded Configurable Operating System, -# released September 30, 1998. -# -# The Initial Developer of the Original Code is Red Hat. -# Portions created by Red Hat are -# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -# All Rights Reserved. -# ------------------------------------------- -# -#####COPYRIGHTEND#### -# ==================================================================== -######DESCRIPTIONBEGIN#### -# -# Author(s): jskov -# Original data: jlarmour -# Contributors: -# Date: 1999-07-06 -# -#####DESCRIPTIONEND#### -# -# ==================================================================== - - -cdl_option CYGIMP_LIBC_STDIO_INLINES { - display "Inline versions of functions" - default_value 1 - description " - This option chooses whether some of the - particularly simple functions from - are available as inline - functions. This may improve performance, and as - the functions are small, may even improve code - size." -} - -cdl_option FOPEN_MAX { - display "Permitted number of open files" - flavor data - legal_values 3 to 0x7fffffff - default_value 8 - description " - This option controls the guaranteed minimum - number of simultaneously open files. The ISO - C standard requires it to be defined (para - 7.9.1), and if strictly compliant, it must be - at least 8 (para 7.9.3). In practice it can be - as low as 3 - for stdin, stdout and stderr." -} - -cdl_option FILENAME_MAX { - display "Maximum length of filename" - flavor data - legal_values 1 to 0x7fffffff - default_value 16 - description " - This option defines the maximum allowed size of - a filename in characters. The ISO C standard - requires it to be defined (para 7.9.1)." -} - -cdl_option L_tmpnam { - display "Maximum length of filenames for temporary files" - flavor data - legal_values 1 to 0x7fffffff - default_value 16 - description " - This option defines the maximum allowed size of - filenames for temporary files as generated by - tmpnam(). It is measured in characters, and the - ISO C standard requires it to be defined (para - 7.9.1)." -} - -cdl_option TMP_MAX { - display "Unique file names generated by tmpnam()" - flavor data - legal_values 0 to 0x7fffffff - default_value 0 - description " - This option defines the minimum number of - unique file names generated by tmpnam(). The - ISO C standard requires it to be defined (para - 7.9.1)." -} - -cdl_component CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO { - display "Buffered I/O" - flavor bool - default_value 1 - description " - This option controls whether input/output - through the functions is buffered. - This may save some memory per file. It - is equivalent to putting every file into - non-buffered mode (_IONBF) through setvbuf(), - except now it can never be altered back to - buffered mode. Disabling buffering is strictly - non-compliant with the ISO C standard." - - cdl_option CYGNUM_LIBC_STDIO_BUFSIZE { - display "Default buffer size" - flavor data - legal_values 1 to 0x7fffffff - default_value 256 - description " - This option defines the default size of buffer - used with calls to setbuf(), and is the default - size for buffered streams that have not had - either setbuf() or setvbuf() invoked on them. - It is exactly equivalent to the standard - constant BUFSIZ, except that it is 0 if - CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO is disabled. - The ISO C standard requires this to be defined - (para 7.9.1), and says it must be at least 256 - (para 7.9.2)." - } - - cdl_option CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF { - display "setbuf()/setvbuf() uses malloc()" - requires CYGPKG_LIBC_MALLOC - default_value 0 - description " - This option controls whether I/O buffers are - implemented dynamically within the stdio - implementation. Otherwise they will be static, - and cannot be changed by setbuf()/setvbuf(). If - they are static (i.e. this option is disabled), - any attempt to use an arbitrary buffer size, or - to pass a user-supplied buffer to setbuf() or - setvbuf() will fail - the buffer is implemented - internally as a static array of taking the size - of the configuration option BUFSIZ. The only - exception is if a user buffer is not supplied, - and the buffer size requested is less than - BUFSIZ. In this case, the buffer will - be configured to only use that amount of - buffering. However the unused memory left over - will NOT be freed. If this option is enabled, - then CYGPKG_LIBC_MALLOC must also - be enabled. Either setting can be considered to - be compliant with the ISO C standard." - } -} -# Define BUFSIZ with same value as ..._BUFSIZE or 0 -cdl_option BUFSIZ { - display "Default buffer size (BUFSIZ)" - flavor data - calculated CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO \ - ? "CYGNUM_LIBC_STDIO_BUFSIZE" : 0 -} - -cdl_option CYGFUN_LIBC_STDIO_ungetc { - display "Support for ungetc()" - default_value 1 - description " - This option controls whether ungetc() is - supported. If not, then some space can be - saved, and speed is improved. Note that you - MUST have this defined if you want to use the - scanf() family of functions." -} - -cdl_option CYGPKG_LIBC_STDIO_OPEN { - display "Dynamic opening/closing of files" - requires CYGPKG_LIBC_MALLOC - default_value 1 - description " - fopen() and fclose() use dynamic memory - allocation routines to allocate memory for - new FILE structure pointers. This option, - along with CYGPKG_LIBC_MALLOC, should be - enabled to use - fopen() and fclose(). If disabled, only the - default console streams - stdin, stdout and - stderr - will be available." -} - -cdl_option CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE { - display "Default console device" - flavor data - default_value {"\"/dev/ttydiag\""} - description " - This option allows you to choose the - default console device. In the current - implementation, all these devices begin - with the prefix /dev/ and are followed by - the name of a device. The name of the device - depends on the device drivers you have - configured in your system. For example, - /dev/ttydiag could be the HAL diagnostic output - pseudo-device, or /dev/tty0 could be your - first serial driver, depending on your - configuration." -} - -cdl_component CYGPKG_LIBC_STDIO_FLOATING_POINT { - display "Floating point support" - flavor none - description " - This component allows floating point support - to be enabled in certain standard I/O - functions." - - cdl_option CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT { - display "printf() family" - requires CYGPKG_LIBM - default_value 1 - description " - This option enables the use of floating point - number output in the printf() family (i.e. - printf(), sprintf(), vprintf(), etc.) of - functions. A substantial amount of code space - can be saved if this option is disabled. If it - is disabled then floating point specifiers - (%e, %f, %g) are ignored, and nothing is - output." - } - - cdl_option CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT { - display "scanf() family" - requires CYGPKG_LIBM - requires CYGFUN_LIBC_strtod - default_value 1 - description " - This option enables the use of floating point - number conversion in the scanf() family (i.e. - scanf(), sscanf(), vscanf(), etc.) of - functions. A substantial amount of code space - can be saved if this option is disabled. If it - is disabled then floating point specifiers - (%e, %f, %g) are ignored, and nothing is - converted." - } -} - -cdl_option CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS { - display "Thread safe I/O streams" - requires CYGPKG_KERNEL - default_value 1 - description " - This option controls whether standard I/O streams - are thread-safe. Having this option set allows - the streams to be locked when accessed by - multiple threads simultaneously." -} diff --git a/packages/language/c/libc/current/cdl/stdlib.cdl b/packages/language/c/libc/current/cdl/stdlib.cdl deleted file mode 100644 --- a/packages/language/c/libc/current/cdl/stdlib.cdl +++ /dev/null @@ -1,230 +0,0 @@ -# ==================================================================== -# -# stdlib.cdl -# -# C library stdlib related configuration data -# -# ==================================================================== -#####COPYRIGHTBEGIN#### -# -# ------------------------------------------- -# The contents of this file are subject to the Red Hat eCos Public License -# Version 1.1 (the "License"); you may not use this file except in -# compliance with the License. You may obtain a copy of the License at -# http://www.redhat.com/ -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -# License for the specific language governing rights and limitations under -# the License. -# -# The Original Code is eCos - Embedded Configurable Operating System, -# released September 30, 1998. -# -# The Initial Developer of the Original Code is Red Hat. -# Portions created by Red Hat are -# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -# All Rights Reserved. -# ------------------------------------------- -# -#####COPYRIGHTEND#### -# ==================================================================== -######DESCRIPTIONBEGIN#### -# -# Author(s): jskov -# Original data: jlarmour -# Contributors: -# Date: 1999-07-06 -# -#####DESCRIPTIONEND#### -# -# ==================================================================== - -cdl_option CYGIMP_LIBC_STDLIB_INLINES { - display "Inline versions of functions" - default_value 1 - description " - This option chooses whether some of the - particularly simple standard utility functions - from are available as inline - functions. This may improve performance, and as - the functions are small, may even improve code - size." -} - -cdl_component CYGPKG_LIBC_RAND { - display "Random number generation" - flavor none - description " - These options control the behaviour of the - functions rand(), srand() and rand_r()" - - cdl_option CYGSEM_LIBC_PER_THREAD_RAND { - display "Per-thread random seed" - requires CYGVAR_KERNEL_THREADS_DATA - default_value 0 - description " - This option controls whether the pseudo-random - number generation functions rand() and srand() - have their state recorded on a per-thread - basis rather than global. If this option is - disabled, some per-thread space can be saved. - Note there is also a POSIX-standard rand_r() - function to achieve a similar effect with user - support. Enabling this option will use one slot - of kernel per-thread data. You should ensure you - have enough slots configured for all your - per-thread data." - } - - cdl_option CYGNUM_LIBC_RAND_SEED { - display "Random number seed" - flavor data - legal_values 0 to 0x7fffffff - default_value 1 - description " - This selects the initial random number seed for - rand()'s pseudo-random number generator. For - strict ISO standard compliance, this should be 1, - as per section 7.10.2.2 of the standard." - } - - cdl_option CYGNUM_LIBC_RAND_TRACE_LEVEL { - display "Tracing level" - flavor data - legal_values 0 to 1 - default_value 0 - description " - Trace verbosity level for debugging the rand(), - srand() and rand_r() functions. Increase this - value to get additional trace output." - } - - cdl_interface CYGINT_LIBC_RAND { - requires 1 == CYGINT_LIBC_RAND - } - - cdl_option CYGIMP_LIBC_RAND_SIMPLEST { - display "Simplest implementation" - flavor bool - default_value 0 - implements CYGINT_LIBC_RAND - description " - This provides a very simple implementation of rand() - that does not perform well with randomness in the - lower significant bits. However it is exceptionally - fast. It uses the sample algorithm from the ISO C - standard itself." - } - - cdl_option CYGIMP_LIBC_RAND_SIMPLE1 { - display "Simple implementation #1" - flavor bool - default_value 1 - implements CYGINT_LIBC_RAND - description " - This provides a very simple implementation of rand() - based on the simplest implementation above. However - it does try to work around the lack of randomness - in the lower significant bits, at the expense of a - little speed." - } - - cdl_option CYGIMP_LIBC_RAND_KNUTH1 { - display "Knuth implementation #1" - flavor bool - default_value 0 - implements CYGINT_LIBC_RAND - description " - This implements a slightly more complex algorithm - published in Donald E. Knuth's Art of Computer - Programming Vol.2 section 3.6 (p.185 in the 3rd ed.). - This produces better random numbers than the - simplest approach but is slower." - } -} - -cdl_component CYGPKG_LIBC_MALLOC { - display "Support for dynamic memory allocation" - flavor bool - requires CYGPKG_KERNEL - default_value 1 - description " - This enables support for dynamic memory - allocation as supplied by the functions malloc(), - free(), calloc() and realloc(). As these - functions are often used, but can have quite an - overhead, disabling them here can ensure they - cannot even be used accidentally when static - allocation is preferred." - - - cdl_option CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE { - display "Size of the dynamic memory pool in bytes" - flavor data - legal_values 32 to 0x7fffffff - default_value 16384 - description " - At this stage, dynamic memory allocation by - malloc() and calloc() must be from a fixed-size, - contiguous memory pool (note here that it is the - pool that is of a fixed size, but malloc() is still - able to allocate variable sized chunks of memory - from it). This option is the size - of that pool, in bytes. Note that not all of - this is available for programs to - use - some is needed for internal information - about memory regions, and some may be lost to - ensure that memory allocation only returns - memory aligned on word (or double word) - boundaries - a very common architecture - constraint." - } - - cdl_option CYGIMP_LIBC_MALLOC_CXX_DELETE_CALLS_FREE { - display "Support for C++ delete operator" - default_value 0 - description " - C++ new and delete operators can call - the C library's malloc() and free() implicitly. - If this is what is required, enable this option. - However, if enabled, the dynamic memory allocation - code is always linked in to the application, - even if it is not explicitly called and new/delete - are not used. - This increases code and data size needlessly." - } -} -cdl_option CYGFUN_LIBC_strtod { - display "Provides strtod() and atof()" - requires CYGPKG_LIBM - default_value 1 - description " - This option allows use of the utility function - strtod() (and consequently atof()) to convert - from string to double precision floating point - numbers. Disabling this option removes the - dependency on the math library package." -} - -cdl_option CYGNUM_LIBC_BSEARCH_TRACE_LEVEL { - display "bsearch() tracing level" - flavor data - legal_values 0 to 1 - default_value 0 - description " - Trace verbosity level for debugging the - binary search function bsearch(). Increase this - value to get additional trace output." -} - -cdl_option CYGNUM_LIBC_QSORT_TRACE_LEVEL { - display "qsort() tracing level" - flavor data - legal_values 0 to 1 - default_value 0 - description " - Trace verbosity level for debugging the - quicksort function qsort(). Increase this value - to get additional trace output." -} diff --git a/packages/language/c/libc/current/cdl/string.cdl b/packages/language/c/libc/current/cdl/string.cdl deleted file mode 100644 --- a/packages/language/c/libc/current/cdl/string.cdl +++ /dev/null @@ -1,101 +0,0 @@ -# ==================================================================== -# -# string.cdl -# -# C library string related configuration data -# -# ==================================================================== -#####COPYRIGHTBEGIN#### -# -# ------------------------------------------- -# The contents of this file are subject to the Red Hat eCos Public License -# Version 1.1 (the "License"); you may not use this file except in -# compliance with the License. You may obtain a copy of the License at -# http://www.redhat.com/ -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -# License for the specific language governing rights and limitations under -# the License. -# -# The Original Code is eCos - Embedded Configurable Operating System, -# released September 30, 1998. -# -# The Initial Developer of the Original Code is Red Hat. -# Portions created by Red Hat are -# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -# All Rights Reserved. -# ------------------------------------------- -# -#####COPYRIGHTEND#### -# ==================================================================== -######DESCRIPTIONBEGIN#### -# -# Author(s): jskov -# Original data: jlarmour -# Contributors: -# Date: 1999-07-06 -# -#####DESCRIPTIONEND#### -# -# ==================================================================== - -cdl_option CYGIMP_LIBC_STRING_INLINES { - display "Inline versions of functions" - default_value 1 - description " - This option chooses whether some of the - particularly simple string functions from - are available as inline - functions. This may improve performance, and as - the functions are small, may even improve code - size." -} - -cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { - display "Optimize string functions for code size" - flavor bool - default_value 0 - description " - This option tries to reduce string function - code size at the expense of execution speed. The - same effect can be produced if the code is - compiled with the -Os option to the compiler." -} - -cdl_component CYGPKG_LIBC_STRING_STRTOK { - display "strtok" - flavor none - description " - These options control the behaviour of the - strtok() and strtok_r() string tokenization - functions." - - cdl_option CYGSEM_LIBC_PER_THREAD_STRTOK { - display "Per-thread strtok()" - requires CYGVAR_KERNEL_THREADS_DATA - default_value 0 - description " - This option controls whether the string function - strtok() has its state recorded on a per-thread - basis rather than global. If this option is - disabled, some per-thread space can be saved. - Note there is also a POSIX-standard strtok_r() - function to achieve a similar effect with user - support. Enabling this option will use one slot - of kernel per-thread data. You should ensure you - have enough slots configured for all your - per-thread data." - } - - cdl_option CYGNUM_LIBC_STRTOK_TRACE_LEVEL { - display "Tracing level" - flavor data - legal_values 0 to 1 - default_value 0 - description " - Trace verbosity level for debugging the - functions strtok() and strtok_r(). Increase this - value to get additional trace output." - } -} diff --git a/packages/language/c/libc/current/cdl/time.cdl b/packages/language/c/libc/current/cdl/time.cdl deleted file mode 100644 --- a/packages/language/c/libc/current/cdl/time.cdl +++ /dev/null @@ -1,238 +0,0 @@ -# ==================================================================== -# -# time.cdl -# -# C library time related configuration data -# -# ==================================================================== -#####COPYRIGHTBEGIN#### -# -# ------------------------------------------- -# The contents of this file are subject to the Red Hat eCos Public License -# Version 1.1 (the "License"); you may not use this file except in -# compliance with the License. You may obtain a copy of the License at -# http://www.redhat.com/ -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -# License for the specific language governing rights and limitations under -# the License. -# -# The Original Code is eCos - Embedded Configurable Operating System, -# released September 30, 1998. -# -# The Initial Developer of the Original Code is Red Hat. -# Portions created by Red Hat are -# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -# All Rights Reserved. -# ------------------------------------------- -# -#####COPYRIGHTEND#### -# ==================================================================== -######DESCRIPTIONBEGIN#### -# -# Author(s): jskov -# Original data: jlarmour -# Contributors: -# Date: 1999-07-06 -# -#####DESCRIPTIONEND#### -# -# ==================================================================== - -cdl_option CYGSEM_LIBC_TIME_CLOCK_WORKING { - display "Working clock() function" - requires CYGFUN_KERNEL_THREADS_TIMER - requires CYGVAR_KERNEL_COUNTERS_CLOCK - default_value 1 - description " - This option controls whether clock() will - actually try and determine the process time - usage. With this option disabled, clock() does - not disappear, but will permanently return - (clock_t)-1 as mandated by the ISO C standard." -} - -cdl_option CYGSEM_LIBC_TIME_TIME_WORKING { - display "Working time() function" - requires CYGPKG_IO_WALLCLOCK - default_value 1 - description " - This option controls whether time() will - actually try and determine the current calendar - time. With this option disabled, time() does - not disappear, but will permanently return - (time_t)-1 as mandated by the ISO C standard." -} - -cdl_option CYGSEM_LIBC_TIME_SETTIME_WORKING { - display "Working cyg_libc_time_settime() function" - requires CYGPKG_IO_WALLCLOCK - default_value 1 - description " - This option controls whether cyg_libc_time_settime() - will actually try and set the current calendar - time. With this option disabled, - cyg_libc_time_settime() does not disappear, but - will permanently return an error." -} - -cdl_option CYGFUN_LIBC_TIME_POSIX { - display "POSIX time functions" - default_value 1 - description " - Enabling this option allows the use of the - following functions defined in POSIX 1003.1: - asctime_r(), ctime_r(), gmtime_r(), and - localtime_r()." -} - -cdl_component CYGPKG_LIBC_TIME_ZONES { - display "Time zone offsets" - flavor none - description " - These options control the default STandarD (STD) - and Daylight Savings Time (DST) - time offsets so that dates can be set correctly - for the local environment." - - cdl_option CYGNUM_LIBC_TIME_DST_DEFAULT_STATE { - display "Default Daylight Savings Time state" - flavor data - legal_values -- -1 to 1 - default_value -- -1 - description " - This option controls whether the initial - time environment is set up as STD, DST or - unknown. Use the value 1 for DST, 0 for STD, - and (-1) for unknown. This can also be set at - runtime using the cyg_libc_time_setdst() - function." - } - - cdl_option CYGNUM_LIBC_TIME_STD_DEFAULT_OFFSET { - display "Default Standard Time offset" - flavor data - legal_values -- -90000 to 90000 - default_value -- 0 - description " - This option controls the offset from UTC in - seconds when in local Standard Time. This - value can be positive or negative. It - can also be set at run time using the - cyg_libc_time_setzoneoffsets() function." - } - - cdl_option CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET { - display "Default Daylight Savings Time offset" - flavor data - legal_values -- -90000 to 90000 - default_value -- 3600 - description " - This option controls the offset from UTC in - seconds when in local Daylight Savings Time. This - value can be positive or negative. It - can also be set at run time using the - cyg_libc_time_setzoneoffsets() function." - } -} - -cdl_component CYGPKG_LIBC_TIME_INLINES { - display "Inline functions" - flavor none - description " - These options control whether certain functions - are available in inline form. This may lead to - faster code at the expense of code space. But for - some functions, or some functions with constant - arguments, it may in fact lead to smaller code." - - cdl_option CYGIMP_LIBC_TIME_ASCTIME_INLINE { - display "asctime()" - default_value 1 - description " - Allow the asctime() function to be inlined" - } - - cdl_option CYGIMP_LIBC_TIME_CTIME_INLINE { - display "ctime()" - default_value 1 - description " - Allow the ctime() function to be inlined" - } - - cdl_option CYGIMP_LIBC_TIME_DIFFTIME_INLINE { - display "difftime()" - default_value 1 - description " - Allow the difftime() function to be inlined" - } - - cdl_option CYGIMP_LIBC_TIME_GMTIME_INLINE { - display "gmtime()" - default_value 1 - description " - Allow the gmtime() function to be inlined" - } - - cdl_option CYGIMP_LIBC_TIME_LOCALTIME_INLINE { - display "localtime()" - default_value 1 - description " - Allow the localtime() function to be inlined" - } - - cdl_option CYGIMP_LIBC_TIME_MKTIME_INLINE { - display "mktime()" - default_value 1 - description " - Allow the mktime() function to be inlined" - } - - cdl_option CYGIMP_LIBC_TIME_ASCTIME_R_INLINE { - display "asctime_r()" - requires CYGFUN_LIBC_TIME_POSIX - default_value 1 - description " - Allow the asctime_r() function to be inlined" - } - - cdl_option CYGIMP_LIBC_TIME_CTIME_R_INLINE { - display "ctime_r()" - requires CYGFUN_LIBC_TIME_POSIX - default_value 1 - description " - Allow the ctime_r() function to be inlined" - } - - cdl_option CYGIMP_LIBC_TIME_GMTIME_R_INLINE { - display "gmtime_r()" - requires CYGFUN_LIBC_TIME_POSIX - default_value 1 - description " - Allow the gmtime_r() function to be inlined" - } - - cdl_option CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE { - display "localtime_r()" - requires CYGFUN_LIBC_TIME_POSIX - default_value 1 - description " - Allow the localtime_r() function to be inlined" - } -} -# FIXME: Also want "inline all" and "don't inline any" options which requires -# (or not) all the above, but -# if we do that then we will require the ones that also depend on -# CYGFUN_LIBC_TIME_POSIX :-( Wait for full CDL to fix this - -cdl_option CYGNUM_LIBC_TIME_CLOCK_TRACE_LEVEL { - display "clock() tracing level" - flavor data - legal_values 0 to 1 - default_value 0 - description " - Trace verbosity level for debugging the clock() - function. Increase this value to get - additional trace output when tracing is enabled." -} diff --git a/packages/language/c/libc/current/include/assert.h b/packages/language/c/libc/current/include/assert.h deleted file mode 100644 --- a/packages/language/c/libc/current/include/assert.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef CYGONCE_LIBC_ASSERT_H -#define CYGONCE_LIBC_ASSERT_H -//=========================================================================== -// -// assert.h -// -// ANSI standard assertion support as per ANSI chapter 7.2 -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: ANSI standard assertion support as per ANSI chapter 7.2 -// Usage: #include -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Common assertion support - -// MACROS - -// The user should define NDEBUG to turn off these user assertions. Also the -// common infrastructure assertions should be turned off too. - -#ifdef NDEBUG - -# define assert( _bool_ ) ((void)0) - -#else // if NDEBUG is NOT defined - -# define assert( _bool_ ) \ - CYG_MACRO_START \ - CYG_ASSERT( _bool_, "User assertion failed: \"" # _bool_ "\"" ); \ - CYG_MACRO_END - -#endif // if NDEBUG is NOT defined - - - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_ASSERT_H multiple inclusion protection - -// EOF assert.h diff --git a/packages/language/c/libc/current/include/ctype.h b/packages/language/c/libc/current/include/ctype.h deleted file mode 100644 --- a/packages/language/c/libc/current/include/ctype.h +++ /dev/null @@ -1,119 +0,0 @@ -#ifndef CYGONCE_LIBC_CTYPE_H -#define CYGONCE_LIBC_CTYPE_H -//=========================================================================== -// -// ctype.h -// -// ANSI standard ctype routines defined in section 7.3 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: #include -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - - -// FUNCTION PROTOTYPES - -//=========================================================================== - -// 7.3.1 Character testing functions - -externC int -isalnum( int ); - -externC int -isalpha( int ); - -externC int -iscntrl( int ); - -externC int -isdigit( int ); - -externC int -isgraph( int ); - -externC int -islower( int ); - -externC int -isprint( int ); - -externC int -ispunct( int ); - -externC int -isspace( int ); - -externC int -isupper( int ); - -externC int -isxdigit( int ); - -//=========================================================================== - -// 7.3.2 Character case mapping functions - -externC int -tolower( int ); - -externC int -toupper( int ); - - -// INLINE FUNCTIONS - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#include -#endif - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_CTYPE_H multiple inclusion protection - -// EOF ctype.h diff --git a/packages/language/c/libc/current/include/ctype.inl b/packages/language/c/libc/current/include/ctype.inl deleted file mode 100644 --- a/packages/language/c/libc/current/include/ctype.inl +++ /dev/null @@ -1,177 +0,0 @@ -#ifndef CYGONCE_LIBC_CTYPE_INL -#define CYGONCE_LIBC_CTYPE_INL -//=========================================================================== -// -// ctype.inl -// -// Inline implementations of ANSI standard ctype routines defined in -// section 7.3 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: #include - do not include this file directly -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Just to be sure, include the real header - -// FUNCTIONS - -//=========================================================================== - -// 7.3.1 Character testing functions - - -CYGPRI_LIBC_INLINE int -isupper( int c ) -{ - return (('A' <= c) && (c <= 'Z')); -} // isupper() - - -CYGPRI_LIBC_INLINE int -islower( int c ) -{ - return (('a' <= c) && (c <= 'z')); -} // islower() - - -CYGPRI_LIBC_INLINE int -isalpha( int c ) -{ - return ( islower(c) || isupper(c) ); -} // isalpha() - - -CYGPRI_LIBC_INLINE int -isdigit( int c ) -{ - return ( ('0' <= c) && (c <= '9') ); -} // isdigit() - - -CYGPRI_LIBC_INLINE int -isalnum( int c ) -{ - return ( isalpha(c) || isdigit(c) ); -} // isalnum() - - -CYGPRI_LIBC_INLINE int -iscntrl( int c ) -{ - // Simple standard 7-bit ASCII map is assumed - return ( ((0 <= c) && (c <= 0x1F)) || - (c == 0x7F) ); -} // iscntrl() - - -CYGPRI_LIBC_INLINE int -isgraph( int c ) -{ - // Simple standard 7-bit ASCII map is assumed - return ( ('!' <= c) && (c <= '~') ); -} // isgraph() - - -CYGPRI_LIBC_INLINE int -isprint( int c ) -{ - // Simple standard 7-bit ASCII map is assumed - return ( (' ' <= c) && (c <= '~') ); -} // isprint() - - -CYGPRI_LIBC_INLINE int -ispunct( int c ) -{ - // Simple standard 7-bit ASCII map is assumed - return ( (('!' <= c) && (c <= '/')) || // ASCII 0x21 - 0x2F - ((':' <= c) && (c <= '@')) || // ASCII 0x3A - 0x40 - (('[' <= c) && (c <= '`')) || // ASCII 0x5B - 0x60 - (('{' <= c) && (c <= '~')) ); // ASCII 0x7B - 0x7E - -} // ispunct() - - -CYGPRI_LIBC_INLINE int -isspace( int c ) -{ - return ( (c == ' ') || (c == '\f') || (c == '\n') || (c == '\r') || - (c == '\t') || (c == '\v') ); -} // isspace() - - -CYGPRI_LIBC_INLINE int -isxdigit( int c ) -{ - return ( isdigit(c) || - (('a' <= c) && (c <= 'f')) || - (('A' <= c) && (c <= 'F')) ); -} // isxdigit() - -//=========================================================================== - -// 7.3.2 Character case mapping functions - - -CYGPRI_LIBC_INLINE int -tolower( int c ) -{ - return isupper(c) ? c - 'A' + 'a' : c; -} // tolower() - - -CYGPRI_LIBC_INLINE int -toupper( int c ) -{ - return islower(c) ? c - 'a' + 'A' : c; -} // toupper() - - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_CTYPE_INL multiple inclusion protection - -// EOF ctype.inl diff --git a/packages/language/c/libc/current/include/errno.h b/packages/language/c/libc/current/include/errno.h deleted file mode 100644 --- a/packages/language/c/libc/current/include/errno.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef CYGONCE_LIBC_ERRNO_H -#define CYGONCE_LIBC_ERRNO_H -//======================================================================== -// -// errno.h -// -// ISO C errno variable and constants -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: This file provides the errno variable (or more strictly -// expression) and the E* error codes required by ISO C -// and POSIX 1003.1 -// Description: -// Usage: #include -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // Common type definitions etc. -#include // Common error code definitions - -// FUNCTION PROTOTYPES - -#ifdef CYGSEM_LIBC_PER_THREAD_ERRNO - -externC Cyg_ErrNo * const -cyg_libc_get_errno_p( void ) CYGBLD_ATTRIB_CONST; - -#endif // ifdef CYGSEM_LIBC_PER_THREAD_ERRNO - -// VARIABLES - -#ifdef CYGSEM_LIBC_PER_THREAD_ERRNO - -# define errno (*cyg_libc_get_errno_p()) // Global error status - -#else - -externC Cyg_ErrNo errno; // Global error status - -#endif // ifdef CYGSEM_LIBC_PER_THREAD_ERRNO - - -#endif // CYGONCE_LIBC_ERRNO_H multiple inclusion protection - -// EOF errno.h diff --git a/packages/language/c/libc/current/include/locale.h b/packages/language/c/libc/current/include/locale.h deleted file mode 100644 --- a/packages/language/c/libc/current/include/locale.h +++ /dev/null @@ -1,124 +0,0 @@ -#ifndef CYGONCE_LIBC_LOCALE_H -#define CYGONCE_LIBC_LOCALE_H -//======================================================================== -// -// locale.h -// -// Standard ISO C internationalisation (i18n) and localisation (i10n) -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-08-31 -// Purpose: -// Description: This implementation is designed to implement the contents -// of ISO C section 7.4 -// Usage: #include -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // locale.h must provide NULL - -// TYPE DEFINITIONS - -// struct lconv contains information about numeric and monetary numbers -// and is described in the ISO C standard section 7.4 - -struct lconv { - - // the following affect formatted NONMONETARY QUANTITIES only - char *decimal_point; // decimal point - char *thousands_sep; // separates groups of digits before decimal - // point - char *grouping; // string whose elements indicate the size - // of each group of digits - - // the following affect formatted MONETARY QUANTITIES only - char *int_curr_symbol; // international curreny symbol - char *currency_symbol; // local currency symbol - char *mon_decimal_point; // decimal point - char *mon_thousands_sep; // separator for groups of digits - // before the decimal point - char *mon_grouping; // string whose elements indicate the size - // of each group of digits - char *positive_sign; // string to indicate zero or positive value - char *negative_sign; // string to indicate negative value - char int_frac_digits; // number of digits after decimal point for - // internationally formatted monetary nums - char frac_digits; // number of digits after decimal point for - // formatted monetary nums - char p_cs_precedes; // 1 if currency_symbol precedes non-negative - // monetary quantity. 0 if succeeds - char p_sep_by_space; // 1 if currency_symbol separated from value - // of non-negative monetary quantity by space. - // Otherwise 0. - char n_cs_precedes; // 1 if currency_symbol precedes negative - // monetary quantity. 0 if succeeds - char n_sep_by_space; // 1 if currency_symbol separated from value - // of negative monetary quantity by space. - // Otherwise 0. - char p_sign_posn; // set according to position of positive_sign - char n_sign_posn; // set according to position of negative_sign -}; - -// CONSTANTS - -#define LC_COLLATE (1<<0) -#define LC_CTYPE (1<<1) -#define LC_MONETARY (1<<2) -#define LC_NUMERIC (1<<3) -#define LC_TIME (1<<4) -#define LC_ALL (LC_COLLATE|LC_CTYPE|LC_MONETARY|LC_NUMERIC|LC_TIME) - -// FUNCTION PROTOTYPES - -externC char * -setlocale( int /* category */, const char * /* locale */ ); - -externC struct lconv * -localeconv( void ); - - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_LOCALE_H multiple inclusion protection - -// EOF locale.h diff --git a/packages/language/c/libc/current/include/setjmp.h b/packages/language/c/libc/current/include/setjmp.h deleted file mode 100644 --- a/packages/language/c/libc/current/include/setjmp.h +++ /dev/null @@ -1,91 +0,0 @@ -#ifndef CYGONCE_LIBC_SETJMP_H -#define CYGONCE_LIBC_SETJMP_H -//=========================================================================== -// -// setjmp.h -// -// ANSI standard non-local jumps -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: Header file to implement ANSI standard non-local jumps as -// per ANSI para 7.6 -// Usage: #include -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Common tracing code -#include // HAL architecture specific implementation - - -// TYPE DEFINITIONS - -// jmp_buf as per ANSI 7.6. This is simply the underlying HAL buffer - -typedef hal_jmp_buf jmp_buf; - -// MACROS - -// setjmp() function, as described in ANSI para 7.6.1.1 -#define setjmp( __env__ ) hal_setjmp( __env__ ) - -// FUNCTION PROTOTYPES - -// longjmp() function, as described in ANSI para 7.6.2.1 -externC void -longjmp( jmp_buf, int ) CYGPRI_LIBC_NORETURN; - - -// INLINE FUNCTIONS - -#ifdef CYGIMP_LIBC_SETJMP_INLINES -# include -#endif - - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_SETJMP_H multiple inclusion protection - -// EOF setjmp.h diff --git a/packages/language/c/libc/current/include/setjmp.inl b/packages/language/c/libc/current/include/setjmp.inl deleted file mode 100644 --- a/packages/language/c/libc/current/include/setjmp.inl +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef CYGONCE_LIBC_SETJMP_INL -#define CYGONCE_LIBC_SETJMP_INL -//=========================================================================== -// -// setjmp.inl -// -// Inline functions for ANSI standard non-local jumps -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: Inline functions to implement ANSI standard non-local jumps as -// per ANSI para 7.6 -// Usage: Do not include this file, #include instead -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Common tracing code -#include // Common assertion code -#include // Header for this file, just in case -#include // HAL architecture specific implementation - -// INLINE FUNCTIONS - -CYGPRI_LIBC_INLINE void -longjmp( jmp_buf cyg_buf, int cyg_val) -{ - CYG_REPORT_FUNCNAME( "longjmp" ); - CYG_REPORT_FUNCARG2( "&cyg_buf=%08x, cyg_val=%d", &cyg_buf, cyg_val ); - - // ANSI says that if we are passed cyg_val==0, then we change it to 1 - if (cyg_val == 0) - ++cyg_val; - - // we let the HAL do the work - - HAL_REORDER_BARRIER(); // prevent any chance of optimisation re-ordering - hal_longjmp( cyg_buf, cyg_val ); - HAL_REORDER_BARRIER(); // prevent any chance of optimisation re-ordering - -#ifdef CYGDBG_USE_ASSERTS - CYG_ASSERT( 0, "longjmp should not have reached this point!" ); -#else - for (;;) - CYG_EMPTY_STATEMENT; -#endif -} // longjmp() - - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_SETJMP_INL multiple inclusion protection - -// EOF setjmp.inl diff --git a/packages/language/c/libc/current/include/signal.h b/packages/language/c/libc/current/include/signal.h deleted file mode 100644 --- a/packages/language/c/libc/current/include/signal.h +++ /dev/null @@ -1,219 +0,0 @@ -#ifndef CYGONCE_LIBC_SIGNAL_H -#define CYGONCE_LIBC_SIGNAL_H -//======================================================================== -// -// signal.h -// -// Definitions for ISO C and POSIX 1003.1 signals -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-03 -// Purpose: Provides description of interface to ISO C and POSIX 1003.1 -// signal functionality -// Description: -// Usage: #include -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -#ifdef CYGPKG_LIBC_SIGNALS - -// INCLUDES - -#include // Common type definitions and support - -#ifdef CYGSEM_LIBC_SIGNALS_POSIX -# include // _POSIX_* macros -#endif - - -// TYPE DEFINITIONS - -// Integral type that can be accessed atomically - from ISO C 7.7 -typedef cyg_atomic sig_atomic_t; - -// Type of signal handler functions -typedef void (*__sighandler_t)(int); - -#ifdef CYGSEM_LIBC_SIGNALS_POSIX - -// Signal sets from POSIX 1003.1 chap 3.3.3 and other chaps -typedef cyg_uint32 sigset_t; - -// POSIX 1003.1 chap 3.3.1.2 -union sigval { - int sival_int; // used when application-defined value is an int - void *sival_ptr; // used when application-defined value is a pointer -}; - -// Signal information structure passed to a __siginfoaction_t style handler -// from POSIX 1003.1 chap 3.3.1.3 -typedef struct { - int si_signo; // signal number - int si_code; // cause of signal - union sigval si_value; // signal value -} siginfo_t; - - -// Type of signal handler used if SA_SIGINFO is set in flags to sigaction -// from POSIX 1003.1 chap 3.3.1.3 -typedef void (*__siginfoaction_t)(int __signo, siginfo_t *__info, - void *__context); - -// struct sigaction describes the action to be taken when we get a signal -// From POSIX 1003.1 chap. 3.3.4.2 -struct sigaction { - sigset_t sa_mask; // Additional signals to be blocked - int sa_flags; // Special flags - union { - __sighandler_t sa_handler; // signal handler - __siginfoaction_t sa_sigaction; // Function to call instead of - // sa_handler if SA_SIGINFO is - // set in sa_flags - } __sigactionhandler; -#define sa_handler __sigactionhandler.sa_handler -#define sa_sigaction __sigactionhandler.sa_sigaction -}; - - -#endif // ifdef CYGSEM_LIBC_SIGNALS_POSIX - - -// CONSTANTS - -// Signal handlers for use with signal(). We avoid 0 because in an embedded -// system this may be e.g. start of ROM and thus a possible function pointer -// for reset! - -#define SIG_DFL ((__sighandler_t) 1) // Default action -#define SIG_IGN ((__sighandler_t) 2) // Ignore action -#define SIG_ERR ((__sighandler_t)-1) // Error return - -// NB. We do not need to restrict SIG* definitions (e.g. by eliminating -// POSIX signals) when using strict ISO C (permitted in 7.7) - -#define SIGNULL 0 // Reserved signal - do not use (POSIX 3.3.1.1) -#define SIGHUP 1 // Hangup on controlling terminal (POSIX) -#define SIGINT 2 // Interactive attention (ISO C) -#define SIGQUIT 3 // Interactive termination (POSIX) -#define SIGILL 4 // Illegal instruction (not reset when caught) (ISO C) -#define SIGTRAP 5 // Trace trap (not reset when caught) -#define SIGIOT 6 // IOT instruction -#define SIGABRT 6 // Abnormal termination - used by abort() (ISO C) -#define SIGEMT 7 // EMT instruction -#define SIGFPE 8 // Floating Point Exception e.g. div by 0 (ISO C) -#define SIGKILL 9 // Kill (cannot be caught or ignored) (POSIX) -#if 1 // FIXME - should be #ifdef _POSIX_MEMORY_PROTECTION? -# define SIGBUS 10 // Bus error (POSIX) -#endif -#define SIGSEGV 11 // Invalid memory reference (ISO C) -#define SIGSYS 12 // Bad argument to system call (used by anything?) -#define SIGPIPE 13 // Write on a pipe with no one to read it (POSIX) -#define SIGALRM 14 // Alarm timeout (POSIX) -#define SIGTERM 15 // Software termination request (ISO C) -#define SIGUSR1 16 // Application-defined signal 1 (POSIX) -#define SIGUSR2 17 // Application-defined signal 2 (POSIX) - -#define CYGNUM_LIBC_SIGNALS 18 // Maximum signal number + 1 - -#ifdef _POSIX_JOB_CONTROL -# define SIGCHLD 18 // Child process terminated or stopped (POSIX) -# define SIGCONT 19 // Continue if stopped (POSIX) -# define SIGSTOP 20 // Stop (cannot be caught or ignored) (POSIX) -# define SIGTSTP 21 // Interactive stop (POSIX) -# define SIGTTIN 22 // Terminal read attempted by backgrounded - // process (POSIX) -# define SIGTTOU 23 // Terminal write attempted by backgrounded - // process (POSIX) -#undef CYGNUM_LIBC_SIGNALS -#define CYGNUM_LIBC_SIGNALS 24 -#endif - -// FIXME - strictly by POSIX in 3.3.1.1 we should define SIGRTMIN/SIGRTMAX -// But if so, to what value if it _isn't_ supported?! - -#ifdef CYGSEM_LIBC_SIGNALS_POSIX -// sa_flag bits in struct sigaction -#define SA_NOCLDSTOP 1 // Don't generate SIGCHLD when children stop -#define SA_SIGINFO 2 // Use the __siginfoaction_t style signal - // handler, instead of the single argument handler -#endif // ifdef CYGSEM_LIBC_SIGNALS_POSIX - - -// FUNCTION PROTOTYPES - -#ifdef __cplusplus -extern "C" { -#endif - -//=========================================================================== - -// ISO C functions - -////////////////////////////// -// signal() - ISO C 7.7.1 // -////////////////////////////// -// -// Installs a new signal handler for the specified signal, and returns -// the old handler -// - -extern __sighandler_t -signal(int __sig, __sighandler_t __handler); - -/////////////////////////// -// raise() - ISO C 7.7.2 // -/////////////////////////// -// -// Raises the signal, which will cause the current signal handler for -// that signal to be called -// - -extern int -raise(int __sig); - - -#ifdef __cplusplus -} // extern "C" -#endif - -#include - -#endif // ifdef CYGPKG_LIBC_SIGNALS - -#endif // CYGONCE_LIBC_SIGNAL_H multiple inclusion protection - -// EOF signal.h diff --git a/packages/language/c/libc/current/include/signal.inl b/packages/language/c/libc/current/include/signal.inl deleted file mode 100644 --- a/packages/language/c/libc/current/include/signal.inl +++ /dev/null @@ -1,273 +0,0 @@ -#ifndef CYGONCE_LIBC_SIGNAL_INL -#define CYGONCE_LIBC_SIGNAL_INL -//======================================================================== -// -// signal.inl -// -// Inline functions for implementation of ISO C and POSIX signals -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-17 -// Purpose: Implements required inline functions of ISO C and -// POSIX 1003.1 signals -// Description: -// Usage: Do not include this file directly, instead use -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -#ifdef CYGPKG_LIBC_SIGNALS - -// INCLUDES - -#include // Header for this file, just in case -#include // Assertion infrastructure -#include // Tracing infrastructure - -// GLOBALS - -extern __sighandler_t cyg_libc_signal_handlers[]; -#ifdef CYGDBG_USE_TRACING -extern cyg_uint8 cyg_libc_signals_raise_trace_level; -#endif - -// DEFINES - -// The following are overriden by the libc implementation to get a non-inline -// version to prevent duplication of code -#ifndef CYGPRI_LIBC_SIGNALS_RAISE_INLINE -# define CYGPRI_LIBC_SIGNALS_RAISE_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_SIGNALS_SIGNAL_INLINE -# define CYGPRI_LIBC_SIGNALS_SIGNAL_INLINE extern __inline__ -#endif - -// FUNCTION PROTOTYPES - -#ifdef __cplusplus -extern "C" { -#endif - -// Default signal handler - SIG_DFL -extern void cyg_libc_signals_default_handler(int __sig); - -#ifdef CYGSEM_LIBC_SIGNALS_THREAD_SAFE -extern cyg_bool cyg_libc_signals_lock_do_lock(void); -extern void cyg_libc_signals_lock_do_unlock(void); -#endif - -// INLINE FUNCTIONS - -///////////////////////////// -// cyg_libc_signals_lock() // -///////////////////////////// - -static inline cyg_bool -cyg_libc_signals_lock(void) -{ -#ifdef CYGSEM_LIBC_SIGNALS_THREAD_SAFE - return cyg_libc_signals_lock_do_lock(); -#else - return true; -#endif -} // cyg_libc_signals_lock() - -/////////////////////////////// -// cyg_libc_signals_unlock() // -/////////////////////////////// - -static inline void -cyg_libc_signals_unlock(void) -{ -#ifdef CYGSEM_LIBC_SIGNALS_THREAD_SAFE - cyg_libc_signals_lock_do_unlock(); -#else - return; -#endif -} // cyg_libc_signals_unlock() - -// ISO C functions - -////////////////////////////// -// signal() - ISO C 7.7.1 // -////////////////////////////// - - -#ifdef CYGIMP_LIBC_SIGNALS_SIGNAL_INLINE - -#ifdef CYGSEM_LIBC_SIGNALS_SIGNAL_SETS_ERRNO -# include // errno -#endif - -CYGPRI_LIBC_SIGNALS_SIGNAL_INLINE __sighandler_t -signal(int __sig, __sighandler_t __handler) -{ - __sighandler_t __old_handler; - CYG_REPORT_FUNCNAMETYPE( "__signal", "returning %08x" ); - - CYG_REPORT_FUNCARG2( "signal number = %d, requested handler is at %08x", - __sig, __handler ); - - // check valid signal - raise should not raise the null signal either - if ( (__sig >= CYGNUM_LIBC_SIGNALS) || (__sig <= 0) ) { - -#ifdef CYGSEM_LIBC_SIGNALS_BAD_SIGNAL_FATAL - CYG_FAIL("__signal() passed bad signal number"); -#else -# ifdef CYGSEM_LIBC_SIGNALS_SIGNAL_SETS_ERRNO - errno = EINVAL; -# endif - return SIG_ERR; -#endif - } - - // paranoia - CYG_CHECK_DATA_PTR( cyg_libc_signal_handlers, - "signal handler array is invalid!" ); - if ( (__handler != SIG_IGN) && (__handler != SIG_DFL) ) - CYG_CHECK_FUNC_PTR( __handler, "__signal() passed invalid handler"); - - if (!cyg_libc_signals_lock()) { -#ifdef CYGSEM_LIBC_SIGNALS_SIGNAL_SETS_ERRNO - errno = EINTR; -#endif - return SIG_ERR; - } // if - - __old_handler = cyg_libc_signal_handlers[__sig]; - cyg_libc_signal_handlers[__sig] = __handler; - - cyg_libc_signals_unlock(); - - CYG_REPORT_RETVAL( __old_handler ); - - return __old_handler; -} // signal() -#endif // ifdef CYGIMP_LIBC_SIGNALS_SIGNAL_INLINE - - -/////////////////////////// -// raise() - ISO C 7.7.2 // -/////////////////////////// - -#ifdef CYGIMP_LIBC_SIGNALS_RAISE_INLINE - -#ifdef CYGSEM_LIBC_SIGNALS_RAISE_SETS_ERRNO -# include // errno -#endif - -CYGPRI_LIBC_SIGNALS_RAISE_INLINE int -raise(int __sig) -{ - int __ret=0; - __sighandler_t __sigfun; - - CYG_REPORT_FUNCNAMETYPE( "__raise", "returning %d" ); - - CYG_REPORT_FUNCARG1( "signal number = %d", __sig ); - - // check valid signal - raise should not raise the null signal either - if ( (__sig >= CYGNUM_LIBC_SIGNALS) || (__sig <= 0) ) { - -#ifdef CYGSEM_LIBC_SIGNALS_BAD_SIGNAL_FATAL - CYG_FAIL("__raise() passed bad signal number"); -#else -# ifdef CYGSEM_LIBC_SIGNALS_RAISE_SETS_ERRNO - errno = EINVAL; -# endif - return -1; -#endif - } - - // paranoia - CYG_CHECK_DATA_PTR( cyg_libc_signal_handlers, - "signal handler array is invalid!" ); - - if (!cyg_libc_signals_lock()) { -#ifdef CYGSEM_LIBC_SIGNALS_RAISE_SETS_ERRNO - errno = EINTR; -#endif - return -1; - } // if - - __sigfun = cyg_libc_signal_handlers[__sig]; - - switch ( (CYG_ADDRESS)__sigfun ) { - - case (CYG_ADDRESS)SIG_DFL: - CYG_TRACE0(cyg_libc_signals_raise_trace_level, - "signal handler returned is SIG_DFL"); - cyg_libc_signals_unlock(); - cyg_libc_signals_default_handler(__sig); - break; - - case (CYG_ADDRESS)SIG_IGN: - CYG_TRACE0(cyg_libc_signals_raise_trace_level, - "signal handler returned is SIG_IGN"); - cyg_libc_signals_unlock(); - - break; - - default: - CYG_TRACE1(cyg_libc_signals_raise_trace_level, - "signal handler returned is at %08x", __sigfun); - // call the signal handler directly - cyg_libc_signal_handlers[__sig] = SIG_DFL; - - cyg_libc_signals_unlock(); - CYG_CHECK_FUNC_PTR( __sigfun, "returned signal handler invalid!"); - - (*__sigfun)(__sig); - break; - } - - CYG_REPORT_RETVAL( __ret ); - - return __ret; -} // raise() -#endif // ifdef CYGIMP_LIBC_SIGNALS_RAISE_INLINE - - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // ifdef CYGPKG_LIBC_SIGNALS - -#endif // CYGONCE_LIBC_SIGNAL_INL multiple inclusion protection - -// EOF signal.inl diff --git a/packages/language/c/libc/current/include/stdio.h b/packages/language/c/libc/current/include/stdio.h deleted file mode 100644 --- a/packages/language/c/libc/current/include/stdio.h +++ /dev/null @@ -1,298 +0,0 @@ -#ifndef CYGONCE_LIBC_STDIO_H -#define CYGONCE_LIBC_STDIO_H -//======================================================================== -// -// stdio.h -// -// ISO C standard I/O routines - with some POSIX 1003.1 extensions -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-19 -// Purpose: ISO C standard I/O routines -// Description: -// Usage: #include -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // common type definitions and support -#include // NULL and size_t from compiler -#include // va_list from compiler - -// CONSTANTS - -// Some of these values are odd to ensure that asserts have better effect -// should spurious values be passed to functions expecting these constants. - -// _IOFBF, _IOLBF, and _IONBF specify full, line or no buffering when used -// with setvbuf() - ISO C standard chap 7.9.1 - -#define _IOFBF (-2) -#define _IOLBF (-4) -#define _IONBF (-8) - -// EOF is a macro defined to any negative integer constant - ISO C standard -// chap. 7.9.1 -#define EOF (-1) - -// SEEK_CUR, SEEK_END and SEEK_SET are used with fseek() as position -// anchors - ISO C standard chap. 7.9.1 -#define SEEK_SET 0 -#define SEEK_CUR 1 -#define SEEK_END 2 - - -// TYPE DEFINITIONS - -// A type capable of specifying uniquely every file position - ISO C -// standard chap 7.9.1 -typedef cyg_ucount32 fpos_t; - - -// FILE is just cast to an address here. It is uncast internally to the -// C library in stream.hxx as the C++ Cyg_StdioStream class. -// Optional run-time checking can be enabled to ensure that the cast is -// valid, using the standard assertion functionality. -// -// The array size is irrelevant other than being more than 8, and is present -// to stop references to FILEs being marked as able to be put in the small -// data section. We can't just mark it as in the ".data" section as on some -// targets it may actually be ".common". Maybe this doesn't matter? -// FIXME: This doesn't work if things are larger than 16 are put in sdata, -// e.g. on mips by specifying -G 32 -typedef CYG_ADDRESS FILE[16]; - -// EXTERNAL VARIABLES - -// Default file streams for input/output. These only need to be -// expressions, not l-values - ISO C standard chap. 7.9.1 -// -// cyg_libc_stdio_stdin/out/err aren't really files of course, -// but they are only named here so that we can take the address of -// them, in which case it doesn't matter what type they point to really -// -// CYGPRI_LIBC_STDIO_NO_DEFAULT_STREAMS is used when initializing -// cyg_libc_stdio_stdin/out/err privately inside the C library - -#ifndef CYGPRI_LIBC_STDIO_NO_DEFAULT_STREAMS -extern FILE cyg_libc_stdio_stdin, cyg_libc_stdio_stdout, - cyg_libc_stdio_stderr; - -#define stdin (&cyg_libc_stdio_stdin) -#define stdout (&cyg_libc_stdio_stdout) -#define stderr (&cyg_libc_stdio_stderr) -#endif - -// FUNCTION PROTOTYPES - -//======================================================================== - -// ISO C 7.9.5 File access functions - -externC int -fclose( FILE * /* stream */ ); - -externC int -fflush( FILE * /* stream */ ); - -externC FILE * -fopen( const char * /* filename */, const char * /* mode */ ); - -externC FILE * -freopen( const char * /* filename */, const char * /* mode */, - FILE * /* stream */ ); - -externC void -setbuf( FILE * /* stream */, char * /* buffer */ ); - -externC int -setvbuf( FILE * /* stream */, char * /* buffer */, int /* mode */, - size_t /* size */ ); - -//======================================================================== - -// ISO C 7.9.6 Formatted input/output functions - -externC int -fprintf( FILE * /* stream */, const char * /* format */, ... ); - -externC int -fscanf( FILE * /* stream */, const char * /* format */, ... ); - -externC int -printf( const char * /* format */, ... ); - -externC int -scanf( const char * /* format */, ... ); - -externC int -sprintf( char * /* str */, const char * /* format */, ... ); - -externC int -sscanf( const char * /* str */, const char * /* format */, ... ); - -externC int -vfprintf( FILE * /* stream */, const char * /* format */, - va_list /* args */ ); - -externC int -vprintf( const char * /* format */, va_list /* args */ ); - -externC int -vsprintf( char * /* str */, const char * /* format */, - va_list /* args */ ); - -//======================================================================== - -// ISO C 7.9.7 Character input/output functions - -externC int -fgetc( FILE * /* stream */ ); - -externC char * -fgets( char * /* str */, int /* length */, FILE * /* stream */ ); - -externC int -fputc( int /* c */, FILE * /* stream */ ); - -externC int -putc( int /* c */, FILE * /* stream */ ); - -externC int -putchar( int /* c */ ); - -externC int -fputs( const char * /* str */, FILE * /* stream */ ); - -externC char * -gets( char * ); - -externC int -getc( FILE * /* stream */ ); - -externC int -getchar( void ); - -externC int -puts( const char * /* str */ ); - -externC int -ungetc( int /* c */, FILE * /* stream */ ); - -// no function equivalent is required for getchar() or putchar(), so we can -// just #define them - -#define getchar() fgetc( stdin ) - -#define putchar(__c) fputc(__c, stdout) - -//======================================================================== - -// ISO C 7.9.8 Direct input/output functions - -externC size_t -fread( void * /* ptr */, size_t /* object_size */, - size_t /* num_objects */, FILE * /* stream */ ); - -externC size_t -fwrite( const void * /* ptr */, size_t /* object_size */, - size_t /* num_objects */, FILE * /* stream */ ); - - -//======================================================================== - -// ISO C 7.9.10 Error-handling functions - -externC void -clearerr( FILE * /* stream */ ); - -externC int -feof( FILE * /* stream */ ); - -externC int -ferror( FILE * /* stream */ ); - -externC void -perror( const char * /* prefix_str */ ); - -//======================================================================== - -// Other non-ISO C functions - -externC int -fnprintf( FILE * /* stream */, size_t /* length */, - const char * /* format */, ... ); - -externC int -snprintf( char * /* str */, size_t /* length */, const char * /* format */, - ... ); - -externC int -vfnprintf( FILE * /* stream */, size_t /* length */, - const char * /* format */, va_list /* args */ ); - -externC int -vsnprintf( char * /* str */, size_t /* length */, - const char * /* format */, va_list /* args */ ); - -externC int -vscanf( const char * /* format */, va_list /* args */ ); - -externC int -vsscanf( const char * /* str */, const char * /* format */, - va_list /* args */ ); - -externC int -vfscanf( FILE * /* stream */, const char * /* format */, - va_list /* args */ ); - - -// INLINE FUNCTIONS - -#ifdef CYGIMP_LIBC_STDIO_INLINES -#include -#endif - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_STDIO_H multiple inclusion protection - -// EOF stdio.h diff --git a/packages/language/c/libc/current/include/stdio.inl b/packages/language/c/libc/current/include/stdio.inl deleted file mode 100644 --- a/packages/language/c/libc/current/include/stdio.inl +++ /dev/null @@ -1,155 +0,0 @@ -#ifndef CYGONCE_LIBC_STDIO_INL -#define CYGONCE_LIBC_STDIO_INL -//=========================================================================== -// -// stdio.inl -// -// ANSI standard I/O routines - inlined functions -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: #include - do not include this file directly -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common type definitions and support -#include // NULL and size_t from compiler -#include // va_list -#include // Just be sure it has been included -#include // Definition of error codes and errno -#include // Definition of strerror() for perror() -#include // INT_MAX - -// INLINE FUNCTION DEFINITIONS - -//=========================================================================== - -// 7.9.5 File access functions - -CYGPRI_LIBC_INLINE void -setbuf( FILE *stream, char *buf ) -{ - if (buf == NULL) - setvbuf( stream, NULL, _IONBF, BUFSIZ ); - else - // NB: Should use full buffering by default ordinarily, but in - // the current system we're always connected to an interactive - // terminal, so use line buffering - setvbuf( stream, buf, _IOLBF, BUFSIZ ); - -} // setbuf() - -//=========================================================================== - -// 7.9.6 Formatted input/output functions - -CYGPRI_LIBC_INLINE int -vfprintf( FILE *stream, const char *format, va_list arg ) -{ - return vfnprintf(stream, INT_MAX, format, arg); -} // vfprintf() - - -CYGPRI_LIBC_INLINE int -vprintf( const char *format, va_list arg ) -{ - return vfnprintf(stdout, INT_MAX, format, arg); -} // vprintf() - - -CYGPRI_LIBC_INLINE int -vsprintf( char *s, const char *format, va_list arg ) -{ - return vsnprintf(s, INT_MAX, format, arg); -} // vsprintf() - - -//=========================================================================== - -// 7.9.7 Character input/output functions - -CYGPRI_LIBC_INLINE int -puts( const char *s ) -{ - int rc; - - rc = fputs( s, stdout ); - - if (rc >= 0) - rc = fputc('\n', stdout ); - - return rc; -} // puts() - - -//=========================================================================== - -// 7.9.10 Error-handling functions - -CYGPRI_LIBC_INLINE void -perror( const char *s ) -{ - if (s && *s) - fprintf( stderr, "%s: %s\n", s, strerror(errno) ); - else - fputs( strerror(errno), stderr ); - -} // perror() - -//=========================================================================== - -// Other non-ANSI functions - -CYGPRI_LIBC_INLINE int -vscanf( const char *format, va_list arg ) -{ - return vfscanf( stdin, format, arg ); -} // vscanf() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -#endif // CYGONCE_LIBC_STDIO_INL multiple inclusion protection - -// EOF stdio.inl diff --git a/packages/language/c/libc/current/include/stdlib.h b/packages/language/c/libc/current/include/stdlib.h deleted file mode 100644 --- a/packages/language/c/libc/current/include/stdlib.h +++ /dev/null @@ -1,250 +0,0 @@ -#ifndef CYGONCE_LIBC_STDLIB_H -#define CYGONCE_LIBC_STDLIB_H -//======================================================================== -// -// stdlib.h -// -// ISO C standard utility functions (ISO C standard section 7.10) -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-17 -// Purpose: -// Description: -// Usage: #include -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // Common type definitions and support -#include // NULL, wchar_t and size_t from compiler -#include // for INT_MAX definition used below - -// CONSTANTS - -// as described in ISO para 7.10 - -// codes to pass to exit() - -// Successful exit status - must be zero (POSIX 1003.1 8.1) -#define EXIT_SUCCESS 0 -// Failing exit status - must be non-zero (POSIX 1003.1 8.1) -#define EXIT_FAILURE 1 - -// Maximum value returned by rand() - -#define RAND_MAX INT_MAX - - -// Maximum number of bytes in a multibyte character for the current locale - -#define MB_CUR_MAX 1 - - -// TYPE DEFINITIONS - -// as described in ANSI para 7.10 - -// return type of the div() function - -typedef struct { - int quot; // quotient - int rem; // remainder -} div_t; - - -// return type of the ldiv() function - -typedef struct { - long quot; // quotient - long rem; // remainder -} ldiv_t; - -// Unofficial type of comparison function used by both bsearch() and -// qsort() - -typedef int (*Cyg_comparison_fn_t)(const void * /* object1 */, - const void * /* object2 */); - -// Similarly, type of function used by atexit() -typedef void (*Cyg_libc_atexit_fn_t)( void ); - - -// FUNCTION PROTOTYPES - -//======================================================================== - -// 7.10.1 String conversion functions - -externC double -atof( const char * /* double_str */ ); - -externC int -atoi( const char * /* int_str */ ); - -externC long -atol( const char * /* long_str */ ); - -externC double -strtod( const char * /* double_str */, char ** /* endptr */ ); - -externC long -strtol( const char * /* long_str */, char ** /* endptr */, - int /* base */ ); - -externC unsigned long -strtoul( const char * /* ulong_str */, char ** /* endptr */, - int /* base */ ); - -//======================================================================== - -// 7.10.2 Pseudo-random sequence generation functions - -externC int -rand( void ); - -externC void -srand( unsigned int /* seed */ ); - -// POSIX 1003.1 section 8.3.8 rand_r() -externC int -rand_r( unsigned int * /* seed */ ); - -//======================================================================== - -// 7.10.3 Memory management functions - -#ifdef CYGPKG_LIBC_MALLOC - -externC void * -calloc( size_t /* num_objects */, size_t /* object_size */ ); - -externC void -free( void * /* ptr */ ); - -externC void * -malloc( size_t /* size */ ); - -externC void * -realloc( void * /* ptr */, size_t /* size */ ); - -#endif // ifdef CYGPKG_LIBC_MALLOC - -//======================================================================== - -// 7.10.4 Communication with the environment - -externC void -abort( void ) CYGBLD_ATTRIB_NORET; - -externC int -atexit( Cyg_libc_atexit_fn_t /* func_to_register */ ); - -externC void -exit( int /* status */ ) CYGBLD_ATTRIB_NORET; - -/* POSIX 1003.1 section 3.2.2 "Terminate a process" */ - -externC void -_exit( int /* status */ ) CYGBLD_ATTRIB_NORET; - -externC char * -getenv( const char * /* name */ ); - -externC int -system( const char * /* command */ ); - - -//======================================================================== - -// 7.10.5 Searching and sorting utilities - -externC void * -bsearch( const void * /* search_key */, const void * /* first_object */, - size_t /* num_objects */, size_t /* object_size */, - Cyg_comparison_fn_t /* comparison_fn */ ); - -externC void -qsort( void * /* first_object */, size_t /* num_objects */, - size_t /* object_size */, Cyg_comparison_fn_t /* comparison_fn */ ); - - -//======================================================================== - -// 7.10.6 Integer arithmetic functions - -externC int -abs( int /* val */ ) CYGBLD_ATTRIB_CONST; - -externC div_t -div( int /* numerator */, int /* denominator */ ) CYGBLD_ATTRIB_CONST; - -externC long -labs( long /* val */ ) CYGBLD_ATTRIB_CONST; - -externC ldiv_t -ldiv( long /* numerator */, long /* denominator */ ) CYGBLD_ATTRIB_CONST; - -//======================================================================== - -// NON-STANDARD FUNCTIONS - -///////////////////// -// cyg_libc_itoa() // -///////////////////// -// -// This converts num to a string and puts it into s padding with -// "0"'s if padzero is set, or spaces otherwise if necessary. -// The number of chars written to s is returned -// - -externC cyg_uint8 -cyg_libc_itoa( cyg_uint8 *__s, cyg_int32 __num, cyg_uint8 __width, - cyg_bool __padzero ); - -//======================================================================== - - -// INLINE FUNCTIONS - -#ifdef CYGIMP_LIBC_STDLIB_INLINES -#include -#endif - -#endif // CYGONCE_LIBC_STDLIB_H multiple inclusion protection - -// EOF stdlib.h diff --git a/packages/language/c/libc/current/include/stdlib.inl b/packages/language/c/libc/current/include/stdlib.inl deleted file mode 100644 --- a/packages/language/c/libc/current/include/stdlib.inl +++ /dev/null @@ -1,218 +0,0 @@ -#ifndef CYGONCE_LIBC_STDLIB_INL -#define CYGONCE_LIBC_STDLIB_INL -//=========================================================================== -// -// stdlib.inl -// -// Inline implementations for the ANSI standard utility functions -// defined in section 7.10 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour@ -// Date: 1999-03-02 -// Purpose: -// Description: -// Usage: Do not include this file directly - include instead -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // NULL, wchar_t and size_t from compiler -#include // Header for this file, just in case -#include // Assertion support -#include // Tracing support - -// FUNCTIONS - -//=========================================================================== - -// 7.10.1 String conversion functions - - -CYGPRI_LIBC_INLINE double -atof( const char *nptr ) -{ - return strtod( nptr, (char **)NULL ); -} // atof() - -CYGPRI_LIBC_INLINE int -atoi( const char *nptr ) -{ - return (int)strtol( nptr, (char **)NULL, 10 ); -} // atoi() - - -CYGPRI_LIBC_INLINE long -atol( const char *nptr ) -{ - return strtol( nptr, (char **)NULL, 10 ); -} // atol() - -//=========================================================================== - -// 7.10.6 Integer arithmetic functions - - -CYGPRI_LIBC_INLINE int -abs( int __j ) -{ - return (__j<0) ? -__j : __j; -} // abs() - - -CYGPRI_LIBC_INLINE div_t -div( int __numer, int __denom ) -{ - div_t __ret; - - CYG_REPORT_FUNCNAMETYPE( "div", "quotient: %d"); - CYG_REPORT_FUNCARG2DV( __numer, __denom ); - // FIXME: what if they want it handled with SIGFPE? Should have option - CYG_PRECONDITION(__denom != 0, "division by zero attempted!"); - - __ret.quot = __numer / __denom; - __ret.rem = __numer % __denom; - - // But the modulo is implementation-defined for -ve numbers (ISO C 6.3.5) - // and we are required to "round" to zero (ISO C 7.10.6.2) - // - // The cases we have to deal with are inexact division of: - // a) + div + - // b) + div - - // c) - div + - // d) - div - - // - // a) can never go wrong and the quotient and remainder are always positive - // b) only goes wrong if the negative quotient has been "rounded" to - // -infinity - if so then the remainder will be negative when it - // should be positive or zero - // c) only goes wrong if the negative quotient has been "rounded" to - // -infinity - if so then the remainder will be positive when it - // should be negative or zero - // d) only goes wrong if the positive quotient has been rounded to - // +infinity - if so then the remainder will be positive when it - // should be negative or zero - // - // So the correct sign of the remainder corresponds to the sign of the - // numerator. Which means we can say that the result needs adjusting - // iff the sign of the numerator is different from the sign of the - // remainder. - // - // You may be interested to know that the Berkeley version of div() - // would get this wrong for e.g. (c) and (d) on some targets. - // e.g. for (-5)/4 it could leave the result as -2R3 - - if ((__ret.rem < 0) && (__numer > 0)) { - ++__ret.quot; - __ret.rem -= __denom; - } else if ((__ret.rem > 0) && (__numer < 0)) { - --__ret.quot; - __ret.rem += __denom; - } // else - - CYG_REPORT_RETVAL( __ret.quot ); - - return __ret; -} // div() - - -CYGPRI_LIBC_INLINE long -labs( long __j ) -{ - return (__j<0) ? -__j : __j; -} // labs() - - -CYGPRI_LIBC_INLINE ldiv_t -ldiv( long __numer, long __denom ) -{ - ldiv_t __ret; - - CYG_REPORT_FUNCNAMETYPE( "ldiv", "quotient: %d"); - CYG_REPORT_FUNCARG2DV( __numer, __denom ); - // FIXME: what if they want it handled with SIGFPE? Should have option - CYG_PRECONDITION(__denom != 0, "division by zero attempted!"); - - __ret.quot = __numer / __denom; - __ret.rem = __numer % __denom; - - // But the modulo is implementation-defined for -ve numbers (ISO C 6.3.5) - // and we are required to "round" to zero (ISO C 7.10.6.2) - // - // The cases we have to deal with are inexact division of: - // a) + div + - // b) + div - - // c) - div + - // d) - div - - // - // a) can never go wrong and the quotient and remainder are always positive - // b) only goes wrong if the negative quotient has been "rounded" to - // -infinity - if so then the remainder will be negative when it - // should be positive or zero - // c) only goes wrong if the negative quotient has been "rounded" to - // -infinity - if so then the remainder will be positive when it - // should be negative or zero - // d) only goes wrong if the positive quotient has been rounded to - // +infinity - if so then the remainder will be positive when it - // should be negative or zero - // - // So the correct sign of the remainder corresponds to the sign of the - // numerator. Which means we can say that the result needs adjusting - // iff the sign of the numerator is different from the sign of the - // remainder. - // - // You may be interested to know that the Berkeley version of ldiv() - // would get this wrong for e.g. (c) and (d) on some targets. - // e.g. for (-5)/4 it could leave the result as -2R3 - - if ((__ret.rem < 0) && (__numer > 0)) { - ++__ret.quot; - __ret.rem -= __denom; - } else if ((__ret.rem > 0) && (__numer < 0)) { - --__ret.quot; - __ret.rem += __denom; - } // else - - CYG_REPORT_RETVAL( __ret.quot ); - - return __ret; -} // ldiv() - - -#endif // CYGONCE_LIBC_STDLIB_INL multiple inclusion protection - -// EOF stdlib.inl diff --git a/packages/language/c/libc/current/include/string.h b/packages/language/c/libc/current/include/string.h deleted file mode 100644 --- a/packages/language/c/libc/current/include/string.h +++ /dev/null @@ -1,173 +0,0 @@ -#ifndef CYGONCE_LIBC_STRING_H -#define CYGONCE_LIBC_STRING_H -//=========================================================================== -// -// string.h -// -// ANSI standard string and memory area manipulation routines -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: #include -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Standard definitions including externC -#include // Get size_t and NULL definitions from - // compiler - for ANSI 7.11.1 -#include // for strerror() - -// FUNCTION PROTOTYPES - -//=========================================================================== - -// 7.11.2 Copying functions - -// memcpy is no longer actually implemented in the C library. -// It is now in the HAL - -externC void * -memcpy( void *, const void *, size_t ); - -externC void * -memmove( void *, const void *, size_t ); - -externC char * -strcpy( char *, const char * ); - -externC char * -strncpy( char *, const char *, size_t ); - -//=========================================================================== - -// 7.11.3 Concatenation functions - -externC char * -strcat( char *, const char * ); - -externC char * -strncat( char *, const char *, size_t ); - - -//=========================================================================== - -// 7.11.4 Comparison functions - -externC int -memcmp( const void *, const void *, size_t ); - -externC int -strcmp( const char *, const char * ); - -externC int -strcoll( const char *, const char * ); - -externC int -strncmp( const char *, const char *, size_t ); - -externC size_t -strxfrm( char *, const char *, size_t ); - - -//=========================================================================== - -// 7.11.5 Search functions - -externC void * -memchr( const void *, int, size_t ); - -externC char * -strchr( const char *, int ); - -externC size_t -strcspn( const char *, const char * ); - -externC char * -strpbrk( const char *, const char * ); - -externC char * -strrchr( const char *, int ); - -externC size_t -strspn( const char *, const char * ); - -externC char * -strstr( const char *, const char * ); - -externC char * -strtok( char *, const char * ); - -// POSIX 1003.1 section 8.3.3 strtok_r() - -externC char * -strtok_r( char *, const char *, char ** ); - - -//=========================================================================== - -// 7.11.6 Miscellaneous functions - -// memset is no longer actually implemented in the C library. -// It is now in the HAL - -externC void * -memset( void *, int, size_t ); - -// strerror() is provided in - -externC size_t -strlen( const char * ); - - -// INLINE FUNCTIONS - -#ifdef CYGIMP_LIBC_STRING_INLINES -#include -#endif - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_STRING_H multiple inclusion protection - -// EOF string.h diff --git a/packages/language/c/libc/current/include/string.inl b/packages/language/c/libc/current/include/string.inl deleted file mode 100644 --- a/packages/language/c/libc/current/include/string.inl +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef CYGONCE_LIBC_STRING_INL -#define CYGONCE_LIBC_STRING_INL -//=========================================================================== -// -// string.inl -// -// Inline functions for ANSI standard string and memory area -// manipulation routines described in ANSI para 7.11 -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: #include - do not include this file directly -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // header for this file just in case, although - // it should have already been included - - -CYGPRI_LIBC_INLINE int -strcoll( const char *s1, const char *s2 ) -{ - return strcmp(s1, s2); -} // strcoll() - - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_STRING_INL multiple inclusion protection - -// EOF string.inl diff --git a/packages/language/c/libc/current/include/sys/cstartup.h b/packages/language/c/libc/current/include/sys/cstartup.h deleted file mode 100644 --- a/packages/language/c/libc/current/include/sys/cstartup.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef CYGONCE_LIBC_CSTARTUP_H -#define CYGONCE_LIBC_CSTARTUP_H -//=========================================================================== -// -// cstartup.h -// -// Starting C library support -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-23 -// Purpose: -// Description: -// Usage: #include -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// FUNCTION PROTOTYPES - -#ifdef __cplusplus -extern "C" { -#endif - -extern void -cyg_iso_c_start( void ); - -#ifdef __cplusplus -} -#endif - -#endif CYGONCE_LIBC_CSTARTUP_H multiple inclusion protection - -// EOF cstartup.h diff --git a/packages/language/c/libc/current/include/sys/timeutil.h b/packages/language/c/libc/current/include/sys/timeutil.h deleted file mode 100644 --- a/packages/language/c/libc/current/include/sys/timeutil.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef CYGONCE_LIBC_SYS_TIMEUTIL_H -#define CYGONCE_LIBC_SYS_TIMEUTIL_H -//======================================================================== -// -// sys/timeutil.h -// -// ISO C date and time implementation support functions -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-03 -// Purpose: Provide declarations for support functions used by the -// ISO C date and time implementation -// Description: -// Usage: #include -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// INCLUDES - -#include // Common type definitions and support - -#ifdef __cplusplus -extern "C" { -#endif - -// GLOBALS - -// Strings of the days and month names -// FIXME: uncomment "const" when PR 19440 is fixed -extern /*const*/ char cyg_libc_time_day_name[7][10]; -extern const cyg_uint8 cyg_libc_time_day_name_len[7]; -extern /*const*/ char cyg_libc_time_month_name[12][10]; -extern const cyg_uint8 cyg_libc_time_month_name_len[12]; - -// number of days in each month, defined for normal and leap years -extern const cyg_uint8 cyg_libc_time_month_lengths[2][12]; - - -// FUNCTION PROTOTYPES - -// cyg_libc_time_normalize_structtm() will adjust the fields of a struct tm -// so that they are within the normal ranges expected. -// tm_wday, tm_yday, and tm_isdst are ignored - -extern void -cyg_libc_time_normalize_structtm( struct tm *__timeptr ); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // CYGONCE_LIBC_SYS_TIMEUTIL_H multiple inclusion protection - -// EOF sys/timeutil.h diff --git a/packages/language/c/libc/current/include/time.h b/packages/language/c/libc/current/include/time.h deleted file mode 100644 --- a/packages/language/c/libc/current/include/time.h +++ /dev/null @@ -1,326 +0,0 @@ -#ifndef CYGONCE_LIBC_TIME_H -#define CYGONCE_LIBC_TIME_H -//=========================================================================== -// -// time.h -// -// Date and time routines from ISO C section 7.12 and POSIX 1003.1 -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-25 -// Purpose: Provide definitions required by ISO C section 7.12 and -// POSIX 1003.1 8.3.4-8.3.7 -// Description: -// Usage: #include -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support -#include // is required to provide NULL - // and size_t, so we get them from compiler - -// CONSTANTS - -// What to divide clock_t by to get seconds (para 7.12.1) -// According to CAE XSH, Issue 4, V2, CLOCKS_PER_SEC must be 1 million on all -// XSI-conformant systems -#define CLOCKS_PER_SEC 1000000 - -// TYPE DEFINITIONS - -// Define clock_t as per ISO C para 7.12.1 -// We make it very big since CLOCKS_PER_SEC is so large - this should last -// for 584942 years :-) An int32 would only last a little over an hour :-( -typedef cyg_int64 clock_t; - -// Define time_t as per ISO C para 7.12.1 -// In the implementation we give it the meaning of seconds since the -// Epoch (00:00:00 GMT, 1970-01-01), but don't rely on this - always use -// the type opaquely -// A 32-bit value will overflow in the year 2038. Hopefully we will have -// moved forward from 32-bit CPUs by then, so making it a cyg_count* type -// may suffice ;-) -typedef cyg_count32 time_t; -#define __time_t_defined // FIXME: this is temporary to stop newlib's - // complaining. This should be resolved - // properly and a new provided - -// Define struct tm as per ISO C para 7.12.1 -struct tm { - int tm_sec; // seconds after the minute - [0..61] - // (note 61 allows for two leap seconds) - int tm_min; // minutes after the hour - [0..59] - int tm_hour; // hours since midnight - [0..23] - int tm_mday; // days of the month - [1..31] - int tm_mon; // months since January - [0..11] - int tm_year; // years since 1900 - int tm_wday; // days since Sunday - [0..6] - int tm_yday; // days since January 1 - [0..365] - int tm_isdst; // Daylight Saving Time flag - positive if DST is in - // effect, 0 if not in effect, and negative if the info - // is not available -}; - -// The following struct is used by the implementation-defined functions -// to manipulate the Daylight Savings Time state -typedef enum { - CYG_LIBC_TIME_DSTNA = -1, - CYG_LIBC_TIME_DSTOFF = 0, - CYG_LIBC_TIME_DSTON = 1 -} Cyg_libc_time_dst; - -// FUNCTION PROTOTYPES - -#ifdef __cplusplus -extern "C" { -#endif - -//=========================================================================== -// -// POSIX 1003.1 functions - -#ifdef CYGFUN_LIBC_TIME_POSIX - -///////////////////////////////// -// asctime_r() - POSIX.1 8.3.4 // -///////////////////////////////// -// -// This returns a textual representation of a struct tm, and writes -// the string to return into __buf -// - -extern char * -asctime_r( const struct tm *__timeptr, char *__buf ); - -/////////////////////////////// -// ctime_r() - POSIX.1 8.3.5 // -/////////////////////////////// -// -// This returns the equivalent of ctime() but writes to __buf -// to store the returned string -// - -extern char * -ctime_r( const time_t *__timer, char *__buf ); - -//////////////////////////////// -// gmtime_r() - POSIX.1 8.3.6 // -//////////////////////////////// -// -// This converts a time_t into a struct tm expressed in UTC, and stores -// the result in the space occupied by __result -// - -extern struct tm * -gmtime_r( const time_t *__timer, struct tm *__result ); - -/////////////////////////////////// -// localtime_r() - POSIX.1 8.3.7 // -/////////////////////////////////// -// -// This converts a time_t into a struct tm expressed in local time, and -// stores the result in the space occupied by __result -// - -extern struct tm * -localtime_r( const time_t *__timer, struct tm *__result ); - - -#endif // ifdef CYGFUN_LIBC_TIME_POSIX - -//=========================================================================== - -// ISO C functions - -// Time manipulation functions - ISO C 7.12.2 - -////////////////////////////// -// clock() - ISO C 7.12.2.1 // -////////////////////////////// -// -// Returns processor time used in "clock"s. For a single process, -// multi-threaded system this will just be the time since booting -// - -extern clock_t -clock( void ); - -///////////////////////////////// -// difftime() - ISO C 7.12.2.2 // -///////////////////////////////// -// -// This returns (__time1 - __time0) in seconds -// - -extern double -difftime( time_t __time1, time_t __time0 ); - -/////////////////////////////// -// mktime() - ISO C 7.12.2.3 // -/////////////////////////////// -// -// This converts a "struct tm" to a "time_t" -// - -extern time_t -mktime( struct tm *__timeptr ); - -///////////////////////////// -// time() - ISO C 7.12.2.4 // -///////////////////////////// -// -// This returns calendar time as a time_t -// - -extern time_t -time( time_t *__timer ); - -// Time conversion functions - ISO C 7.12.3 - -//////////////////////////////// -// asctime() - ISO C 7.12.3.1 // -//////////////////////////////// -// -// This returns a textual representation of a struct tm -// - -extern char * -asctime( const struct tm *__timeptr ); - -////////////////////////////// -// ctime() - ISO C 7.12.3.2 // -////////////////////////////// -// -// This returns asctime(localtime(__timeptr)) -// - -extern char * -ctime( const time_t *__timer ); - -/////////////////////////////// -// gmtime() - ISO C 7.12.3.3 // -/////////////////////////////// -// -// This converts a time_t into a struct tm expressed in UTC -// - -extern struct tm * -gmtime( const time_t *__timer ); - -////////////////////////////////// -// localtime() - ISO C 7.12.3.4 // -////////////////////////////////// -// -// This converts a time_t into a struct tm expressed in local time -// - -extern struct tm * -localtime( const time_t *__timer ); - -///////////////////////////////// -// strftime() - ISO C 7.12.3.5 // -///////////////////////////////// -// -// This converts a string using format specifiers that signify various -// time-related quantities -// - -extern size_t -strftime( char *__s, size_t __maxsize, const char *__format, - const struct tm *__timeptr) CYGPRI_LIBC_ATTRIB_FORMAT_STRFTIME; - -//=========================================================================== - -// Implementation-specific functions - -//////////////////////////////////// -// cyg_libc_time_setzoneoffsets() // -//////////////////////////////////// -// -// This function sets the offsets used when Daylight Savings Time is enabled -// or disabled. The offsets are in time_t's -// - -extern void -cyg_libc_time_setzoneoffsets( time_t __stdoffset, time_t __dstoffset ); - -//////////////////////////// -// cyg_libc_time_setdst() // -//////////////////////////// -// -// This function sets the state of Daylight Savings Time: on, off, or unknown -// - -extern void -cyg_libc_time_setdst( Cyg_libc_time_dst __state ); - - -//////////////////////////////////// -// cyg_libc_time_getzoneoffsets() // -//////////////////////////////////// -// -// This function retrieves the current state of the Daylight Savings Time -// and the offsets of both STD and DST -// The offsets are both in time_t's -// - -extern Cyg_libc_time_dst -cyg_libc_time_getzoneoffsets( time_t *__stdoffset, time_t *__dstoffset ); - -///////////////////////////// -// cyg_libc_time_settime() // -///////////////////////////// -// -// This function sets the current time for the system. The time is -// specified as a time_t in UTC. It returns non-zero on error. -// - -extern cyg_bool -cyg_libc_time_settime( time_t __utctime ); - - -#ifdef __cplusplus -} // extern "C" -#endif - -#include - -#endif // CYGONCE_LIBC_TIME_H multiple inclusion protection - -// EOF time.h diff --git a/packages/language/c/libc/current/include/time.inl b/packages/language/c/libc/current/include/time.inl deleted file mode 100644 --- a/packages/language/c/libc/current/include/time.inl +++ /dev/null @@ -1,852 +0,0 @@ -#ifndef CYGONCE_LIBC_TIME_INL -#define CYGONCE_LIBC_TIME_INL -//=========================================================================== -// -// time.inl -// -// Inline implementations of date and time routines from -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-25 -// Purpose: Provide inline implementations for some of the date and time -// routines declared in for ISO C section 7.12 and -// POSIX 1003.1 8.3.4-8.3.7 -// Description: -// Usage: Do not include this file directly. Instead include -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support -#include // Header for this file -#include // Assertion infrastructure -#include // Tracing infrastructure - -// DEFINES - -// The following are overriden by the libc implementation to get a non-inline -// version to prevent duplication of code - -#ifndef CYGPRI_LIBC_TIME_ASCTIME_R_INLINE -# define CYGPRI_LIBC_TIME_ASCTIME_R_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_TIME_CTIME_R_INLINE -# define CYGPRI_LIBC_TIME_CTIME_R_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_TIME_GMTIME_R_INLINE -# define CYGPRI_LIBC_TIME_GMTIME_R_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_TIME_LOCALTIME_R_INLINE -# define CYGPRI_LIBC_TIME_LOCALTIME_R_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_TIME_DIFFTIME_INLINE -# define CYGPRI_LIBC_TIME_DIFFTIME_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_TIME_MKTIME_INLINE -# define CYGPRI_LIBC_TIME_MKTIME_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_TIME_ASCTIME_INLINE -# define CYGPRI_LIBC_TIME_ASCTIME_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_TIME_CTIME_INLINE -# define CYGPRI_LIBC_TIME_CTIME_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_TIME_GMTIME_INLINE -# define CYGPRI_LIBC_TIME_GMTIME_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_TIME_LOCALTIME_INLINE -# define CYGPRI_LIBC_TIME_LOCALTIME_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_TIME_GETZONEOFFSETS_INLINE -# define CYGPRI_LIBC_TIME_GETZONEOFFSETS_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_TIME_SETZONEOFFSETS_INLINE -# define CYGPRI_LIBC_TIME_SETZONEOFFSETS_INLINE extern __inline__ -#endif - -#ifndef CYGPRI_LIBC_TIME_SETDST_INLINE -# define CYGPRI_LIBC_TIME_SETDST_INLINE extern __inline__ -#endif - -#define CYGNUM_LIBC_TIME_EPOCH_WDAY 4 // Jan 1st 1970 was a Thursday - -#ifdef __cplusplus -extern "C" { -#endif - -// EXTERNS - -// These are used in the dst access functions below. Do not access these -// directly - use the functions declared in time.h instead - -extern Cyg_libc_time_dst cyg_libc_time_current_dst_stat; -extern time_t cyg_libc_time_current_std_offset; -extern time_t cyg_libc_time_current_dst_offset; - -// INLINE FUNCTIONS - -//=========================================================================== -// -// Utility functions - -////////////////////////////////// -// cyg_libc_time_year_is_leap() // -////////////////////////////////// -// -// This returns true if the year is a leap year. -// The argument is of type int in line with struct tm -// - -static __inline__ cyg_bool -cyg_libc_time_year_is_leap( int __year ) -{ - cyg_bool _leap=false; - - if (!(__year % 400)) - _leap = true; - else if (!(__year % 4) && (__year % 100)) - _leap = true; - return _leap; -} // cyg_libc_time_year_is_leap() - - -//////////////////////////////////// -// cyg_libc_time_getzoneoffsets() // -//////////////////////////////////// -// -// This function retrieves the current state of the Daylight Savings Time -// and the offsets of both STD and DST -// The offsets are both in time_t's i.e. seconds -// - -CYGPRI_LIBC_TIME_GETZONEOFFSETS_INLINE Cyg_libc_time_dst -cyg_libc_time_getzoneoffsets( time_t *__stdoffset, time_t *__dstoffset ) -{ - CYG_REPORT_FUNCNAMETYPE("cyg_libc_time_getzoneoffsets", - "returning DST state %d"); - CYG_REPORT_FUNCARG2("__stdoffset is at address %08x, " - "__dstoffset is at %08x", __stdoffset, __dstoffset); - - CYG_CHECK_DATA_PTR(__stdoffset, "__stdoffset is not a valid pointer!"); - CYG_CHECK_DATA_PTR(__dstoffset, "__dstoffset is not a valid pointer!"); - - *__stdoffset = cyg_libc_time_current_std_offset; - *__dstoffset = cyg_libc_time_current_dst_offset; - - CYG_REPORT_RETVAL(cyg_libc_time_current_dst_stat); - - return cyg_libc_time_current_dst_stat; -} // cyg_libc_time_getzoneoffsets() - - -//////////////////////////////////// -// cyg_libc_time_setzoneoffsets() // -//////////////////////////////////// -// -// This function sets the offsets used when Daylight Savings Time is enabled -// or disabled. The offsets are in time_t's i.e. seconds -// - -CYGPRI_LIBC_TIME_SETZONEOFFSETS_INLINE void -cyg_libc_time_setzoneoffsets( time_t __stdoffset, time_t __dstoffset ) -{ - CYG_REPORT_FUNCNAME("cyg_libc_time_setzoneoffsets"); - CYG_REPORT_FUNCARG2DV(__stdoffset, __dstoffset); - - cyg_libc_time_current_std_offset = __stdoffset; - cyg_libc_time_current_dst_offset = __dstoffset; - - CYG_REPORT_RETURN(); -} // cyg_libc_time_setzoneoffsets() - - -//////////////////////////// -// cyg_libc_time_setdst() // -//////////////////////////// -// -// This function sets the state of Daylight Savings Time: on, off, or unknown -// - -CYGPRI_LIBC_TIME_SETDST_INLINE void -cyg_libc_time_setdst( Cyg_libc_time_dst __state ) -{ - CYG_REPORT_FUNCNAME("cyg_libc_time_setdst"); - CYG_REPORT_FUNCARG1("__state=%d", __state); - - cyg_libc_time_current_dst_stat = __state; - - CYG_REPORT_RETURN(); -} // cyg_libc_time_setdst() - - - -//=========================================================================== -// -// POSIX 1003.1 functions - -///////////////////////////////// -// asctime_r() - POSIX.1 8.3.4 // -///////////////////////////////// -// -// This returns a textual representation of a struct tm, and writes -// the string to return into __buf -// - -#ifdef CYGIMP_LIBC_TIME_ASCTIME_R_INLINE - -#include // for sprintf() -#include // for cyg_libc_time_{day,month}_name -#include // for memcpy() -#include // for cyg_libc_itoa() - -CYGPRI_LIBC_TIME_ASCTIME_R_INLINE char * -__asctime_r( const struct tm *__timeptr, char *__buf ) -{ - cyg_uint8 __i; - - // These initializers are [4] since C++ dictates you _must_ leave space - // for the trailing '\0', even though ISO C says you don't need to! - - CYG_REPORT_FUNCNAMETYPE("__asctime_r", "returning \"%s\""); - CYG_REPORT_FUNCARG2("__timeptr = %08x, __buf = %08x", __timeptr, __buf); - - // paranoia - most of these aren't required but could be helpful to - // a programmer debugging their own app. - CYG_CHECK_DATA_PTR(__timeptr, "__timeptr is not a valid pointer!"); - CYG_CHECK_DATA_PTR(__buf, "__buf is not a valid pointer!"); - - CYG_PRECONDITION((__timeptr->tm_sec >= 0) && (__timeptr->tm_sec < 62), - "__timeptr->tm_sec out of range!"); - CYG_PRECONDITION((__timeptr->tm_min >= 0) && (__timeptr->tm_min < 60), - "__timeptr->tm_min out of range!"); - CYG_PRECONDITION((__timeptr->tm_hour >= 0) && (__timeptr->tm_hour < 24), - "__timeptr->tm_hour out of range!"); - // Currently I don't check _actual_ numbers of days in each month here - // FIXME: No reason why not though - CYG_PRECONDITION((__timeptr->tm_mday >= 1) && (__timeptr->tm_mday < 32), - "__timeptr->tm_mday out of range!"); - CYG_PRECONDITION((__timeptr->tm_mon >= 0) && (__timeptr->tm_mon < 12), - "__timeptr->tm_mon out of range!"); - CYG_PRECONDITION((__timeptr->tm_wday >= 0) && (__timeptr->tm_wday < 7), - "__timeptr->tm_wday out of range!"); - CYG_PRECONDITION((__timeptr->tm_yday >= 0) && (__timeptr->tm_yday < 366), - "__timeptr->tm_yday out of range!"); - CYG_PRECONDITION((__timeptr->tm_year > -1900) && - (__timeptr->tm_year < 8100), - "__timeptr->tm_year out of range!"); - - // we can't use strftime because ISO C is stupid enough not to allow - // the strings in asctime() to be localized. Duh. - - // day of the week - memcpy(&__buf[0], cyg_libc_time_day_name[__timeptr->tm_wday], 3); - __buf[3] = ' '; - - // month - memcpy(&__buf[4], cyg_libc_time_month_name[__timeptr->tm_mon], 3); - __buf[7] = ' '; - - __i = 8; - - // day of the month - __i += cyg_libc_itoa( (cyg_uint8 *)&__buf[__i], __timeptr->tm_mday, 2, - true); - __buf[__i++] = ' '; - - // hour - __i += cyg_libc_itoa( (cyg_uint8 *)&__buf[__i], __timeptr->tm_hour, 2, - true); - __buf[__i++] = ':'; - - // minute - __i += cyg_libc_itoa( (cyg_uint8 *)&__buf[__i], __timeptr->tm_min, 2, - true); - __buf[__i++] = ':'; - - // second - __i += cyg_libc_itoa((cyg_uint8 *) &__buf[__i], __timeptr->tm_sec, 2, - true); - __buf[__i++] = ' '; - - // year - __i += cyg_libc_itoa( (cyg_uint8 *)&__buf[__i], 1900+__timeptr->tm_year, - 0, true); - - __buf[__i++] = '\n'; - __buf[__i++] = '\0'; - - CYG_REPORT_RETVAL(__buf); - return __buf; -} // __asctime_r() - -# ifdef CYGFUN_LIBC_TIME_POSIX -# define asctime_r(__timeptr, __buf) __asctime_r(__timeptr, __buf) -# endif - -#else - -extern char * -__asctime_r( const struct tm *__timeptr, char *__buf ); - -#endif // ifdef CYGIMP_LIBC_TIME_ASCTIME_R_INLINE - -//////////////////////////////// -// gmtime_r() - POSIX.1 8.3.6 // -//////////////////////////////// -// -// This converts a time_t into a struct tm expressed in UTC, and stores -// the result in the space occupied by __result -// - -#ifdef CYGIMP_LIBC_TIME_GMTIME_R_INLINE - -#include // for cyg_libc_time_month_lengths - -CYGPRI_LIBC_TIME_GMTIME_R_INLINE struct tm * -__gmtime_r( const time_t *__timer, struct tm *__result ) -{ - time_t _tim; - const cyg_uint8 *_months_p; - - CYG_REPORT_FUNCNAMETYPE("__gmtime_r", "returning %08x"); - CYG_CHECK_DATA_PTR(__timer, "__timer is not a valid pointer!"); - CYG_CHECK_DATA_PTR(__result, "__result is not a valid pointer!"); - CYG_REPORT_FUNCARG2("*__timer=%d, __result is at %08x", - *__timer, __result); - -#define CYGNUM_LIBC_TIME_SECSPERDAY (60*60*24) -#define CYGNUM_LIBC_TIME_SECSPERYEAR (CYGNUM_LIBC_TIME_SECSPERDAY * 365) -#define CYGNUM_LIBC_TIME_SECSPERLEAPYEAR (CYGNUM_LIBC_TIME_SECSPERDAY * 366) - - _tim = *__timer; - - // First, work out year. Start off with 1970 and work forwards or backwards - // depending on the sign of _tim - __result->tm_year = 70; - - // we also work out the day of the week of the start of the year as we - // go along - __result->tm_wday = CYGNUM_LIBC_TIME_EPOCH_WDAY; - - while (_tim < 0) { - // Work backwards - - --__result->tm_year; - - // Check for a leap year. - if (cyg_libc_time_year_is_leap(1900 + __result->tm_year)) { - _tim += CYGNUM_LIBC_TIME_SECSPERLEAPYEAR; - __result->tm_wday -= 366; - } // if - else { - _tim += CYGNUM_LIBC_TIME_SECSPERYEAR; - __result->tm_wday -= 365; - } // else - - } // while - - while (_tim >= CYGNUM_LIBC_TIME_SECSPERYEAR) { - // Work forwards - - if (cyg_libc_time_year_is_leap(1900 + __result->tm_year)) { - - // But if this is a leap year, its possible that we are in the - // middle of the last "extra" day - if (_tim < CYGNUM_LIBC_TIME_SECSPERLEAPYEAR) - break; - - _tim -= CYGNUM_LIBC_TIME_SECSPERLEAPYEAR; - __result->tm_wday += 366; - } // if - else { - _tim -= CYGNUM_LIBC_TIME_SECSPERYEAR; - __result->tm_wday += 365; - } - ++__result->tm_year; - } // while - - // Day of the year. We know _tim is +ve now - CYG_ASSERT(_tim >= 0, - "Number of seconds since start of year is negative!"); - __result->tm_yday = _tim / CYGNUM_LIBC_TIME_SECSPERDAY; - - // Day of the week. Normalize to be 0..6, and note that it might - // be negative, so we have to deal with the modulus being - // implementation-defined for -ve numbers (ISO C 6.3.5) - __result->tm_wday = (((__result->tm_wday + __result->tm_yday)%7)+7)%7; - - // Month and Day of the month - - _months_p = cyg_libc_time_month_lengths[ - cyg_libc_time_year_is_leap(1900 + __result->tm_year) ? 1 : 0 ]; - - __result->tm_mday = __result->tm_yday+1; - - for (__result->tm_mon = 0; - __result->tm_mday > _months_p[__result->tm_mon]; - ++__result->tm_mon) { - - __result->tm_mday -= _months_p[__result->tm_mon]; - - } // for - - _tim -= __result->tm_yday*CYGNUM_LIBC_TIME_SECSPERDAY; - - // hours, mins secs - __result->tm_hour = (int) (_tim / 3600); - _tim %= 3600; - __result->tm_min = (int) (_tim / 60); - __result->tm_sec = (int) (_tim % 60); - - __result->tm_isdst = 0; // gmtime always returns non-DST - - CYG_REPORT_RETVAL(__result); - - return __result; -} // __gmtime_r() - -# ifdef CYGFUN_LIBC_TIME_POSIX -# define gmtime_r(__timer, __result) __gmtime_r(__timer, __result) -# endif - -#else - -extern struct tm * -__gmtime_r( const time_t *__timer, struct tm *__result ); - -#endif // ifdef CYGIMP_LIBC_TIME_GMTIME_R_INLINE - -/////////////////////////////////// -// localtime_r() - POSIX.1 8.3.7 // -/////////////////////////////////// -// -// This converts a time_t into a struct tm expressed in local time, and -// stores the result in the space occupied by __result -// - -#ifdef CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE - -#include // for cyg_libc_time_normalize_structtm() - -CYGPRI_LIBC_TIME_LOCALTIME_R_INLINE struct tm * -__localtime_r( const time_t *__timer, struct tm *__result ) -{ - time_t __stdoffset, __dstoffset; - CYG_REPORT_FUNCNAMETYPE("__localtime_r", "returning %08x"); - CYG_CHECK_DATA_PTR(__timer, "__timer is not a valid pointer!"); - CYG_CHECK_DATA_PTR(__result, "__result is not a valid pointer!"); - CYG_REPORT_FUNCARG2("*__timer=%d, __result is at %08x", - *__timer, __result); - - __gmtime_r(__timer, __result); - - // Adjust for STD/DST - __result->tm_isdst = cyg_libc_time_getzoneoffsets(&__stdoffset, - &__dstoffset); - - if (__result->tm_isdst == 0) { // STD - __result->tm_sec += __stdoffset; - cyg_libc_time_normalize_structtm( __result ); - } // if - else if (__result->tm_isdst > 0) { // DST - __result->tm_sec += __dstoffset; - cyg_libc_time_normalize_structtm( __result ); - } // if - // Don't do anything for tm_isdst == -1 - - CYG_REPORT_RETVAL(__result); - - return __result; -} // __localtime_r() - -# ifdef CYGFUN_LIBC_TIME_POSIX -# define localtime_r(__timer, __result) __localtime_r(__timer, __result) -# endif - -#else - -extern struct tm * -__localtime_r( const time_t *__timer, struct tm *__result ); - -#endif // ifdef CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE - -/////////////////////////////// -// ctime_r() - POSIX.1 8.3.5 // -/////////////////////////////// -// -// This returns the equivalent of ctime() but writes to __buf -// to store the returned string -// - -#ifdef CYGIMP_LIBC_TIME_CTIME_R_INLINE - -CYGPRI_LIBC_TIME_CTIME_R_INLINE char * -__ctime_r( const time_t *__timer, char *__buf ) -{ - struct tm _mytm; - - CYG_REPORT_FUNCNAMETYPE("__ctime_r", "returning \"%s\""); - - CYG_CHECK_DATA_PTR(__timer, "__timer is not a valid pointer!"); - CYG_CHECK_DATA_PTR(__buf, "__buf is not a valid pointer!"); - - CYG_REPORT_FUNCARG2("*__timer = %d, __buf=%08x", *__timer, __buf); - - __localtime_r( __timer, &_mytm ); - - __asctime_r(&_mytm, __buf); - - CYG_REPORT_RETVAL(__buf); - - return __buf; -} // __ctime_r() - -# ifdef CYGFUN_LIBC_TIME_POSIX -# define ctime_r(__timer, __buf) __ctime_r(__timer, __buf) -# endif - -#else - -extern char * -__ctime_r( const time_t *__timer, char *__buf ); - -#endif // ifdef CYGIMP_LIBC_TIME_CTIME_R_INLINE - -//=========================================================================== -// -// ISO C functions - -// Time manipulation functions - ISO C 7.12.2 - -///////////////////////////////// -// difftime() - ISO C 7.12.2.2 // -///////////////////////////////// -// -// This returns (__time1 - __time0) in seconds -// - -#ifdef CYGIMP_LIBC_TIME_DIFFTIME_INLINE - -CYGPRI_LIBC_TIME_DIFFTIME_INLINE double -__difftime( time_t __time1, time_t __time0 ) -{ - double _ret; - - CYG_REPORT_FUNCNAMETYPE("__difftime", "returning %f"); - CYG_REPORT_FUNCARG2("__time1=%d, __time0=%d", __time1, __time0); - - _ret = (double)(__time1 - __time0); - - CYG_REPORT_RETVAL(_ret); - - return _ret; -} // __difftime() - -# define difftime(__time1, __time0) __difftime(__time1, __time0) - -#else - -extern double -__difftime( time_t __time1, time_t __time0 ); - -#endif // ifdef CYGIMP_LIBC_TIME_DIFFTIME_INLINE - -/////////////////////////////// -// mktime() - ISO C 7.12.2.3 // -/////////////////////////////// -// -// This converts a "struct tm" to a "time_t" -// - -#ifdef CYGIMP_LIBC_TIME_MKTIME_INLINE - -#include // for cyg_libc_time_normalize_structtm() - // and cyg_libc_time_month_lengths - -CYGPRI_LIBC_TIME_MKTIME_INLINE time_t -__mktime( struct tm *__timeptr ) -{ - time_t _ret; - cyg_count16 _i; - cyg_count32 _daycount; - cyg_bool _leap; - - CYG_REPORT_FUNCNAMETYPE("__mktime", "returning %d"); - CYG_REPORT_FUNCARG1( "__timeptr is at address %08x", __timeptr); - - CYG_CHECK_DATA_PTR(__timeptr, "__timeptr is not a valid pointer!"); - - // First deal with STD/DST. If tm_isdst==-1 (the "autodetect" value) - // we assume its already in UTC. FIXME: is this correct behaviour? Hmm.... - -#if 0 -// FIXME: This doesn't seem to be the way to go - if (__timeptr->tm_isdst == 0) { // STD - // take _off_ the std offset to get us back to UTC from localtime - __timeptr->tm_sec -= (int)cyg_libc_time_current_std_offset; - } // if - else if (__timeptr->tm_isdst > 0) { // DST - // take _off_ the dst offset to get us back to UTC from localtime - __timeptr->tm_sec -= (int)cyg_libc_time_current_dst_offset; - } // if -#endif - - cyg_libc_time_normalize_structtm(__timeptr); - - // check if a time_t can hold the year. FIXME: we assume it is - // 32 bits which gives the year range 1902 - 2038 - if ( (__timeptr->tm_year <= 2) || (__timeptr->tm_year >= 138) ) { - CYG_REPORT_RETVAL(-1); - return (time_t)-1; - } - - // fill in the rest of the struct tm i.e. tm_wday and tm_yday - - _leap = cyg_libc_time_year_is_leap(1900 + __timeptr->tm_year); - - for (_i=0, _daycount=0; _i<12; ++_i) { - if (_i == __timeptr->tm_mon) { - _daycount += __timeptr->tm_mday - 1; - break; - } // if - else { - _daycount += cyg_libc_time_month_lengths[_leap][_i]; - } // else - } // for - - CYG_ASSERT(_i<12, "Reached end of year. __timeptr->tm_mon must be bad"); - - __timeptr->tm_yday = _daycount; - - // now tm_wday - - if (__timeptr->tm_year > 70) { - for (_i=70; _i < __timeptr->tm_year; ++_i) - _daycount += (cyg_libc_time_year_is_leap(1900 + _i) ? 366 : 365); - } // if - else if (__timeptr->tm_year < 70) { - for (_i=70; _i > __timeptr->tm_year; --_i) - _daycount -= (cyg_libc_time_year_is_leap(1900 + _i-1) ? 366 : 365); - } // else if - - __timeptr->tm_wday = (_daycount + CYGNUM_LIBC_TIME_EPOCH_WDAY) % 7; - - // if _daycount was negative, on some targets the modulo operator will - // return negative, so we adjust for that - - if (__timeptr->tm_wday < 0) - __timeptr->tm_wday += 7; - - // now finally work out return value - - _ret = __timeptr->tm_sec + 60*__timeptr->tm_min + 60*60*__timeptr->tm_hour; - _ret += _daycount*24*60*60; - - CYG_REPORT_RETVAL(_ret); - - return _ret; -} // __mktime() - -# define mktime(__timeptr) __mktime(__timeptr) - -#else - -extern time_t -__mktime( struct tm *__timeptr ); - -#endif // ifdef CYGIMP_LIBC_TIME_MKTIME_INLINE - -// Time conversion functions - ISO C 7.12.3 - -//////////////////////////////// -// asctime() - ISO C 7.12.3.1 // -//////////////////////////////// -// -// This returns a textual representation of a struct tm -// - -#ifdef CYGIMP_LIBC_TIME_ASCTIME_INLINE - -extern char cyg_libc_time_asctime_buf[]; - -CYGPRI_LIBC_TIME_ASCTIME_INLINE char * -__asctime( const struct tm *__timeptr ) -{ - CYG_REPORT_FUNCNAMETYPE("__asctime", "returning \"%s\""); - CYG_REPORT_FUNCARG1("__timeptr = %08x", __timeptr); - - // paranoia - CYG_CHECK_DATA_PTR(__timeptr, "__timeptr is not a valid pointer!"); - - (void)__asctime_r( __timeptr, cyg_libc_time_asctime_buf ); - - CYG_REPORT_RETVAL(cyg_libc_time_asctime_buf); - - return cyg_libc_time_asctime_buf; -} // __asctime() - -# define asctime(__timeptr) __asctime(__timeptr) - -#else - -extern char * -__asctime( const struct tm *__timeptr ); - -#endif // ifdef CYGIMP_LIBC_TIME_ASCTIME_INLINE - -/////////////////////////////// -// gmtime() - ISO C 7.12.3.3 // -/////////////////////////////// -// -// This converts a time_t into a struct tm expressed in UTC -// - -#ifdef CYGIMP_LIBC_TIME_GMTIME_INLINE - -extern struct tm cyg_libc_time_gmtime_buf; - -CYGPRI_LIBC_TIME_GMTIME_INLINE struct tm * -__gmtime( const time_t *__timer ) -{ - CYG_REPORT_FUNCNAMETYPE("__gmtime", "returning %08x"); - CYG_CHECK_DATA_PTR(__timer, "__timer is not a valid pointer!"); - CYG_REPORT_FUNCARG1("*__timer=%d", *__timer); - - __gmtime_r(__timer, &cyg_libc_time_gmtime_buf); - - CYG_REPORT_RETVAL(&cyg_libc_time_gmtime_buf); - - return &cyg_libc_time_gmtime_buf; -} // __gmtime() - -# define gmtime(__timer) __gmtime(__timer) - -#else - -extern struct tm * -__gmtime( const time_t *__timer); - -#endif // ifdef CYGIMP_LIBC_TIME_GMTIME_INLINE - -////////////////////////////////// -// localtime() - ISO C 7.12.3.4 // -////////////////////////////////// -// -// This converts a time_t into a struct tm expressed in local time -// - -#ifdef CYGIMP_LIBC_TIME_LOCALTIME_INLINE - -extern struct tm cyg_libc_time_localtime_buf; - -CYGPRI_LIBC_TIME_LOCALTIME_INLINE struct tm * -__localtime( const time_t *__timer ) -{ - CYG_REPORT_FUNCNAMETYPE("__localtime", "returning %08x"); - CYG_CHECK_DATA_PTR(__timer, "__timer is not a valid pointer!"); - CYG_REPORT_FUNCARG1("*__timer=%d", *__timer); - - __localtime_r(__timer, &cyg_libc_time_localtime_buf); - - CYG_REPORT_RETVAL(&cyg_libc_time_localtime_buf); - - return &cyg_libc_time_localtime_buf; -} // __localtime() - -# define localtime(__timer) __localtime(__timer) - -#else - -extern struct tm * -__localtime( const time_t *__timer ); - -#endif // ifdef CYGIMP_LIBC_TIME_LOCALTIME_INLINE - -////////////////////////////// -// ctime() - ISO C 7.12.3.2 // -////////////////////////////// -// -// This returns asctime(localtime(__timeptr)) -// - -#ifdef CYGIMP_LIBC_TIME_CTIME_INLINE - -CYGPRI_LIBC_TIME_CTIME_INLINE char * -__ctime( const time_t *__timer ) -{ - char *_str; - - CYG_REPORT_FUNCNAMETYPE("__ctime", "returning \"%s\""); - CYG_CHECK_DATA_PTR( __timer, "__timer is not a valid pointer!"); - CYG_REPORT_FUNCARG1("*__timer = %d", *__timer); - - _str = __asctime(__localtime(__timer)); - - CYG_REPORT_RETVAL(_str); - - return _str; -} // __ctime() - -# define ctime(__timer) __ctime(__timer) - -#else - -extern char * -__ctime( const time_t *__timer ); - -#endif // ifdef CYGIMP_LIBC_TIME_CTIME_INLINE - - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // CYGONCE_LIBC_TIME_INL multiple inclusion protection - -// EOF time.inl diff --git a/packages/language/c/libc/current/src/clibincl/ctypesupp.hxx b/packages/language/c/libc/current/src/clibincl/ctypesupp.hxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/clibincl/ctypesupp.hxx +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef CYGONCE_LIBC_CLIBINCL_CTYPESUPP_HXX -#define CYGONCE_LIBC_CLIBINCL_CTYPESUPP_HXX -//======================================================================== -// -// ctypesupp.hxx -// -// Support for ANSI ctype functions -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: #include "clibincl/ctypesupp.hxx" -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - - -// FUNCTION PROTOTYPES - -// These are function prototypes for the aliased functions that actually -// implement the ctype functions - -//======================================================================== - -// 7.3.1 Character testing functions - -externC int -_isalnum( int ); - -externC int -_isalpha( int ); - -externC int -_iscntrl( int ); - -externC int -_isdigit( int ); - -externC int -_isgraph( int ); - -externC int -_islower( int ); - -externC int -_isprint( int ); - -externC int -_ispunct( int ); - -externC int -_isspace( int ); - -externC int -_isupper( int ); - -externC int -_isxdigit( int ); - -//======================================================================== - -// 7.3.2 Character case mapping functions - -externC int -_tolower( int ); - -externC int -_toupper( int ); - - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_CLIBINCL_CTYPESUPP_HXX multiple inclusion protection - -// EOF ctypesupp.hxx diff --git a/packages/language/c/libc/current/src/clibincl/i18nsupp.hxx b/packages/language/c/libc/current/src/clibincl/i18nsupp.hxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/clibincl/i18nsupp.hxx +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef CYGONCE_LIBC_CLIBINCL_I18NSUPP_HXX -#define CYGONCE_LIBC_CLIBINCL_I18NSUPP_HXX -//======================================================================== -// -// i18nsupp.hxx -// -// Support for ISO C internationalisation (i18n) functions -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-08-31 -// Purpose: -// Description: -// Usage: #include "clibincl/i18nsupp.hxx" -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // struct lconv - - -// FUNCTION PROTOTYPES - -// These are function prototypes for the aliased functions that actually -// implement the i18n functions - -//======================================================================== - -externC char * -_setlocale( int /* category */, const char * /* locale */ ); - -externC struct lconv * -_localeconv( void ); - - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_CLIBINCL_I18NSUPP_HXX multiple inclusion protection - -// EOF i18nsupp.hxx diff --git a/packages/language/c/libc/current/src/clibincl/setjmpsupp.hxx b/packages/language/c/libc/current/src/clibincl/setjmpsupp.hxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/clibincl/setjmpsupp.hxx +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef CYGONCE_LIBC_CLIBINCL_SETJMPSUPP_HXX -#define CYGONCE_LIBC_CLIBINCL_SETJMPSUPP_HXX -//=========================================================================== -// -// setjmpsupp.hxx -// -// Support header file for ANSI standard non-local jumps -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: Header file to support ANSI standard non-local jumps as -// per ANSI para 7.6 -// Usage: #include "clibincl/setjmpsupp.hxx" -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Normal setjmp header for jmp_buf - -// FUNCTION PROTOTYPES - -// longjmp() function, as described in ANSI para 7.6.2.1 -externC void -_longjmp( jmp_buf, int ) CYGPRI_LIBC_NORETURN; - - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_CLIBINCL_SETJMPSUPP_HXX multiple inclusion protection - -// EOF setjmpsupp.hxx diff --git a/packages/language/c/libc/current/src/clibincl/stdiofiles.hxx b/packages/language/c/libc/current/src/clibincl/stdiofiles.hxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/clibincl/stdiofiles.hxx +++ /dev/null @@ -1,112 +0,0 @@ -#ifndef CYGONCE_LIBC_STDIOFILES_HXX -#define CYGONCE_LIBC_STDIOFILES_HXX -//======================================================================== -// -// stdiofiles.hxx -// -// ISO C library stdio central file access -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: -// Description: -// Usage: #include "clibincl/stdiosupp.hxx" -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -#ifdef CYGPKG_LIBC_STDIO - -// INCLUDES - -#include // cyg_bool, cyg_ucount8, cyg_ucount16 -#include "clibincl/stream.hxx" // Cyg_StdioStream - -#ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS -# include // mutexes -#endif - -// CLASSES - -class Cyg_libc_stdio_files -{ - // List of open files - global for now - static - Cyg_StdioStream *files[FOPEN_MAX]; - -# ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS - // lock for the above - static - Cyg_Mutex files_lock; -# endif - -public: - -# if FOPEN_MAX < 256 - typedef cyg_ucount8 fd_t; -# else - typedef cyg_ucount16 fd_t; -# endif - - static Cyg_StdioStream * - get_file_stream( fd_t fd ); - - static void - set_file_stream( fd_t fd, Cyg_StdioStream *stream ); - - - // the following functions lock(), trylock() and unlock() do nothing - // if we haven't got thread-safe streams - static cyg_bool - lock(void); - - static cyg_bool - trylock(void); - - static void - unlock(void); - -}; // class Cyg_libc_stdio_files - - -// Inline functions for this class -#include "clibincl/stdiofiles.inl" - -#endif // ifdef CYGPKG_LIBC_STDIO - -#endif // CYGONCE_LIBC_STDIOFILES_HXX multiple inclusion protection - -// EOF stdiofiles.hxx diff --git a/packages/language/c/libc/current/src/clibincl/stdiofiles.inl b/packages/language/c/libc/current/src/clibincl/stdiofiles.inl deleted file mode 100644 --- a/packages/language/c/libc/current/src/clibincl/stdiofiles.inl +++ /dev/null @@ -1,121 +0,0 @@ -#ifndef CYGONCE_LIBC_STDIOFILES_INL -#define CYGONCE_LIBC_STDIOFILES_INL -//======================================================================== -// -// stdiofiles.inl -// -// ISO C library stdio central file inlines -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: -// Description: -// Usage: Do not include this file directly. Instead use: -// #include "clibincl/stdiosupp.hxx" -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -#ifdef CYGPKG_LIBC_STDIO - -// INCLUDES - -#include // cyg_bool -#include // Assert interface -#include "clibincl/stdiofiles.hxx" // header for this file -#include "clibincl/stream.hxx" // Cyg_StdioStream - -#ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS -# include // mutexes -#endif - -// INLINE METHODS - -inline Cyg_StdioStream * -Cyg_libc_stdio_files::get_file_stream( fd_t fd ) -{ - CYG_PRECONDITION( (fd < FOPEN_MAX), - "Attempt to open larger file descriptor than FOPEN_MAX!" ); - - return files[fd]; - -} // Cyg_libc_stdio_files::get_file_stream() - -inline void -Cyg_libc_stdio_files::set_file_stream( fd_t fd, Cyg_StdioStream *stream ) -{ - CYG_PRECONDITION( (fd < FOPEN_MAX), - "Attempt to set larger file descriptor than FOPEN_MAX!" ); - - files[fd] = stream; - -} // Cyg_libc_stdio_files::set_file_stream() - - -inline cyg_bool -Cyg_libc_stdio_files::lock(void) -{ -# ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS - return files_lock.lock(); -# else - return true; -# endif -} // Cyg_libc_stdio_files::lock() - -inline cyg_bool -Cyg_libc_stdio_files::trylock(void) -{ -# ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS - return files_lock.trylock(); -# else - return true; -# endif -} // Cyg_libc_stdio_files::trylock() - -inline void -Cyg_libc_stdio_files::unlock(void) -{ -# ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS - files_lock.unlock(); -# endif -} // Cyg_libc_stdio_files::unlock() - - -#endif // ifdef CYGPKG_LIBC_STDIO - -#endif // CYGONCE_LIBC_STDIOFILES_INL multiple inclusion protection - -// EOF stdiofiles.inl diff --git a/packages/language/c/libc/current/src/clibincl/stdiosupp.hxx b/packages/language/c/libc/current/src/clibincl/stdiosupp.hxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/clibincl/stdiosupp.hxx +++ /dev/null @@ -1,217 +0,0 @@ -#ifndef CYGONCE_LIBC_CLIBINCL_STDIOSUPP_HXX -#define CYGONCE_LIBC_CLIBINCL_STDIOSUPP_HXX -//======================================================================== -// -// stdiosupp.hxx -// -// Support for C library standard I/O routines -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: #include "clibincl/stdiosupp.hxx" -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // common type definitions and support -#include // NULL and size_t from compiler -#include // va_list from compiler -#include // Main standard I/O header -#include // Device table -#include "clibincl/stream.hxx" // Cyg_StdioStream -#include // Cyg_ErrNo - -// FUNCTION PROTOTYPES - -//======================================================================== - -// Miscellaneous support functions - -externC cyg_io_handle_t -Cyg_libc_stdio_find_filename( const char *filename ); - -externC Cyg_ErrNo -cyg_libc_stdio_flush_all_but( Cyg_StdioStream *not_this_stream ); - -//======================================================================== - -// ISO C 7.9.5 File access functions - -externC int -_fclose( FILE * /* stream */ ); - -externC int -_fflush( FILE * /* stream */ ); - -externC FILE * -_fopen( const char * /* filename */, const char * /* mode */ ); - -externC FILE * -_freopen( const char * /* filename */, const char * /* mode */, - FILE * /* stream */ ); - -externC void -_setbuf( FILE * /* stream */, char * /* buffer */ ); - -externC int -_setvbuf( FILE * /* stream */, char * /* buffer */, int /* mode */, - size_t /* size */ ); - -//======================================================================== - -// ISO C 7.9.6 Formatted input/output functions - -externC int -_fprintf( FILE * /* stream */, const char * /* format */, ... ); - -externC int -_fscanf( FILE * /* stream */, const char * /* format */, ... ); - -externC int -_printf( const char * /* format */, ... ); - -externC int -_scanf( const char * /* format */, ... ); - -externC int -_sprintf( char * /* str */, const char * /* format */, ... ); - -externC int -_sscanf( const char * /* str */, const char * /* format */, ... ); - -externC int -_vfprintf( FILE * /* stream */, const char * /* format */, - va_list /* args */ ); - -externC int -_vprintf( const char * /* format */, va_list /* args */ ); - -externC int -_vsprintf( char * /* str */, const char * /* format */, - va_list /* args */ ); - -//======================================================================== - -// ISO C 7.9.7 Character input/output functions - -externC char * -_fgets( char * /* str */, int /* length */, FILE * /* stream */ ); - -externC int -_fputs( const char * /* str */, FILE * /* stream */ ); - -externC char * -_gets( char * ); - -externC int -_puts( const char * /* str */ ); - -externC int -_ungetc( int /* c */, FILE * /* stream */ ); - -//======================================================================== - -// ISO C 7.9.8 Direct input/output functions - -externC size_t -_fread( void * /* ptr */, size_t /* object_size */, - size_t /* num_objects */, FILE * /* stream */ ); - -externC size_t -_fwrite( const void * /* ptr */, size_t /* object_size */, - size_t /* num_objects */, FILE * /* stream */ ); - - -//======================================================================== - -// ISO C 7.9.10 Error-handling functions - -externC void -_clearerr( FILE * /* stream */ ); - -externC int -_feof( FILE * /* stream */ ); - -externC int -_ferror( FILE * /* stream */ ); - -externC void -_perror( const char * /* prefix_str */ ); - -//======================================================================== - -// Other non-ISO C functions - -externC int -_fnprintf( FILE * /* stream */, size_t /* length */, - const char * /* format */, ... ); - -externC int -_snprintf( char * /* str */, size_t /* length */, - const char * /* format */, ... ); - -externC int -_vfnprintf( FILE * /* stream */, size_t /* length */, - const char * /* format */, va_list /* args */ ); - -externC int -_vsnprintf( char * /* str */, size_t /* length */, - const char * /* format */, va_list /* args */ ); - -externC int -_vscanf( const char * /* format */, va_list /* args */ ); - -externC int -_vsscanf( const char * /* str */, const char * /* format */, - va_list /* args */ ); - -externC int -_vfscanf( FILE * /* stream */, const char * /* format */, - va_list /* args */ ); - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -#endif // CYGONCE_LIBC_CLIBINCL_STDIOSUPP_HXX multiple inclusion protection - -// EOF stdiosupp.hxx diff --git a/packages/language/c/libc/current/src/clibincl/stdlibsupp.hxx b/packages/language/c/libc/current/src/clibincl/stdlibsupp.hxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/clibincl/stdlibsupp.hxx +++ /dev/null @@ -1,185 +0,0 @@ -#ifndef CYGONCE_LIBC_CLIBINCL_STDLIBSUPP_HXX -#define CYGONCE_LIBC_CLIBINCL_STDLIBSUPP_HXX -//======================================================================== -// -// stdlibsupp.hxx -// -// Support for ANSI standard utility functions -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: #include "clibincl/stdlibsupp.hxx" -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common project-wide type definitions -#include // Header for the standard utility functions - // including definition of - // Cyg_comparison_fn_t and Cyg_atexit_fn_t - -// FUNCTION PROTOTYPES - -// Allow the atexit handlers to be invoked -externC void -cyg_libc_invoke_atexit_handlers( void ); - -// These are function prototypes for the aliased functions that actually -// implement the stdlib functions - -//======================================================================== - -// 7.10.1 String conversion functions - -externC double -_atof( const char * /* double_str */ ); - -externC int -_atoi( const char * /* int_str */ ); - -externC long -_atol( const char * /* long_str */ ); - -externC double -_strtod( const char * /* double_str */, char ** /* endptr */ ); - -externC long -_strtol( const char * /* long_str */, char ** /* endptr */, - int /* base */ ); - -externC unsigned long -_strtoul( const char * /* ulong_str */, char ** /* endptr */, - int /* base */ ); - -//======================================================================== - -// 7.10.2 Pseudo-random sequence generation functions - -externC int -_rand( void ); - -externC void -_srand( unsigned int /* seed */ ); - -// POSIX 1003.1 section 8.3.8 rand_r() -externC int -_rand_r( unsigned int * /* seed */ ); - -//======================================================================== - -// 7.10.3 Memory management functions - -#ifdef CYGPKG_LIBC_MALLOC - -externC void * -_calloc( size_t /* num_objects */, size_t /* object_size */ ); - -externC void -_free( void * /* ptr */ ); - -externC void * -_malloc( size_t /* size */ ); - -externC void * -_realloc( void * /* ptr */, size_t /* size */ ); - -#endif // ifdef CYGPKG_LIBC_MALLOC - -//======================================================================== - -// 7.10.4 Communication with the environment - -externC void -_abort( void ) CYGBLD_ATTRIB_NORET; - -externC int -_atexit( Cyg_libc_atexit_fn_t /* func_to_register */ ); - -// The "real" names for exit() and _exit() are different for obvious name -// clash issues - -externC void -__libc_exit( int /* status */ ) CYGBLD_ATTRIB_NORET; - -// POSIX 1003.1 section 3.2.2 "Terminate a process" - -externC void -__libc__exit( int /* status */ ) CYGBLD_ATTRIB_NORET; - -externC char * -_getenv( const char * /* name */ ); - -//======================================================================== - -// 7.10.5 Searching and sorting utilities - -externC void * -_bsearch( const void * /* search_key */, const void * /* first_object */, - size_t /* num_objects */, size_t /* object_size */, - Cyg_comparison_fn_t /* comparison_fn */ ); - -externC void -_qsort( void * /* first_object */, size_t /* num_objects */, - size_t /* object_size */, - Cyg_comparison_fn_t /* comparison_fn */ ); - - -//======================================================================== - -// 7.10.6 Integer arithmetic functions - -externC int -_abs( int /* val */ ); - -externC long -_labs( long /* val */ ); - -//======================================================================== - - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_CLIBINCL_STDLIBSUPP_HXX multiple inclusion - // protection - -// EOF stdlibsupp.hxx diff --git a/packages/language/c/libc/current/src/clibincl/stream.hxx b/packages/language/c/libc/current/src/clibincl/stream.hxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/clibincl/stream.hxx +++ /dev/null @@ -1,308 +0,0 @@ -#ifndef CYGONCE_LIBC_CLIBINCL_STREAM_HXX -#define CYGONCE_LIBC_CLIBINCL_STREAM_HXX -//======================================================================== -// -// stream.hxx -// -// Internal C library stdio stream interface definitions -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: #include "clibincl/stream.hxx" -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - - -// INCLUDES - -#include // Common project-wide type definitions -#include // Get assertion macros, as appropriate -#include // Cyg_ErrNo -#include // fpos_t and IOBUF defines -#include "clibincl/streambuf.hxx" // Stdio stream file buffers -#include // General I/O support - -#ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS -#include -#include // Cyg_Mutex -#endif - -// FUNCTION PROTOTYPES - -// can't get this from stdiosupp.hxx due to potential header recursion -externC int -_setvbuf( FILE * /* stream */, char * /* buffer */, int /* mode */, - size_t /* size */ ); - -// TYPE DEFINITIONS - -class Cyg_StdioStream -{ - friend int _setvbuf( FILE *, char *, int, size_t ); - -private: - - // error status for this file - Cyg_ErrNo error; - - - cyg_io_handle_t my_device; - -#ifdef CYGFUN_LIBC_STDIO_ungetc - cyg_uint8 unread_char_buf; -#endif - -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - Cyg_StdioStreamBuffer io_buf; // read/write buffer -#endif - cyg_uint8 readbuf_char; // a one character emergency "buffer" - // only used when configured to not buffer - // (i.e. !CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO) - // or set at runtime to not buffer (i.e. - // buffering mode is _IONBF) - - // some flags indicating the state of the file. Some of it is internal - // state, which should not be public. Use bitfields to save - // space, which means using "unsigned int" rather than cyg_uintX - struct { - unsigned int at_eof : 1; // Have we reached eof? - - unsigned int opened_for_read : 1; // opened_for_read and - - unsigned int opened_for_write : 1; // opened_for_write can - // be set simultaneously - - unsigned int binary : 1; // opened for binary or - // text mode? - -#ifdef CYGFUN_LIBC_STDIO_ungetc - unsigned int unread_char_buf_in_use : 1; // unget buf in use? -#endif - -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - unsigned int buffering : 1; // Is this file buffered? - - unsigned int line_buffering : 1; // If so, is it line - // buffered? If it is - // buffered, but NOT line - // buffered, it must be - // fully buffered - - unsigned int last_buffer_op_was_read : 1; // did we last read from - // the buffer. If not we - // must have written -#endif - unsigned int readbuf_char_in_use : 1; // is the above - // readbuf_char in use? - - } flags; - - // current position for reading/writing - fpos_t position; - -#ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS - Cyg_Mutex stream_lock; // used for locking this stream -#endif // ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS - -#ifdef CYGDBG_USE_ASSERTS - // a value to check that this class is hopefully valid - cyg_ucount32 magic_validity_word; -#endif - -public: - // different modes when constructing (i.e. opening). - typedef enum { - CYG_STREAM_READ, - CYG_STREAM_WRITE, - CYG_STREAM_READWRITE - } OpenMode; - - // CONSTRUCTORS - - // This constructs the stream - effectively opens the file. This is - // used for static initialisation, and actually calls construct below - // - // dev is a valid Cyg_Device_Table_t, although it does not have to - // be a member of the device table object itself - // - // open_mode is one of CYG_STREAM_READ, CYG_STREAM_WRITE or - // CYG_STREAM_READWRITE - // - // append is true if the file position should be set at EOF on opening - // - // binary is true if this is a binary stream. Otherwise it is a text - // stream and character conversions (especially newline) may occur - // - // buffer_mode is one of _IONBF, _IOLBF, _IOFBF (from ) - // If buffer_mode is _IONBF, buffer_size should still be set to 0 - // and buffer_addr to NULL. If buffering is not configured, none - // of buffer_mode, buffer_size and buffer_addr have any effect - // - // buffer_size is the size of buffer to use - // - // buffer_addr is the address of a user supplied buffer. By default - // (when NULL) a system one is provided. - // - // The "return code" is set by assignment to the error member of this - // stream - use the get_error() method to check - - Cyg_StdioStream( cyg_io_handle_t dev, OpenMode open_mode, - cyg_bool append, cyg_bool binary, int buffer_mode, - cyg_ucount32 buffer_size=BUFSIZ, - cyg_uint8 *buffer_addr=NULL ); - - // DESTRUCTOR - - ~Cyg_StdioStream(); - - - // MEMBER FUNCTIONS - - - // Refill read buffer from the stream - note this blocks until - // something arrives on the stream - Cyg_ErrNo - refill_read_buffer( void ); - - - // Read not more than buffer_length bytes from the read buffer into the - // user buffer. - // The number of bytes put into the user buffer is written - // into *bytes_read - Cyg_ErrNo - read( cyg_uint8 *user_buffer, cyg_ucount32 buffer_length, - cyg_ucount32 *bytes_read ); - - - // Read a single byte from the stream. Returns EAGAIN if no character - // available or EEOF if end of file (as well as setting the EOF state) - Cyg_ErrNo - read_byte( cyg_uint8 *c ); - - // Read a single byte from the stream, but don't remove it. Returns - // EAGAIN if no character available or EEOF if end of file (as well - // as setting the EOF state) - Cyg_ErrNo - peek_byte( cyg_uint8 *c ); - - - // Return a byte into the stream - basically the same as ungetc() - Cyg_ErrNo - unread_byte( cyg_uint8 c ); - - // the number of bytes available to read without needing to refill the - // buffer - cyg_ucount32 - bytes_available_to_read( void ); - - - Cyg_ErrNo - write( const cyg_uint8 *buffer, cyg_ucount32 buffer_length, - cyg_ucount32 *bytes_written ); - - Cyg_ErrNo - write_byte( cyg_uint8 c ); - - - Cyg_ErrNo - flush_output( void ); - - Cyg_ErrNo - flush_output_unlocked( void ); - - // prevent multiple access in thread safe mode - - // lock_me() returns false if it couldn't be locked, which could - // happen if the file descriptor is bad - - cyg_bool - lock_me( void ); - - // trylock_me() returns false if it couldn't be locked, probably - // because it is already locked - cyg_bool - trylock_me( void ); - - void - unlock_me( void ); - - // get error status for this file - Cyg_ErrNo - get_error( void ); - - // set error status for this file. - void - set_error( Cyg_ErrNo errno_to_set ); - -public: - // are we at EOF? true means we are, false means no - cyg_bool - get_eof_state( void ); - -private: - - // Set whether we are at EOF. - void - set_eof_state( cyg_bool eof_to_set ); - -public: - // retrieve position - Cyg_ErrNo - get_position( fpos_t *pos ); - - // set absolute position. whence is SEEK_SET, SEEK_CUR, or SEEK_END - Cyg_ErrNo - set_position( fpos_t pos, int whence ); - - CYGDBG_DEFINE_CHECK_THIS -}; - -// INLINE FUNCTIONS - -#include "clibincl/stream.inl" - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -#endif CYGONCE_LIBC_CLIBINCL_STREAM_HXX multiple inclusion protection - -// EOF stream.hxx diff --git a/packages/language/c/libc/current/src/clibincl/stream.inl b/packages/language/c/libc/current/src/clibincl/stream.inl deleted file mode 100644 --- a/packages/language/c/libc/current/src/clibincl/stream.inl +++ /dev/null @@ -1,387 +0,0 @@ -#ifndef CYGONCE_LIBC_CLIBINCL_STREAM_INL -#define CYGONCE_LIBC_CLIBINCL_STREAM_INL -//======================================================================== -// -// stream.inl -// -// Inline functions for internal C library stdio stream interface -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: Do not include this file - -// #include "clibincl/stream.hxx" instead. -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // Error codes -#include "clibincl/stream.hxx" // Just be sure that this really is - // included - -// FUNCTIONS - -#ifdef CYGDBG_USE_ASSERTS -inline cyg_bool -Cyg_StdioStream::check_this( cyg_assert_class_zeal zeal ) const -{ - // check that it has the magic word set meaning it is valid. - if ( magic_validity_word != 0x7b4321ce ) - return false; - return true; -} // check_this() - -#endif // ifdef CYGDBG_USE_ASSERTS - - - -// LOCKING FUNCTIONS - -// returns true on success -inline cyg_bool -Cyg_StdioStream::lock_me( void ) -{ - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - -#ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS - return stream_lock.lock(); -#else - // otherwise it "worked" - return true; -#endif - -} // lock_me() - - -// returns true on success -inline cyg_bool -Cyg_StdioStream::trylock_me( void ) -{ - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - -#ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS - return stream_lock.trylock(); -#else - // otherwise it "worked" - return true; -#endif - -} // lock_me() - - -inline void -Cyg_StdioStream::unlock_me( void ) -{ - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - -#ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS - stream_lock.unlock(); -#endif -} // unlock_me() - - -// DESTRUCTOR - -inline -Cyg_StdioStream::~Cyg_StdioStream() -{ - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - if (!lock_me()) - return; - - flush_output_unlocked(); - - // Currently there is no I/O function defined for "close" - // Add such a call if this is ever defined. - - unlock_me(); - -#ifdef CYGDBG_USE_ASSERTS - magic_validity_word = 0xbadbad; -#endif -} // Cyg_StdioStream destructor - - -// MEMBER FUNCTIONS - - -// this is currently just a wrapper around write, but having this interface -// leaves scope for optimisations in future -inline Cyg_ErrNo -Cyg_StdioStream::write_byte( cyg_uint8 c ) -{ - cyg_ucount32 dummy_bytes_written; - Cyg_ErrNo err; - - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - err = write( &c, 1, &dummy_bytes_written ); - - CYG_ASSERT( (err!=ENOERR) || (dummy_bytes_written==1), - "Single byte not written, but no error returned!" ); - - return err; -} // write_byte() - - -inline Cyg_ErrNo -Cyg_StdioStream::unread_byte( cyg_uint8 c ) -{ - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - -#ifdef CYGFUN_LIBC_STDIO_ungetc - if (!lock_me()) - return EBADF; // assume file is now invalid - - if (flags.unread_char_buf_in_use) { - unlock_me(); - return ENOMEM; - } // if - - flags.unread_char_buf_in_use = true; - unread_char_buf = c; - - // can't be at EOF any more - flags.at_eof = false; - - if (position) // position is always 0 for certain devices - --position; - - unlock_me(); - - return ENOERR; - -#else // ifdef CYGFUN_LIBC_STDIO_ungetc - - return ENOSYS; -#endif // ifdef CYGFUN_LIBC_STDIO_ungetc -} // unread_byte() - - -inline cyg_ucount32 -Cyg_StdioStream::bytes_available_to_read( void ) -{ - cyg_ucount32 bytes=0; - - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - -#ifdef CYGFUN_LIBC_STDIO_ungetc - if (flags.unread_char_buf_in_use) - ++bytes; -#endif - -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - - // either the last operation was a read, which attempted to read bytes - // into the buffer, or there are no bytes in the buffer - - if (flags.buffering) { - if (flags.last_buffer_op_was_read == true) - bytes += io_buf.get_buffer_space_used(); - } - else - -#endif - - if (flags.readbuf_char_in_use) - ++bytes; - - return bytes; -} // bytes_available_to_read() - - - -inline Cyg_ErrNo -Cyg_StdioStream::flush_output( void ) -{ - Cyg_ErrNo err; - - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - if (!lock_me()) - return EBADF; // assume file is now invalid - - err = flush_output_unlocked(); - - unlock_me(); - - return err; -} // flush_output() - - -// get error status for this file -inline Cyg_ErrNo -Cyg_StdioStream::get_error( void ) -{ - Cyg_ErrNo err_temp; - - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - if (!lock_me()) - return EBADF; // well, we've certainly got an error now! - - err_temp = error; - - unlock_me(); - - return err_temp; -} // get_error() - - -// set error status for this file -inline void -Cyg_StdioStream::set_error( Cyg_ErrNo errno_to_set ) -{ - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - if (!lock_me()) - { - errno = EBADF; // best we can do - we can't trust error to be there - return; - } // if - - errno = error = errno_to_set; - - if ( EEOF == error ) - flags.at_eof = 1; - - unlock_me(); -} // set_error() - - -// are we at EOF? true means we are, false means no -inline cyg_bool -Cyg_StdioStream::get_eof_state( void ) -{ - cyg_bool eof_temp; - - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - if (!lock_me()) - return false; // not much we can do here - - eof_temp = flags.at_eof; - - unlock_me(); - - return eof_temp; -} // get_eof_state() - - -// Set whether we are at EOF. -inline void -Cyg_StdioStream::set_eof_state( cyg_bool eof_to_set ) -{ - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - if (!lock_me()) - return; // not much we can do here - - flags.at_eof = eof_to_set; - - unlock_me(); -} // set_eof_state() - - -// retrieve position -inline Cyg_ErrNo -Cyg_StdioStream::get_position( fpos_t *pos ) -{ - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - if (!lock_me()) - return EBADF; // assume file is now invalid - - *pos = position; - - unlock_me(); - - return ENOERR; -} // get_position() - - -// set absolute position -inline Cyg_ErrNo -Cyg_StdioStream::set_position( fpos_t pos, int whence ) -{ - // this is currently a workaround until we have real files - // this will be corrected when we decide the true filesystem interface - - Cyg_ErrNo err; - cyg_uint8 c; - - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - if ((whence != SEEK_CUR) || pos < 0) - return ENOSYS; - - if (!lock_me()) - return EBADF; // assume file is now invalid - - // Drain read buffer - - for ( ; whence > 0 ; whence-- ) { - err = read_byte( &c ); - if (err == EAGAIN) - err=refill_read_buffer(); - - // if read_byte retured error, or refill_read_buffer returned error - if (err) { - unlock_me(); - return err; - } // if - } // for - - unlock_me(); - - return ENOERR; -} // set_position() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -#endif CYGONCE_LIBC_CLIBINCL_STREAM_INL multiple inclusion protection - -// EOF stream.inl diff --git a/packages/language/c/libc/current/src/clibincl/streambuf.hxx b/packages/language/c/libc/current/src/clibincl/streambuf.hxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/clibincl/streambuf.hxx +++ /dev/null @@ -1,155 +0,0 @@ -#ifndef CYGONCE_LIBC_CLIBINCL_STREAMBUF_HXX -#define CYGONCE_LIBC_CLIBINCL_STREAMBUF_HXX -//=========================================================================== -// -// streambuf.hxx -// -// Internal C library stdio stream buffer interface definitions -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: This file implements the buffer class used by Cyg_StdioStream -// for file buffers. It is simple, and not thread-safe - that -// is better done at a higher level for our purposes. -// Usage: #include "clibincl/streambuf.hxx" -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? And buffered I/O? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) && \ - defined(CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO) - - -// INCLUDES - -#include // Common project-wide type definitions -#include // Cyg_ErrNo - - -// TYPE DEFINITIONS - - -class Cyg_StdioStreamBuffer -{ -private: - // Buffering data - -#ifdef CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF - cyg_uint8 *buffer_bottom; - cyg_bool call_free; // should we free the old buffer if set_buffer is - // called? -#else - cyg_uint8 buffer_bottom[BUFSIZ]; -#endif - - cyg_ucount32 buffer_size; - - cyg_uint8 *buffer_top; - - cyg_uint8 *current_buffer_position; - -public: - - // CONSTRUCTORS - - // You can change the size, or even supply your own buffer, although - // this only has an effect with dynamic buffers. Otherwise it is - // silently ignored - Cyg_StdioStreamBuffer( cyg_ucount32 size=BUFSIZ, - cyg_uint8 *new_buffer=NULL ); - - - // DESTRUCTORS - - ~Cyg_StdioStreamBuffer(); - - // METHODS - - // Set up the buffer. As with the constructor, supplying a new_buffer - // only has an effect with dynamic buffers, although EINVAL is returned - // in that case. ENOMEM may also be returned - Cyg_ErrNo - set_buffer( cyg_ucount32 size=BUFSIZ, cyg_uint8 *new_buffer=NULL ); - - // Find out how much buffer space is in use - cyg_ucount32 - get_buffer_space_used( void ); - - - // What total size is the current buffer set to be. Can be -1 if the - // the buffer is invalid - cyg_count32 - get_buffer_size( void ); - - - // get buffer address to read from, and return the number of bytes - // available to read - cyg_ucount32 - get_buffer_addr_to_read( cyg_uint8 **buffer ); - - // when finished reading from said space, tell the buffer how much was - // actually read - void - set_bytes_read( cyg_ucount32 bytes ); - - // return address of buffer that can be used to write into, and its - // available capacity - cyg_ucount32 - get_buffer_addr_to_write( cyg_uint8 **buffer ); - - // when finished writing into said space, tell the buffer how much was - // actually written - void - set_bytes_written( cyg_ucount32 bytes ); - - // just empty the whole buffer contents - void - drain_buffer( void ); -}; // class Cyg_StdioStreamBuffer - -// INLINE FUNCTIONS - -#include "clibincl/streambuf.inl" - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) && - // defined(CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO) - -#endif CYGONCE_LIBC_CLIBINCL_STREAMBUF_HXX multiple inclusion protection - -// EOF streambuf.hxx diff --git a/packages/language/c/libc/current/src/clibincl/streambuf.inl b/packages/language/c/libc/current/src/clibincl/streambuf.inl deleted file mode 100644 --- a/packages/language/c/libc/current/src/clibincl/streambuf.inl +++ /dev/null @@ -1,173 +0,0 @@ -#ifndef CYGONCE_LIBC_CLIBINCL_STREAMBUF_INL -#define CYGONCE_LIBC_CLIBINCL_STREAMBUF_INL -//=========================================================================== -// -// streambuf.inl -// -// Internal C library stdio stream buffer inline functions -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: Do not include this file directly, instead -// #include "clibincl/streambuf.hxx" -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? And buffered I/O? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) && \ - defined(CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO) - - -// INCLUDES - -#include // Common project-wide type definitions -#include // Assertion support -#include // Cyg_ErrNo -#include // fpos_t and iobuf defines -#include "clibincl/stdlibsupp.hxx"// _malloc() and _free() -#include "clibincl/streambuf.hxx" // header for this file, just in case - -// FUNCTIONS - -inline -Cyg_StdioStreamBuffer::Cyg_StdioStreamBuffer( cyg_ucount32 size=BUFSIZ, - cyg_uint8 *new_buffer=NULL ) : -#ifdef CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF - buffer_bottom( NULL ), - call_free(false), - buffer_size(0), -#else - buffer_size(sizeof(buffer_bottom)), // size of the array -#endif - buffer_top(NULL), - current_buffer_position(NULL) -{ - // NB Many of the above members in the initialisation list may seem - // unnecessary, but it is to ensure a defined state if e.g. the malloc - // in set_buffer() should fail - - (void)set_buffer(size, new_buffer); -} // Cyg_StdioStreamBuffer constructor - - -inline -Cyg_StdioStreamBuffer::~Cyg_StdioStreamBuffer() -{ -#ifdef CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF - if ((buffer_bottom != NULL) && call_free) - _free( buffer_bottom ); -#endif -} // Cyg_StdioStreamBuffer destructor - - -inline cyg_ucount32 -Cyg_StdioStreamBuffer::get_buffer_space_used( void ) -{ - return (buffer_top - current_buffer_position); -} // get_buffer_space_used() - - -inline cyg_count32 -Cyg_StdioStreamBuffer::get_buffer_size( void ) -{ -#ifdef CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF - if (buffer_bottom==NULL) - return -1; -#endif - return buffer_size; -} // get_buffer_size() - - -inline cyg_ucount32 -Cyg_StdioStreamBuffer::get_buffer_addr_to_read( cyg_uint8 **buffer ) -{ - *buffer = current_buffer_position; - - return (buffer_top - current_buffer_position); -} // get_buffer_addr_to_read() - -inline void -Cyg_StdioStreamBuffer::set_bytes_read( cyg_ucount32 bytes ) -{ - cyg_uint8 *buffer_max = &buffer_bottom[ get_buffer_size() ]; - - current_buffer_position += bytes; - - CYG_ASSERT( (current_buffer_position <= buffer_top), - "read too many bytes from buffer" ); - - if (current_buffer_position == buffer_max) - current_buffer_position = buffer_top = &buffer_bottom[0]; - -} // set_bytes_read() - - -inline cyg_ucount32 -Cyg_StdioStreamBuffer::get_buffer_addr_to_write( cyg_uint8 **buffer ) -{ - cyg_uint8 *buffer_max = &buffer_bottom[ get_buffer_size() ]; - - *buffer = buffer_top; - - return (buffer_max - buffer_top); -} // get_buffer_addr_to_write() - - -inline void -Cyg_StdioStreamBuffer::set_bytes_written( cyg_ucount32 bytes ) -{ - buffer_top += bytes; - - CYG_ASSERT( (buffer_top <= &buffer_bottom[ get_buffer_size() ]), - "wrote too many bytes into buffer" ); -} // set_bytes_written() - - -inline void -Cyg_StdioStreamBuffer::drain_buffer( void ) -{ - buffer_top = current_buffer_position = &buffer_bottom[0]; -} // drain_buffer() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) && - // defined(CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO) - -#endif CYGONCE_LIBC_CLIBINCL_STREAMBUF_INL multiple inclusion protection - -// EOF streambuf.inl diff --git a/packages/language/c/libc/current/src/clibincl/stringsupp.hxx b/packages/language/c/libc/current/src/clibincl/stringsupp.hxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/clibincl/stringsupp.hxx +++ /dev/null @@ -1,232 +0,0 @@ -#ifndef CYGONCE_LIBC_CLIBINCL_STRINGSUPP_HXX -#define CYGONCE_LIBC_CLIBINCL_STRINGSUPP_HXX -//=========================================================================== -// -// stringsupp.hxx -// -// Support for the ANSI standard string functions -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Compiler definitions such as - // size_t, NULL etc. - -// CONSTANTS - -#ifndef CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST - -// Masks for CYG_LIBC_STR_DETECTNULL below -externC const cyg_uint64 Cyg_libc_str_null_mask_1; -externC const cyg_uint64 Cyg_libc_str_null_mask_2; - -#endif - -// MACROS - -// Nonzero if X is not aligned on a word boundary. -#define CYG_LIBC_STR_UNALIGNED(X) ((CYG_WORD)(X) & (sizeof (CYG_WORD) - 1)) - -// Nonzero if either X or Y is not aligned on a word boundary. -#define CYG_LIBC_STR_UNALIGNED2(X , Y) \ - (((CYG_WORD)(X) & (sizeof (CYG_WORD) - 1)) | \ - ((CYG_WORD)(Y) & (sizeof (CYG_WORD) - 1))) - -// Nonzero if any byte of X contains a NULL. -#define CYG_LIBC_STR_DETECTNULL(X) \ - (((X) - (CYG_WORD)Cyg_libc_str_null_mask_1) & \ - ~(X) & (CYG_WORD)Cyg_libc_str_null_mask_2) - -// How many bytes are copied each iteration of the 4X unrolled loop in the -// optimised string implementations -#define CYG_LIBC_STR_OPT_BIGBLOCKSIZE (sizeof(CYG_WORD) << 2) - -// How many bytes are copied each iteration of the word copy loop in the -// optimised string implementations -#define CYG_LIBC_STR_OPT_LITTLEBLOCKSIZE (sizeof (CYG_WORD)) - -// Threshold for punting to the byte copier in the optimised string -// implementations -#define CYG_LIBC_STR_OPT_TOO_SMALL(LEN) \ - ((LEN) < CYG_LIBC_STR_OPT_LITTLEBLOCKSIZE) - - -// FUNCTION PROTOTYPES - -// These are function prototypes for the aliased functions that actually -// implement the string functions - -//=========================================================================== - -// 7.11.2 Copying functions - - - -// memcpy is no longer implemented in the C library. It is now in the kernel -// However, the prototype is retained for consistency - -externC void * -_memcpy( void *, const void *, size_t ); - - -externC void * -_memmove( void *, const void *, size_t ); - - -externC char * -_strcpy( char *, const char * ); - - -externC char * -_strncpy( char *, const char *, size_t ); - - -//=========================================================================== - -// 7.11.3 Concatenation functions - - -externC char * -_strcat( char *, const char * ); - - -externC char * -_strncat( char *, const char *, size_t ); - - -//=========================================================================== - -// 7.11.4 Comparison functions - -externC int -_memcmp( const void *, const void *, size_t ); - - -externC int -_strcmp( const char *, const char * ); - - -externC int -_strcoll( const char *, const char * ); - - -externC int -_strncmp( const char *, const char *, size_t ); - - -externC size_t -_strxfrm( char *, const char *, size_t ); - - -//=========================================================================== - -// 7.11.5 Search functions - - -externC void * -_memchr( const void *, int , size_t ); - - -externC char * -_strchr( const char *, int ); - - -externC size_t -_strcspn( const char *, const char * ); - - -externC char * -_strpbrk( const char *, const char * ); - - -externC char * -_strrchr( const char *, int ); - - -externC size_t -_strspn( const char *, const char * ); - - -externC char * -_strstr( const char *, const char * ); - - -externC char * -_strtok( char *, const char * ); - -// For POSIX 1003.1 section 8.3.3 strtok_r() - -externC char * -_strtok_r( char *, const char *, char ** ); - - -//=========================================================================== - -// 7.11.6 Miscellaneous functions - -// memset is no longer implemented in the C library. It is now in the kernel -// However, the prototype is retained for consistency - -externC void * -_memset( void *, int, size_t ); - - -// _strerror is no longer in the C library, but in the error package. But -// the prototype is still here for symmetry as _strerror is still present -externC char * -_strerror( int ); - - -externC size_t -_strlen( const char * ); - -#endif // ifdef CYGPKG_LIBC - -#endif // CYGONCE_LIBC_CLIBINCL_STRINGSUPP_HXX multiple inclusion protection - -// EOF stringsupp.hxx diff --git a/packages/language/c/libc/current/src/ctype/isalnum.cxx b/packages/language/c/libc/current/src/ctype/isalnum.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/isalnum.cxx +++ /dev/null @@ -1,83 +0,0 @@ -//=========================================================================== -// -// isalnum.cxx -// -// Real alternative for inline implementation of ANSI standard -// isalnum() ctype routine defined in section 7.3.1.1 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -isalnum( int c ) CYGPRI_LIBC_WEAK_ALIAS("_isalnum"); - - -// FUNCTIONS - -int -_isalnum( int c ) -{ - return ( _isalpha(c) || _isdigit(c) ); -} // _isalnum() - - -#endif // ifdef CYGPKG_LIBC - -// EOF isalnum.cxx diff --git a/packages/language/c/libc/current/src/ctype/isalpha.cxx b/packages/language/c/libc/current/src/ctype/isalpha.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/isalpha.cxx +++ /dev/null @@ -1,83 +0,0 @@ -//=========================================================================== -// -// isalpha.cxx -// -// Real alternative for inline implementation of ANSI standard -// isalpha() ctype routine defined in section 7.3.1.2 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -isalpha( int c ) CYGPRI_LIBC_WEAK_ALIAS("_isalpha"); - - -// FUNCTIONS - -int -_isalpha( int c ) -{ - return ( _islower(c) || _isupper(c) ); -} // _isalpha() - - -#endif // ifdef CYGPKG_LIBC - -// EOF isalpha.cxx diff --git a/packages/language/c/libc/current/src/ctype/iscntrl.cxx b/packages/language/c/libc/current/src/ctype/iscntrl.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/iscntrl.cxx +++ /dev/null @@ -1,85 +0,0 @@ -//=========================================================================== -// -// iscntrl.cxx -// -// Real alternative for inline implementation of ANSI standard -// iscntrl() ctype routine defined in section 7.3.1.3 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -iscntrl( int c ) CYGPRI_LIBC_WEAK_ALIAS("_iscntrl"); - - -// FUNCTIONS - -int -_iscntrl( int c ) -{ - // Simple standard 7-bit ASCII map is assumed - return ( ((0 <= c) && (c <= 0x1F)) || - (c == 0x7F) ); -} // _iscntrl() - - -#endif // ifdef CYGPKG_LIBC - -// EOF iscntrl.cxx diff --git a/packages/language/c/libc/current/src/ctype/isdigit.cxx b/packages/language/c/libc/current/src/ctype/isdigit.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/isdigit.cxx +++ /dev/null @@ -1,83 +0,0 @@ -//=========================================================================== -// -// isdigit.cxx -// -// Real alternative for inline implementation of ANSI standard -// isdigit() ctype routine defined in section 7.3.1.4 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -isdigit( int c ) CYGPRI_LIBC_WEAK_ALIAS("_isdigit"); - - -// FUNCTIONS - -int -_isdigit( int c ) -{ - return ( ('0' <= c) && (c <= '9') ); -} // _isdigit() - - -#endif // ifdef CYGPKG_LIBC - -// EOF isdigit.cxx diff --git a/packages/language/c/libc/current/src/ctype/isgraph.cxx b/packages/language/c/libc/current/src/ctype/isgraph.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/isgraph.cxx +++ /dev/null @@ -1,84 +0,0 @@ -//=========================================================================== -// -// isgraph.cxx -// -// Real alternative for inline implementation of ANSI standard -// isgraph() ctype routine defined in section 7.3.1.5 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -isgraph( int c ) CYGPRI_LIBC_WEAK_ALIAS("_isgraph"); - - -// FUNCTIONS - -int -_isgraph( int c ) -{ - // Simple standard 7-bit ASCII map is assumed - return ( ('!' <= c) && (c <= '~') ); -} // _isgraph() - - -#endif // ifdef CYGPKG_LIBC - -// EOF isgraph.cxx diff --git a/packages/language/c/libc/current/src/ctype/islower.cxx b/packages/language/c/libc/current/src/ctype/islower.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/islower.cxx +++ /dev/null @@ -1,83 +0,0 @@ -//=========================================================================== -// -// islower.cxx -// -// Real alternative for inline implementation of ANSI standard -// islower() ctype routine defined in section 7.3.1.6 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -islower( int c ) CYGPRI_LIBC_WEAK_ALIAS("_islower"); - - -// FUNCTIONS - -int -_islower( int c ) -{ - return (('a' <= c) && (c <= 'z')); -} // _islower() - - -#endif // ifdef CYGPKG_LIBC - -// EOF islower.cxx diff --git a/packages/language/c/libc/current/src/ctype/isprint.cxx b/packages/language/c/libc/current/src/ctype/isprint.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/isprint.cxx +++ /dev/null @@ -1,84 +0,0 @@ -//=========================================================================== -// -// isprint.cxx -// -// Real alternative for inline implementation of ANSI standard -// isprint() ctype routine defined in section 7.3.1.7 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -isprint( int c ) CYGPRI_LIBC_WEAK_ALIAS("_isprint"); - - -// FUNCTIONS - -int -_isprint( int c ) -{ - // Simple standard 7-bit ASCII map is assumed - return ( (' ' <= c) && (c <= '~') ); -} // _isprint() - - -#endif // ifdef CYGPKG_LIBC - -// EOF isprint.cxx diff --git a/packages/language/c/libc/current/src/ctype/ispunct.cxx b/packages/language/c/libc/current/src/ctype/ispunct.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/ispunct.cxx +++ /dev/null @@ -1,88 +0,0 @@ -//=========================================================================== -// -// ispunct.cxx -// -// Real alternative for inline implementation of ANSI standard -// ispunct() ctype routine defined in section 7.3.1.8 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -ispunct( int c ) CYGPRI_LIBC_WEAK_ALIAS("_ispunct"); - - -// FUNCTIONS - -int -_ispunct( int c ) -{ - // Simple standard 7-bit ASCII map is assumed - return ( (('!' <= c) && (c <= '/')) || // ASCII 0x21 - 0x2F - ((':' <= c) && (c <= '@')) || // ASCII 0x3A - 0x40 - (('[' <= c) && (c <= '`')) || // ASCII 0x5B - 0x60 - (('{' <= c) && (c <= '~')) ); // ASCII 0x7B - 0x7E - -} // _ispunct() - - -#endif // ifdef CYGPKG_LIBC - -// EOF ispunct.cxx diff --git a/packages/language/c/libc/current/src/ctype/isspace.cxx b/packages/language/c/libc/current/src/ctype/isspace.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/isspace.cxx +++ /dev/null @@ -1,84 +0,0 @@ -//=========================================================================== -// -// isspace.cxx -// -// Real alternative for inline implementation of ANSI standard -// isspace() ctype routine defined in section 7.3.1.9 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -isspace( int c ) CYGPRI_LIBC_WEAK_ALIAS("_isspace"); - - -// FUNCTIONS - -int -_isspace( int c ) -{ - return ( (c == ' ') || (c == '\f') || (c == '\n') || (c == '\r') || - (c == '\t') || (c == '\v') ); -} // _isspace() - - -#endif // ifdef CYGPKG_LIBC - -// EOF isspace.cxx diff --git a/packages/language/c/libc/current/src/ctype/isupper.cxx b/packages/language/c/libc/current/src/ctype/isupper.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/isupper.cxx +++ /dev/null @@ -1,83 +0,0 @@ -//=========================================================================== -// -// isupper.cxx -// -// Real alternative for inline implementation of ANSI standard -// ctype routine defined in section 7.3.1.10 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -isupper( int c ) CYGPRI_LIBC_WEAK_ALIAS("_isupper"); - - -// FUNCTIONS - -int -_isupper( int c ) -{ - return (('A' <= c) && (c <= 'Z')); -} // _isupper() - - -#endif // ifdef CYGPKG_LIBC - -// EOF isupper.cxx diff --git a/packages/language/c/libc/current/src/ctype/isxdigit.cxx b/packages/language/c/libc/current/src/ctype/isxdigit.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/isxdigit.cxx +++ /dev/null @@ -1,85 +0,0 @@ -//=========================================================================== -// -// isxdigit.cxx -// -// Real alternative for inline implementation of ANSI standard -// isxdigit() ctype routine defined in section 7.3.1.11 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -isxdigit( int c ) CYGPRI_LIBC_WEAK_ALIAS("_isxdigit"); - - -// FUNCTIONS - -int -_isxdigit( int c ) -{ - return ( _isdigit(c) || - (('a' <= c) && (c <= 'f')) || - (('A' <= c) && (c <= 'F')) ); -} // _isxdigit() - - -#endif // ifdef CYGPKG_LIBC - -// EOF isxdigit.cxx diff --git a/packages/language/c/libc/current/src/ctype/tolower.cxx b/packages/language/c/libc/current/src/ctype/tolower.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/tolower.cxx +++ /dev/null @@ -1,83 +0,0 @@ -//=========================================================================== -// -// tolower.cxx -// -// Real alternative for inline implementation of ANSI standard -// tolower() ctype routine defined in section 7.3.2.1 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -tolower( int c ) CYGPRI_LIBC_WEAK_ALIAS("_tolower"); - - -// FUNCTIONS - -int -_tolower( int c ) -{ - return _isupper(c) ? c - 'A' + 'a' : c; -} // _tolower() - - -#endif // ifdef CYGPKG_LIBC - -// EOF tolower.cxx diff --git a/packages/language/c/libc/current/src/ctype/toupper.cxx b/packages/language/c/libc/current/src/ctype/toupper.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/ctype/toupper.cxx +++ /dev/null @@ -1,83 +0,0 @@ -//=========================================================================== -// -// toupper.cxx -// -// Real alternative for inline implementation of ANSI standard -// toupper() ctype routine defined in section 7.3.2.2 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support - -// We don't want the inline versions of ctype functions defined here - -#ifdef CYGIMP_LIBC_CTYPE_INLINES -#undef CYGIMP_LIBC_CTYPE_INLINES -#endif - -#include // Main header for ctype functions -#include "clibincl/ctypesupp.hxx" // Support for ctype functions - -// EXPORTED SYMBOLS - -externC int -toupper( int c ) CYGPRI_LIBC_WEAK_ALIAS("_toupper"); - - -// FUNCTIONS - -int -_toupper( int c ) -{ - return _islower(c) ? c - 'a' + 'A' : c; -} // _toupper() - - -#endif // ifdef CYGPKG_LIBC - -// EOF toupper.cxx diff --git a/packages/language/c/libc/current/src/errno/errno.cxx b/packages/language/c/libc/current/src/errno/errno.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/errno/errno.cxx +++ /dev/null @@ -1,132 +0,0 @@ -//=========================================================================== -// -// errno.cxx -// -// ANSI error code -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-20 -// Purpose: Provide the errno variable -// Description: This file either provides the errno variable directly, -// or if thread-safe, using a kernel per-thread data -// access function -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // Common project-wide type definitions -#include // Common tracing functions -#include // Header for this file - -#ifdef CYGSEM_LIBC_PER_THREAD_ERRNO -# include // kernel configuration -# include // per-thread data -# include // per-thread data -# include // mutexes -#endif - -// GLOBAL VARIABLES - -#ifndef CYGSEM_LIBC_PER_THREAD_ERRNO - -// errno is initialised to 0 at program startup - ANSI 7.1.4 -Cyg_ErrNo errno = 0; - -#else // ifndef CYGSEM_LIBC_PER_THREAD_ERRNO - -# if defined(CYGDBG_USE_TRACING) && defined(CYGNUM_LIBC_ERRNO_TRACE_LEVEL) -static int errno_trace = CYGNUM_LIBC_ERRNO_TRACE_LEVEL; -# define TL1 (0 < errno_trace) -# else -# define TL1 (0) -# endif - -// STATICS - -static cyg_ucount32 errno_data_index=CYGNUM_KERNEL_THREADS_DATA_MAX; -static Cyg_Mutex errno_data_mutex CYG_INIT_PRIORITY(LIBC); - -// FUNCTIONS - -Cyg_ErrNo * const -cyg_libc_get_errno_p( void ) -{ - Cyg_ErrNo *errno_p; - - CYG_REPORT_FUNCNAMETYPE( "cyg_libc_get_errno_p", "&errno is %d"); - - // set up the thread data, allocating if necessary (even though the - // user _shouldn't_ read errno before its set, we can't stop them - and - // ANSI prescribes it has a sensible value (0) before its set too anyway. - - Cyg_Thread *self = Cyg_Thread::self(); - - // Get a per-thread data slot if we haven't got one already - // Do a simple test before locking and retrying test, as this is a - // rare situation - if (CYGNUM_KERNEL_THREADS_DATA_MAX==errno_data_index) { - errno_data_mutex.lock(); - if (CYGNUM_KERNEL_THREADS_DATA_MAX==errno_data_index) { - - // the kernel just throws an assert if this doesn't work - // FIXME: Should use real CDL to pre-allocate a slot at compile - // time to ensure there are enough slots - errno_data_index = self->new_data_index(); - - // errno is initialised to 0 at program startup - ANSI 7.1.4 - self->set_data(errno_data_index, 0); - } - errno_data_mutex.unlock(); - } // if - - // we have a valid index now - - errno_p = (Cyg_ErrNo *)self->get_data_ptr(errno_data_index); - - CYG_TRACE1( TL1, "errno is %d", *errno_p ); - - CYG_REPORT_RETVAL( errno_p ); - - // return the internal data's errno - return errno_p; -} // cyg_libc_get_errno_p() - -#endif // ifdef CYGSEM_LIBC_PER_THREAD_ERRNO - -// EOF errno.cxx diff --git a/packages/language/c/libc/current/src/i18n/locale.cxx b/packages/language/c/libc/current/src/i18n/locale.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/i18n/locale.cxx +++ /dev/null @@ -1,378 +0,0 @@ -//======================================================================== -// -// locale.cxx -// -// Implementation of ISO C internationalisation (i18n) locales -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-08-31 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Common tracing support -#include // Common assertion support -#include // struct lconv -#include // several string functions -#include // CHAR_MAX -#include "clibincl/i18nsupp.hxx" // Support for i18n functions - -// SYMBOLS - -externC char * -setlocale( int, const char * ) CYGPRI_LIBC_WEAK_ALIAS("_setlocale"); - -externC struct lconv * -localeconv( void ) CYGPRI_LIBC_WEAK_ALIAS("_localeconv"); - -// TYPE DEFINITIONS - -// define a type to encapsulate the locale. In time this will get much -// richer and complete - -typedef struct { - - const char *name; - struct lconv numdata; - -} Cyg_libc_locale_t; - - -// CONSTANTS - -// define the "C" locale -static const Cyg_libc_locale_t -C_locale = { "C", - { ".", "", "", "", "", "", "", "", "", "", - CHAR_MAX, CHAR_MAX, CHAR_MAX, CHAR_MAX, CHAR_MAX, CHAR_MAX, - CHAR_MAX, CHAR_MAX - } - }; - -// only one locale now, but leave room for expansion -static const Cyg_libc_locale_t *all_locales[] = { &C_locale }; - -// GLOBALS - -// the current locales. Our default is the C locale -static const Cyg_libc_locale_t *current_collate_locale = &C_locale; -static const Cyg_libc_locale_t *current_ctype_locale = &C_locale; -static const Cyg_libc_locale_t *current_monetary_locale = &C_locale; -static const Cyg_libc_locale_t *current_numeric_locale = &C_locale; -static const Cyg_libc_locale_t *current_time_locale = &C_locale; - -// FUNCTIONS - -static const Cyg_libc_locale_t * -find_locale_data( const char *locale_str, cyg_ucount32 checklen ) -{ - CYG_REPORT_FUNCNAMETYPE( "find_locale_data", "returning %08x" ); - CYG_REPORT_FUNCARG1( "locale_str=%s", locale_str ); - - const Cyg_libc_locale_t *temp_locale, *curr_locale=NULL; - cyg_ucount32 i; - - // is it "" i.e. use the default? - if (*locale_str=='\0') { - curr_locale = &C_locale; - CYG_REPORT_RETVAL( curr_locale ); - return curr_locale; - } // if - - for (i=0; iname, locale_str, checklen) ) - curr_locale = temp_locale; - } // for - - CYG_REPORT_RETVAL( curr_locale ); - return curr_locale; -} // find_locale_data() - - -externC char * -_setlocale( int category, const char *locale ) -{ - CYG_REPORT_FUNCNAMETYPE("_setlocale", "returning %08x"); - CYG_REPORT_FUNCARG2( "category=%d, locale=%s", category, locale ); - - if (locale != NULL) - CYG_CHECK_DATA_PTR( locale, "locale pointer is invalid!" ); - - const char *str; - - // special case if locale==NULL, return current locale name - if (locale==NULL) { - - CYG_TRACE0( true, "Getting current locale value" ); - - switch (category) { - - case LC_COLLATE: - str = current_collate_locale->name; - break; - case LC_CTYPE: - str = current_ctype_locale->name; - break; - case LC_MONETARY: - str = current_monetary_locale->name; - break; - case LC_NUMERIC: - str = current_numeric_locale->name; - break; - case LC_TIME: - str = current_time_locale->name; - break; - case LC_ALL: - - // create static string to give a constructed string back - // to the user. The size is the number of categories other - // than LC_ALL times the maximum name size, and add a constant - // for the delimiting octothorpes - static char my_str[ CYGNUM_LIBC_MAX_LOCALE_NAME_SIZE*5+10 ]; - - strcpy( my_str, "#" ); - strcat( my_str, current_collate_locale->name ); - strcat( my_str, "#" ); - strcat( my_str, current_ctype_locale->name ); - strcat( my_str, "#" ); - strcat( my_str, current_monetary_locale->name ); - strcat( my_str, "#" ); - strcat( my_str, current_numeric_locale->name ); - strcat( my_str, "#" ); - strcat( my_str, current_time_locale->name ); - strcat( my_str, "#" ); - - str = &my_str[0]; - break; - default: - str=NULL; - CYG_FAIL("setlocale() passed bad category!" ); - break; - - } // switch - - CYG_REPORT_RETVAL( (char *)str); - return (char *)str; - } // if - - // we only get here if locale is non-NULL, i.e. we want to set it - - const Cyg_libc_locale_t *loc; - cyg_bool default_locale = (*locale=='\0'); - - CYG_TRACE0( true, "Setting current locale value" ); - - switch( category ) { - case LC_COLLATE: - loc = find_locale_data( locale, CYGNUM_LIBC_MAX_LOCALE_NAME_SIZE ); - if (loc != NULL) // found it - current_collate_locale=loc; - break; - - case LC_CTYPE: - loc = find_locale_data( locale, CYGNUM_LIBC_MAX_LOCALE_NAME_SIZE ); - if (loc != NULL) // found it - current_ctype_locale=loc; - break; - - case LC_MONETARY: - loc = find_locale_data( locale, CYGNUM_LIBC_MAX_LOCALE_NAME_SIZE ); - if (loc != NULL) // found it - current_monetary_locale=loc; - break; - - case LC_NUMERIC: - loc = find_locale_data( locale, CYGNUM_LIBC_MAX_LOCALE_NAME_SIZE ); - if (loc != NULL) // found it - current_numeric_locale=loc; - break; - - case LC_TIME: - loc = find_locale_data( locale, CYGNUM_LIBC_MAX_LOCALE_NAME_SIZE ); - if (loc != NULL) // found it - current_time_locale=loc; - break; - - case LC_ALL: - // first try and match it exactly - loc = find_locale_data( locale, CYGNUM_LIBC_MAX_LOCALE_NAME_SIZE ); - if (loc != NULL) { // found it - - CYG_TRACE0(true, "Matched locale string exactly"); - current_collate_locale = current_ctype_locale = loc; - current_monetary_locale = current_numeric_locale = loc; - current_time_locale = loc; - } // if - else { - CYG_TRACE0( true, "Attempting to parse string previously " - "returned from setlocale()" ); - // now try and see if it is a compound string returned - // earlier by setlocale( LC_ALL, NULL ); - - // Note we don't do much checking here. This could be - // much more rigorous (but at the expense of speed/size?) - - const Cyg_libc_locale_t *temp_collate_locale, - *temp_ctype_locale, *temp_monetary_locale, - *temp_numeric_locale, *temp_time_locale; - - cyg_ucount32 token_len; - - str = &locale[0]; - if ( *str=='#' ) { - ++str; - token_len = strcspn( str, "#" ); - loc = find_locale_data( str, token_len ); - - if (loc!=NULL) { - temp_collate_locale=loc; - str += token_len+1; - token_len = strcspn( str, "#" ); - loc = find_locale_data( str, token_len ); - - if (loc!=NULL) { - temp_ctype_locale=loc; - str += token_len+1; - token_len = strcspn( str, "#" ); - loc = find_locale_data( str, token_len ); - - if (loc!=NULL) { - temp_monetary_locale=loc; - str += token_len+1; - token_len = strcspn( str, "#" ); - loc = find_locale_data( str, token_len ); - - if (loc!=NULL) { - temp_numeric_locale=loc; - str += token_len+1; - token_len = strcspn( str, "#" ); - loc = find_locale_data( str, token_len ); - - if (loc!=NULL) { - temp_time_locale=loc; - str += token_len+1; - token_len = strcspn( str, "#" ); - loc = find_locale_data( str, token_len ); - - if (loc!=NULL) { - // if we've got this far and loc still isn't NULL, - // then everything's fine, and we've matched everything - - current_collate_locale = temp_collate_locale; - current_ctype_locale = temp_ctype_locale; - current_monetary_locale = temp_monetary_locale; - current_numeric_locale = temp_numeric_locale; - current_time_locale = temp_time_locale; - - } // if - } // if - } // if - } // if - } // if - } // if - } // if - - } // else - break; // case LC_ALL - - default: - CYG_FAIL("setlocale() passed bad category!" ); - loc=NULL; - break; - } // switch - - if (loc==NULL) { - CYG_REPORT_RETVAL( NULL ); - return NULL; - } // if - else if (default_locale==true) { - CYG_REPORT_RETVAL(C_locale.name); - return (char *)C_locale.name; - } // else if - else { - CYG_REPORT_RETVAL(locale); - return (char *)locale; - } // else -} - -externC struct lconv * -_localeconv( void ) -{ - CYG_REPORT_FUNCNAMETYPE( "_localeconv", "returning %08x" ); - CYG_REPORT_FUNCARGVOID(); - - static struct lconv static_lconv; - - static_lconv.decimal_point = - current_numeric_locale->numdata.decimal_point; - - static_lconv.thousands_sep = - current_numeric_locale->numdata.thousands_sep; - - static_lconv.grouping = - current_numeric_locale->numdata.grouping; - - // we cheat a bit, but it should be worth it - a lot of these are - // constants which optimise nicely - cyg_ucount32 size_used; - size_used = (char *)&static_lconv.int_curr_symbol - - (char *)&static_lconv; - - memcpy( &(static_lconv.int_curr_symbol), - &(current_monetary_locale->numdata.int_curr_symbol), - sizeof(struct lconv) - size_used ); - - - CYG_REPORT_RETVAL( &static_lconv ); - return &static_lconv; -} - - -#endif // ifdef CYGPKG_LIBC - -// EOF locale.cxx diff --git a/packages/language/c/libc/current/src/setjmp/longjmp.cxx b/packages/language/c/libc/current/src/setjmp/longjmp.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/setjmp/longjmp.cxx +++ /dev/null @@ -1,107 +0,0 @@ -//=========================================================================== -// -// longjmp.cxx -// -// ANSI standard longjmp() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: Implements ANSI standard non-local jump function longjmp() -// per ANSI para 7.6.2.1. This is the "real" alternative to -// the inline version of longjmp() -// -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Common tracing code -#include // Common assertion code -#include // HAL architecture specific implementation - -// We don't want the inline version of longjmp() defined here -#ifdef CYGIMP_LIBC_SETJMP_INLINES -# undef CYGIMP_LIBC_SETJMP_INLINES -#endif - -#include // Header for setjmp/longjmp -#include "clibincl/setjmpsupp.hxx" // Support for setjmp/longjmp functions - - -// EXPORTED SYMBOLS - -externC void -longjmp( jmp_buf cyg_buf, int cyg_val) CYGPRI_LIBC_WEAK_ALIAS("_longjmp") - CYGPRI_LIBC_NORETURN; - - -// INLINE FUNCTIONS - -void -_longjmp( jmp_buf cyg_buf, int cyg_val) -{ - CYG_REPORT_FUNCNAME( "longjmp" ); - CYG_REPORT_FUNCARG2( "&cyg_buf=%08x, cyg_val=%d", &cyg_buf, cyg_val ); - - // ANSI says that if we are passed cyg_val==0, then we change it to 1 - if (cyg_val == 0) - ++cyg_val; - - // we let the HAL do the work - - HAL_REORDER_BARRIER(); // prevent any chance of optimisation re-ordering - hal_longjmp( cyg_buf, cyg_val ); - HAL_REORDER_BARRIER(); // prevent any chance of optimisation re-ordering - -#ifdef CYGDBG_USE_ASSERTS - CYG_ASSERT( 0, "longjmp should not have reached this point!" ); -#else - for (;;) - CYG_EMPTY_STATEMENT; -#endif -} // _longjmp() - - -#endif // ifdef CYGPKG_LIBC - -// EOF longjmp.cxx diff --git a/packages/language/c/libc/current/src/signal/raise.cxx b/packages/language/c/libc/current/src/signal/raise.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/signal/raise.cxx +++ /dev/null @@ -1,81 +0,0 @@ -//======================================================================== -// -// raise.cxx -// -// ISO C and POSIX 1003.1 signals implementation for raise() -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide implementation of ISO C and POSIX 1003.1 raise() -// Description: This file provides the linkable symbol version of raise() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -#ifdef CYGPKG_LIBC_SIGNALS - -// INCLUDES - -#include // Common type definitions and support - -// The following lines allow __raise() to be included non-inline which -// actually defines it as a function here -#define CYGPRI_LIBC_SIGNALS_RAISE_INLINE -#ifndef CYGIMP_LIBC_SIGNALS_RAISE_INLINE -# define CYGIMP_LIBC_SIGNALS_RAISE_INLINE -#endif - -#define raise(a) __raise(a) - -#include // Main signals definitions - -// SYMBOL DEFINITIONS - -#undef raise - -externC int raise(int __sig) CYGBLD_ATTRIB_WEAK_ALIAS(__raise); - -// GLOBALS - -#ifdef CYGDBG_USE_TRACING -cyg_uint8 -cyg_libc_signals_raise_trace_level = CYGNUM_LIBC_SIGNALS_RAISE_TRACE_LEVEL; -#endif - -#endif // ifdef CYGPKG_LIBC_SIGNALS - -// EOF raise.cxx diff --git a/packages/language/c/libc/current/src/signal/siginit.cxx b/packages/language/c/libc/current/src/signal/siginit.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/signal/siginit.cxx +++ /dev/null @@ -1,429 +0,0 @@ -//======================================================================== -// -// siginit.cxx -// -// ISO C and POSIX 1003.1 signals implementation -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-12 -// Purpose: Provide implementation of ISO C and POSIX 1003.1 signals -// Description: This file initializes all hardware exceptions, -// initializes the signal handler table and provides the -// default action function for signals -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -#ifdef CYGPKG_LIBC_SIGNALS - -// INCLUDES - -#include // Common type definitions and support -#include // Main signals definitions -#include // Assertion infrastructure -#include // Tracing infrastructure -#include // exit() - -#ifdef CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS -# include // required for kernel includes -# include // Kernel exception API -# include // Cyg_Thread::self() -# include // inline definitions for above -# include // Interrupt enable -# include // HAL interrupt control -#endif - -#ifdef CYGSEM_LIBC_SIGNALS_THREAD_SAFE -# include // required for kernel includes -# include -#endif - -// TYPE DEFINITIONS - -// define dummy class to allow initialization of cyg_libc_signal_handlers - -class Cyg_libc_signals_dummy_init_class { -public: - Cyg_libc_signals_dummy_init_class(); -}; - -#ifdef CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS - -struct exception_signal_mapping_t { - cyg_code exception; - int signal; -}; - -// EXTERNS - -extern cyg_exception_handler cyg_null_exception_handler; - -#endif // ifdef CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS - -// GLOBALS - -// main signal handlers -__sighandler_t cyg_libc_signal_handlers[CYGNUM_LIBC_SIGNALS]; - -#ifdef CYGSEM_LIBC_SIGNALS_THREAD_SAFE -Cyg_Mutex cyg_libc_signal_handlers_mutex CYG_INIT_PRIORITY(LIBC); -#endif - -// STATICS - -// dummy object to invoke constructor -static Cyg_libc_signals_dummy_init_class -cyg_libc_signals_dummy_init_obj CYG_INIT_PRIORITY(LIBC); - -#ifdef CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS - -# ifdef CYGDBG_USE_TRACING -static cyg_uint8 cyg_libc_signals_hwhandler_trace_level = - CYGNUM_LIBC_SIGNALS_HWHANDLER_TRACE_LEVEL; -# define TL1 (0 < cyg_libc_signals_hwhandler_trace_level) -# endif - -# ifdef CYGSEM_LIBC_SIGNALS_CHAIN_HWEXCEPTIONS -// old exception info so we can chain -// FIXME: consider malloced linked list config option -static struct { - cyg_exception_handler *old_handler; - CYG_ADDRWORD old_data; -} exception_chain_data[CYGNUM_HAL_EXCEPTION_COUNT]; -# endif - -// struct that maps exceptions to signals -static const struct exception_signal_mapping_t -exception_signal_mapping[] = { - -#ifdef CYGNUM_HAL_EXCEPTION_DATA_ACCESS - {CYGNUM_HAL_EXCEPTION_DATA_ACCESS, SIGBUS}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DATA_WRITE - {CYGNUM_HAL_EXCEPTION_DATA_WRITE, SIGBUS}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_CODE_ACCESS - {CYGNUM_HAL_EXCEPTION_CODE_ACCESS, SIGBUS}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_CODE_WRITE - {CYGNUM_HAL_EXCEPTION_CODE_WRITE, SIGBUS}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_CODE_EXECUTE - {CYGNUM_HAL_EXCEPTION_CODE_EXECUTE, SIGBUS}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_IO_ACCESS - {CYGNUM_HAL_EXCEPTION_IO_ACCESS, SIGBUS}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_IO_WRITE - {CYGNUM_HAL_EXCEPTION_IO_ACCESS, SIGBUS}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DATA_TLBMISS_ACCESS - {CYGNUM_HAL_EXCEPTION_DATA_TLBMISS_ACCESS, SIGSEGV}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DATA_TLBMISS_WRITE - {CYGNUM_HAL_EXCEPTION_DATA_TLBMISS_WRITE, SIGSEGV}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_CODE_TLBMISS_ACCESS - {CYGNUM_HAL_EXCEPTION_CODE_TLBMISS_ACCESS, SIGSEGV}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_CODE_TLBMISS_WRITE - {CYGNUM_HAL_EXCEPTION_CODE_TLBMISS_WRITE, SIGSEGV}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DATA_TLBERROR_ACCESS - {CYGNUM_HAL_EXCEPTION_DATA_TLBERROR_ACCESS, SIGSEGV}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DATA_TLBERROR_WRITE - {CYGNUM_HAL_EXCEPTION_DATA_TLBERROR_WRITE, SIGSEGV}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_CODE_TLBERROR_ACCESS - {CYGNUM_HAL_EXCEPTION_CODE_TLBERROR_ACCESS, SIGSEGV}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_CODE_TLBERROR_WRITE - {CYGNUM_HAL_EXCEPTION_CODE_TLBERROR_WRITE, SIGSEGV}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS - {CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS, SIGBUS}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_WRITE - {CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_WRITE, SIGBUS}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_IO_UNALIGNED_ACCESS - {CYGNUM_HAL_EXCEPTION_IO_UNALIGNED_ACCESS, SIGBUS}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_IO_UNALIGNED_WRITE - {CYGNUM_HAL_EXCEPTION_IO_UNALIGNED_WRITE, SIGBUS}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION - {CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION, SIGILL}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_INTERRUPT - {CYGNUM_HAL_EXCEPTION_INTERRUPT, SIGINT}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_TRAP - {CYGNUM_HAL_EXCEPTION_TRAP, SIGTRAP}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DIV_BY_ZERO - {CYGNUM_HAL_EXCEPTION_DIV_BY_ZERO, SIGFPE}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_OVERFLOW - {CYGNUM_HAL_EXCEPTION_OVERFLOW, SIGFPE}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_BOUNDS - {CYGNUM_HAL_EXCEPTION_BOUNDS, SIGSEGV}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_SINGLE_STEP - {CYGNUM_HAL_EXCEPTION_SINGLE_STEP, SIGTRAP}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_INSTRUCTION_BP - {CYGNUM_HAL_EXCEPTION_INSTRUCTION_BP, SIGTRAP}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_PERIPHERAL_BP - {CYGNUM_HAL_EXCEPTION_PERIPHERAL_BP, SIGTRAP}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DATA_BP - {CYGNUM_HAL_EXCEPTION_DATA_BP, SIGTRAP}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DEVELOPMENT_BP - {CYGNUM_HAL_EXCEPTION_DEVELOPMENT_BP, SIGTRAP}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_STACK_OVERFLOW - {CYGNUM_HAL_EXCEPTION_STACK_OVERFLOW, SIGSEGV}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_STACK_FAULT - {CYGNUM_HAL_EXCEPTION_STACK_FAULT, SIGSEGV}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_PARITY - {CYGNUM_HAL_EXCEPTION_PARITY, SIGBUS}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_FPU - {CYGNUM_HAL_EXCEPTION_FPU, SIGFPE}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_FPU_NOT_AVAIL - {CYGNUM_HAL_EXCEPTION_FPU_NOT_AVAIL, SIGFPE}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_FPU_OVERFLOW - {CYGNUM_HAL_EXCEPTION_FPU_OVERFLOW, SIGFPE}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_FPU_UNDERFLOW - {CYGNUM_HAL_EXCEPTION_FPU_UNDERFLOW, SIGFPE}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_FPU_DIV_BY_ZERO - {CYGNUM_HAL_EXCEPTION_FPU_DIV_BY_ZERO, SIGFPE}, -#endif -#ifdef CYGNUM_HAL_EXCEPTION_SYSTEM_CALL - {CYGNUM_HAL_EXCEPTION_SYSTEM_CALL, SIGSYS}, -#endif - {0, 0} // dummy value to ensure compiler is happy -}; - - -// FUNCTIONS - -///////////////////////////////////////// -// cyg_libc_signals_hwexcept_handler() // -///////////////////////////////////////// - -// FIXME: should be able to get this work with -// CYGSEM_KERNEL_EXCEPTIONS_DECODE disabled as well as enabled -static void -cyg_libc_signals_hwexcept_handler( CYG_ADDRWORD data, cyg_code exception, - CYG_ADDRWORD info) -{ - int signal = (int)data; - int ret; - - CYG_REPORT_FUNCNAME("cyg_libc_signals_hwexcept_handler"); - - CYG_REPORT_FUNCARG3( "data = %08x, exception = %d, info = %08x", - data, exception, info ); - -#ifdef CYGSEM_LIBC_SIGNALS_BAD_SIGNAL_FATAL - CYG_PRECONDITION((signal > 0) && (signal < CYGNUM_LIBC_SIGNALS), - "Signal number not valid!"); -#endif - -// chain first as it may be more useful more low-level stuff needed -#ifdef CYGSEM_LIBC_SIGNALS_CHAIN_HWEXCEPTIONS - // map exception to 0..CYGNUM_HAL_EXCEPTION_COUNT - exception -= CYGNUM_HAL_EXCEPTION_MIN; - - // special case for null handler since it is only for uncaught exceptions - - if (exception_chain_data[exception].old_handler != - cyg_null_exception_handler) { - (*exception_chain_data[exception].old_handler)( - exception_chain_data[exception].old_data, exception, info); - CYG_TRACE0(TL1, "Chained exception handler returned"); - } // if -#endif - -#ifndef CYGSEM_LIBC_SIGNALS_BAD_SIGNAL_FATAL - // if not fatal, silently return - if ((signal <= 0) || (signal >= CYGNUM_LIBC_SIGNALS)) { - CYG_REPORT_RETURN(); - return; - } -#endif - - CYG_TRACE0(TL1, "Enabling interrupts"); - HAL_ENABLE_INTERRUPTS(); - - CYG_TRACE0(TL1, "Raising signal"); - ret = raise(signal); - - if (ret) { - CYG_TRACE1(TL1, "raise() returned non-zero value %d!!!", ret); - } // if - - CYG_REPORT_RETURN(); -} // cyg_libc_signals_hwexcept_handler() - - -////////////////// -// reg_except() // -////////////////// - -static void inline -reg_except( cyg_code exception, int signal ) -{ - Cyg_Thread::self()->register_exception( - exception, &cyg_libc_signals_hwexcept_handler, (CYG_ADDRWORD)signal, -#ifdef CYGSEM_LIBC_SIGNALS_CHAIN_HWEXCEPTIONS - &exception_chain_data[exception - - CYGNUM_HAL_EXCEPTION_MIN].old_handler, - &exception_chain_data[exception - CYGNUM_HAL_EXCEPTION_MIN].old_data -#else - NULL, NULL -#endif - ); - -} // reg_except(); - -#endif // ifdef CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS - -/////////////////////////////////////////////////// -// Cyg_libc_signals_dummy_init_class constructor // -/////////////////////////////////////////////////// - -Cyg_libc_signals_dummy_init_class::Cyg_libc_signals_dummy_init_class() -{ - cyg_ucount8 i; - - CYG_REPORT_FUNCNAME("Cyg_libc_signals_dummy_init_class constructor"); - - // FIXME: some should be SIG_IGN? - for (i=0; i= - CYGNUM_HAL_EXCEPTION_MIN), - "Asked to register bad exception"); - - CYG_ASSERT( (exception_signal_mapping[i].signal > 0) && - (exception_signal_mapping[i].signal < - CYGNUM_LIBC_SIGNALS), "Asked to register bad signal" ); - - reg_except( exception_signal_mapping[i].exception, - exception_signal_mapping[i].signal); - } -#endif - - CYG_REPORT_RETURN(); -} // Cyg_libc_signals_dummy_init_class() constructor - - -//////////////////////////////////////// -// cyg_libc_signals_default_handler() // -//////////////////////////////////////// - -// Default signal handler - SIG_DFL -externC void -cyg_libc_signals_default_handler(int sig) -{ - CYG_REPORT_FUNCNAME( "cyg_libc_signals_default_handler" ); - - CYG_REPORT_FUNCARG1( "signal number = %d", sig ); - - exit(1000 + sig); // FIXME - - CYG_REPORT_RETURN(); -} // cyg_libc_signals_default_handler() - -#ifdef CYGSEM_LIBC_SIGNALS_THREAD_SAFE -///////////////////////////////////// -// cyg_libc_signals_lock_do_lock() // -///////////////////////////////////// - -externC cyg_bool -cyg_libc_signals_lock_do_lock(void) -{ - cyg_bool ret; - CYG_REPORT_FUNCNAMETYPE("cyg_libc_signals_lock_do_lock", "returning %d"); - - ret = cyg_libc_signal_handlers_mutex.lock(); - - CYG_REPORT_RETVAL(ret); - - return ret; -} // cyg_libc_signals_lock_do_lock() - -/////////////////////////////////////// -// cyg_libc_signals_lock_do_unlock() // -/////////////////////////////////////// - -externC void -cyg_libc_signals_lock_do_unlock(void) -{ - CYG_REPORT_FUNCNAME("cyg_libc_signals_lock_do_unlock"); - - cyg_libc_signal_handlers_mutex.unlock(); - - CYG_REPORT_RETURN(); -} // cyg_libc_signals_lock_do_unlock() - -#endif // ifdef CYGSEM_LIBC_SIGNALS_THREAD_SAFE - -#endif // ifdef CYGPKG_LIBC_SIGNALS - -// EOF siginit.cxx diff --git a/packages/language/c/libc/current/src/signal/signal.cxx b/packages/language/c/libc/current/src/signal/signal.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/signal/signal.cxx +++ /dev/null @@ -1,75 +0,0 @@ -//======================================================================== -// -// signal.cxx -// -// ISO C and POSIX 1003.1 signals implementation -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-12 -// Purpose: Provide implementation of ISO C and POSIX 1003.1 signals -// Description: This file provides the linkable symbol version of raise() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -#ifdef CYGPKG_LIBC_SIGNALS - -// INCLUDES - -#include // Common type definitions and support - -// The following lines allow __raise() to be included non-inline which -// actually defines it as a function here -#define CYGPRI_LIBC_SIGNALS_SIGNAL_INLINE -#ifndef CYGIMP_LIBC_SIGNALS_SIGNAL_INLINE -# define CYGIMP_LIBC_SIGNALS_SIGNAL_INLINE -#endif - -#define signal(a, b) __signal(a, b) - -#include // Main signals definitions - -// SYMBOL DEFINITIONS - -#undef signal - -externC __sighandler_t signal(int __sig, __sighandler_t __handler) - CYGBLD_ATTRIB_WEAK_ALIAS(__signal); - -#endif // ifdef CYGPKG_LIBC_SIGNALS - -// EOF signal.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/fclose.cxx b/packages/language/c/libc/current/src/stdio/common/fclose.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/fclose.cxx +++ /dev/null @@ -1,114 +0,0 @@ -//=========================================================================== -// -// fclose.cxx -// -// Implementation of C library file close function as per ANSI 7.9.5.1 -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: Implements ISO C fclose() function -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - - -// Do we want the stdio stuff? And we can't have fclose() without fopen() -#if defined(CYGPKG_LIBC_STDIO) && defined(CYGPKG_LIBC_STDIO_OPEN) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // Error codes -#include // header for fclose() -#include "clibincl/stdlibsupp.hxx" // _free() -#include "clibincl/stdiofiles.hxx" // C library files -#include "clibincl/stream.hxx" // C libray streams -#include "clibincl/stdiosupp.hxx" // support for stdio - - -// EXPORTED SYMBOLS - -externC int -fclose( FILE * ) CYGBLD_ATTRIB_WEAK_ALIAS(_fclose); - - -// FUNCTIONS - - -externC int -_fclose( FILE *stream ) -{ - Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream; - int i; - - Cyg_libc_stdio_files::lock(); - - // find the stream in the table - for (i=0; i < FOPEN_MAX; i++) - { - if (real_stream == Cyg_libc_stdio_files::get_file_stream(i)) - break; - } // for - - if (i == FOPEN_MAX) // didn't find it - { - errno = EBADF; - - return EOF; - } // if - - // FIXME: should use delete? - // Explicitly call destructor - this flushes the output too - real_stream->~Cyg_StdioStream(); - - // and free it - _free(real_stream); - - // and mark the stream available for use - Cyg_libc_stdio_files::set_file_stream(i, NULL); - - Cyg_libc_stdio_files::unlock(); - - return 0; - -} // _fclose() - -#endif // if defined(CYGPKG_LIBC_STDIO) && defined(CYGPKG_LIBC_STDIO_OPEN) - -// EOF fclose.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/fflush.cxx b/packages/language/c/libc/current/src/stdio/common/fflush.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/fflush.cxx +++ /dev/null @@ -1,140 +0,0 @@ -//======================================================================== -// -// fflush.cxx -// -// Implementation of C library file flush function as per ANSI 7.9.5.2 -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: Provides ISO C fflush() function -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Do we want the stdio stuff? -#ifdef CYGPKG_LIBC_STDIO - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // Error codes -#include // header for fflush() -#include "clibincl/stream.hxx" // C library streams -#include "clibincl/stdiofiles.hxx" // C library files -#include "clibincl/stdiosupp.hxx" // support for stdio - - -// EXPORTED SYMBOLS - -externC int -fflush( FILE * ) CYGBLD_ATTRIB_WEAK_ALIAS(_fflush); - - -// FUNCTIONS - -// flush all but one stream -externC Cyg_ErrNo -cyg_libc_stdio_flush_all_but( Cyg_StdioStream *not_this_stream ) -{ - cyg_bool files_flushed[FOPEN_MAX] = { false }; // sets all to 0 - cyg_bool loop_again; - cyg_ucount32 i; - Cyg_ErrNo err=ENOERR; - Cyg_StdioStream *stream; - - do { - loop_again = false; - - for (i=0; (itrylock_me() ) { - err = stream->flush_output_unlocked(); - stream->unlock_me(); - files_flushed[i] = true; - } // if - else - loop_again = true; - } // else - } // if - } // for - } // do - while(loop_again && !err); - - return err; -} // cyg_libc_stdio_flush_all_but() - -externC int -_fflush( FILE *stream ) -{ - Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream; - Cyg_ErrNo err; - - if (stream == NULL) { // tells us to flush ALL streams - err = cyg_libc_stdio_flush_all_but(NULL); - } // if - else { - err = real_stream->flush_output(); - } // else - - if (err) { - errno = err; - return EOF; - } // if - - return 0; - -} // _fflush() - -#endif // ifdef CYGPKG_LIBC_STDIO - -// EOF fflush.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/fopen.cxx b/packages/language/c/libc/current/src/stdio/common/fopen.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/fopen.cxx +++ /dev/null @@ -1,199 +0,0 @@ -//=========================================================================== -// -// fopen.cxx -// -// Implementation of C library file open function as per ANSI 7.9.5.3 -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: Implements ISO C fopen() function -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - - -// Do we want the stdio stuff? And fopen()? -#if defined(CYGPKG_LIBC_STDIO) && defined(CYGPKG_LIBC_STDIO_OPEN) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // Error codes -#include // I/O system -#include // header for fopen() -#include "clibincl/stdlibsupp.hxx" // _malloc() -#include "clibincl/stringsupp.hxx" // _strncmp() and _strcmp() -#include "clibincl/stdiofiles.hxx" // C library files -#include "clibincl/stream.hxx" // C library streams - - -// EXPORTED SYMBOLS - -externC FILE * -fopen( const char *, const char * ) CYGBLD_ATTRIB_WEAK_ALIAS(_fopen); - - -// FUNCTIONS - -// process the mode string. Return true on error -static cyg_bool -process_mode( const char *mode, Cyg_StdioStream::OpenMode *rw, - cyg_bool *binary, cyg_bool *append ) -{ - *binary = *append = false; // default - - switch (mode[0]) { - case 'r': - *rw = Cyg_StdioStream::CYG_STREAM_READ; - break; - - case 'w': - case 'a': - *rw = Cyg_StdioStream::CYG_STREAM_WRITE; - *append = true; - break; - - default: - return true; - } // switch - - // ANSI says additional characters may follow the sequences, that we - // don't necessarily recognise so we just ignore them, and pretend that - // its the end of the string - - switch (mode[1]) { - case 'b': - *binary = true; - break; - case '+': - *rw = Cyg_StdioStream::CYG_STREAM_READWRITE; - break; - default: - return false; - } // switch - - switch (mode[2]) { - case 'b': - *binary = true; - break; - case '+': - *rw = Cyg_StdioStream::CYG_STREAM_READWRITE; - break; - default: - return false; - } // switch - - return false; -} // process_mode() - - -externC FILE * -_fopen( const char *filename, const char *mode ) -{ - cyg_io_handle_t dev; - Cyg_StdioStream *curr_stream; - int i; - Cyg_ErrNo err; - Cyg_StdioStream::OpenMode open_mode; - cyg_bool binary, append; - - err = cyg_io_lookup( filename, &dev ); - - // if not found - if (err != ENOERR) { - errno = ENOENT; - return NULL; - } // if - - // process_mode returns true on error - if (process_mode( mode, &open_mode, &binary, &append )) { - errno = EINVAL; - return NULL; - } // if - - Cyg_libc_stdio_files::lock(); - - // find an empty slot - for (i=0; i < FOPEN_MAX; i++) { - curr_stream = Cyg_libc_stdio_files::get_file_stream(i); - if (curr_stream == NULL) - break; - } // for - - if (i == FOPEN_MAX) { // didn't find an empty slot - errno = EMFILE; - return NULL; - } // if - - // allocate it some memory and construct it. Currently we only have - // potentially interactive devices, so as per ANSI 7.9.3 it must not - // be buffered - curr_stream = new Cyg_StdioStream( dev, open_mode, append, binary, - _IONBF, 0 ); - - if (curr_stream == NULL) { - errno = ENOMEM; - return NULL; - } // if - - - // it puts any error in its own error flag - if (( err=curr_stream->get_error() )) { - - Cyg_libc_stdio_files::unlock(); - - _free( curr_stream ); - - errno = err; - - return NULL; - - } // if - - Cyg_libc_stdio_files::set_file_stream(i, curr_stream); - - Cyg_libc_stdio_files::unlock(); - - return (FILE *)(curr_stream); - -} // _fopen() - -#endif // defined(CYGPKG_LIBC_STDIO) && defined(CYGPKG_LIBC_STDIO_OPEN) - -// EOF fopen.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/freopen.cxx b/packages/language/c/libc/current/src/stdio/common/freopen.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/freopen.cxx +++ /dev/null @@ -1,80 +0,0 @@ -//======================================================================== -// -// freopen.cxx -// -// Implementation of C library freopen() function -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: Provides ISO C freopen() function -// Description: Implementation of C library freopen() function as per -// ISO C standard chap. 7.9.5.4 -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Do we want the stdio stuff? And we only want freopen() if we have fopen() -#if defined(CYGPKG_LIBC_STDIO) && defined(CYGPKG_LIBC_STDIO_OPEN) - - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for freopen() -#include "clibincl/stdiosupp.hxx" // support for stdio - - -// EXPORTED SYMBOLS - -externC FILE * -freopen( const char *, const char *, FILE * ) - CYGBLD_ATTRIB_WEAK_ALIAS(_freopen); - - -// FUNCTIONS - - -externC FILE * -_freopen( const char *, const char *, FILE * ) -{ - return NULL; // Returning NULL is valid! FIXME -} // _freopen() - -#endif // if defined(CYGPKG_LIBC_STDIO) && defined(CYGPKG_LIBC_STDIO_OPEN) - -// EOF freopen.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/setvbuf.cxx b/packages/language/c/libc/current/src/stdio/common/setvbuf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/setvbuf.cxx +++ /dev/null @@ -1,133 +0,0 @@ -//=========================================================================== -// -// setvbuf.cxx -// -// Implementation of C library buffering setup as per ANSI 7.9.5.6 -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // Error codes -#include // header for setvbuf() -#include "clibincl/stream.hxx" // C libray streams -#include "clibincl/stdiosupp.hxx" // support for stdio - - -// EXPORTED SYMBOLS - -externC int -setvbuf( FILE *, char *, int, size_t ) CYGPRI_LIBC_WEAK_ALIAS("_setvbuf"); - - -// FUNCTIONS - - -externC int -_setvbuf( FILE *stream, char *buf, int mode, size_t size ) -{ -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - - Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream; - Cyg_ErrNo err; - -#ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS - if ( !real_stream->lock_me() ) { - errno = EBADF; - return EBADF; - } // if -#endif - - err = real_stream->io_buf.set_buffer( (cyg_ucount32) size, - (cyg_uint8 *) buf ); - if (!err) { - switch (mode) { - case _IONBF: - CYG_ASSERT( (size == 0) && (buf == NULL), - "No buffering wanted but size/address specified!" ); - real_stream->flags.buffering = false; - real_stream->flags.line_buffering = false; - break; - case _IOLBF: - real_stream->flags.buffering = true; - real_stream->flags.line_buffering = true; - break; - case _IOFBF: - real_stream->flags.buffering = true; - real_stream->flags.line_buffering = false; - break; - default: - err = EINVAL; - break; - } // switch - } // if - -#ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS - real_stream->unlock_me(); -#endif - - if (err) { - errno = err; - return err; - } // if - - return 0; - -#else // ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - - errno = ENOSUPP; - return ENOSUPP; - -#endif // ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - -} // _setvbuf() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF setvbuf.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/snprintf.cxx b/packages/language/c/libc/current/src/stdio/common/snprintf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/snprintf.cxx +++ /dev/null @@ -1,87 +0,0 @@ -//=========================================================================== -// -// snprintf.cxx -// -// ANSI Stdio snprintf() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include "clibincl/stdiosupp.hxx" // Support functions for stdio - -// EXPORTED SYMBOLS - -externC int -snprintf( char *, size_t, const char *, ... ) - CYGPRI_LIBC_WEAK_ALIAS("_snprintf"); - - -// FUNCTIONS - -externC int -_snprintf( char *s, size_t size, const char *format, ... ) -{ - int rc; // return code - va_list ap; // for variable args - - va_start(ap, format); // init specifying last non-var arg - - rc = _vsnprintf(s, size, format, ap); - - va_end(ap); // end var args - - return rc; -} // _snprintf() - - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF snprintf.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/sprintf.cxx b/packages/language/c/libc/current/src/stdio/common/sprintf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/sprintf.cxx +++ /dev/null @@ -1,86 +0,0 @@ -//=========================================================================== -// -// sprintf.cxx -// -// ANSI Stdio sprintf() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include // INT_MAX -#include "clibincl/stdiosupp.hxx" // Support functions for stdio - -// EXPORTED SYMBOLS - -externC int -sprintf( char *, const char *, ... ) CYGPRI_LIBC_WEAK_ALIAS("_sprintf"); - - -// FUNCTIONS - -externC int -_sprintf( char *s, const char *format, ... ) -{ - int rc; // return code - va_list ap; // for variable args - - va_start(ap, format); // init specifying last non-var arg - - rc = _vsnprintf(s, INT_MAX, format, ap); - - va_end(ap); // end var args - - return rc; -} // _sprintf() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF sprintf.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/sscanf.cxx b/packages/language/c/libc/current/src/stdio/common/sscanf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/sscanf.cxx +++ /dev/null @@ -1,85 +0,0 @@ -//=========================================================================== -// -// sscanf.cxx -// -// ANSI Stdio sscanf() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include "clibincl/stdiosupp.hxx" // Support functions for stdio - -// EXPORTED SYMBOLS - -externC int -sscanf( const char *, const char *, ... ) CYGPRI_LIBC_WEAK_ALIAS("_sscanf"); - - -// FUNCTIONS - -externC int -_sscanf( const char *s, const char *format, ... ) -{ - int rc; // return code - va_list ap; // for variable args - - va_start(ap, format); // init specifying last non-var arg - - rc = _vsscanf(s, format, ap); - - va_end(ap); // end var args - - return rc; -} // _sscanf() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF sscanf.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/stderr.cxx b/packages/language/c/libc/current/src/stdio/common/stderr.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/stderr.cxx +++ /dev/null @@ -1,94 +0,0 @@ -//======================================================================== -// -// stderr.cxx -// -// Initialization of stderr stream for ISO C library -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-15 -// Purpose: Initialization of stderr stream for ISO C library -// Description: We put all this in a separate file in the hope that if -// no-one uses stderr, then it is not included in the image -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -#ifdef CYGPKG_LIBC_STDIO - -// Don't let us get the stream definitions of stdin/out/err from stdio.h -// since we are going to break the type safety :-( -#define CYGPRI_LIBC_STDIO_NO_DEFAULT_STREAMS - -// And we don't need the stdio inlines, which will otherwise complain if -// stdin/out/err are not available -#ifdef CYGIMP_LIBC_STDIO_INLINES -# undef CYGIMP_LIBC_STDIO_INLINES -#endif - -// INCLUDES - -#include // Common type definitions and support -#include "clibincl/stream.hxx" // Cyg_StdioStream class -#include "clibincl/stdiofiles.hxx" // C library files -#include "clibincl/stdiosupp.hxx" // Cyg_libc_stdio_find_filename() - -// STATICS - -Cyg_StdioStream -cyg_libc_stdio_stderr CYG_INIT_PRIORITY(LIBC) = Cyg_StdioStream( - Cyg_libc_stdio_find_filename(CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE), - Cyg_StdioStream::CYG_STREAM_WRITE, false, false, _IONBF, 0, NULL ); - -// CLASSES - -// This is a dummy class just so we can execute arbitrary code when -// stderr is requested - -class cyg_libc_dummy_stderr_init_class { -public: - cyg_libc_dummy_stderr_init_class(void) { - Cyg_libc_stdio_files::set_file_stream(2, &cyg_libc_stdio_stderr); - } -}; - -// And here's an instance of the class just to make the code run -static cyg_libc_dummy_stderr_init_class cyg_libc_dummy_stderr_init - CYG_INIT_PRIORITY(LIBC); - -#endif // ifdef CYGPKG_LIBC_STDIO - -// EOF stderr.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/stdin.cxx b/packages/language/c/libc/current/src/stdio/common/stdin.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/stdin.cxx +++ /dev/null @@ -1,95 +0,0 @@ -//======================================================================== -// -// stdin.cxx -// -// Initialization of stdin stream for ISO C library -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-15 -// Purpose: Initialization of stdin stream for ISO C library -// Description: We put all this in a separate file in the hope that if -// no-one uses stdin, then it is not included in the image -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -#ifdef CYGPKG_LIBC_STDIO - -// Don't let us get the stream definitions of stdin/out/err from stdio.h -// since we are going to break the type safety :-( -#define CYGPRI_LIBC_STDIO_NO_DEFAULT_STREAMS - -// And we don't need the stdio inlines, which will otherwise complain if -// stdin/out/err are not available -#ifdef CYGIMP_LIBC_STDIO_INLINES -# undef CYGIMP_LIBC_STDIO_INLINES -#endif - -// INCLUDES - -#include // Common type definitions and support -#include "clibincl/stream.hxx" // Cyg_StdioStream class -#include "clibincl/stdiofiles.hxx" // C library files -#include "clibincl/stdiosupp.hxx" // Cyg_libc_stdio_find_filename() - -// STATICS - -Cyg_StdioStream -cyg_libc_stdio_stdin CYG_INIT_PRIORITY(LIBC) = Cyg_StdioStream( - Cyg_libc_stdio_find_filename(CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE), - Cyg_StdioStream::CYG_STREAM_READ, false, false, _IOLBF ); - - -// CLASSES - -// This is a dummy class just so we can execute arbitrary code when -// stdin is requested - -class cyg_libc_dummy_stdin_init_class { -public: - cyg_libc_dummy_stdin_init_class(void) { - Cyg_libc_stdio_files::set_file_stream(0, &cyg_libc_stdio_stdin); - } -}; - -// And here's an instance of the class just to make the code run -static cyg_libc_dummy_stdin_init_class cyg_libc_dummy_stdin_init - CYG_INIT_PRIORITY(LIBC); - -#endif // ifdef CYGPKG_LIBC_STDIO - -// EOF stdin.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/stdiofiles.cxx b/packages/language/c/libc/current/src/stdio/common/stdiofiles.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/stdiofiles.cxx +++ /dev/null @@ -1,76 +0,0 @@ -//======================================================================== -// -// stdiofiles.cxx -// -// ISO C library stdio central file data -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: Allocate storage for central file data object -// Description: This file allocates the actual objects used by the -// Cyg_libc_stdio_files class defined in -// "clibincl/stdiofiles.hxx" -// Usage: -// -//####DESCRIPTIONEND#### -// -//========================================================================= - -// CONFIGURATION - -#include // C library configuration - -#ifdef CYGPKG_LIBC_STDIO - -// INCLUDES - -#include // NULL -#include "clibincl/stream.hxx" // Cyg_StdioStream -#include "clibincl/stdiofiles.hxx" // Class definition for - // Cyg_libc_stdio_files - -#ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS -# include // CYG_INIT_PRIORITY -# include // mutexes -#endif - - -// GLOBAL VARIABLES - -Cyg_StdioStream *Cyg_libc_stdio_files::files[FOPEN_MAX] = { NULL }; - -# ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS -Cyg_Mutex Cyg_libc_stdio_files::files_lock CYG_INIT_PRIORITY(LIBC); -# endif - -#endif // ifdef CYGPKG_LIBC_STDIO - -// EOF stdiofiles.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/stdioinlines.cxx b/packages/language/c/libc/current/src/stdio/common/stdioinlines.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/stdioinlines.cxx +++ /dev/null @@ -1,186 +0,0 @@ -//=========================================================================== -// -// stdioinlines.cxx -// -// ANSI standard I/O routines - real alternatives for inlined functions -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -// We don't want the inline versions of stdio functions defined here - -#ifdef CYGIMP_LIBC_STDIO_INLINES -#undef CYGIMP_LIBC_STDIO_INLINES -#endif - -#include // Common type definitions and support -#include // NULL and size_t from compiler -#include // va_list -#include // Header for this file -#include // Definition of error codes and errno -#include // Definition of strerror() for perror() -#include // INT_MAX -#include "clibincl/stdiosupp.hxx" // Support for stdio - - -// EXPORTED SYMBOLS - -externC void -setbuf( FILE *, char * ) CYGPRI_LIBC_WEAK_ALIAS("_setbuf"); - -externC int -vfprintf( FILE *, const char *, va_list ) CYGPRI_LIBC_WEAK_ALIAS("_vfprintf"); - -externC int -vprintf( const char *, va_list ) CYGPRI_LIBC_WEAK_ALIAS("_vprintf"); - -externC int -vsprintf( char *, const char *, va_list ) CYGPRI_LIBC_WEAK_ALIAS("_vsprintf"); - -externC int -puts( const char *s ) CYGPRI_LIBC_WEAK_ALIAS("_puts"); - -externC void -perror( const char * ) CYGPRI_LIBC_WEAK_ALIAS("_perror"); - -#ifdef CYGFUN_LIBC_STDIO_ungetc -externC int -vscanf( const char *, va_list ) CYGPRI_LIBC_WEAK_ALIAS("_vscanf"); -#endif - -// FUNCTIONS - -//=========================================================================== - -// 7.9.5 File access functions - -externC void -_setbuf( FILE *stream, char *buf ) -{ - if (buf == NULL) - _setvbuf( stream, NULL, _IONBF, BUFSIZ ); - else - // NB: Should use full buffering by default ordinarily, but in - // the current system we're always connected to an interactive - // terminal, so use line buffering - _setvbuf( stream, buf, _IOLBF, BUFSIZ ); - -} // _setbuf() - -//=========================================================================== - -// 7.9.6 Formatted input/output functions - - -externC int -_vfprintf( FILE *stream, const char *format, va_list arg ) -{ - return _vfnprintf(stream, INT_MAX, format, arg); -} // _vfprintf() - - -externC int -_vprintf( const char *format, va_list arg) -{ - return _vfnprintf( stdout, INT_MAX, format, arg ); -} // _vprintf() - - -externC int -_vsprintf( char *s, const char *format, va_list arg ) -{ - return _vsnprintf(s, INT_MAX, format, arg); -} // _vsprintf() - - -//=========================================================================== - -// 7.9.7 Character input/output functions - -externC int -_puts( const char *s ) -{ - int rc; - - rc = _fputs( s, stdout ); - - if (rc >= 0) - rc = fputc('\n', stdout ); - - return rc; -} // _puts() - - -//=========================================================================== - -// 7.9.10 Error-handling functions - -externC void -_perror( const char *s ) -{ - if (s && *s) - _fprintf( stderr, "%s: %s\n", s, strerror(errno) ); - else - _fputs( strerror(errno), stderr ); - -} // _perror() - -//=========================================================================== - -// Other non-ANSI functions - -#ifdef CYGFUN_LIBC_STDIO_ungetc -externC int -_vscanf( const char *format, va_list arg ) -{ - return _vfscanf( stdin, format, arg ); -} // _vscanf() -#endif - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF stdioinlines.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/stdiosupp.cxx b/packages/language/c/libc/current/src/stdio/common/stdiosupp.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/stdiosupp.cxx +++ /dev/null @@ -1,78 +0,0 @@ -//=========================================================================== -// -// stdiosupp.cxx -// -// Helper C library functions for standard I/O -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-04 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - - -// Include the C library? And do we want the stdio stuff? -#ifdef CYGPKG_LIBC_STDIO - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // I/O system -#include "clibincl/stringsupp.hxx" // _strncmp() and _strcmp() -#include "clibincl/stdiosupp.hxx" // Header for this file - -externC void cyg_io_init(void); - -cyg_io_handle_t -Cyg_libc_stdio_find_filename( const char *filename ) -{ - cyg_io_handle_t dev=NULL; - // FIXME - Remove this call to 'cyg_io_init()' when contructor - // priority bug PR 19285 is fixed - cyg_io_init(); - cyg_io_lookup(filename, &dev); - - return dev; -} // Cyg_libc_stdio_find_filename() - - -#endif // ifdef CYGPKG_LIBC_STDIO - -// EOF stdiosupp.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/stdout.cxx b/packages/language/c/libc/current/src/stdio/common/stdout.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/stdout.cxx +++ /dev/null @@ -1,94 +0,0 @@ -//======================================================================== -// -// stdout.cxx -// -// Initialization of stdout stream for ISO C library -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-15 -// Purpose: Initialization of stdout stream for ISO C library -// Description: We put all this in a separate file in the hope that if -// no-one uses stdout, then it is not included in the image -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -#ifdef CYGPKG_LIBC_STDIO - -// Don't let us get the stream definitions of stdin/out/err from stdio.h -// since we are going to break the type safety :-( -#define CYGPRI_LIBC_STDIO_NO_DEFAULT_STREAMS - -// And we don't need the stdio inlines, which will otherwise complain if -// stdin/out/err are not available -#ifdef CYGIMP_LIBC_STDIO_INLINES -# undef CYGIMP_LIBC_STDIO_INLINES -#endif - -// INCLUDES - -#include // Common type definitions and support -#include "clibincl/stream.hxx" // Cyg_StdioStream class -#include "clibincl/stdiofiles.hxx" // C library files -#include "clibincl/stdiosupp.hxx" // Cyg_libc_stdio_find_filename() - -// STATICS - -Cyg_StdioStream -cyg_libc_stdio_stdout CYG_INIT_PRIORITY(LIBC) = Cyg_StdioStream( - Cyg_libc_stdio_find_filename(CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE), - Cyg_StdioStream::CYG_STREAM_WRITE, false, false, _IOLBF ); - -// CLASSES - -// This is a dummy class just so we can execute arbitrary code when -// stdout is requested - -class cyg_libc_dummy_stdout_init_class { -public: - cyg_libc_dummy_stdout_init_class(void) { - Cyg_libc_stdio_files::set_file_stream(1, &cyg_libc_stdio_stdout); - } -}; - -// And here's an instance of the class just to make the code run -static cyg_libc_dummy_stdout_init_class cyg_libc_dummy_stdout_init - CYG_INIT_PRIORITY(LIBC); - -#endif // ifdef CYGPKG_LIBC_STDIO - -// EOF stdout.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/stream.cxx b/packages/language/c/libc/current/src/stdio/common/stream.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/stream.cxx +++ /dev/null @@ -1,647 +0,0 @@ -//======================================================================== -// -// stream.cxx -// -// Implementations of internal C library stdio stream functions -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-16 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - - -// Include the C library? And do we want the stdio stuff? -#ifdef CYGPKG_LIBC_STDIO - -// INCLUDES - -#include // Common project-wide type definitions -#include // Assertion infrastructure -#include // NULL and size_t from compiler -#include // Error codes -#include "clibincl/stringsupp.hxx" // _memcpy() -#include "clibincl/stream.hxx" // Header for this file -#include "clibincl/stdiosupp.hxx" // Stdio support functions -#include // I/O system -#include // CYG_IO_GET_CONFIG_SERIAL_OUTPUT_DRAIN - - -// FUNCTIONS - -Cyg_StdioStream::Cyg_StdioStream(cyg_io_handle_t dev, - OpenMode open_mode, - cyg_bool append, cyg_bool binary, - int buffer_mode, cyg_ucount32 buffer_size, - cyg_uint8 *buffer_addr ) -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - : io_buf( buffer_size, buffer_addr ) -#endif - -{ - - CYG_CHECK_DATA_PTR(dev, "Attempt to open invalid device!"); - -#ifdef CYGDBG_USE_ASSERTS - magic_validity_word = 0xbadbad; -#endif - - my_device = dev; - - // Clear all flags - _memset( &flags, 0, sizeof(flags) ); - - switch (open_mode) { - case CYG_STREAM_READ: - flags.opened_for_read = true; - break; - case CYG_STREAM_WRITE: - flags.opened_for_write = true; - break; - case CYG_STREAM_READWRITE: - flags.opened_for_read = true; - flags.opened_for_write = true; - break; - default: - error=EINVAL; - return; - } // switch - - - if (flags.opened_for_write) { -#if 0 - // FIXME: need some replacement for this - if (!my_device->write_blocking) { - error = EDEVNOSUPP; - return; - } // if -#endif -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - flags.last_buffer_op_was_read = false; -#endif - } // if - - - if (flags.opened_for_read) { -#if 0 - // FIXME: need some replacement for this - if (!my_device->read_blocking) { - error = EDEVNOSUPP; - return; - } // if -#endif - - // NB also if opened for read AND write, then say last op was read -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - flags.last_buffer_op_was_read = true; -#endif - } // if - - flags.binary = binary ? 1 : 0; - - error = ENOERR; - - // in due course we would do an equivalent to fseek(...,0, SEEK_END); - // when appending. for now, there's nothing, except set eof - - flags.at_eof = append ? 1 : 0; - - position = 0; - -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - - switch (buffer_mode) { - case _IONBF: - CYG_ASSERT( (buffer_size == 0) && (buffer_addr == NULL), - "No buffering wanted but size/address specified!" ); - flags.buffering = flags.line_buffering = false; - break; - case _IOLBF: - flags.buffering = true; - flags.line_buffering = true; - break; - case _IOFBF: - flags.buffering = true; - flags.line_buffering = false; - break; - default: - error = EINVAL; - return; - } // switch - - // one way of checking the buffer was set up correctly - if (flags.buffering && io_buf.get_buffer_size()==-1) { - error = ENOMEM; - return; - } - -#endif - -#if 0 // FIXME - Need to set binary mode. - if (my_device->open) { - error = (*my_device->open)( my_device->cookie, - binary ? CYG_DEVICE_OPEN_MODE_RAW - : CYG_DEVICE_OPEN_MODE_TEXT ); - if (error != ENOERR) - return; // keep error code the same - } // if - -#endif - -#ifdef CYGDBG_USE_ASSERTS - magic_validity_word = 0x7b4321ce; -#endif - -} // Cyg_StdioStream constructor - - - -Cyg_ErrNo -Cyg_StdioStream::refill_read_buffer( void ) -{ - Cyg_ErrNo read_err; - cyg_uint8 *buffer; - cyg_uint32 len; - - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - if (!lock_me()) - return EBADF; // assume file is now invalid - - // first just check that we _can_ read this device! - if (!flags.opened_for_read) { - unlock_me(); - return EINVAL; - } - -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - // If there is pending output to write, then this will check and - // write it - if (flags.buffering) { - read_err = flush_output_unlocked(); - - if (read_err != ENOERR) { - unlock_me(); - return read_err; - } // if - } // if -#endif - -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - // we're now reading - flags.last_buffer_op_was_read = true; - - if (flags.buffering) { - len = io_buf.get_buffer_addr_to_write( (cyg_uint8**)&buffer ); - if (!len) { // no buffer space available - unlock_me(); - return ENOERR; // isn't an error, just needs user to read out data - } // if - } - else -#endif - - if (!flags.readbuf_char_in_use) { - len = 1; - buffer = &readbuf_char; - } - else { - // no buffer space available - unlock_me(); - return ENOERR; // isn't an error, just needs user to read out data - } // else - - read_err = cyg_io_read(my_device, buffer, &len); - - -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - if (flags.buffering) - io_buf.set_bytes_written( len ); - else -#endif - flags.readbuf_char_in_use = len ? 1 : 0; - - unlock_me(); - - if (read_err == ENOERR) { - if (len == 0) - read_err = EAGAIN; - } // if - - return read_err; -} // refill_read_buffer() - - -Cyg_ErrNo -Cyg_StdioStream::read( cyg_uint8 *user_buffer, cyg_ucount32 buffer_length, - cyg_ucount32 *bytes_read ) -{ - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - *bytes_read = 0; - - if (!lock_me()) - return EBADF; // assume file is now invalid - - if (!flags.opened_for_read) { - unlock_me(); - return EINVAL; - } - -#ifdef CYGFUN_LIBC_STDIO_ungetc - if (flags.unread_char_buf_in_use && buffer_length) { - *user_buffer++ = unread_char_buf; - ++*bytes_read; - flags.unread_char_buf_in_use = false; - --buffer_length; - } // if - -#endif // ifdef CYGFUN_LIBC_STDIO_ungetc - -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - if (flags.buffering) { - cyg_uint8 *buff_to_read_from; - cyg_ucount32 bytes_available; - Cyg_ErrNo err; - - // this should really only be called after refill_read_buffer, but - // just in case - err = flush_output_unlocked(); - if (ENOERR == err) - err = cyg_libc_stdio_flush_all_but(this); - - if (err != ENOERR) { - unlock_me(); - return err; - } - - // we're now reading - flags.last_buffer_op_was_read = true; - - bytes_available = io_buf.get_buffer_addr_to_read( - (cyg_uint8 **)&buff_to_read_from ); - - *bytes_read += (bytes_available < buffer_length) ? bytes_available - : buffer_length; - if (*bytes_read) { - memcpy( user_buffer, buff_to_read_from, *bytes_read ); - io_buf.set_bytes_read( *bytes_read ); - } // if - - } // if - else - -#endif - - if (flags.readbuf_char_in_use && buffer_length) { - *user_buffer = readbuf_char; - *bytes_read = 1; - flags.readbuf_char_in_use = false; - } - - unlock_me(); - - return ENOERR; -} // read() - - -Cyg_ErrNo -Cyg_StdioStream::read_byte( cyg_uint8 *c ) -{ - Cyg_ErrNo err=ENOERR; - - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - if (!lock_me()) - return EBADF; // assume file is now invalid - - if (!flags.opened_for_read) { - unlock_me(); - return EINVAL; - } - - // this should really only be called after refill_read_buffer, but just - // in case -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - if (flags.buffering) - err = flush_output_unlocked(); - if (ENOERR == err) - err = cyg_libc_stdio_flush_all_but(this); - - if (err != ENOERR) - return err; - - // we're now reading - flags.last_buffer_op_was_read = true; -#endif - -# ifdef CYGFUN_LIBC_STDIO_ungetc - if (flags.unread_char_buf_in_use) { - *c = unread_char_buf; - flags.unread_char_buf_in_use = false; - unlock_me(); - return ENOERR; - } // if -# endif // ifdef CYGFUN_LIBC_STDIO_ungetc - -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - if (flags.buffering) { - cyg_uint8 *buff_to_read_from; - cyg_ucount32 bytes_available; - - bytes_available=io_buf.get_buffer_addr_to_read(&buff_to_read_from); - - if (bytes_available) { - *c = *buff_to_read_from; - io_buf.set_bytes_read(1); - } - else - err = EAGAIN; - } // if - else - -#endif - - - if (flags.readbuf_char_in_use) { - *c = readbuf_char; - flags.readbuf_char_in_use = false; - } - else - err = EAGAIN; - - unlock_me(); - - return err; -} // read_byte() - - -Cyg_ErrNo -Cyg_StdioStream::peek_byte( cyg_uint8 *c ) -{ - Cyg_ErrNo err=ENOERR; - - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - if (!lock_me()) - return EBADF; // assume file is now invalid - - if (!flags.opened_for_read) { - unlock_me(); - return EINVAL; - } - - // this should really only be called after refill_read_buffer, but just - // in case -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - if (flags.buffering) - err = flush_output_unlocked(); - - if (err != ENOERR) - return err; - - // we're now reading - flags.last_buffer_op_was_read = true; -#endif - -# ifdef CYGFUN_LIBC_STDIO_ungetc - if (flags.unread_char_buf_in_use) { - *c = unread_char_buf; - unlock_me(); - return ENOERR; - } // if -# endif // ifdef CYGFUN_LIBC_STDIO_ungetc - -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - if (flags.buffering) { - cyg_uint8 *buff_to_read_from; - cyg_ucount32 bytes_available; - - bytes_available=io_buf.get_buffer_addr_to_read(&buff_to_read_from); - - if (bytes_available) { - *c = *buff_to_read_from; - } - else - err = EAGAIN; - } // if - else - -#endif - - - if (flags.readbuf_char_in_use) { - *c = readbuf_char; - } - else - err = EAGAIN; - - unlock_me(); - - return err; -} // peek_byte() - - -Cyg_ErrNo -Cyg_StdioStream::flush_output_unlocked( void ) -{ -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - Cyg_ErrNo write_err=ENOERR; - cyg_uint8 *buffer; - cyg_uint32 len; - - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - if ( flags.last_buffer_op_was_read ) - return ENOERR; - - // first just check that we _can_ write to the device! - if ( !flags.opened_for_write ) - return EINVAL; - - // shortcut if nothing to do - if (io_buf.get_buffer_space_used() == 0) - return ENOERR; - - len = io_buf.get_buffer_addr_to_read( (cyg_uint8 **)&buffer ); - - CYG_ASSERT( len > 0, - "There should be data to read but there isn't!"); - - write_err = cyg_io_write(my_device, buffer, &len); - - // since we're doing a concerted flush, we tell the I/O layer to - // flush too, otherwise output may just sit there forever - if (!write_err) - write_err = cyg_io_get_config(my_device, - CYG_IO_GET_CONFIG_SERIAL_OUTPUT_DRAIN, - NULL, NULL); - - // we've just read it all, so just wipe it out - io_buf.drain_buffer(); - - return write_err; - -#else // ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - return ENOERR; - -#endif // ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO -} // flush_output_unlocked() - - - -Cyg_ErrNo -Cyg_StdioStream::write( const cyg_uint8 *buffer, - cyg_ucount32 buffer_length, - cyg_ucount32 *bytes_written ) -{ - Cyg_ErrNo write_err = ENOERR; - - CYG_ASSERTCLASS( this, "Stream object is not a valid stream!" ); - - *bytes_written = 0; - - if (!lock_me()) - return EBADF; // assume file is now invalid - - // first just check that we _can_ write to the device! - if ( !flags.opened_for_write ) { - unlock_me(); - return EINVAL; - } - -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - if (flags.last_buffer_op_was_read == true) - io_buf.drain_buffer(); // nuke input bytes to prevent confusion - - flags.last_buffer_op_was_read = false; - - if (!flags.buffering) { -#endif - cyg_uint32 len = buffer_length; - - write_err = cyg_io_write(my_device, buffer, &len); - - *bytes_written = len; - -#ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO - } // if - else { - cyg_ucount32 bytes_available; - cyg_ucount32 bytes_to_write; - cyg_ucount32 newline_pos; - cyg_uint8 *write_addr; - cyg_bool must_flush = false; - - while ( buffer_length > 0 ) { - bytes_available = - io_buf.get_buffer_addr_to_write( &write_addr ); - - // we need to flush if we've no room or the buffer has an up - // and coming newline - if ( !bytes_available || must_flush ) { - write_err = flush_output_unlocked(); - - // harmless even if there was an error - bytes_available = - io_buf.get_buffer_addr_to_write( &write_addr ); - - CYG_ASSERT( bytes_available > 0, - "Help! still no bytes available in " - "write buffer" ); - } // if - - if (write_err) { - unlock_me(); - return write_err; - } // if - - // choose the lower of the buffer available and the length - // to write - bytes_to_write=(bytes_available < buffer_length) - ? bytes_available - : buffer_length; - - // if we're line buffered, we may want want to flush if there's - // a newline character, so lets find out - - if (flags.line_buffering) { - for (newline_pos=0; - newline_pos // Configuration header - -// Include the C library? And do we want the stdio stuff? And buffered I/O? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) && \ - defined(CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO) - - -// INCLUDES - -#include // Common project-wide type definitions -#include // Assertion support -#include // Cyg_ErrNo -#include "clibincl/stdlibsupp.hxx"// _malloc() and _free() -#include "clibincl/streambuf.hxx" // header for this file, just in case - -// FUNCTIONS - -Cyg_ErrNo -Cyg_StdioStreamBuffer::set_buffer( cyg_ucount32 size=BUFSIZ, - cyg_uint8 *new_buffer=NULL ) -{ - -#ifdef CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF - - // user-supplied buffer? - if (new_buffer != NULL) { - CYG_CHECK_DATA_PTR(new_buffer, "new_buffer not valid"); - // first check if we were responsible for the old buffer - if (call_free) { - _free(buffer_bottom); - call_free = false; - } - buffer_bottom = new_buffer; - } - else if ( size != buffer_size ) { // as long as its different from - // what we've got now - cyg_uint8 *malloced_buf; - - malloced_buf = (cyg_uint8 * )_malloc( size ); - if (malloced_buf == NULL) - return ENOMEM; - - // should the old buffer be freed? This waits till after we know - // whether the malloc succeeded - if (call_free) - _free( buffer_bottom ); - - buffer_bottom = malloced_buf; - - call_free=true; - - } // else if - - -#else // ifdef CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF - - // In this config we can't use a different buffer, or set a - // size greater than now. We can pretend to shrink it though - - // Note on the next line we compare it with the size of buffer_bottom - // and not the current size, as that's what is the limiting factor - if ( (new_buffer != NULL) || (size > sizeof(buffer_bottom)) ) - return EINVAL; - -#endif // ifdef CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF - - buffer_top = current_buffer_position = &buffer_bottom[0]; - buffer_size = size; - - return ENOERR; - -} // set_buffer() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) && - // defined(CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO) - - -// EOF streambuf.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/ungetc.cxx b/packages/language/c/libc/current/src/stdio/common/ungetc.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/ungetc.cxx +++ /dev/null @@ -1,96 +0,0 @@ -//=========================================================================== -// -// ungetc.cxx -// -// ANSI Stdio ungetc() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include // error codes -#include "clibincl/stdiosupp.hxx" // Support functions for stdio -#include "clibincl/stream.hxx" // Cyg_StdioStream -#include "clibincl/stringsupp.hxx" // _strlen() - -// EXPORTED SYMBOLS - -externC int -ungetc( int, FILE * ) CYGPRI_LIBC_WEAK_ALIAS("_ungetc"); - -// FUNCTIONS - -externC int -_ungetc( int c, FILE *stream ) -{ - Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream; - Cyg_ErrNo err; - cyg_uint8 real_c; - - if (c == EOF) - return EOF; - - real_c = (cyg_uint8) c; - - err = real_stream->unread_byte( real_c ); - - if (err) - { - errno = err; - return EOF; - } // if - - - return (int)real_c; - -} // _ungetc() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF ungetc.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/vsnprintf.cxx b/packages/language/c/libc/current/src/stdio/common/vsnprintf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/vsnprintf.cxx +++ /dev/null @@ -1,131 +0,0 @@ -//=========================================================================== -// -// vsnprintf.cxx -// -// ANSI Stdio vsnprintf() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include // error codes -#include // I/O system -#include // Device table -#include "clibincl/stream.hxx" // Cyg_StdioStream -#include "clibincl/stdiosupp.hxx" // _vfnprintf() prototype - - -// EXPORTED SYMBOLS - -externC int -vsnprintf( char *, size_t, const char *, va_list ) - CYGPRI_LIBC_WEAK_ALIAS("_vsnprintf"); - -// FUNCTIONS - -static Cyg_ErrNo -str_write(cyg_io_handle_t handle, const void *buf, cyg_uint32 *len) -{ - cyg_devtab_entry_t *dev = (cyg_devtab_entry_t *)handle; - cyg_uint8 **str_p = (cyg_uint8 **)dev->priv; - cyg_ucount32 i; - - // I suspect most strings passed to vsnprintf will be relatively short, - // so we just take the simple approach rather than have the overhead - // of calling memcpy etc. - - // simply copy string until we run out of user space - - for (i = 0; i < *len; i++, (*str_p)++ ) - { - **str_p = *((cyg_uint8 *)buf + i); - } // for - - *len = i; - - return ENOERR; - -} // str_write() - -static DEVIO_TABLE(devio_table, - str_write, // write - NULL, // read - NULL, // get_config - NULL); // set_config - -externC int -_vsnprintf( char *s, size_t size, const char *format, va_list arg ) -{ - int rc; - // construct a fake device with the address of the string we've - // been passed as its private data. This way we can use the data - // directly - DEVTAB_ENTRY_NO_INIT(strdev, - "strdev", // Name - NULL, // Dependent name (layered device) - &devio_table, // I/O function table - NULL, // Init - NULL, // Lookup - &s); // private - Cyg_StdioStream my_stream( &strdev, Cyg_StdioStream::CYG_STREAM_WRITE, - false, false, _IONBF, 0, NULL ); - - rc = _vfnprintf( (FILE *)&my_stream, size, format, arg ); - - // Null-terminate it, but note that s has been changed by str_write(), so - // that it now points to the end of the string - s[0] = '\0'; - - return rc; - -} // _vsnprintf() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF vsnprintf.cxx diff --git a/packages/language/c/libc/current/src/stdio/common/vsscanf.cxx b/packages/language/c/libc/current/src/stdio/common/vsscanf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/common/vsscanf.cxx +++ /dev/null @@ -1,141 +0,0 @@ -//=========================================================================== -// -// vsscanf.cxx -// -// ANSI Stdio vsscanf() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include // error codes -#include // I/O system -#include // Device table -#include "clibincl/stream.hxx" // Cyg_StdioStream -#include "clibincl/stdiosupp.hxx" // _vsscanf() prototype - - -// EXPORTED SYMBOLS - -externC int -vsscanf( const char *, const char *, va_list ) - CYGPRI_LIBC_WEAK_ALIAS("_vsscanf"); - -// FUNCTIONS - -static Cyg_ErrNo -str_read(cyg_io_handle_t handle, void *buf, cyg_uint32 *len) -{ - cyg_devtab_entry_t *dev = (cyg_devtab_entry_t *)handle; - cyg_uint8 *str_p = (cyg_uint8 *)dev->priv; - cyg_ucount32 i; - - // we set str_p to NULL further down when the string has finished being - // read - if (str_p == NULL) - { - *len = 0; - return ENOERR; - } // if - - // I suspect most strings passed to sprintf will be relatively short, - // so we just take the simple approach rather than have the overhead - // of calling memcpy etc. - - // copy string until run out of user space, or we reach its end - for (i = 0; i < *len ; ++i) - { - *((cyg_uint8 *)buf + i) = *str_p; - - if (*str_p++ == '\0') - { - str_p = NULL; - ++i; - break; - } // if - - } // for - - *len = i; - dev->priv = (void *)str_p; - - return ENOERR; - -} // str_read() - -static DEVIO_TABLE(devio_table, - NULL, // write - str_read, // read - NULL, // get_config - NULL); // set_config - - -externC int -_vsscanf( const char *s, const char *format, va_list arg ) -{ - // construct a fake device with the address of the string we've - // been passed as its private data. This way we can use the data - // directly - DEVTAB_ENTRY_NO_INIT(strdev, - "strdev", // Name - NULL, // Dependent name (layered device) - &devio_table, // I/O function table - NULL, // Init - NULL, // Lookup - (void *)s); // private - Cyg_StdioStream my_stream( &strdev, Cyg_StdioStream::CYG_STREAM_READ, - false, false, _IONBF, 0, NULL ); - - return _vfscanf( (FILE *)&my_stream, format, arg ); - -} // _vsscanf() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF vsscanf.cxx diff --git a/packages/language/c/libc/current/src/stdio/input/fgetc.cxx b/packages/language/c/libc/current/src/stdio/input/fgetc.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/input/fgetc.cxx +++ /dev/null @@ -1,128 +0,0 @@ -//=========================================================================== -// -// fgetc.cxx -// -// ISO C standard I/O get character functions -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-07-16 -// Purpose: Provide the fgetc() function. Also provides the function -// version of getc() and getchar() -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Do we want the stdio stuff? -#ifdef CYGPKG_LIBC_STDIO - -// INCLUDES - -#include // Common project-wide type definitions -#include // Standard eCos assertion support -#include // Standard eCos tracing support -#include // NULL and size_t from compiler -#include // header for this file -#include // error codes -#include "clibincl/stream.hxx" // Cyg_StdioStream - -// FUNCTIONS - -externC int -__fgetc( FILE *stream ) -{ - Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream; - cyg_ucount32 bytes_read; - Cyg_ErrNo err; - cyg_uint8 c; - - CYG_REPORT_FUNCNAMETYPE("__fgetc", "returning char %d"); - CYG_REPORT_FUNCARG1XV( stream ); - - CYG_CHECK_DATA_PTR( stream, "stream is not a valid pointer" ); - - err = real_stream->read( &c, 1, &bytes_read ); - - // Why do we need this? Because the buffer might be empty. - if (!err && !bytes_read) { // if no err, but nothing to read, try again - err = real_stream->refill_read_buffer(); - if ( !err ) - err = real_stream->read( &c, 1, &bytes_read ); - } // if - - CYG_ASSERT( (ENOERR != err) || (1 == bytes_read), "Didn't read 1 byte!" ); - - if (err) - { - real_stream->set_error( err ); - errno = err; - CYG_REPORT_RETVAL(EOF); - return EOF; - } // if - - CYG_REPORT_RETVAL((int)c); - return (int)c; - -} // __fgetc() - - -externC int -__getchar( void ) -{ - return fgetc( stdin ); -} // __getchar() - - -// EXPORTED SYMBOLS - -externC int -fgetc( FILE * ) CYGBLD_ATTRIB_WEAK_ALIAS(__fgetc); - -// Also define getc() and getchar() even though they can be macros. -// Undefine the macros first though -#undef getc -#undef getchar - -externC int -getc( FILE * ) CYGBLD_ATTRIB_WEAK_ALIAS(__fgetc); - -externC int -getchar( void ) CYGBLD_ATTRIB_WEAK_ALIAS(__getchar); - -#endif // ifdef CYGPKG_LIBC_STDIO - -// EOF fgetc.cxx diff --git a/packages/language/c/libc/current/src/stdio/input/fgets.cxx b/packages/language/c/libc/current/src/stdio/input/fgets.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/input/fgets.cxx +++ /dev/null @@ -1,100 +0,0 @@ -//======================================================================== -// -// fgets.cxx -// -// ANSI Stdio fgets() function -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================= - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include // error codes -#include "clibincl/stdiosupp.hxx" // Support functions for stdio -#include "clibincl/stream.hxx" // Cyg_StdioStream - -// EXPORTED SYMBOLS - -externC char * -fgets( char *, int, FILE * ) CYGPRI_LIBC_WEAK_ALIAS("_fgets"); - -// FUNCTIONS - -externC char * -_fgets( char *s, int n, FILE *stream ) -{ - Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream; - cyg_ucount32 bytes_read; - Cyg_ErrNo err; - - - err = real_stream->read( (cyg_uint8 *)s, n-1, &bytes_read ); - - if (!err && !bytes_read) { // if no err, but nothing to read, try again - err = real_stream->refill_read_buffer(); - if ( !err ) - err = real_stream->read( (cyg_uint8 *)s, n-1, &bytes_read ); - - } // if - - if (err) { - real_stream->set_error( err ); - errno = err; - return NULL; - } // if - - if (bytes_read > 0) - s[bytes_read]='\0'; // NULL terminate it - - return s; - -} // _fgets() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF fgets.cxx diff --git a/packages/language/c/libc/current/src/stdio/input/fread.cxx b/packages/language/c/libc/current/src/stdio/input/fread.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/input/fread.cxx +++ /dev/null @@ -1,112 +0,0 @@ -//======================================================================== -// -// fread.cxx -// -// ANSI Stdio fread() function -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================= - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // Assertion support -#include // Tracing support -#include // NULL and size_t from compiler -#include // header for this file -#include // error codes -#include "clibincl/stdiosupp.hxx" // Support functions for stdio -#include "clibincl/stream.hxx" // Cyg_StdioStream - -// EXPORTED SYMBOLS - -externC size_t -fread( void *, size_t, size_t, FILE * ) CYGPRI_LIBC_WEAK_ALIAS("_fread"); - -// FUNCTIONS - -externC size_t -_fread( void *ptr, size_t object_size, size_t num_objects, FILE *stream ) -{ - Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream; - cyg_ucount32 bytes_read; - Cyg_ErrNo err; - - - CYG_REPORT_FUNCNAMETYPE( "_fread", "read %d objects" ); - CYG_REPORT_FUNCARG4( "ptr=%08x, object_size=%d, num_objects=%d, " - "stream=%08x", ptr, object_size, num_objects, - stream ); - - if ( (object_size==0) || (num_objects==0) ) { - CYG_REPORT_RETVAL(0); - return 0; - } // if - - err = real_stream->read( (cyg_uint8 *)ptr, object_size*num_objects, - &bytes_read ); - - if (!err && !bytes_read) { // if no err, but nothing to read, try again - err = real_stream->refill_read_buffer(); - if ( !err ) - err = real_stream->read( (cyg_uint8 *)ptr, object_size*num_objects, - &bytes_read ); - } // if - - if (err) { - real_stream->set_error( err ); - errno = err; - } // if - - // we return the number of _objects_ read. Simple division is - // sufficient as this returns the quotient rather than rounding - CYG_REPORT_RETVAL( bytes_read/object_size ); - return bytes_read/object_size; - -} // _fread() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF fread.cxx diff --git a/packages/language/c/libc/current/src/stdio/input/fscanf.cxx b/packages/language/c/libc/current/src/stdio/input/fscanf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/input/fscanf.cxx +++ /dev/null @@ -1,86 +0,0 @@ -//=========================================================================== -// -// fscanf.cxx -// -// ANSI Stdio fscanf() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include // INT_MAX -#include "clibincl/stdiosupp.hxx" // Support functions for stdio - -// EXPORTED SYMBOLS - -externC int -fscanf( FILE *, const char *, ... ) CYGPRI_LIBC_WEAK_ALIAS("_fscanf"); - - -// FUNCTIONS - -externC int -_fscanf( FILE *stream, const char *format, ... ) -{ - int rc; // return code - va_list ap; // for variable args - - va_start(ap, format); // init specifying last non-var arg - - rc = _vfscanf( stream, format, ap ); - - va_end(ap); // end var args - - return rc; -} // _fscanf() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF fscanf.cxx diff --git a/packages/language/c/libc/current/src/stdio/input/gets.cxx b/packages/language/c/libc/current/src/stdio/input/gets.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/input/gets.cxx +++ /dev/null @@ -1,108 +0,0 @@ -//=========================================================================== -// -// gets.cxx -// -// ANSI Stdio gets() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include // error codes -#include // UINT_MAX -#include "clibincl/stdiosupp.hxx" // Support functions for stdio -#include "clibincl/stream.hxx" // Cyg_StdioStream - -// EXPORTED SYMBOLS - -externC char * -gets( char * ) CYGPRI_LIBC_WEAK_ALIAS("_gets"); - -// FUNCTIONS - -externC char * -_gets( char *s ) -{ - Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stdin; - cyg_ucount32 bytes_read; - Cyg_ErrNo err; - - - err = real_stream->read( (cyg_uint8 *)s, UINT_MAX, &bytes_read ); - - if (!err && !bytes_read) // if no err, but nothing to read, try again - { - real_stream->refill_read_buffer(); - err = real_stream->read( (cyg_uint8 *)s, UINT_MAX, &bytes_read ); - - } // if - - if (err) - { - real_stream->set_error( err ); - errno = err; - return NULL; - } // if - - if (bytes_read > 0) - { - // NULL terminate it - if (s[bytes_read-1] == '\n') - s[bytes_read-1] = '\0'; - else - s[bytes_read]='\0'; - } // if - - return s; - -} // _gets() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF gets.cxx diff --git a/packages/language/c/libc/current/src/stdio/input/scanf.cxx b/packages/language/c/libc/current/src/stdio/input/scanf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/input/scanf.cxx +++ /dev/null @@ -1,86 +0,0 @@ -//=========================================================================== -// -// scanf.cxx -// -// ANSI Stdio scanf() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include "clibincl/stdiosupp.hxx" // Support functions for stdio - -// EXPORTED SYMBOLS - -externC int -scanf( const char *, ... ) CYGPRI_LIBC_WEAK_ALIAS("_scanf"); - - -// FUNCTIONS - - -externC int -_scanf( const char *format, ... ) -{ - int rc; // return code - va_list ap; // for variable args - - va_start(ap, format); // init specifying last non-var arg - - rc = _vfscanf( stdin, format, ap ); - - va_end(ap); // end var args - - return rc; -} // _scanf() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF scanf.cxx diff --git a/packages/language/c/libc/current/src/stdio/input/vfscanf.cxx b/packages/language/c/libc/current/src/stdio/input/vfscanf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/input/vfscanf.cxx +++ /dev/null @@ -1,975 +0,0 @@ -//======================================================================== -// -// vfscanf.cxx -// -// I/O routines for vfscanf() for use with ANSI C library -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== -// -// This code is based on original code with the following copyright: -// -/* - * Copyright (c) 1990 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? And we have to -// have ungetc for this to work -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) && \ - defined(CYGFUN_LIBC_STDIO_ungetc) - - -// INCLUDES - -#include // Common type definitions and support -#include // Variable argument definitions -#include // Standard header for all stdio files -#include // isspace() and isupper() -#include // standard utility functions e.g. strtol -#include "clibincl/stream.hxx" // C library streams -#include "clibincl/stdiosupp.hxx" // Support for stdio functions - -// EXPORTED SYMBOLS - -externC int -vfscanf (FILE *fp, const char *fmt0, va_list ap) - CYGPRI_LIBC_WEAK_ALIAS("_vfscanf"); - - -#ifdef CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT - -#include - -# define MAXFRACT DBL_DIG -# define MAXEXP DBL_MAX_10_EXP - -# define BUF (MAXEXP+MAXFRACT+3) /* 3 = sign + decimal point + NUL */ - -#else // ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - -# define BUF 40 - -#endif // ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - -/* - * Flags used during conversion. - */ - -#define LONG 0x01 /* l: long or double */ -#define LONGDBL 0x02 /* L: long double; unimplemented */ -#define SHORT 0x04 /* h: short */ -#define SUPPRESS 0x08 /* suppress assignment */ -#define POINTER 0x10 /* weird %p pointer (`fake hex') */ -#define NOSKIP 0x20 /* do not skip blanks */ - -/* - * The following are used in numeric conversions only: - * SIGNOK, NDIGITS, DPTOK, and EXPOK are for floating point; - * SIGNOK, NDIGITS, PFXOK, and NZDIGITS are for integral. - */ - -#define SIGNOK 0x40 /* +/- is (still) legal */ -#define NDIGITS 0x80 /* no digits detected */ - -#define DPTOK 0x100 /* (float) decimal point is still legal */ -#define EXPOK 0x200 /* (float) exponent (e+3, etc) still - legal */ - -#define PFXOK 0x100 /* 0x prefix is (still) legal */ -#define NZDIGITS 0x200 /* no zero digits detected */ - -/* - * Conversion types. - */ - -#define CT_CHAR 0 /* %c conversion */ -#define CT_CCL 1 /* %[...] conversion */ -#define CT_STRING 2 /* %s conversion */ -#define CT_INT 3 /* integer, i.e., strtol or strtoul */ -#define CT_FLOAT 4 /* floating, i.e., strtod */ - -#if 0 -#define u_char unsigned char -#endif -#define u_char char -#define u_long unsigned long - -typedef unsigned long (*strtoul_t)(const char *, char **endptr, int base); - -static u_char * -__sccl (char *tab, u_char *fmt); - - -/* - * vfscanf - */ - -#define _CAST_VOID - -#define CURR_POS (file->peek_byte( (cyg_uint8 *)&curr_byte),&curr_byte ) - -#define INC_CURR_POS ( file->read_byte( (cyg_uint8 *)&curr_byte ) ) - -#define MOVE_CURR_POS(x) (file->set_position( (x), SEEK_CUR )) - -#define SPACE_LEFT (file->bytes_available_to_read()) - -#define REFILL (file->refill_read_buffer()) - -#define BufferEmpty ( !SPACE_LEFT && \ - (REFILL, (!SPACE_LEFT)) ) - -externC int -_vfscanf (FILE *fp, const char *fmt0, va_list ap) -{ - u_char *fmt = (u_char *) fmt0; - int c; /* character from format, or conversion */ - size_t width; /* field width, or 0 */ - char *p; /* points into all kinds of strings */ - int n; /* handy integer */ - int flags; /* flags as defined above */ - char *p0; /* saves original value of p when necessary */ - int nassigned; /* number of fields assigned */ - int nread; /* number of characters consumed from fp */ - int base = 0; /* base argument to strtol/strtoul */ - - strtoul_t ccfn = NULL; /* conversion function (strtol/strtoul) */ - char ccltab[256]; /* character class table for %[...] */ - char buf[BUF]; /* buffer for numeric conversions */ - - Cyg_StdioStream *file = (Cyg_StdioStream *)fp; - char curr_byte; - - short *sp; - int *ip; - float *flp; - long double *ldp; - double *dp; - long *lp; - - /* `basefix' is used to avoid `if' tests in the integer scanner */ - static const short basefix[17] = - {10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; - - nassigned = 0; - nread = 0; - for (;;) - { - c = *fmt++; - if (c == 0) - return nassigned; - if (isspace (c)) - { - for (;;) - { - if (BufferEmpty) - return nassigned; - if (!isspace (*CURR_POS)) - break; - nread++, INC_CURR_POS; - } - continue; - } - if (c != '%') - goto literal; - width = 0; - flags = 0; - - /* - * switch on the format. continue if done; break once format - * type is derived. - */ - -again: - c = *fmt++; - - switch (c) - { - case '%': -literal: - if (BufferEmpty) - goto input_failure; - if (*CURR_POS != c) - goto match_failure; - INC_CURR_POS; - nread++; - continue; - - case '*': - flags |= SUPPRESS; - goto again; - case 'l': - flags |= LONG; - goto again; - case 'L': - flags |= LONGDBL; - goto again; - case 'h': - flags |= SHORT; - goto again; - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - width = width * 10 + c - '0'; - goto again; - - /* - * Conversions. Those marked `compat' are for - * 4.[123]BSD compatibility. - * - * (According to ANSI, E and X formats are supposed to - * the same as e and x. Sorry about that.) - */ - - case 'D': /* compat */ - flags |= LONG; - /* FALLTHROUGH */ - case 'd': - c = CT_INT; - ccfn = (strtoul_t)strtol; - base = 10; - break; - - case 'i': - c = CT_INT; - ccfn = (strtoul_t)strtol; - base = 0; - break; - - case 'O': /* compat */ - flags |= LONG; - /* FALLTHROUGH */ - case 'o': - c = CT_INT; - ccfn = strtoul; - base = 8; - break; - - case 'u': - c = CT_INT; - ccfn = strtoul; - base = 10; - break; - - case 'X': /* compat XXX */ - case 'x': - flags |= PFXOK; /* enable 0x prefixing */ - c = CT_INT; - ccfn = strtoul; - base = 16; - break; - - case 'E': /* compat XXX */ - case 'G': /* compat XXX */ -/* ANSI says that E,G and X behave the same way as e,g,x */ - /* FALLTHROUGH */ - case 'e': - case 'f': - case 'g': - c = CT_FLOAT; - break; - - case 's': - c = CT_STRING; - break; - - case '[': - fmt = __sccl (ccltab, fmt); - flags |= NOSKIP; - c = CT_CCL; - break; - - case 'c': - flags |= NOSKIP; - c = CT_CHAR; - break; - - case 'p': /* pointer format is like hex */ - flags |= POINTER | PFXOK; - c = CT_INT; - ccfn = strtoul; - base = 16; - break; - - case 'n': - if (flags & SUPPRESS) /* ??? */ - continue; - if (flags & SHORT) - { - sp = va_arg (ap, short *); - *sp = nread; - } - else if (flags & LONG) - { - lp = va_arg (ap, long *); - *lp = nread; - } - else - { - ip = va_arg (ap, int *); - *ip = nread; - } - continue; - - /* - * Disgusting backwards compatibility hacks. XXX - */ - case '\0': /* compat */ - return EOF; - - default: /* compat */ - if (isupper (c)) - flags |= LONG; - c = CT_INT; - ccfn = (strtoul_t)strtol; - base = 10; - break; - } - - /* - * We have a conversion that requires input. - */ - if (BufferEmpty) - goto input_failure; - - /* - * Consume leading white space, except for formats that - * suppress this. - */ - if ((flags & NOSKIP) == 0) - { - while (isspace (*CURR_POS)) - { - nread++; - INC_CURR_POS; - if (SPACE_LEFT == 0) -#ifndef REDHAT_NEC - if (REFILL) -#endif - goto input_failure; - } - /* - * Note that there is at least one character in the - * buffer, so conversions that do not set NOSKIP ca - * no longer result in an input failure. - */ - } - - /* - * Do the conversion. - */ - switch (c) - { - - case CT_CHAR: - /* scan arbitrary characters (sets NOSKIP) */ - if (width == 0) - width = 1; - if (flags & SUPPRESS) - { - size_t sum = 0; - - for (;;) - { - if ((n = SPACE_LEFT) < (signed)width) - { - sum += n; - width -= n; - MOVE_CURR_POS(n-1); - INC_CURR_POS; -#ifndef REDHAT_NEC - if (REFILL) - { -#endif - if (sum == 0) - goto input_failure; - break; -#ifndef REDHAT_NEC - } -#endif - } - else - { - sum += width; - MOVE_CURR_POS(width - 1); - INC_CURR_POS; - break; - } - } - nread += sum; - } - else - { - /* Kludge city for the moment */ - char *dest = va_arg (ap, char *); - int n = width; - if (SPACE_LEFT == 0) -#ifndef REDHAT_NEC - if (REFILL) -#endif - goto input_failure; - - while (n && !BufferEmpty) - { - *dest++ = *CURR_POS; - INC_CURR_POS; - n--; - nread++; - } - nassigned++; - } - break; - - case CT_CCL: - /* scan a (nonempty) character class (sets NOSKIP) */ - if (width == 0) - width = ~0; /* `infinity' */ - /* take only those things in the class */ - if (flags & SUPPRESS) - { - n = 0; - while (ccltab[*CURR_POS]) - { - n++, INC_CURR_POS; - if (--width == 0) - break; - if (BufferEmpty) - { - if (n == 0) - goto input_failure; - break; - } - } - if (n == 0) - goto match_failure; - } - else - { - p0 = p = va_arg (ap, char *); - while (ccltab[*CURR_POS]) - { - *p++ = *CURR_POS; - INC_CURR_POS; - if (--width == 0) - break; - if (BufferEmpty) - { - if (p == p0) - goto input_failure; - break; - } - } - n = p - p0; - if (n == 0) - goto match_failure; - *p = 0; - nassigned++; - } - nread += n; - break; - - case CT_STRING: - /* like CCL, but zero-length string OK, & no NOSKIP */ - if (width == 0) - width = ~0; - if (flags & SUPPRESS) - { - n = 0; - while (!isspace (*CURR_POS)) - { - n++, INC_CURR_POS; - if (--width == 0) - break; - if (BufferEmpty) - break; - } - nread += n; - } - else - { - p0 = p = va_arg (ap, char *); - while (!isspace (*CURR_POS)) - { - *p++ = *CURR_POS; - INC_CURR_POS; - if (--width == 0) - break; - if (BufferEmpty) - break; - } - *p = 0; - nread += p - p0; - nassigned++; - } - continue; - - case CT_INT: - /* scan an integer as if by strtol/strtoul */ -#ifdef hardway - if (width == 0 || width > sizeof (buf) - 1) - width = sizeof (buf) - 1; -#else - /* size_t is unsigned, hence this optimisation */ - if (--width > sizeof (buf) - 2) - width = sizeof (buf) - 2; - width++; -#endif - flags |= SIGNOK | NDIGITS | NZDIGITS; - for (p = buf; width; width--) - { - c = *CURR_POS; - /* - * Switch on the character; `goto ok' if we - * accept it as a part of number. - */ - switch (c) - { - /* - * The digit 0 is always legal, but is special. - * For %i conversions, if no digits (zero or nonzero) - * have been scanned (only signs), we will have base==0 - * In that case, we should set it to 8 and enable 0x - * prefixing. Also, if we have not scanned zero digits - * before this, do not turn off prefixing (someone else - * will turn it off if we have scanned any nonzero - * digits). - */ - case '0': - if (base == 0) - { - base = 8; - flags |= PFXOK; - } - if (flags & NZDIGITS) - flags &= ~(SIGNOK | NZDIGITS | NDIGITS); - else - flags &= ~(SIGNOK | PFXOK | NDIGITS); - goto ok; - - /* 1 through 7 always legal */ - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - base = basefix[base]; - flags &= ~(SIGNOK | PFXOK | NDIGITS); - goto ok; - - /* digits 8 and 9 ok iff decimal or hex */ - case '8': - case '9': - base = basefix[base]; - if (base <= 8) - break; /* not legal here */ - flags &= ~(SIGNOK | PFXOK | NDIGITS); - goto ok; - - /* letters ok iff hex */ - case 'A': - case 'B': - case 'C': - case 'D': - case 'E': - case 'F': - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - /* no need to fix base here */ - if (base <= 10) - break; /* not legal here */ - flags &= ~(SIGNOK | PFXOK | NDIGITS); - goto ok; - - /* sign ok only as first character */ - case '+': - case '-': - if (flags & SIGNOK) - { - flags &= ~SIGNOK; - goto ok; - } - break; - - /* x ok iff flag still set & 2nd char */ - case 'x': - case 'X': - if (flags & PFXOK && p == buf + 1) - { - base = 16;/* if %i */ - flags &= ~PFXOK; - goto ok; - } - break; - } - - /* - * If we got here, c is not a legal character - * for a number. Stop accumulating digits. - */ - break; - ok: - /* - * c is legal: store it and look at the next. - */ - *p++ = c; - INC_CURR_POS; - if (SPACE_LEFT == 0) -#ifndef REDHAT_NEC - if (REFILL) -#endif - break; /* EOF */ - } - /* - * If we had only a sign, it is no good; push back the sign. - * If the number ends in `x', it was [sign] '0' 'x', so push - * back the x and treat it as [sign] '0'. - */ - if (flags & NDIGITS) - { - if (p > buf) - _CAST_VOID _ungetc (*(u_char *)-- p, fp); - goto match_failure; - } - c = ((u_char *) p)[-1]; - if (c == 'x' || c == 'X') - { - --p; - /*(void)*/ _ungetc (c, fp); - } - if ((flags & SUPPRESS) == 0) - { - u_long res; - - *p = 0; - res = (*ccfn) (buf, (char **) NULL, base); - if (flags & POINTER) - *(va_arg (ap, char **)) = (char *) (CYG_ADDRESS) res; - else if (flags & SHORT) - { - sp = va_arg (ap, short *); - *sp = res; - } - else if (flags & LONG) - { - lp = va_arg (ap, long *); - *lp = res; - } - else - { - ip = va_arg (ap, int *); - *ip = res; - } - nassigned++; - } - nread += p - buf; - break; - - case CT_FLOAT: - /* scan a floating point number as if by strtod */ - -#ifdef hardway - if (width == 0 || width > sizeof (buf) - 1) - width = sizeof (buf) - 1; -#else - /* size_t is unsigned, hence this optimisation */ - if (--width > sizeof (buf) - 2) - width = sizeof (buf) - 2; - width++; -#endif // ifdef hardway - - flags |= SIGNOK | NDIGITS | DPTOK | EXPOK; - for (p = buf; width; width--) - { - c = *CURR_POS; - /* - * This code mimicks the integer conversion - * code, but is much simpler. - */ - switch (c) - { - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - flags &= ~(SIGNOK | NDIGITS); - goto fok; - - case '+': - case '-': - if (flags & SIGNOK) - { - flags &= ~SIGNOK; - goto fok; - } - break; - case '.': - if (flags & DPTOK) - { - flags &= ~(SIGNOK | DPTOK); - goto fok; - } - break; - case 'e': - case 'E': - /* no exponent without some digits */ - if ((flags & (NDIGITS | EXPOK)) == EXPOK) - { - flags = - (flags & ~(EXPOK | DPTOK)) | - SIGNOK | NDIGITS; - goto fok; - } - break; - } - break; - fok: - *p++ = c; - INC_CURR_POS; - if (SPACE_LEFT == 0) -#ifndef REDHAT_NEC - if (REFILL) -#endif - break; /* EOF */ - } - /* - * If no digits, might be missing exponent digits - * (just give back the exponent) or might be missing - * regular digits, but had sign and/or decimal point. - */ - if (flags & NDIGITS) - { - if (flags & EXPOK) - { - /* no digits at all */ - while (p > buf) - _ungetc (*(u_char *)-- p, fp); - goto match_failure; - } - /* just a bad exponent (e and maybe sign) */ - c = *(u_char *)-- p; - if (c != 'e' && c != 'E') - { - _CAST_VOID _ungetc (c, fp); /* sign */ - c = *(u_char *)-- p; - } - _CAST_VOID _ungetc (c, fp); - } - if ((flags & SUPPRESS) == 0) - { - double res; - - *p = 0; -#ifdef CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT - res = atof (buf); -#else - res = 0.0; -#endif - if (flags & LONG) - { - dp = va_arg (ap, double *); - *dp = res; - } - else if (flags & LONGDBL) - { - ldp = va_arg (ap, long double *); - *ldp = res; - } - else - { - flp = va_arg (ap, float *); - *flp = res; - } - nassigned++; - } - nread += p - buf; - break; - } - } - -input_failure: - return nassigned ? nassigned : -1; -match_failure: - return nassigned; -} // _vfscanf() - -/* - * Fill in the given table from the scanset at the given format - * (just after `['). Return a pointer to the character past the - * closing `]'. The table has a 1 wherever characters should be - * considered part of the scanset. - */ - -/*static*/ -u_char * -__sccl (char *tab, u_char *fmt) -{ - int c, n, v; - - /* first `clear' the whole table */ - c = *fmt++; /* first char hat => negated scanset */ - if (c == '^') - { - v = 1; /* default => accept */ - c = *fmt++; /* get new first char */ - } - else - v = 0; /* default => reject */ - /* should probably use memset here */ - for (n = 0; n < 256; n++) - tab[n] = v; - if (c == 0) - return fmt - 1; /* format ended before closing ] */ - - /* - * Now set the entries corresponding to the actual scanset to the - * opposite of the above. - * - * The first character may be ']' (or '-') without being special; the - * last character may be '-'. - */ - - v = 1 - v; - for (;;) - { - tab[c] = v; /* take character c */ - doswitch: - n = *fmt++; /* and examine the next */ - switch (n) - { - - case 0: /* format ended too soon */ - return fmt - 1; - - case '-': - /* - * A scanset of the form [01+-] is defined as `the digit 0, the - * digit 1, the character +, the character -', but the effect - * of a scanset such as [a-zA-Z0-9] is implementation defined. - * The V7 Unix scanf treats `a-z' as `the letters a through z', - * but treats `a-a' as `the letter a, the character -, and the - * letter a'. - * - * For compatibility, the `-' is not considerd to define a - * range if the character following it is either a close - * bracket (required by ANSI) or is not numerically greater - * than the character we just stored in the table (c). - */ - n = *fmt; - if (n == ']' || n < c) - { - c = '-'; - break; /* resume the for(;;) */ - } - fmt++; - do - { /* fill in the range */ - tab[++c] = v; - } - while (c < n); -#if 1 /* XXX another disgusting compatibility hack */ - /* - * Alas, the V7 Unix scanf also treats formats such - * as [a-c-e] as `the letters a through e'. This too - * is permitted by the standard.... - */ - goto doswitch; -#else - c = *fmt++; - if (c == 0) - return fmt - 1; - if (c == ']') - return fmt; -#endif - - break; - - - case ']': /* end of scanset */ - return fmt; - - default: /* just another character */ - c = n; - break; - } - } - /* NOTREACHED */ -} // __sccl() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) && - // defined(CYGFUN_LIBC_STDIO_ungetc) - -// EOF vfscanf.cxx diff --git a/packages/language/c/libc/current/src/stdio/output/fnprintf.cxx b/packages/language/c/libc/current/src/stdio/output/fnprintf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/output/fnprintf.cxx +++ /dev/null @@ -1,86 +0,0 @@ -//=========================================================================== -// -// fnprintf.cxx -// -// ANSI Stdio fnprintf() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include "clibincl/stdiosupp.hxx" // Support functions for stdio - -// EXPORTED SYMBOLS - -externC int -fnprintf( FILE *, size_t, const char *, ... ) - CYGPRI_LIBC_WEAK_ALIAS("_fnprintf"); - - -// FUNCTIONS - -externC int -_fnprintf( FILE *stream, size_t size, const char *format, ... ) -{ - int rc; // return code - va_list ap; // for variable args - - va_start(ap, format); // init specifying last non-var arg - - rc = _vfnprintf(stream, size, format, ap); - - va_end(ap); // end var args - - return rc; -} // _fnprintf() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF fnprintf.cxx diff --git a/packages/language/c/libc/current/src/stdio/output/fprintf.cxx b/packages/language/c/libc/current/src/stdio/output/fprintf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/output/fprintf.cxx +++ /dev/null @@ -1,86 +0,0 @@ -//=========================================================================== -// -// fprintf.cxx -// -// ANSI Stdio fprintf() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include // INT_MAX -#include "clibincl/stdiosupp.hxx" // Support functions for stdio - -// EXPORTED SYMBOLS - -externC int -fprintf( FILE *, const char *, ... ) CYGPRI_LIBC_WEAK_ALIAS("_fprintf"); - - -// FUNCTIONS - -externC int -_fprintf( FILE *stream, const char *format, ... ) -{ - int rc; // return code - va_list ap; // for variable args - - va_start(ap, format); // init specifying last non-var arg - - rc = _vfnprintf(stream, INT_MAX, format, ap); - - va_end(ap); // end var args - - return rc; -} // _fprintf() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF fprintf.cxx diff --git a/packages/language/c/libc/current/src/stdio/output/fputc.cxx b/packages/language/c/libc/current/src/stdio/output/fputc.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/output/fputc.cxx +++ /dev/null @@ -1,117 +0,0 @@ -//=========================================================================== -// -// fputc.cxx -// -// ISO Standard I/O character output functions -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-07-16 -// Purpose: Provide the fputc() function. Also provides the function -// versions of putc() and putchar() -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Do we want the stdio stuff? -#ifdef CYGPKG_LIBC_STDIO - -// INCLUDES - -#include // Common project-wide type definitions -#include // Standard eCos assertion support -#include // Standard eCos tracing support -#include // NULL and size_t from compiler -#include // header for this file -#include // error codes -#include "clibincl/stream.hxx" // Cyg_StdioStream - -// FUNCTIONS - -externC int -__fputc( int c, FILE *stream ) -{ - Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream; - Cyg_ErrNo err; - cyg_uint8 real_c = (cyg_uint8) c; - - CYG_REPORT_FUNCNAMETYPE("__fputc", "wrote char %d"); - CYG_REPORT_FUNCARG2( "c = %d, stream=%08x", c, stream ); - - CYG_CHECK_DATA_PTR( stream, "stream is not a valid pointer" ); - - err = real_stream->write_byte( real_c ); - - if (err) - { - real_stream->set_error( err ); - errno = err; - CYG_REPORT_RETVAL(EOF); - return EOF; - } // if - - CYG_REPORT_RETVAL((int)real_c); - return (int)real_c; - -} // __fputc() - - -externC int -__putchar( int c ) -{ - return fputc( c, stdout ); -} // __putchar() - -// EXPORTED SYMBOLS - -externC int -fputc( int, FILE * ) CYGBLD_ATTRIB_WEAK_ALIAS(__fputc); - -// Also define putc() and putchar() even though they can be macros. -// Undefine the macros first though -#undef putc -#undef putchar - -externC int -putc( int, FILE * ) CYGBLD_ATTRIB_WEAK_ALIAS(__fputc); - -externC int -putchar( int ) CYGBLD_ATTRIB_WEAK_ALIAS(__putchar); - -#endif // ifdef CYGPKG_LIBC_STDIO - -// EOF fputc.cxx diff --git a/packages/language/c/libc/current/src/stdio/output/fputs.cxx b/packages/language/c/libc/current/src/stdio/output/fputs.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/output/fputs.cxx +++ /dev/null @@ -1,92 +0,0 @@ -//======================================================================== -// -// fputs.cxx -// -// ANSI Stdio fputs() function -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include // error codes -#include "clibincl/stdiosupp.hxx" // Support functions for stdio -#include "clibincl/stream.hxx" // Cyg_StdioStream -#include "clibincl/stringsupp.hxx" // _strlen() - -// EXPORTED SYMBOLS - -externC int -fputs( const char *s, FILE *stream ) CYGPRI_LIBC_WEAK_ALIAS("_fputs"); - -// FUNCTIONS - -externC int -_fputs( const char *s, FILE *stream ) -{ - Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream; - cyg_ucount32 size = _strlen(s); - cyg_ucount32 written; - Cyg_ErrNo err; - - err = real_stream->write( (cyg_uint8 *)s, size, &written ); - - if (err) { - real_stream->set_error( err ); - errno = err; - return EOF; - } // if - - - return written; - -} // _fputs() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF fputs.cxx diff --git a/packages/language/c/libc/current/src/stdio/output/fwrite.cxx b/packages/language/c/libc/current/src/stdio/output/fwrite.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/output/fwrite.cxx +++ /dev/null @@ -1,106 +0,0 @@ -//======================================================================== -// -// fwrite.cxx -// -// ANSI Stdio fwrite() function -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // Assertion support -#include // Tracing support -#include // NULL and size_t from compiler -#include // header for this file -#include // error codes -#include "clibincl/stdiosupp.hxx" // Support functions for stdio -#include "clibincl/stream.hxx" // Cyg_StdioStream - -// EXPORTED SYMBOLS - -externC size_t -fwrite( const void *, size_t, size_t , FILE * ) - CYGPRI_LIBC_WEAK_ALIAS("_fwrite"); - -// FUNCTIONS - -externC size_t -_fwrite( const void *ptr, size_t object_size, size_t num_objects, - FILE *stream ) -{ - Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream; - cyg_ucount32 written; - Cyg_ErrNo err; - - CYG_REPORT_FUNCNAMETYPE( "_fwrite", "wrote %d objects" ); - CYG_REPORT_FUNCARG4( "ptr=%08x, object_size=%d, num_objects=%d, " - "stream=%08x", ptr, object_size, num_objects, - stream ); - - if ( (object_size==0) || (num_objects==0) ) { - CYG_REPORT_RETVAL(0); - return 0; - } // if - - err = real_stream->write( (cyg_uint8 *)ptr, num_objects*object_size, - &written ); - - if (err) { - real_stream->set_error( err ); - errno = err; - } // if - - // we return the number of _objects_ written. Simple division is - // sufficient as this returns the quotient rather than rounding - - CYG_REPORT_RETVAL( written/object_size ); - return written/object_size; -} // _fwrite() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF fwrite.cxx diff --git a/packages/language/c/libc/current/src/stdio/output/printf.cxx b/packages/language/c/libc/current/src/stdio/output/printf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/output/printf.cxx +++ /dev/null @@ -1,85 +0,0 @@ -//=========================================================================== -// -// printf.cxx -// -// ANSI Stdio printf() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common project-wide type definitions -#include // NULL and size_t from compiler -#include // header for this file -#include // INT_MAX -#include "clibincl/stdiosupp.hxx" // Support functions for stdio - -// EXPORTED SYMBOLS - -externC int -printf( const char *, ... ) CYGPRI_LIBC_WEAK_ALIAS("_printf"); - -// FUNCTIONS - -externC int -_printf( const char *format, ... ) -{ - int rc; // return code - va_list ap; // for variable args - - va_start(ap, format); // init specifying last non-var arg - - rc = _vfnprintf(stdout, INT_MAX, format, ap); - - va_end(ap); // end var args - - return rc; -} // _printf() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF printf.cxx diff --git a/packages/language/c/libc/current/src/stdio/output/vfnprintf.cxx b/packages/language/c/libc/current/src/stdio/output/vfnprintf.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdio/output/vfnprintf.cxx +++ /dev/null @@ -1,940 +0,0 @@ -//=========================================================================== -// -// vfnprintf.c -// -// I/O routines for vfnprintf() for use with ANSI C library -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== -// -// This code is based on original code with the following copyright: -// -/*- - * Copyright (c) 1990 The Regents of the University of California. - * All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Chris Torek. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And do we want the stdio stuff? -#if defined(CYGPKG_LIBC_STDIO) - -// INCLUDES - -#include // Common type definitions and support -#include // Variable argument definitions -#include // Standard header for all stdio files -#include "clibincl/stringsupp.hxx"// _memchr() and _strlen() functions -#include "clibincl/stream.hxx" // C library streams - -// EXPORTED SYMBOLS - -externC int -vfnprintf ( FILE *, size_t, const char *, va_list ) - CYGPRI_LIBC_WEAK_ALIAS("_vfnprintf"); - - -#ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - -# include // for DBL_DIG etc. below -# include // for modf() -# include // Cyg_libm_ieee_double_shape_type - -# define MAXFRACT DBL_DIG -# define MAXEXP DBL_MAX_10_EXP - -# define BUF (MAXEXP+MAXFRACT+1) /* + decimal point */ -# define DEFPREC 6 - -static int -cvt( double, int, int, char *, int, char *, char * ); - -#else // ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - -# define BUF 40 - -#endif // ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - -/* - * Actual printf innards. - * - * This code is large and complicated... - */ - - - -/* - * Macros for converting digits to letters and vice versa - */ -#define to_digit(c) ((c) - '0') -#define is_digit(c) ((unsigned)to_digit(c) <= 9) -#define to_char(n) ((n) + '0') - -/* - * Flags used during conversion. - */ -#define ALT 0x001 /* alternate form */ -#define HEXPREFIX 0x002 /* add 0x or 0X prefix */ -#define LADJUST 0x004 /* left adjustment */ -#define LONGDBL 0x008 /* long double; unimplemented */ -#define LONGINT 0x010 /* long integer */ -#define QUADINT 0x020 /* quad integer */ -#define SHORTINT 0x040 /* short integer */ -#define ZEROPAD 0x080 /* zero (as opposed to blank) pad */ -#define FPT 0x100 /* Floating point number */ - -static int -__mbtowc(char *pwc, const char *s, size_t n) -{ - if (s == NULL) - return 0; - if (n == 0) - return -1; - if (pwc) - *pwc = (char) *s; - return (*s != '\0'); -} - -externC int -_vfnprintf ( FILE *stream, size_t n, const char *format, va_list arg) -{ - char *fmt; /* format string */ - int ch; /* character from fmt */ - int x, y; /* handy integers (short term usage) */ - char *cp; /* handy char pointer (short term usage) */ - int flags; /* flags as above */ - int ret; /* return value accumulator */ - int width; /* width from format (%8d), or 0 */ - int prec; /* precision from format (%.3d), or -1 */ - char sign; /* sign prefix (' ', '+', '-', or \0) */ - char wc; - -#define quad_t long long -#define u_quad_t unsigned long long - - u_quad_t _uquad; /* integer arguments %[diouxX] */ - enum { OCT, DEC, HEX } base;/* base for [diouxX] conversion */ - int dprec; /* a copy of prec if [diouxX], 0 otherwise */ - int fieldsz; /* field size expanded by sign, etc */ - int realsz; /* field size expanded by dprec */ - int size; /* size of converted field or string */ - char *xdigs; /* digits for [xX] conversion */ -#define NIOV 8 - char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */ - char ox[2]; /* space for 0x hex-prefix */ -#ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - char softsign; /* temporary negative sign for floats */ - double _double; /* double precision arguments %[eEfgG] */ - int fpprec; /* `extra' floating precision in [eEfgG] */ -#endif - - /* - * Choose PADSIZE to trade efficiency vs. size. If larger printf - * fields occur frequently, increase PADSIZE and make the initialisers - * below longer. - */ -#define PADSIZE 16 /* pad chunk size */ - static char blanks[PADSIZE] = - {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}; - static char zeroes[PADSIZE] = - {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}; - -#define MIN(a, b) ((a) < (b) ? (a) : (b)) - - /* - * BEWARE, these `goto error' on error, and PAD uses `n'. - */ -#define PRINT(ptr, len) \ -CYG_MACRO_START \ - cyg_ucount32 length = MIN( (cyg_ucount32) len, n - ret - 1); \ - if (((Cyg_StdioStream *)stream)->write( (const cyg_uint8 *)ptr, \ - length, &length )) \ - goto error; \ - if (length < (cyg_ucount32)len) { \ - ret += length; \ - goto done; \ - } \ -CYG_MACRO_END - - -#define PAD(howmany, with) \ -CYG_MACRO_START \ - if ((x = (howmany)) > 0) { \ - while (x > PADSIZE) { \ - PRINT(with, PADSIZE); \ - x -= PADSIZE; \ - } \ - PRINT(with, x); \ - } \ -CYG_MACRO_END - -#define FLUSH() \ -CYG_MACRO_START \ - if (((Cyg_StdioStream *)stream)->flush_output()) \ - goto error; \ -CYG_MACRO_END - - /* - * To extend shorts properly, we need both signed and unsigned - * argument extraction methods. - */ - -#define SARG() \ - (flags&QUADINT ? va_arg(arg, cyg_int64) : \ - flags&LONGINT ? va_arg(arg, cyg_int32) : \ - flags&SHORTINT ? (long)va_arg(arg, cyg_int32) : \ - (long)va_arg(arg, cyg_int32)) -#define UARG() \ - (flags&QUADINT ? va_arg(arg, cyg_uint64) : \ - flags&LONGINT ? va_arg(arg, cyg_uint32) : \ - flags&SHORTINT ? (unsigned long)va_arg(arg, cyg_uint32) : \ - (unsigned long)va_arg(arg, cyg_uint32)) - - - xdigs = NULL; // stop compiler whinging - fmt = (char *)format; - ret = 0; - - /* - * Scan the format for conversions (`%' character). - */ - for (;;) { - cp = (char *)fmt; - while ((x = __mbtowc(&wc, fmt, 1)) > 0) { - fmt += x; - if (wc == '%') { - fmt--; - break; - } - } - if ((y = fmt - cp) != 0) { - PRINT(cp, y); - ret += y; - } - if ((x <= 0) || (ret >= (int)n)) // @@@ this check with n isn't good enough - goto done; - fmt++; /* skip over '%' */ - - flags = 0; - dprec = 0; -#ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - fpprec = 0; -#endif - width = 0; - prec = -1; - sign = '\0'; - -rflag: ch = *fmt++; -reswitch: switch (ch) { - case ' ': - /* - * ``If the space and + flags both appear, the space - * flag will be ignored.'' - * -- ANSI X3J11 - */ - if (!sign) - sign = ' '; - goto rflag; - case '#': - flags |= ALT; - goto rflag; - case '*': - /* - * ``A negative field width argument is taken as a - * - flag followed by a positive field width.'' - * -- ANSI X3J11 - * They don't exclude field widths read from args. - */ - if ((width = va_arg(arg, int)) >= 0) - goto rflag; - width = -width; - /* FALLTHROUGH */ - case '-': - flags |= LADJUST; - goto rflag; - case '+': - sign = '+'; - goto rflag; - case '.': - if ((ch = *fmt++) == '*') { - x = va_arg(arg, int); - prec = x < 0 ? -1 : x; - goto rflag; - } - x = 0; - while (is_digit(ch)) { - x = 10 * x + to_digit(ch); - ch = *fmt++; - } - prec = x < 0 ? -1 : x; - goto reswitch; - case '0': - /* - * ``Note that 0 is taken as a flag, not as the - * beginning of a field width.'' - * -- ANSI X3J11 - */ - flags |= ZEROPAD; - goto rflag; - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - x = 0; - do { - x = 10 * x + to_digit(ch); - ch = *fmt++; - } while (is_digit(ch)); - width = x; - goto reswitch; -#ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - case 'L': - flags |= LONGDBL; - goto rflag; -#endif - case 'h': - flags |= SHORTINT; - goto rflag; - case 'l': - if (*fmt == 'l') { - fmt++; - flags |= QUADINT; - } else { - flags |= LONGINT; - } - goto rflag; - case 'q': - flags |= QUADINT; - goto rflag; - case 'c': - *(cp = buf) = va_arg(arg, int); - size = 1; - sign = '\0'; - break; - case 'D': - flags |= LONGINT; - /*FALLTHROUGH*/ - case 'd': - case 'i': - _uquad = SARG(); -#ifndef _NO_LONGLONG - if ((quad_t)_uquad < 0) -#else - if ((long) _uquad < 0) -#endif - { - - _uquad = -_uquad; - sign = '-'; - } - base = DEC; - goto number; - -#ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - case 'e': - case 'E': - case 'f': - case 'g': - case 'G': - _double = va_arg(arg, double); - /* - * don't do unrealistic precision; just pad it with - * zeroes later, so buffer size stays rational. - */ - if (prec > MAXFRACT) { - if ((ch != 'g' && ch != 'G') || (flags&ALT)) - fpprec = prec - MAXFRACT; - prec = MAXFRACT; - } else if (prec == -1) - prec = DEFPREC; - /* - * cvt may have to round up before the "start" of - * its buffer, i.e. ``intf("%.2f", (double)9.999);''; - * if the first character is still NUL, it did. - * softsign avoids negative 0 if _double < 0 but - * no significant digits will be shown. - */ - cp = buf; - *cp = '\0'; - size = cvt(_double, prec, flags, &softsign, ch, - cp, buf + sizeof(buf)); - if (softsign) - sign = '-'; - if (*cp == '\0') - cp++; - break; -#else - case 'e': - case 'E': - case 'f': - case 'g': - case 'G': - // Output nothing at all - (void) va_arg(arg, double); // take off arg anyway - cp = ""; - size = 0; - sign = '\0'; - break; - - -#endif // ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - - case 'n': -#ifndef _NO_LONGLONG - if (flags & QUADINT) - *va_arg(arg, quad_t *) = ret; - else -#endif - if (flags & LONGINT) - *va_arg(arg, long *) = ret; - else if (flags & SHORTINT) - *va_arg(arg, short *) = ret; - else - *va_arg(arg, int *) = ret; - continue; /* no output */ - case 'O': - flags |= LONGINT; - /*FALLTHROUGH*/ - case 'o': - _uquad = UARG(); - base = OCT; - goto nosign; - case 'p': - /* - * ``The argument shall be a pointer to void. The - * value of the pointer is converted to a sequence - * of printable characters, in an implementation- - * defined manner.'' - * -- ANSI X3J11 - */ - /* NOSTRICT */ - _uquad = (unsigned long)va_arg(arg, void *); - base = HEX; - xdigs = "0123456789abcdef"; - flags |= HEXPREFIX; - ch = 'x'; - goto nosign; - case 's': - if ((cp = va_arg(arg, char *)) == NULL) - cp = "(null)"; - if (prec >= 0) { - /* - * can't use strlen; can only look for the - * NUL in the first `prec' characters, and - * strlen() will go further. - */ - char *p = (char *)_memchr(cp, 0, prec); - - if (p != NULL) { - size = p - cp; - if (size > prec) - size = prec; - } else - size = prec; - } else - size = _strlen(cp); - sign = '\0'; - break; - case 'U': - flags |= LONGINT; - /*FALLTHROUGH*/ - case 'u': - _uquad = UARG(); - base = DEC; - goto nosign; - case 'X': - xdigs = "0123456789ABCDEF"; - goto hex; - case 'x': - xdigs = "0123456789abcdef"; -hex: _uquad = UARG(); - base = HEX; - /* leading 0x/X only if non-zero */ - if (flags & ALT && _uquad != 0) - flags |= HEXPREFIX; - - /* unsigned conversions */ -nosign: sign = '\0'; - /* - * ``... diouXx conversions ... if a precision is - * specified, the 0 flag will be ignored.'' - * -- ANSI X3J11 - */ -number: if ((dprec = prec) >= 0) - flags &= ~ZEROPAD; - - /* - * ``The result of converting a zero value with an - * explicit precision of zero is no characters.'' - * -- ANSI X3J11 - */ - cp = buf + BUF; - if (_uquad != 0 || prec != 0) { - /* - * Unsigned mod is hard, and unsigned mod - * by a constant is easier than that by - * a variable; hence this switch. - */ - switch (base) { - case OCT: - do { - *--cp = to_char(_uquad & 7); - _uquad >>= 3; - } while (_uquad); - /* handle octal leading 0 */ - if (flags & ALT && *cp != '0') - *--cp = '0'; - break; - - case DEC: - /* many numbers are 1 digit */ - while (_uquad >= 10) { - *--cp = to_char(_uquad % 10); - _uquad /= 10; - } - *--cp = to_char(_uquad); - break; - - case HEX: - do { - *--cp = xdigs[_uquad & 15]; - _uquad >>= 4; - } while (_uquad); - break; - - default: - cp = "bug in vfprintf: bad base"; - size = _strlen(cp); - goto skipsize; - } - } - size = buf + BUF - cp; - skipsize: - break; - default: /* "%?" prints ?, unless ? is NUL */ - if (ch == '\0') - goto done; - /* pretend it was %c with argument ch */ - cp = buf; - *cp = ch; - size = 1; - sign = '\0'; - break; - } - - /* - * All reasonable formats wind up here. At this point, `cp' - * points to a string which (if not flags&LADJUST) should be - * padded out to `width' places. If flags&ZEROPAD, it should - * first be prefixed by any sign or other prefix; otherwise, - * it should be blank padded before the prefix is emitted. - * After any left-hand padding and prefixing, emit zeroes - * required by a decimal [diouxX] precision, then print the - * string proper, then emit zeroes required by any leftover - * floating precision; finally, if LADJUST, pad with blanks. - * - * Compute actual size, so we know how much to pad. - * fieldsz excludes decimal prec; realsz includes it. - */ -#ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - fieldsz = size + fpprec; -#else - fieldsz = size; -#endif - if (sign) - fieldsz++; - else if (flags & HEXPREFIX) - fieldsz+= 2; - realsz = dprec > fieldsz ? dprec : fieldsz; - - /* right-adjusting blank padding */ - if ((flags & (LADJUST|ZEROPAD)) == 0) { - if (width - realsz > 0) { - PAD(width - realsz, blanks); - ret += width - realsz; - } - } - - /* prefix */ - if (sign) { - PRINT(&sign, 1); - ret++; - } else if (flags & HEXPREFIX) { - ox[0] = '0'; - ox[1] = ch; - PRINT(ox, 2); - ret += 2; - } - - /* right-adjusting zero padding */ - if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD) { - if (width - realsz > 0) { - PAD(width - realsz, zeroes); - ret += width - realsz; - } - } - - if (dprec - fieldsz > 0) { - /* leading zeroes from decimal precision */ - PAD(dprec - fieldsz, zeroes); - ret += dprec - fieldsz; - } - - /* the string or number proper */ - PRINT(cp, size); - ret += size; - -#ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - /* trailing f.p. zeroes */ - PAD(fpprec, zeroes); - ret += fpprec; -#endif - - /* left-adjusting padding (always blank) */ - if (flags & LADJUST) { - if (width - realsz > 0) { - PAD(width - realsz, blanks); - ret += width - realsz; - } - } - - FLUSH(); /* copy out the I/O vectors */ - } -done: - FLUSH(); -error: - return (((Cyg_StdioStream *) stream)->get_error() ? EOF : ret); - /* NOTREACHED */ -} - - -#ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - -static char * -round(double fract, int *exp, char *start, char *end, char ch, char *signp) -{ - double tmp; - - if (fract) - (void)modf(fract * 10, &tmp); - else - tmp = to_digit(ch); - if (tmp > 4) - for (;; --end) { - if (*end == '.') - --end; - if (++*end <= '9') - break; - *end = '0'; - if (end == start) { - if (exp) { /* e/E; increment exponent */ - *end = '1'; - ++*exp; - } - else { /* f; add extra digit */ - *--end = '1'; - --start; - } - break; - } - } - /* ``"%.3f", (double)-0.0004'' gives you a negative 0. */ - else if (*signp == '-') - for (;; --end) { - if (*end == '.') - --end; - if (*end != '0') - break; - if (end == start) - *signp = 0; - } - return (start); -} // round() - - -static char * -exponent(char *p, int exp, int fmtch) -{ - char *t; - char expbuf[MAXEXP]; - - *p++ = fmtch; - if (exp < 0) { - exp = -exp; - *p++ = '-'; - } - else - *p++ = '+'; - t = expbuf + MAXEXP; - if (exp > 9) { - do { - *--t = to_char(exp % 10); - } while ((exp /= 10) > 9); - *--t = to_char(exp); - for (; t < expbuf + MAXEXP; *p++ = *t++); - } - else { - *p++ = '0'; - *p++ = to_char(exp); - } - return (p); -} // exponent() - - -static int -cvt(double number, int prec, int flags, char *signp, int fmtch, char *startp, - char *endp) -{ - char *p, *t; - double fract; - int dotrim, expcnt, gformat; - double integer, tmp; - Cyg_libm_ieee_double_shape_type ieeefp; - - dotrim = expcnt = gformat = 0; - ieeefp.value = number; - if ( ieeefp.number.sign ){ // this checks for <0.0 and -0.0 - number = -number; - *signp = '-'; - } else - *signp = 0; - - fract = modf(number, &integer); - - /* get an extra slot for rounding. */ - t = ++startp; - - /* - * get integer portion of number; put into the end of the buffer; the - * .01 is added for modf(356.0 / 10, &integer) returning .59999999... - */ - for (p = endp - 1; integer; ++expcnt) { - tmp = modf(integer / 10, &integer); - *p-- = to_char((int)((tmp + .01) * 10)); - } - switch (fmtch) { - case 'f': - /* reverse integer into beginning of buffer */ - if (expcnt) - for (; ++p < endp; *t++ = *p); - else - *t++ = '0'; - /* - * if precision required or alternate flag set, add in a - * decimal point. - */ - if (prec || flags&ALT) - *t++ = '.'; - /* if requires more precision and some fraction left */ - if (fract) { - if (prec) - do { - fract = modf(fract * 10, &tmp); - *t++ = to_char((int)tmp); - } while (--prec && fract); - if (fract) - startp = round(fract, (int *)NULL, startp, - t - 1, (char)0, signp); - } - for (; prec--; *t++ = '0'); - break; - case 'e': - case 'E': -eformat: if (expcnt) { - *t++ = *++p; - if (prec || flags&ALT) - *t++ = '.'; - /* if requires more precision and some integer left */ - for (; prec && ++p < endp; --prec) - *t++ = *p; - /* - * if done precision and more of the integer component, - * round using it; adjust fract so we don't re-round - * later. - */ - if (!prec && ++p < endp) { - fract = 0; - startp = round((double)0, &expcnt, startp, - t - 1, *p, signp); - } - /* adjust expcnt for digit in front of decimal */ - --expcnt; - } - /* until first fractional digit, decrement exponent */ - else if (fract) { - /* adjust expcnt for digit in front of decimal */ - for (expcnt = -1;; --expcnt) { - fract = modf(fract * 10, &tmp); - if (tmp) - break; - } - *t++ = to_char((int)tmp); - if (prec || flags&ALT) - *t++ = '.'; - } - else { - *t++ = '0'; - if (prec || flags&ALT) - *t++ = '.'; - } - /* if requires more precision and some fraction left */ - if (fract) { - if (prec) - do { - fract = modf(fract * 10, &tmp); - *t++ = to_char((int)tmp); - } while (--prec && fract); - if (fract) - startp = round(fract, &expcnt, startp, - t - 1, (char)0, signp); - } - /* if requires more precision */ - for (; prec--; *t++ = '0'); - - /* unless alternate flag, trim any g/G format trailing 0's */ - if (gformat && !(flags&ALT)) { - while (t > startp && *--t == '0'); - if (*t == '.') - --t; - ++t; - } - t = exponent(t, expcnt, fmtch); - break; - case 'g': - case 'G': - /* a precision of 0 is treated as a precision of 1. */ - if (!prec) - ++prec; - /* - * ``The style used depends on the value converted; style e - * will be used only if the exponent resulting from the - * conversion is less than -4 or greater than the precision.'' - * -- ANSI X3J11 - */ - if (expcnt > prec || (!expcnt && fract && fract < .0001)) { - /* - * g/G format counts "significant digits, not digits of - * precision; for the e/E format, this just causes an - * off-by-one problem, i.e. g/G considers the digit - * before the decimal point significant and e/E doesn't - * count it as precision. - */ - --prec; - fmtch -= 2; /* G->E, g->e */ - gformat = 1; - goto eformat; - } - /* - * reverse integer into beginning of buffer, - * note, decrement precision - */ - if (expcnt) - for (; ++p < endp; *t++ = *p, --prec); - else - *t++ = '0'; - /* - * if precision required or alternate flag set, add in a - * decimal point. If no digits yet, add in leading 0. - */ - if (prec || flags&ALT) { - dotrim = 1; - *t++ = '.'; - } - else - dotrim = 0; - /* if requires more precision and some fraction left */ - if (fract) { - if (prec) { - do { - fract = modf(fract * 10, &tmp); - *t++ = to_char((int)tmp); - } while(!tmp); - while (--prec && fract) { - fract = modf(fract * 10, &tmp); - *t++ = to_char((int)tmp); - } - } - if (fract) - startp = round(fract, (int *)NULL, startp, - t - 1, (char)0, signp); - } - /* alternate format, adds 0's for precision, else trim 0's */ - if (flags&ALT) - for (; prec--; *t++ = '0'); - else if (dotrim) { - while (t > startp && *--t == '0'); - if (*t != '.') - ++t; - } - } - return (t - startp); -} // cvt() - -#endif // ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// EOF vfnprintf.cxx diff --git a/packages/language/c/libc/current/src/stdlib/_exit.cxx b/packages/language/c/libc/current/src/stdlib/_exit.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/_exit.cxx +++ /dev/null @@ -1,105 +0,0 @@ -//======================================================================== -// -// _exit.cxx -// -// _exit() as from POSIX 1003.1 section 3.2.2 "Terminate a process" -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: Provides POSIX 1003.1 _exit() function -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration header - -// INCLUDES - -#include // Common type definitions and support -#include // Common tracing support -#include // Common assertion support -#include // Header for all stdlib functions - // (like this one) -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions -#ifdef CYGPKG_KERNEL -# include // kernel configuration -# include // eCos kernel for thread termination -# include // and -# include // for stopping the scheduler -# include -#endif - - -// SYMBOLS - -externC void -_exit( int ) CYGBLD_ATTRIB_WEAK_ALIAS(__libc__exit) CYGBLD_ATTRIB_NORET; - -// FUNCTIONS - -externC void -__libc__exit( int status ) -{ - CYG_REPORT_FUNCTION(); // shouldn't return, but CYG_FAIL will catch it - CYG_REPORT_FUNCARG1DV( status ); - -#ifdef CYGPKG_KERNEL - -# ifdef CYGSEM_LIBC_EXIT_STOPS_SYSTEM - - Cyg_Scheduler::lock(); // prevent rescheduling - - for (;;) - CYG_EMPTY_STATEMENT; - -# else - - Cyg_Thread::exit(); - -# endif -#endif - - // loop forever - for (;;) - CYG_EMPTY_STATEMENT; - - CYG_FAIL( "__libc__exit() returning!!!" ); - - CYG_REPORT_RETURN(); -} // _exit() - - -// EOF _exit.cxx diff --git a/packages/language/c/libc/current/src/stdlib/abort.cxx b/packages/language/c/libc/current/src/stdlib/abort.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/abort.cxx +++ /dev/null @@ -1,92 +0,0 @@ -//=========================================================================== -// -// abort.cxx -// -// Implementation of the abort() function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-18 -// Purpose: Implement the ISO C abort() function from 7.10.4.1 -// Description: This implements abort() simply by raising SIGABRT as -// required by ISO C -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support - -#include // Header for all stdlib functions - // (like this one) -#ifdef CYGPKG_LIBC_SIGNALS -# include -#endif - -// FUNCTIONS - -externC void -__abort( void ) -{ - CYG_REPORT_FUNCNAME( "__abort" ); - -#ifdef CYGPKG_LIBC_SIGNALS - int rc; - - rc = raise(SIGABRT); - - CYG_TRACE1(1, "raise(SIGABRT) returned!!! rc=%d", rc); - - CYG_FAIL("raise(SIGABRT) returned"); - -#endif - - // ISO C clearly says that abort() cannot return to its caller - - // loop forever - for (;;) - CYG_EMPTY_STATEMENT; - - CYG_REPORT_RETURN(); -} // abort() - -// EXPORTED SYMBOLS - -externC void abort(void) CYGBLD_ATTRIB_WEAK_ALIAS(__abort); - -// EOF abort.cxx diff --git a/packages/language/c/libc/current/src/stdlib/abs.cxx b/packages/language/c/libc/current/src/stdlib/abs.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/abs.cxx +++ /dev/null @@ -1,93 +0,0 @@ -//=========================================================================== -// -// abs.cxx -// -// Real alternative for inline implementation of the ANSI standard -// abs() utility function defined in section 7.10.6.1 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support - -// We don't want the inline versions of stdlib functions defined here - -#ifdef CYGIMP_LIBC_STDLIB_INLINES -#undef CYGIMP_LIBC_STDLIB_INLINES -#endif - -#include // Main header for stdlib functions -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - - -// EXPORTED SYMBOLS - -externC int -abs( int j ) CYGPRI_LIBC_WEAK_ALIAS("_abs"); - - -// FUNCTIONS - -int -_abs( int j ) -{ - int retval; - - CYG_REPORT_FUNCNAMETYPE( "_abs", "returning %d" ); - - retval = (j<0) ? -j : j; - - CYG_REPORT_RETVAL( retval ); - - return retval; -} // _abs() - - -#endif // ifdef CYGPKG_LIBC - -// EOF abs.cxx diff --git a/packages/language/c/libc/current/src/stdlib/atexit.cxx b/packages/language/c/libc/current/src/stdlib/atexit.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/atexit.cxx +++ /dev/null @@ -1,135 +0,0 @@ -//======================================================================== -// -// atexit.cxx -// -// Implementation of the atexit() function -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-08-31 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include atexit() ? -#ifdef CYGFUN_LIBC_ATEXIT - -// INCLUDES - -#include // Common type definitions and support -#include // Common tracing support -#include // Common assertion support -#include // Header for all stdlib functions - // (like this one) -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - -// SYMBOLS - -externC int -atexit( Cyg_libc_atexit_fn_t ) CYGBLD_ATTRIB_WEAK_ALIAS(_atexit); - - -// STATICS - -// cyg_libc_atexit_handlers contains the functions to call. -// cyg_libc_atexit_handlers_count contains the number of valid handlers -// or you can consider the next free handler slot in -// cyg_libc_atexit_handlers. - -static Cyg_libc_atexit_fn_t -cyg_libc_atexit_handlers[ CYGNUM_LIBC_ATEXIT_HANDLERS ]; - -static cyg_ucount32 cyg_libc_atexit_handlers_count; - - -// FUNCTIONS - -externC void -cyg_libc_invoke_atexit_handlers( void ) -{ - CYG_REPORT_FUNCNAME( "cyg_libc_invoke_atexit_handlers"); - CYG_REPORT_FUNCARGVOID(); - - cyg_ucount32 i; - - for (i=cyg_libc_atexit_handlers_count; i>0; --i) { - - CYG_TRACE1( true, - "Calling function registered with atexit at addr %08x", - cyg_libc_atexit_handlers[i-1] ); - CYG_CHECK_FUNC_PTR( cyg_libc_atexit_handlers[i-1], - "Function to call in atexit handler list " - "isn't valid! Even though it was when " - "entered!" ); - - (*cyg_libc_atexit_handlers[i-1])(); - - } // for - - CYG_REPORT_RETURN(); -} // cyg_libc_invoke_atexit_handlers() - - -externC int -_atexit( Cyg_libc_atexit_fn_t func_to_register ) -{ - CYG_REPORT_FUNCNAMETYPE( "_atexit", "returning %d" ); - CYG_REPORT_FUNCARG1XV( func_to_register ); - - CYG_CHECK_FUNC_PTR( func_to_register, - "_atexit() not passed a valid function argument!" ); - - // have we any slots left? - if (cyg_libc_atexit_handlers_count >= - sizeof(cyg_libc_atexit_handlers)/sizeof(Cyg_libc_atexit_fn_t) ) { - - CYG_REPORT_RETVAL( 1 ); - return 1; // failure - } // if - - cyg_libc_atexit_handlers[cyg_libc_atexit_handlers_count++] = - func_to_register; - - CYG_REPORT_RETVAL(0); - return 0; -} // _atexit() - - -#endif // ifdef CYGFUN_LIBC_ATEXIT - -// EOF atexit.cxx diff --git a/packages/language/c/libc/current/src/stdlib/atof.cxx b/packages/language/c/libc/current/src/stdlib/atof.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/atof.cxx +++ /dev/null @@ -1,97 +0,0 @@ -//=========================================================================== -// -// atof.cxx -// -// Real alternative for inline implementation of the ANSI standard -// atof() utility function defined in section 7.10.1.1 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And strtod() which we use? -#if defined(CYGPKG_LIBC) && defined(CYGFUN_LIBC_strtod) - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support -#include // Assertion support - -// We don't want the inline versions of stdlib functions defined here - -#ifdef CYGIMP_LIBC_STDLIB_INLINES -#undef CYGIMP_LIBC_STDLIB_INLINES -#endif - -#include // NULL, wchar_t and size_t from compiler -#include // Main header for stdlib functions -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - - -// EXPORTED SYMBOLS - -externC double -atof( const char * ) CYGPRI_LIBC_WEAK_ALIAS("_atof"); - - -// FUNCTIONS - -double -_atof( const char *nptr ) -{ - double retval; - - CYG_REPORT_FUNCNAMETYPE( "_atof", "returning %f" ); - - CYG_CHECK_DATA_PTR( nptr, "nptr is an invalid pointer!" ); - - retval = _strtod( nptr, (char **)NULL ); - - CYG_REPORT_RETVAL( retval ); - - return retval; -} // _atof() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGFUN_LIBC_strtod) - -// EOF atof.cxx diff --git a/packages/language/c/libc/current/src/stdlib/atoi.cxx b/packages/language/c/libc/current/src/stdlib/atoi.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/atoi.cxx +++ /dev/null @@ -1,97 +0,0 @@ -//=========================================================================== -// -// atoi.cxx -// -// Real alternative for inline implementation of the ANSI standard -// atoi() utility function defined in section 7.10.1.2 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support -#include // Assertion support - -// We don't want the inline versions of stdlib functions defined here - -#ifdef CYGIMP_LIBC_STDLIB_INLINES -#undef CYGIMP_LIBC_STDLIB_INLINES -#endif - -#include // NULL, wchar_t and size_t from compiler -#include // Main header for stdlib functions -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - - -// EXPORTED SYMBOLS - -externC int -atoi( const char *nptr ) CYGPRI_LIBC_WEAK_ALIAS("_atoi"); - - -// FUNCTIONS - -int -_atoi( const char *nptr ) -{ - int retval; - - CYG_REPORT_FUNCNAMETYPE( "_atoi", "returning %d" ); - - CYG_CHECK_DATA_PTR( nptr, "nptr is an invalid pointer!" ); - - retval = (int)_strtol( nptr, (char **)NULL, 10 ); - - CYG_REPORT_RETVAL( retval ); - - return retval; -} // _atoi() - - -#endif // ifdef CYGPKG_LIBC - -// EOF atoi.cxx diff --git a/packages/language/c/libc/current/src/stdlib/atol.cxx b/packages/language/c/libc/current/src/stdlib/atol.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/atol.cxx +++ /dev/null @@ -1,97 +0,0 @@ -//=========================================================================== -// -// atol.cxx -// -// Real alternative for inline implementation of the ANSI standard -// atol() utility function defined in section 7.10.1.3 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support -#include // Assertion support - -// We don't want the inline versions of stdlib functions defined here - -#ifdef CYGIMP_LIBC_STDLIB_INLINES -#undef CYGIMP_LIBC_STDLIB_INLINES -#endif - -#include // NULL, wchar_t and size_t from compiler -#include // Main header for stdlib functions -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - - -// EXPORTED SYMBOLS - -externC long -atol( const char *nptr ) CYGPRI_LIBC_WEAK_ALIAS("_atol"); - - -// FUNCTIONS - -long -_atol( const char *nptr ) -{ - long retval; - - CYG_REPORT_FUNCNAMETYPE( "_atol", "returning %d" ); - - CYG_CHECK_DATA_PTR( nptr, "nptr is an invalid pointer!" ); - - retval = _strtol( nptr, (char **)NULL, 10 ); - - CYG_REPORT_RETVAL( retval ); - - return retval; -} // _atol() - - -#endif // ifdef CYGPKG_LIBC - -// EOF atol.cxx diff --git a/packages/language/c/libc/current/src/stdlib/bsearch.cxx b/packages/language/c/libc/current/src/stdlib/bsearch.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/bsearch.cxx +++ /dev/null @@ -1,135 +0,0 @@ -//=========================================================================== -// -// bsearch.cxx -// -// ANSI standard binary search function defined in section 7.10.5.1 -// of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support -#include // Assertion support -#include // Header for all stdlib functions - // (like this one) -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - -// TRACING - -# if defined(CYGDBG_USE_TRACING) && \ - defined(CYGNUM_LIBC_BSEARCH_TRACE_LEVEL) -static int bsearch_trace = CYGNUM_LIBC_BSEARCH_TRACE_LEVEL; -# define TL1 (0 < bsearch_trace) -# else -# define TL1 (0) -# endif - - -// EXPORTED SYMBOLS - -externC void * -bsearch( const void *key, const void *base, size_t nmemb, size_t size, - Cyg_comparison_fn_t compar ) CYGPRI_LIBC_WEAK_ALIAS("_bsearch"); - -// FUNCTIONS - -externC void * -_bsearch( const void *key, const void *base, size_t nmemb, size_t size, - Cyg_comparison_fn_t compar ) -{ - CYG_REPORT_FUNCNAMETYPE( "_bsearch", "returning %08x" ); - - CYG_REPORT_FUNCARG5( "key=%08x, base=%08x, nmemb=%d, size=%d, " - "compar=%08x", key, base, nmemb, size, compar ); - - CYG_CHECK_DATA_PTR( key, "key is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( base, "base is not a valid pointer!" ); - CYG_CHECK_FUNC_PTR( compar, "compar is not a valid function pointer!" ); - - CYG_ADDRESS current; - size_t lower = 0; - size_t upper = nmemb; - size_t index; - int result; - - if (nmemb == 0 || size == 0) - { - CYG_TRACE2( TL1, "Warning! either nmemb (%d) or size (%d) is 0", - nmemb, size ); - CYG_REPORT_RETVAL( NULL ); - return NULL; - } // if - - while (lower < upper) - { - index = (lower + upper) / 2; - current = (CYG_ADDRESS) (((char *) base) + (index * size)); - - CYG_TRACE2( TL1, "About to call comparison function with " - "key=%08x, current=%08x", key, current ); - result = compar (key, (void *) current); - CYG_TRACE1( TL1, "Comparison function returned %d", result ); - - if (result < 0) - upper = index; - else if (result > 0) - lower = index + 1; - else - { - CYG_REPORT_RETVAL( current ); - return (void *)current; - } // else - } // while - - CYG_REPORT_RETVAL( NULL ); - return NULL; -} // _bsearch() - -#endif // ifdef CYGPKG_LIBC - -// EOF bsearch.cxx diff --git a/packages/language/c/libc/current/src/stdlib/div.cxx b/packages/language/c/libc/current/src/stdlib/div.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/div.cxx +++ /dev/null @@ -1,130 +0,0 @@ -//=========================================================================== -// -// div.cxx -// -// ISO C implementation for div() utility function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-02 -// Purpose: Provide implementation of div() from ISO C section 7.10.6.2 -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== -// - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // Common type definitions and support -#include // Assertion support -#include // Tracing support - -// We don't want the inline versions of stdlib functions defined here - -#ifdef CYGIMP_LIBC_STDLIB_INLINES -# undef CYGIMP_LIBC_STDLIB_INLINES -#endif - -#include // NULL, wchar_t and size_t from compiler -#include // Main header for stdlib functions - - -// FUNCTIONS - -externC div_t -__div( int __numer, int __denom ) -{ - div_t __ret; - - CYG_REPORT_FUNCNAMETYPE( "__div", "quotient: %d"); - CYG_REPORT_FUNCARG2DV( __numer, __denom ); - // FIXME: what if they want it handled with SIGFPE? Should have option - CYG_PRECONDITION(__denom != 0, "division by zero attempted!"); - - __ret.quot = __numer / __denom; - __ret.rem = __numer % __denom; - - // But the modulo is implementation-defined for -ve numbers (ISO C 6.3.5) - // and we are required to "round" to zero (ISO C 7.10.6.2) - // - // The cases we have to deal with are inexact division of: - // a) + div + - // b) + div - - // c) - div + - // d) - div - - // - // a) can never go wrong and the quotient and remainder are always positive - // b) only goes wrong if the negative quotient has been "rounded" to - // -infinity - if so then the remainder will be negative when it - // should be positive or zero - // c) only goes wrong if the negative quotient has been "rounded" to - // -infinity - if so then the remainder will be positive when it - // should be negative or zero - // d) only goes wrong if the positive quotient has been rounded to - // +infinity - if so then the remainder will be positive when it - // should be negative or zero - // - // So the correct sign of the remainder corresponds to the sign of the - // numerator. Which means we can say that the result needs adjusting - // iff the sign of the numerator is different from the sign of the - // remainder. - // - // You may be interested to know that the Berkeley version of div() - // would get this wrong for (c) and (d) on some targets. - // e.g. for (-5)/4 it could leave the result as -2R3 - - if ((__ret.rem < 0) && (__numer > 0)) { - ++__ret.quot; - __ret.rem -= __denom; - } else if ((__ret.rem > 0) && (__numer < 0)) { - --__ret.quot; - __ret.rem += __denom; - } // else - - CYG_REPORT_RETVAL( __ret.quot ); - - return __ret; -} // __div() - - -// EXPORTED SYMBOLS - -externC div_t -div( int __numer, int __denom ) CYGBLD_ATTRIB_WEAK_ALIAS(__div); - - -// EOF div.cxx diff --git a/packages/language/c/libc/current/src/stdlib/exit.cxx b/packages/language/c/libc/current/src/stdlib/exit.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/exit.cxx +++ /dev/null @@ -1,106 +0,0 @@ -//========================================================================= -// -// exit.cxx -// -// Implementation of the exit() function -// -//========================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-08-31 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//========================================================================= - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Common tracing support -#include // Common assertion support -#include // fflush() -#include // errno -#include // Header for all stdlib functions - // (like this one) -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - -// SYMBOLS - -externC void -exit( int ) CYGBLD_ATTRIB_WEAK_ALIAS(__libc_exit) CYGBLD_ATTRIB_NORET; - -// FUNCTIONS - -externC void -__libc_exit( int status ) -{ - CYG_REPORT_FUNCTION(); // shouldn't return, but CYG_FAIL will catch it - CYG_REPORT_FUNCARG1DV( status ); - - // Strictly the only thing exit() does is invoke the atexit handlers - // and flush stdio buffers. Anything else is for _exit() (aka - // __libc__exit() within the implementation) - -#ifdef CYGFUN_LIBC_ATEXIT - // we start with the atexit handlers - cyg_libc_invoke_atexit_handlers(); -#endif - -#ifdef CYGSEM_LIBC_EXIT_CALLS_FFLUSH - - int rc; - - CYG_TRACE0( true, "Calling fflush( NULL )" ); - rc = fflush( NULL ); - - CYG_TRACE2( rc != 0, "fflush() returned non-zero. It returned %d and " - "errno indicates the error: %s", rc, strerror(errno) ); -#endif - - __libc__exit( status ); - - CYG_FAIL( "__libc_exit() returning!!!" ); - - CYG_REPORT_RETURN(); -} // __libc_exit() - - -#endif // ifdef CYGPKG_LIBC - -// EOF exit.cxx diff --git a/packages/language/c/libc/current/src/stdlib/getenv.cxx b/packages/language/c/libc/current/src/stdlib/getenv.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/getenv.cxx +++ /dev/null @@ -1,140 +0,0 @@ -//======================================================================== -// -// getenv.cxx -// -// Implementation of the ISO C standard getenv() function -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-08-31 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_ENVIRONMENT) - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support -#include // Tracing support -#include // Main header for stdlib functions -#include // strchr(), strlen() and strncmp() -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - - -// VARIABLES - -externC char **environ; // standard definition of environ - -// EXPORTED SYMBOLS - -externC char * -getenv( const char *name ) CYGPRI_LIBC_WEAK_ALIAS("_getenv"); - - -// FUNCTIONS - -extern char * -_getenv( const char *name ) -{ - // This function assumes the POSIX 1003.1 layout of the environment - // in the environ variable, i.e. extern char **environ is a pointer - // to an array of character pointers to the environment strings - // (POSIX 3.1.2.2 and 2.6). - // - // getenv() searches the environment list for a string of the form - // "name=value" (POSIX 4.6.1). The strings must have this form - // (POSIX 2.6) - - CYG_REPORT_FUNCNAMETYPE( "_getenv", "returning %08x" ); - - CYG_PRECONDITION( name != NULL, "getenv() called with NULL string!" ); - - CYG_REPORT_FUNCARG1( "name=%s", name ); - - CYG_PRECONDITION( environ != NULL, - "environ not set i.e. environ == NULL" ); - - CYG_CHECK_DATA_PTR( environ, "environ isn't a valid pointer!" ); - - CYG_CHECK_DATA_PTR( name, "name isn't a valid pointer!" ); - - // check name doesn't contain '=' - CYG_PRECONDITION( strchr(name, '=') == NULL, - "name contains '='!" ); - - char **env_str_p; - cyg_ucount32 len = strlen( name ); - - for (env_str_p = environ; *env_str_p != NULL; ++env_str_p ) { - - CYG_CHECK_DATA_PTR( env_str_p, - "current environment string isn't valid!" ); - - CYG_CHECK_DATA_PTR( *env_str_p, - "current environment string isn't valid!" ); - - // do we have a match? - if ( !strncmp(*env_str_p, name, len) ) { - // but it could be just a prefix i.e. we could have - // matched MYNAMEFRED when we're looking for just MYNAME, so: - - if ( (*env_str_p)[len] == '=' ) { - // we got a match - CYG_REPORT_RETVAL( *env_str_p + len + 1 ); - - return (*env_str_p + len + 1); - } // if - } // if - - // check the next pointer isn't NULL, as we're about to dereference - // it - CYG_ASSERT( env_str_p+1 != NULL, - "environment contains a NULL pointer!" ); - } // for - - CYG_REPORT_RETVAL( NULL ); - return NULL; -} // getenv() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_ENVIRONMENT) - -// EOF getenv.cxx diff --git a/packages/language/c/libc/current/src/stdlib/itoa.cxx b/packages/language/c/libc/current/src/stdlib/itoa.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/itoa.cxx +++ /dev/null @@ -1,133 +0,0 @@ -//======================================================================== -// -// itoa.cxx -// -// FIXME -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-17 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support -#include // Assertion infrastructure -#include // Tracing infrastructure -#include // Header for this file -#include // For memcpy() - -// FUNCTIONS - -///////////////////// -// cyg_libc_itoa() // -///////////////////// -// -// This converts num to a string and puts it into s padding with -// "0"'s if padzero is set, or spaces otherwise if necessary. -// The number of chars written to s is returned -// - -// This implementation is probably suboptimal in terms of performance -// but there wouldn't be much in it with only 11 chars max to convert :-/. -// Actually FIXME: what if someone passes a width >11 - -externC cyg_uint8 -cyg_libc_itoa( cyg_uint8 *s, cyg_int32 num, cyg_uint8 width, cyg_bool padzero ) -{ - CYG_REPORT_FUNCNAMETYPE("cyg_libc_itoa", "returning %d"); - CYG_REPORT_FUNCARG4( "s=%08x, num=%d, width=%d, padzero=%d", - s, num, width, padzero ); - - CYG_CHECK_DATA_PTR(s, "input string not a valid pointer"); - - // special case for zero otherwise we'd have to treat it specially later - // on anyway - - if (num==0) { - cyg_ucount8 i; - - for (i=0; i 0)) { - *s++ = '-'; - --width; - num = abs(num); - ++ret; - } - - cyg_ucount32 i; - cyg_bool reachednum = false; - cyg_uint8 c, j; - - // i starts off with factor of 10 digits - which is the string length - // of a positive 32-bit number - for (i=1000000000, j=10; i>0; i/=10, --j) { - c = (num / i); - - if (!reachednum && c==0) { - if (j <= width) { - *s++ = padzero ? '0' : ' '; - ++ret; - } - } // if - else { - *s++ = c + '0'; - ++ret; - reachednum = true; - } - num %= i; - } // for - - CYG_POSTCONDITION(ret >= width, "Didn't output enough chars!"); - - CYG_REPORT_RETVAL(ret); - return ret; -} // cyg_libc_itoa() - -// EOF itoa.cxx diff --git a/packages/language/c/libc/current/src/stdlib/labs.cxx b/packages/language/c/libc/current/src/stdlib/labs.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/labs.cxx +++ /dev/null @@ -1,93 +0,0 @@ -//=========================================================================== -// -// labs.cxx -// -// Real alternative for inline implementation of the ANSI standard -// labs() utility function defined in section 7.10.6.3 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support - -// We don't want the inline versions of stdlib functions defined here - -#ifdef CYGIMP_LIBC_STDLIB_INLINES -#undef CYGIMP_LIBC_STDLIB_INLINES -#endif - -#include // Main header for stdlib functions -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - - -// EXPORTED SYMBOLS - -externC long -labs( long j ) CYGPRI_LIBC_WEAK_ALIAS("_labs"); - - -// FUNCTIONS - -long -_labs( long j ) -{ - long retval; - - CYG_REPORT_FUNCNAMETYPE( "_labs", "returning %d" ); - - retval = (j<0) ? -j : j; - - CYG_REPORT_RETVAL( retval ); - - return retval; -} // _labs() - - -#endif // ifdef CYGPKG_LIBC - -// EOF labs.cxx diff --git a/packages/language/c/libc/current/src/stdlib/ldiv.cxx b/packages/language/c/libc/current/src/stdlib/ldiv.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/ldiv.cxx +++ /dev/null @@ -1,130 +0,0 @@ -//=========================================================================== -// -// ldiv.cxx -// -// ISO C implementation for ldiv() utility function -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-02 -// Purpose: Provide implementation of ldiv() from ISO C section 7.10.6.4 -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== -// - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // Common type definitions and support -#include // Assertion support -#include // Tracing support - -// We don't want the inline versions of stdlib functions defined here - -#ifdef CYGIMP_LIBC_STDLIB_INLINES -# undef CYGIMP_LIBC_STDLIB_INLINES -#endif - -#include // NULL, wchar_t and size_t from compiler -#include // Main header for stdlib functions - - -// FUNCTIONS - -externC ldiv_t -__ldiv( long __numer, long __denom ) -{ - ldiv_t __ret; - - CYG_REPORT_FUNCNAMETYPE( "__ldiv", "quotient: %d"); - CYG_REPORT_FUNCARG2DV( __numer, __denom ); - // FIXME: what if they want it handled with SIGFPE? Should have option - CYG_PRECONDITION(__denom != 0, "division by zero attempted!"); - - __ret.quot = __numer / __denom; - __ret.rem = __numer % __denom; - - // But the modulo is implementation-defined for -ve numbers (ISO C 6.3.5) - // and we are required to "round" to zero (ISO C 7.10.6.2) - // - // The cases we have to deal with are inexact division of: - // a) + div + - // b) + div - - // c) - div + - // d) - div - - // - // a) can never go wrong and the quotient and remainder are always positive - // b) only goes wrong if the negative quotient has been "rounded" to - // -infinity - if so then the remainder will be negative when it - // should be positive or zero - // c) only goes wrong if the negative quotient has been "rounded" to - // -infinity - if so then the remainder will be positive when it - // should be negative or zero - // d) only goes wrong if the positive quotient has been rounded to - // +infinity - if so then the remainder will be positive when it - // should be negative or zero - // - // So the correct sign of the remainder corresponds to the sign of the - // numerator. Which means we can say that the result needs adjusting - // iff the sign of the numerator is different from the sign of the - // remainder. - // - // You may be interested to know that the Berkeley version of ldiv() - // would get this wrong for (c) and (d) on some targets. - // e.g. for (-5)/4 it could leave the result as -2R3 - - if ((__ret.rem < 0) && (__numer > 0)) { - ++__ret.quot; - __ret.rem -= __denom; - } else if ((__ret.rem > 0) && (__numer < 0)) { - --__ret.quot; - __ret.rem += __denom; - } // else - - CYG_REPORT_RETVAL( __ret.quot ); - - return __ret; -} // __ldiv() - - -// EXPORTED SYMBOLS - -externC ldiv_t -ldiv( long __numer, long __denom ) CYGBLD_ATTRIB_WEAK_ALIAS(__ldiv); - - -// EOF ldiv.cxx diff --git a/packages/language/c/libc/current/src/stdlib/malloc.cxx b/packages/language/c/libc/current/src/stdlib/malloc.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/malloc.cxx +++ /dev/null @@ -1,233 +0,0 @@ -//======================================================================== -// -// malloc.cxx -// -// Implementation of ISO C memory allocation routines -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: Provides ISO C calloc(), malloc(), realloc() and free() -// functions -// Description: Implementation of ANSI standard allocation routines as per -// ISO C section 7.10.3 -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Do we want these functions? -#ifdef CYGPKG_LIBC_MALLOC - -// INCLUDES - -#include // Common type definitions and support -#include // Common tracing support -#include // Common assertion support -#include // For memset() and memcpy() -#include // header for this file -#include // kernel configuration -#include // Kernel variable size block allocator - -#include "clibincl/stdlibsupp.hxx" // Additional support for stdlib stuff - // internal to the C library - -// EXPORTED SYMBOLS - -externC void * -calloc( size_t, size_t ) CYGBLD_ATTRIB_WEAK_ALIAS(_calloc); - -externC void -free( void * ) CYGBLD_ATTRIB_WEAK_ALIAS(_free); - -externC void * -malloc( size_t ) CYGBLD_ATTRIB_WEAK_ALIAS(_malloc); - -externC void * -realloc( void *, size_t ) CYGBLD_ATTRIB_WEAK_ALIAS(_realloc); - - -// STATIC VARIABLES - -// the data space for the memory pool - can be externally overriden -// FIXME: but should be in different file for this to work -cyg_uint8 cyg_libc_malloc_memorypool[ CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE ] - CYGBLD_ATTRIB_WEAK; - -// the memory pool object itself -static Cyg_Mempool_Variable pool CYG_INIT_PRIORITY( LIBC ) = -Cyg_Mempool_Variable( cyg_libc_malloc_memorypool, - CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE ); - - -// FUNCTIONS - -void * -_malloc( size_t size ) -{ - void *data_ptr; - - CYG_REPORT_FUNCNAMETYPE( "_malloc", "returning pointer %08x" ); - - CYG_REPORT_FUNCARG1DV( size ); - - // first check if size wanted is 0 - if (!size) { - CYG_REPORT_RETVAL( NULL ); - return NULL; - } // if - - // ask the pool for the data - data_ptr = pool.try_alloc( size ); - - // if it isn't NULL is the pointer valid? - if (data_ptr != NULL) { - CYG_CHECK_DATA_PTR( data_ptr, - "allocator returned invalid pointer!" ); - - // And just check its alignment - CYG_ASSERT( !((CYG_ADDRWORD)data_ptr & (sizeof(CYG_ADDRWORD) - 1)), - "Allocator has returned badly aligned data!"); - } // if - - CYG_REPORT_RETVAL( data_ptr ); - - return data_ptr; -} // _malloc() - - -void -_free( void *ptr ) -{ - CYG_REPORT_FUNCNAME( "_free"); - - CYG_REPORT_FUNCARG1XV( ptr ); - - // if null pointer, do nothing as per spec - if (ptr==NULL) - return; - - CYG_CHECK_DATA_PTR( ptr, "Pointer to free isn't even valid!" ); - - // get pool to free it. Use size==0 for pool to determine the size - // Also ignore return value - there's nothing we can do with it - pool.free( (cyg_uint8 *) ptr, 0 ); - - CYG_REPORT_RETURN(); - -} // _free() - - -void * -_calloc( size_t nmemb, size_t size ) -{ - void *data_ptr; - cyg_ucount32 realsize; - - CYG_REPORT_FUNCNAMETYPE( "_calloc", "returning pointer %08x" ); - - CYG_REPORT_FUNCARG2DV( nmemb, size ); - - realsize = nmemb * size; - - data_ptr = _malloc( realsize ); - - // Fill with 0's if non-NULL - if (data_ptr != NULL) - memset( data_ptr, 0, realsize ); - - CYG_REPORT_RETVAL( data_ptr ); - return data_ptr; -} // _calloc() - - -externC void * -_realloc( void *ptr, size_t size ) -{ - void *ret_ptr; - cyg_int32 oldsize; - - CYG_REPORT_FUNCNAMETYPE( "_realloc", "returning pointer %08x" ); - - CYG_REPORT_FUNCARG2( "ptr=%08x, size=%d", ptr, size ); - - // if pointer is NULL, we must malloc it - if (ptr == NULL) { - ret_ptr = _malloc( size ); - CYG_REPORT_RETVAL( ret_ptr ); - return ret_ptr; - } // if - - CYG_CHECK_DATA_PTR( ptr, "_realloc() passed a bogus pointer!" ); - - // if size is 0, we must free it - if (size == 0) { - _free(ptr); - CYG_REPORT_RETVAL( NULL ); - return NULL; - } // if - - - oldsize = pool.get_allocation_size( (cyg_uint8 *)ptr ); - - CYG_ASSERT( oldsize != -1, - "_realloc() couldn't find allocation size!" ); - - ret_ptr = _malloc( size ); - - // as long as malloc succeeded - if (ret_ptr != NULL) { - // copy old contents - memcpy( ret_ptr, ptr, size < (size_t) oldsize ? size - : (size_t) oldsize ); - - _free(ptr); - } // if - - CYG_REPORT_RETVAL( ret_ptr ); - return ret_ptr; -} // _realloc() - - -// Allows stress_threads test to access memory pool information. -externC void * -cyg_libc_get_malloc_pool( void ) -{ - return (void*) &pool; -} - -#endif // ifdef CYGPKG_LIBC_MALLOC - -// EOF malloc.cxx diff --git a/packages/language/c/libc/current/src/stdlib/qsort.cxx b/packages/language/c/libc/current/src/stdlib/qsort.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/qsort.cxx +++ /dev/null @@ -1,292 +0,0 @@ -//=========================================================================== -// -// qsort.cxx -// -// ANSI standard sorting function defined in section 7.10.5.2 -// of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== -// -// This code is based on original code with the following copyright: -// -/*- - * Copyright (c) 1992, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - - - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support -#include // Assertion support -#include // Header for all stdlib functions - // (like this one) -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - -// TRACING - -# if defined(CYGDBG_USE_TRACING) && defined(CYGNUM_LIBC_QSORT_TRACE_LEVEL) -static int qsort_trace = CYGNUM_LIBC_QSORT_TRACE_LEVEL; -# define TL1 (0 < qsort_trace) -# else -# define TL1 (0) -# endif - - -// EXPORTED SYMBOLS - -externC void -qsort( void *base, size_t nmemb, size_t size, Cyg_comparison_fn_t compar ) \ - CYGPRI_LIBC_WEAK_ALIAS("_qsort"); - - -// FUNCTION PROTOTYPES - -static __inline__ char *med3(char *, char *, char *, Cyg_comparison_fn_t); -static __inline__ void swapfunc(char *, char *, int, int); - - -// MACRO FUNCTIONS - -#define min(a, b) ((a) < (b) ? (a) : (b)) - -// -// Qsort routine from Bentley & McIlroy's "Engineering a Sort Function". -// - -#define swapcode(TYPE, parmi, parmj, n) do { \ - long i = (n) / sizeof (TYPE); \ - TYPE *pi = (TYPE *) (parmi); \ - TYPE *pj = (TYPE *) (parmj); \ - do { \ - TYPE t = *pi; \ - *pi++ = *pj; \ - *pj++ = t; \ - } while (--i > 0); \ -} while (0) - -#define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \ - es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1; - - -#define swap(a, b) \ - if (swaptype == 0) { \ - long t = *(long *)(a); \ - *(long *)(a) = *(long *)(b); \ - *(long *)(b) = t; \ - } else \ - swapfunc(a, b, size, swaptype) - -#define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n, swaptype) - - -// FUNCTIONS - -// Debug wrapper for comparison function -static __inline__ int -cmp_wrapper( Cyg_comparison_fn_t cmp, void *x, void *y ) -{ - int retval; - CYG_TRACE3( TL1, "Calling comparison function address %08x with args " - "( %08x, %08x )", cmp, x, y ); - retval = cmp(x, y); - - CYG_TRACE1( TL1, "Comparison function returned %d", retval ); - - return retval; -} // cmp_wrapper() - -static __inline__ void -swapfunc( char *a, char *b, int n, int swaptype) -{ - if(swaptype <= 1) - swapcode(long, a, b, n); - else - swapcode(char, a, b, n); -} // swapfunc() - - -static __inline__ char * -med3( char *a, char *b, char *c, Cyg_comparison_fn_t cmp ) -{ - return cmp_wrapper(cmp, a, b) < 0 ? - (cmp_wrapper(cmp, b, c) < 0 ? b : (cmp_wrapper(cmp, a, c) < 0 ? c : a )) - :(cmp_wrapper(cmp, b, c) > 0 ? b : (cmp_wrapper(cmp, a, c) < 0 ? a : c )); -} // med3() - - -void -_qsort( void *base, size_t nmemb, size_t size, Cyg_comparison_fn_t compar ) -{ - char *pa, *pb, *pc, *pd, *pl, *pm, *pn; - int d, r, swaptype, swap_cnt; - - CYG_REPORT_FUNCNAME( "_qsort" ); - CYG_REPORT_FUNCARG4( "base=%08x, nmemb=%d, size=%d, compar=%08x", - base, nmemb, size, compar ); - - CYG_CHECK_DATA_PTR( base, "base is not a valid pointer!" ); - CYG_CHECK_FUNC_PTR( compar, "compar is not a valid function pointer!" ); - -loop: - SWAPINIT(base, size); - swap_cnt = 0; - if (nmemb < 7) { - for (pm = (char *) base + size; - pm < (char *) base + nmemb * size; - pm += size) - for (pl = pm; pl > (char *) base && cmp_wrapper( compar, pl - size, pl) > 0; - pl -= size) - swap(pl, pl - size); - { - CYG_REPORT_RETURN(); - return; - } // for - } // if - pm = (char *) base + (nmemb / 2) * size; - if (nmemb > 7) { - pl = (char *) base; - pn = (char *) base + (nmemb - 1) * size; - if (nmemb > 40) { - d = (nmemb / 8) * size; - pl = med3(pl, pl + d, pl + 2 * d, compar); - pm = med3(pm - d, pm, pm + d, compar); - pn = med3(pn - 2 * d, pn - d, pn, compar); - } // if - pm = med3(pl, pm, pn, compar); - } // if - swap( (char *)base, pm ); - pa = pb = (char *) base + size; - - pc = pd = (char *) base + (nmemb - 1) * size; - for (;;) { - while (pb <= pc && (r = cmp_wrapper( compar, pb, base)) <= 0) { - if (r == 0) { - swap_cnt = 1; - swap(pa, pb); - pa += size; - } // if - pb += size; - } // while - while (pb <= pc && (r = cmp_wrapper( compar, pc, base)) >= 0) { - if (r == 0) { - swap_cnt = 1; - swap(pc, pd); - pd -= size; - } // if - pc -= size; - } // while - if (pb > pc) - break; - swap(pb, pc); - swap_cnt = 1; - pb += size; - pc -= size; - } // for - if (swap_cnt == 0) { // Switch to insertion sort - for (pm = (char *) base + size; - pm < (char *) base + nmemb * size; - pm += size) - for (pl = pm; pl > (char *) base && cmp_wrapper( compar, pl - size, pl) > 0; - pl -= size) - swap(pl, pl - size); - { - CYG_REPORT_RETURN(); - return; - } // for - } //if - - pn = (char *) base + nmemb * size; - r = min(pa - (char *)base, pb - pa); - vecswap((char *)base, pb - r, r); - r = min( (unsigned)(pd - pc), pn - pd - size ); - vecswap(pb, pn - r, r); - if ((unsigned)(r = pb - pa) > size) - _qsort(base, r / size, size, compar); - if ((unsigned)(r = pd - pc) > size) { - // Iterate rather than recurse to save stack space - base = pn - r; - nmemb = r / size; - goto loop; - } // if -/* qsort(pn - r, r / size, size, compar);*/ - - CYG_REPORT_RETURN(); -} // _qsort() - -#endif // ifdef CYGPKG_LIBC - -// EOF qsort.cxx diff --git a/packages/language/c/libc/current/src/stdlib/rand.cxx b/packages/language/c/libc/current/src/stdlib/rand.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/rand.cxx +++ /dev/null @@ -1,255 +0,0 @@ -//=========================================================================== -// -// rand.cxx -// -// ISO and POSIX 1003.1 standard random number generation functions -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1990-01-20 -// Purpose: Provides ISO C rand() and srand() functions, along with -// POSIX 1003.1 rand_r() function -// Description: This implements rand() and srand() of section 7.10.2.1 of -// the ISO C standard. Also rand_r() defined in section 8.3.8 -// of the POSIX 1003.1 standard -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support -#include // Assertion support -#include // Header for all stdlib functions - // (like this one) -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - -#ifdef CYGSEM_LIBC_PER_THREAD_RAND -# include // kernel configuration -# include // per-thread data -# include // per-thread data -# include // mutexes -#endif - -// TRACE - -#if defined(CYGDBG_USE_TRACING) && defined(CYGNUM_LIBC_RAND_TRACE_LEVEL) -static int rand_trace = CYGNUM_LIBC_RAND_TRACE_LEVEL; -# define TL1 (0 < rand_trace) -#else -# define TL1 (0) -#endif - - -// EXPORTED SYMBOLS - -externC int -rand( void ) CYGBLD_ATTRIB_WEAK_ALIAS(_rand); - -externC int -rand_r( unsigned int *seed ) CYGBLD_ATTRIB_WEAK_ALIAS(_rand_r); - -externC void -srand( unsigned int seed ) CYGBLD_ATTRIB_WEAK_ALIAS(_srand); - - -// STATICS - -#ifdef CYGSEM_LIBC_PER_THREAD_RAND -static cyg_ucount32 rand_data_index=CYGNUM_KERNEL_THREADS_DATA_MAX; -static Cyg_Mutex rand_data_mutex CYG_INIT_PRIORITY(LIBC); -#else -static unsigned int cyg_libc_rand_seed = CYGNUM_LIBC_RAND_SEED; -#endif - -// FUNCTIONS - -int -_rand( void ) -{ - unsigned int *seed_p; - int retval; - - CYG_REPORT_FUNCNAMETYPE( "_rand", "returning %d" ); - - // get seed for this thread (if relevant ) -#ifdef CYGSEM_LIBC_PER_THREAD_RAND - Cyg_Thread *self = Cyg_Thread::self(); - - // Get a per-thread data slot if we haven't got one already - // Do a simple test before locking and retrying test, as this is a - // rare situation - if (CYGNUM_KERNEL_THREADS_DATA_MAX==rand_data_index) { - rand_data_mutex.lock(); - if (CYGNUM_KERNEL_THREADS_DATA_MAX==rand_data_index) { - - // the kernel just throws an assert if this doesn't work - // FIXME: Should use real CDL to pre-allocate a slot at compile - // time to ensure there are enough slots - rand_data_index = self->new_data_index(); - - // Initialize seed - self->set_data(rand_data_index, CYGNUM_LIBC_RAND_SEED); - } - rand_data_mutex.unlock(); - } // if - - // we have a valid index now - - seed_p = (unsigned int *)self->get_data_ptr(rand_data_index); -#else - seed_p = &cyg_libc_rand_seed; -#endif - - CYG_TRACE2( TL1, "Retrieved seed address %08x containing %d", - seed_p, *seed_p ); - CYG_CHECK_DATA_PTR( seed_p, "Help! Returned address of seed is invalid!" ); - - retval = _rand_r( seed_p ); - - CYG_REPORT_RETVAL( retval ); - - return retval; - -} // _rand() - - -int -_rand_r( unsigned int *seed ) -{ - int retval; - - CYG_REPORT_FUNCNAMETYPE( "_rand_r", "returning %d" ); - - CYG_CHECK_DATA_PTR( seed, "pointer to seed invalid!" ); - -#if defined(CYGIMP_LIBC_RAND_SIMPLEST) - - // This algorithm sucks in the lower bits - - *seed = (*seed * 1103515245) + 12345; // permutate seed - - retval = (int)( *seed & RAND_MAX ); - -#elif defined(CYGIMP_LIBC_RAND_SIMPLE1) - - // The above algorithm sucks in the lower bits, so we shave them off - // and repeat a couple of times to make it up - - unsigned int s=*seed; - unsigned int uret; - - s = (s * 1103515245) + 12345; // permutate seed - // Only use top 11 bits - uret = s & 0xffe00000; - - s = (s * 1103515245) + 12345; // permutate seed - // Only use top 14 bits - uret += (s & 0xfffc0000) >> 11; - - s = (s * 1103515245) + 12345; // permutate seed - // Only use top 7 bits - uret += (s & 0xfe000000) >> (11+14); - - retval = (int)(uret & RAND_MAX); - *seed = s; - -#elif defined(CYGIMP_LIBC_RAND_KNUTH1) - -// This is the code supplied in Knuth Vol 2 section 3.6 p.185 bottom - -#define MM 2147483647 // a Mersenne prime -#define AA 48271 // this does well in the spectral test -#define QQ 44488 // (long)(MM/AA) -#define RR 3399 // MM % AA; it is important that RRnew_data_index(); - - } - rand_data_mutex.unlock(); - } // if - - // we have a valid index now - - self->set_data(rand_data_index, (CYG_ADDRWORD) seed); -#else - cyg_libc_rand_seed = seed; -#endif - - CYG_REPORT_RETURN(); - -} // _srand() - -// EOF rand.cxx diff --git a/packages/language/c/libc/current/src/stdlib/strtod.cxx b/packages/language/c/libc/current/src/stdlib/strtod.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/strtod.cxx +++ /dev/null @@ -1,260 +0,0 @@ -//=========================================================================== -// -// strtod.cxx -// -// ANSI String to double-precision floating point conversion -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? And strtod()? -#if defined(CYGPKG_LIBC) && defined(CYGFUN_LIBC_strtod) - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support -#include // Assertion support -#include // NULL, wchar_t and size_t from compiler -#include // Main header for stdlib functions -#include // isspace() and isdigit() -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions -#include // DBL_MIN_10_EXP and DBL_MAX_10_EXP -#include // HUGE_VAL -#include // errno - -// EXPORTED SYMBOLS - -externC double -strtod( const char *, char ** ) CYGPRI_LIBC_WEAK_ALIAS("_strtod"); - -// CONSTANTS - -#define MAXE (DBL_MAX_10_EXP) -#define MINE (DBL_MIN_10_EXP) - -// flags -#define SIGN 0x01 -#define ESIGN 0x02 -#define DECP 0x04 - - -// MACROS - -#define Ise(c) ((c == 'e') || (c == 'E') || (c == 'd') || (c == 'D')) -#define Issign(c) ((c == '-') || (c == '+')) -#define Val(c) ((c - '0')) - - -// FUNCTIONS - -/* - * [atw] multiply 64 bit accumulator by 10 and add digit. - * The KA/CA way to do this should be to use - * a 64-bit integer internally and use "adjust" to - * convert it to float at the end of processing. - */ -static int -ten_mul(double *acc, int digit) -{ - /* [atw] Crude, but effective (at least on a KB)... - */ - *acc *= 10; - *acc += digit; - - return 0; /* no overflow */ -} // ten_mul() - - -/* - * compute 10**x by successive squaring. - */ - -static const double -exp10(unsigned x) -{ - static double powtab[] = {1.0, - 10.0, - 100.0, - 1000.0, - 10000.0}; - - if (x < (sizeof(powtab)/sizeof(double))) - return powtab[x]; - else if (x & 1) - return 10.0 * exp10(x-1); - else - return exp10(x/2) * exp10(x/2); -} // exp10() - - -/* - * return (*acc) scaled by 10**dexp. - */ - -static double -adjust(double *acc, int dexp, int sign) - /* *acc the 64 bit accumulator */ - /* dexp decimal exponent */ - /* sign sign flag */ -{ - double r; - - if (dexp > MAXE) - { - errno = ERANGE; - return (sign) ? -HUGE_VAL : HUGE_VAL; - } - else if (dexp < MINE) - { - errno = ERANGE; - return 0.0; - } - - r = *acc; - if (sign) - r = -r; - if (dexp==0) - return r; - - if (dexp < 0) - return r / exp10(abs(dexp)); - else - return r * exp10(dexp); -} // adjust() - - -externC double -_strtod( const char *nptr, char **endptr ) -{ - const char *start=nptr; - double accum = 0.0; - int flags = 0; - int texp = 0; - int e = 0; - int conv_done = 0; - - double retval; - - CYG_REPORT_FUNCNAMETYPE( "_strtod", "returning %f" ); - - CYG_CHECK_DATA_PTR( nptr, "nptr is an invalid pointer!" ); - - // endptr is allowed to be NULL, but if it isn't, we check it - if (endptr != NULL) - CYG_CHECK_DATA_PTR( endptr, "endptr is an invalid pointer!" ); - - while(isspace(*nptr)) nptr++; - if(*nptr == '\0') - { /* just leading spaces */ - if(endptr != NULL) *endptr = (char *)start; - return 0.0; - } - - - if(Issign(*nptr)) - { - if(*nptr == '-') flags = SIGN; - if(*++nptr == '\0') - { /* "+|-" : should be an error ? */ - if(endptr != NULL) *endptr = (char *)start; - return 0.0; - } - } - - for(; (isdigit(*nptr) || (*nptr == '.')); nptr++) - { - conv_done = 1; - if(*nptr == '.') - flags |= DECP; - else - { - if( ten_mul(&accum, Val(*nptr)) ) texp++; - if(flags & DECP) texp--; - } - } - - if(Ise(*nptr)) - { - conv_done = 1; - if(*++nptr != '\0') /* skip e|E|d|D */ - { /* ! ([nptr]xxx[.[yyy]]e) */ - - while(isspace(*nptr)) nptr++; /* Ansi allows spaces after e */ - if(*nptr != '\0') - { /* ! ([nptr]xxx[.[yyy]]e[space]) */ - - if(Issign(*nptr)) - if(*nptr++ == '-') flags |= ESIGN; - - if(*nptr != '\0') - { /* ! ([nptr]xxx[.[yyy]]e[nptr]) -- error?? */ - - for(; isdigit(*nptr); nptr++) - if (e < MAXE) /* prevent from grossly overflowing */ - e = e*10 + Val(*nptr); - - /* dont care what comes after this */ - if(flags & ESIGN) - texp -= e; - else - texp += e; - } - } - } - } - - if(endptr != NULL) - *endptr = (char *)((conv_done) ? nptr : start); - - retval = adjust(&accum, (int)texp, (int)(flags & SIGN)); - - - CYG_REPORT_RETVAL( retval ); - - return retval; -} // _strtod() - - -#endif // if defined(CYGPKG_LIBC) && defined(CYGFUN_LIBC_strtod) - -// EOF strtod.cxx diff --git a/packages/language/c/libc/current/src/stdlib/strtol.cxx b/packages/language/c/libc/current/src/stdlib/strtol.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/strtol.cxx +++ /dev/null @@ -1,206 +0,0 @@ -//=========================================================================== -// -// strtol.cxx -// -// ANSI standard string to long int conversion function defined in -// section 7.10.1.5 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== -// -// This code is based on original code with the following copyright: -// -/*- - * Copyright (c) 1990 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support -#include // Assertion support -#include // Definition of LONG_MIN and LONG_MAX -#include // Definition of many ctype functions -#include // Error code definitions -#include // Header for all stdlib functions - // (like this one) -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - - -// EXPORTED SYMBOLS - -externC long -strtol( const char *nptr, char **endptr, int base ) \ - CYGPRI_LIBC_WEAK_ALIAS("_strtol"); - -// FUNCTIONS - -// -// Convert a string to a long integer. -// -// Ignores `locale' stuff. Assumes that the upper and lower case -// alphabets and digits are each contiguous. -// - -long -_strtol( const char *nptr, char **endptr, int base ) -{ - const char *s = nptr; - unsigned long acc; - int c; - unsigned long cutoff; - int neg = 0, any, cutlim; - - CYG_REPORT_FUNCNAMETYPE( "_strtol", "returning long %d" ); - CYG_REPORT_FUNCARG3( "nptr=%08x, endptr=%08x, base=%d", - nptr, endptr, base ); - CYG_CHECK_DATA_PTR( nptr, "nptr is not a valid pointer!" ); - - if (endptr != NULL) - CYG_CHECK_DATA_PTR( endptr, "endptr is not a valid pointer!" ); - - // - // Skip white space and pick up leading +/- sign if any. - // If base is 0, allow 0x for hex and 0 for octal, else - // assume decimal; if base is already 16, allow 0x. - // - - do { - c = *s++; - } while (isspace(c)); - if (c == '-') { - neg = 1; - c = *s++; - } else if (c == '+') - c = *s++; - if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X')) { - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = c == '0' ? 8 : 10; - - // - // Compute the cutoff value between legal numbers and illegal - // numbers. That is the largest legal value, divided by the - // base. An input number that is greater than this value, if - // followed by a legal input character, is too big. One that - // is equal to this value may be valid or not; the limit - // between valid and invalid numbers is then based on the last - // digit. For instance, if the range for longs is - // [-2147483648..2147483647] and the input base is 10, - // cutoff will be set to 214748364 and cutlim to either - // 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated - // a value > 214748364, or equal but the next digit is > 7 (or 8), - // the number is too big, and we will return a range error. - // - // Set any if any `digits' consumed; make it negative to indicate - // overflow. - // - - cutoff = neg ? -(unsigned long)LONG_MIN : LONG_MAX; - cutlim = cutoff % (unsigned long)base; - cutoff /= (unsigned long)base; - for (acc = 0, any = 0;; c = *s++) { - if (isdigit(c)) - c -= '0'; - else if (isalpha(c)) - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - else - break; - if (c >= base) - break; - if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim) - any = -1; - else { - any = 1; - acc *= base; - acc += c; - } - } - if (any < 0) { - acc = neg ? LONG_MIN : LONG_MAX; - errno = ERANGE; - } else if (neg) - acc = -acc; - if (endptr != 0) - *endptr = (char *) (any ? s - 1 : nptr); - - CYG_REPORT_RETVAL ( acc ); - - return acc; -} // _strtol() - -#endif // ifdef CYGPKG_LIBC - -// EOF strtol.cxx diff --git a/packages/language/c/libc/current/src/stdlib/strtoul.cxx b/packages/language/c/libc/current/src/stdlib/strtoul.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/strtoul.cxx +++ /dev/null @@ -1,182 +0,0 @@ -//=========================================================================== -// -// strtoul.cxx -// -// ANSI standard string to long int conversion function defined in -// section 7.10.1.6 of the standard -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== -// -// This code is based on original code with the following copyright: -// -/* - * Copyright (c) 1990 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions and support -#include // Tracing support -#include // Assertion support -#include // Definition of ULONG_MAX -#include // Definition of many ctype functions -#include // Error code definitions -#include // Header for all stdlib functions - // (like this one) -#include "clibincl/stdlibsupp.hxx" // Support for stdlib functions - - -// EXPORTED SYMBOLS - -externC unsigned long -strtoul( const char *nptr, char **endptr, int base ) \ - CYGPRI_LIBC_WEAK_ALIAS("_strtoul"); - -// FUNCTIONS - -// -// Convert a string to an unsigned long integer. -// -// Ignores `locale' stuff. Assumes that the upper and lower case -// alphabets and digits are each contiguous. -// - -unsigned long -_strtoul( const char *nptr, char **endptr, int base ) -{ - const char *s = nptr; - unsigned long acc; - int c; - unsigned long cutoff; - int neg = 0, any, cutlim; - - CYG_REPORT_FUNCNAMETYPE( "_strtoul", "returning long %d" ); - CYG_REPORT_FUNCARG3( "nptr=%08x, endptr=%08x, base=%d", - nptr, endptr, base ); - CYG_CHECK_DATA_PTR( nptr, "nptr is not a valid pointer!" ); - - if (endptr != NULL) - CYG_CHECK_DATA_PTR( endptr, "endptr is not a valid pointer!" ); - // - // See strtol for comments as to the logic used. - // - do { - c = *s++; - } while (isspace(c)); - if (c == '-') { - neg = 1; - c = *s++; - } else if (c == '+') - c = *s++; - if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X')) { - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = c == '0' ? 8 : 10; - cutoff = (unsigned long)ULONG_MAX / (unsigned long)base; - cutlim = (unsigned long)ULONG_MAX % (unsigned long)base; - for (acc = 0, any = 0;; c = *s++) { - if (isdigit(c)) - c -= '0'; - else if (isalpha(c)) - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - else - break; - if (c >= base) - break; - if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim) - any = -1; - else { - any = 1; - acc *= base; - acc += c; - } - } - if (any < 0) { - acc = ULONG_MAX; - errno = ERANGE; - } else if (neg) - acc = -acc; - if (endptr != 0) - *endptr = (char *) (any ? s - 1 : nptr); - - CYG_REPORT_RETVAL( acc ); - - return acc; -} // _strtoul() - -#endif // ifdef CYGPKG_LIBC - -// EOF strtoul.cxx diff --git a/packages/language/c/libc/current/src/stdlib/system.cxx b/packages/language/c/libc/current/src/stdlib/system.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/stdlib/system.cxx +++ /dev/null @@ -1,62 +0,0 @@ -//======================================================================== -// -// system.cxx -// -// Implementation of ISO C system() function from section 7.10.4.5 -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-04 -// Purpose: This file implements the ISO C system() function -// Description: This file provides a trivial implementation of the -// system() function from ISO C section 7.10.4.5. It -// simply exists to show that a command processor is -// not available -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// INCLUDES - -#include // Header for this file - -// FUNCTIONS - -extern "C" int -__system( const char * ) -{ - return 0; -} // system() - -extern "C" int system( const char * ) CYGBLD_ATTRIB_WEAK_ALIAS(__system); - -// EOF system.cxx diff --git a/packages/language/c/libc/current/src/string/memchr.cxx b/packages/language/c/libc/current/src/string/memchr.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/memchr.cxx +++ /dev/null @@ -1,174 +0,0 @@ -//=========================================================================== -// -// memchr.cxx -// -// ANSI standard memchr() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC void * -memchr( const void *s, int c, size_t n ) CYGPRI_LIBC_WEAK_ALIAS("_memchr"); - -// FUNCTIONS - -void * -_memchr( const void *s, int c, size_t n ) -{ - CYG_REPORT_FUNCNAMETYPE( "_memchr", "returning addr %08x" ); - CYG_REPORT_FUNCARG3( "s=%08x, c=%d, n=%d", s, c, n ); - - CYG_CHECK_DATA_PTR( s, "s is not a valid pointer!" ); - -#if defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || defined(__OPTIMIZE_SIZE__) - const unsigned char *src = (const unsigned char *) s; - - c &= 0xff; - - while (n--) - { - if (*src == c) - { - CYG_REPORT_RETVAL( src ); - return (void *) src; - } // if - src++; - } - CYG_REPORT_RETVAL( NULL ); - return NULL; -#else - const unsigned char *src = (const unsigned char *) s; - CYG_WORD *aligned_src; - CYG_WORD buffer; - CYG_WORD mask; - cyg_ucount8 i; - - c &= 0xff; - - // If the size is small, or src is unaligned, then - // use the bytewise loop. We can hope this is rare. - if (CYG_LIBC_STR_OPT_TOO_SMALL (n) || CYG_LIBC_STR_UNALIGNED (src)) - { - while (n--) - { - if (*src == c) - { - CYG_REPORT_RETVAL( src ); - return (void *) src; - } // if - src++; - } - CYG_REPORT_RETVAL( NULL ); - return NULL; - } - - // The fast code reads the ASCII one word at a time and only - // performs the bytewise search on word-sized segments if they - // contain the search character, which is detected by XORing - // the word-sized segment with a word-sized block of the search - // character and then detecting for the presence of NULL in the - // result. - - aligned_src = (CYG_WORD *) src; - mask = 0; - for (i = 0; i < CYG_LIBC_STR_OPT_LITTLEBLOCKSIZE; i++) - mask = (mask << 8) + c; - - while (n > CYG_LIBC_STR_OPT_LITTLEBLOCKSIZE) - { - buffer = *aligned_src; - buffer ^= mask; - if (CYG_LIBC_STR_DETECTNULL (buffer)) - { - src = (unsigned char*) aligned_src; - for ( i = 0; i < CYG_LIBC_STR_OPT_LITTLEBLOCKSIZE; i++ ) - { - if (*src == c) - { - CYG_REPORT_RETVAL( src ); - return (void *) src; - } // if - src++; - } - } - n -= CYG_LIBC_STR_OPT_LITTLEBLOCKSIZE; - aligned_src++; - } - - // If there are fewer than CYG_LIBC_STR_OPT_LITTLEBLOCKSIZE characters - // left, then we resort to the bytewise loop. - - src = (const unsigned char *) aligned_src; - while (n--) - { - if (*src == c) - { - CYG_REPORT_RETVAL( src ); - return (void *) src; - } // if - src++; - } - - CYG_REPORT_RETVAL( NULL ); - return NULL; -#endif // not defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || - // defined(__OPTIMIZE_SIZE__) -} // _memchr() - -#endif // ifdef CYGPKG_LIBC - -// EOF memchr.cxx diff --git a/packages/language/c/libc/current/src/string/memcmp.cxx b/packages/language/c/libc/current/src/string/memcmp.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/memcmp.cxx +++ /dev/null @@ -1,181 +0,0 @@ -//=========================================================================== -// -// memcmp.cxx -// -// ANSI standard memcmp() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - - -// EXPORTED SYMBOLS - -externC int -memcmp( const void *s1, const void *s2, size_t n ) \ - CYGPRI_LIBC_WEAK_ALIAS("_memcmp"); - -// FUNCTIONS - -int -_memcmp( const void *s1, const void *s2, size_t n ) -{ - int retval; - - CYG_REPORT_FUNCNAMETYPE( "_memcmp", "returning %d" ); - CYG_REPORT_FUNCARG3( "s1=%08x, s2=%08x, n=%d", s1, s2, n ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - -#if defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || defined(__OPTIMIZE_SIZE__) - const unsigned char *m1 = (const unsigned char *) s1; - const unsigned char *m2 = (const unsigned char *) s2; - - while (n--) - { - if (*m1 != *m2) - { - retval = *m1 - *m2; - CYG_REPORT_RETVAL( retval ); - return retval; - } - m1++; - m2++; - } - CYG_REPORT_RETVAL( 0 ); - return 0; -#else - const unsigned char *m1 = (const unsigned char *) s1; - const unsigned char *m2 = (const unsigned char *) s2; - const CYG_WORD *aligned_m1; - const CYG_WORD *aligned_m2; - - // If the size is too small, or either pointer is unaligned, - // then we punt to the byte compare loop. Hopefully this will - // not turn up in inner loops. - if (CYG_LIBC_STR_OPT_TOO_SMALL(n) || CYG_LIBC_STR_UNALIGNED2(m1,m2)) - { - while (n--) - { - if (*m1 != *m2) - { - retval = *m1 - *m2; - CYG_REPORT_RETVAL( retval ); - return retval; - } - m1++; - m2++; - } - CYG_REPORT_RETVAL( 0 ); - return 0; - } - - // Otherwise, load and compare the blocks of memory one - // word at a time. - aligned_m1 = (const CYG_WORD *) m1; - aligned_m2 = (const CYG_WORD *) m2; - while (n > CYG_LIBC_STR_OPT_LITTLEBLOCKSIZE) - { - if (*aligned_m1 != *aligned_m2) - { - // This block of characters has a mismatch, somewhere. - // xoring them together and then testing for null would - // be fastest, but this is clearer code. - m1 = (const unsigned char *)aligned_m1; - m2 = (const unsigned char *)aligned_m2; - while (n--) - { - if (*m1 != *m2) - { - retval = *m1 - *m2; - CYG_REPORT_RETVAL( retval ); - return retval; - } - m1++; - m2++; - } - // NOT REACHED - } - aligned_m1++; - aligned_m2++; - n -= CYG_LIBC_STR_OPT_LITTLEBLOCKSIZE; - } - - // checking the last few characters - - m1 = (const unsigned char *)aligned_m1; - m2 = (const unsigned char *)aligned_m2; - - while (n--) - { - if (*m1 != *m2) - { - retval = *m1 - *m2; - CYG_REPORT_RETVAL( retval ); - return retval; - } - m1++; - m2++; - } - - CYG_REPORT_RETVAL( 0 ); - return 0; -#endif // not defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || - // defined(__OPTIMIZE_SIZE__) -} // _memcmp() - -#endif // CYGPKG_LIBC - -// EOF memcmp.cxx diff --git a/packages/language/c/libc/current/src/string/memmove.cxx b/packages/language/c/libc/current/src/string/memmove.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/memmove.cxx +++ /dev/null @@ -1,107 +0,0 @@ -//=========================================================================== -// -// memmove.cxx -// -// ANSI standard memmove() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC void * -memmove( void *s1, const void *s2, size_t n ) \ - CYGPRI_LIBC_WEAK_ALIAS("_memmove"); - -// FUNCTIONS - -void * -_memmove( void *s1, const void *s2, size_t n ) -{ - char *dst = (char *)s1; - const char *src = (const char *)s2; - - CYG_REPORT_FUNCNAMETYPE( "_memmove", "returning %08x" ); - CYG_REPORT_FUNCARG3( "s1=%08x, s2=%08x, n=%d", s1, s2, n ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - - if ((src < dst) && (dst < (src + n))) - { - // Have to copy backwards - src += n; - dst += n; - while (n--) - { - *--dst = *--src; - } - } - else - { - while (n--) - { - *dst++ = *src++; - } - } - - CYG_REPORT_RETVAL( s1 ); - - return s1; -} // _memmove() - -#endif // ifdef CYGPKG_LIBC - -// EOF memmove.cxx diff --git a/packages/language/c/libc/current/src/string/strcat.cxx b/packages/language/c/libc/current/src/string/strcat.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strcat.cxx +++ /dev/null @@ -1,125 +0,0 @@ -//=========================================================================== -// -// strcat.cxx -// -// ANSI standard strcat() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC char * -strcat( char *s1, const char *s2 ) CYGPRI_LIBC_WEAK_ALIAS("_strcat"); - -// FUNCTIONS - -char * -_strcat( char *s1, const char *s2 ) -{ - CYG_REPORT_FUNCNAMETYPE( "_strcat", "returning %08x" ); - CYG_REPORT_FUNCARG2( "s1=%08x, s2=%08x", s1, s2 ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - -#if defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || defined(__OPTIMIZE_SIZE__) - char *s = s1; - - while (*s1) - s1++; - - while ((*s1++ = *s2++)) - ; - - CYG_REPORT_RETVAL( s ); - - return s; -#else - char *s = s1; - - - // Skip over the data in s1 as quickly as possible. - if (!CYG_LIBC_STR_UNALIGNED (s1)) - { - CYG_WORD *aligned_s1 = (CYG_WORD *)s1; - while (!CYG_LIBC_STR_DETECTNULL (*aligned_s1)) - aligned_s1++; - - s1 = (char *)aligned_s1; - } - - while (*s1) - s1++; - - // s1 now points to the its trailing null character, we can - // just use strcpy to do the work for us now. - // - // ?!? We might want to just include strcpy here. - // Also, this will cause many more unaligned string copies because - // s1 is much less likely to be aligned. I don't know if its worth - // tweaking strcpy to handle this better. - strcpy (s1, s2); - - CYG_REPORT_RETVAL( s ); - - return s; -#endif // not defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || - // defined(__OPTIMIZE_SIZE__) -} // _strcat() - -#endif // ifdef CYGPKG_LIBC - -// EOF strcat.cxx diff --git a/packages/language/c/libc/current/src/string/strchr.cxx b/packages/language/c/libc/current/src/string/strchr.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strchr.cxx +++ /dev/null @@ -1,144 +0,0 @@ -//=========================================================================== -// -// strchr.cxx -// -// ANSI standard strchr() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC char * -strchr( const char *s, int c ) CYGPRI_LIBC_WEAK_ALIAS("_strchr"); - -// MACROS - -// DETECTCHAR returns nonzero if X contains the byte used -// to fill MASK. -#define DETECTCHAR(X,MASK) (CYG_LIBC_STR_DETECTNULL( (X) ^ (MASK) )) - -// FUNCTIONS - -char * -_strchr( const char *s, int c ) -{ - CYG_REPORT_FUNCNAMETYPE( "_strchr", "returning %08x" ); - CYG_REPORT_FUNCARG2( "s=%08x, c=%d", s, c ); - - CYG_CHECK_DATA_PTR( s, "s is not a valid pointer!" ); - -#if defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || defined(__OPTIMIZE_SIZE__) - char charc = c; - - while (*s && *s != charc) - { - s++; - } - - if (*s != charc) - { - s = NULL; - } - - CYG_REPORT_RETVAL( s ); - - return (char *) s; -#else - char charc = c; - CYG_WORD mask; - CYG_WORD j; - CYG_WORD *aligned_addr; - - if (CYG_LIBC_STR_UNALIGNED (s)) - { - while (*s && *s != charc) - s++; - if (*s != charc) - s = NULL; - - CYG_REPORT_RETVAL( s ); - - return (char *) s; - } - - for (j = 0, mask = 0; j < sizeof(mask); j++) - mask = (mask << 8) + charc; - - aligned_addr = (CYG_WORD *)s; - while (!CYG_LIBC_STR_DETECTNULL (*aligned_addr) && - !DETECTCHAR (*aligned_addr, mask)) - aligned_addr++; - - // The block of bytes currently pointed to by aligned_addr - // contains either a null or the target char, or both. We - // catch it using the bytewise search. - - s = (char *)aligned_addr; - while (*s && *s != charc) - s++; - if (*s != charc) - s = NULL; - - CYG_REPORT_RETVAL( s ); - - return (char *)s; -#endif // not defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || - // defined(__OPTIMIZE_SIZE__) -} // _strchr() - -#endif // ifdef CYGPKG_LIBC - -// EOF strchr.cxx diff --git a/packages/language/c/libc/current/src/string/strcmp.cxx b/packages/language/c/libc/current/src/string/strcmp.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strcmp.cxx +++ /dev/null @@ -1,153 +0,0 @@ -//=========================================================================== -// -// strcmp.cxx -// -// ANSI standard strcmp() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC int -strcmp( const char *s1, const char *s2 ) CYGPRI_LIBC_WEAK_ALIAS("_strcmp"); - -// FUNCTIONS - -int -_strcmp( const char *s1, const char *s2 ) -{ - CYG_REPORT_FUNCNAMETYPE( "_strcmp", "returning %d" ); - CYG_REPORT_FUNCARG2( "s1=%08x, s2=%08x", s1, s2 ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - - int retval; - - CYG_UNUSED_PARAM( int, retval ); // in case tracing is off - -#if defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || defined(__OPTIMIZE_SIZE__) - while (*s1 != '\0' && *s1 == *s2) - { - s1++; - s2++; - } - - retval = (*(unsigned char *) s1) - (*(unsigned char *) s2); - - CYG_REPORT_RETVAL( retval ); - - return retval; -#else - const CYG_WORD *aligned_s1; - const CYG_WORD *aligned_s2; - - // If s1 or s2 are unaligned, then compare bytes. - if (CYG_LIBC_STR_UNALIGNED2 (s1, s2)) - { - while (*s1 != '\0' && *s1 == *s2) - { - s1++; - s2++; - } - retval = (*(unsigned char *) s1) - (*(unsigned char *) s2); - - CYG_REPORT_RETVAL( retval ); - - return retval; - } - - // If s1 and s2 are word-aligned, compare them a word at a time. - aligned_s1 = (const CYG_WORD *)s1; - aligned_s2 = (const CYG_WORD *)s2; - while (*aligned_s1 == *aligned_s2) - { - // To get here, *aligned_s1 == *aligned_s2, thus if we find a - // null in *aligned_s1, then the strings must be equal, so return - // zero. - if (CYG_LIBC_STR_DETECTNULL (*aligned_s1)) - { - CYG_REPORT_RETVAL( 0 ); - return 0; - } // if - - aligned_s1++; - aligned_s2++; - } - - // A difference was detected in last few bytes of s1, so search bytewise - s1 = (const char *)aligned_s1; - s2 = (const char *)aligned_s2; - - while (*s1 != '\0' && *s1 == *s2) - { - s1++; - s2++; - } - - retval = (*(unsigned char *) s1) - (*(unsigned char *) s2); - - CYG_REPORT_RETVAL( retval ); - - return retval; - -#endif // not defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || - // defined(__OPTIMIZE_SIZE__) -} // _strcmp() - -#endif // ifdef CYGPKG_LIBC - -// EOF strcmp.cxx diff --git a/packages/language/c/libc/current/src/string/strcoll.cxx b/packages/language/c/libc/current/src/string/strcoll.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strcoll.cxx +++ /dev/null @@ -1,93 +0,0 @@ -//=========================================================================== -// -// strcoll.cxx -// -// Real function definition for ANSI string strcoll() function - not -// that there is an inline alternative -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -// We don't want the inline versions of string functions defined here - -#ifdef CYGIMP_LIBC_STRING_INLINES -#undef CYGIMP_LIBC_STRING_INLINES -#endif - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC int -strcoll( const char *s1, const char *s2 ) CYGPRI_LIBC_WEAK_ALIAS("_strcoll"); - - -int -_strcoll( const char *s1, const char *s2 ) -{ - int retval; - - CYG_REPORT_FUNCNAMETYPE( "_strcoll", "returning %d" ); - CYG_REPORT_FUNCARG2( "s1=%08x, s2=%d", s1, s2 ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - - retval = _strcmp(s1, s2); - - return retval; -} // _strcoll() - - -#endif // ifdef CYGPKG_LIBC - -// EOF strcoll.cxx diff --git a/packages/language/c/libc/current/src/string/strcpy.cxx b/packages/language/c/libc/current/src/string/strcpy.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strcpy.cxx +++ /dev/null @@ -1,129 +0,0 @@ -//=========================================================================== -// -// strcpy.cxx -// -// ANSI standard strcpy() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC char * -strcpy( char *s1, const char *s2 ) CYGPRI_LIBC_WEAK_ALIAS("_strcpy"); - -// FUNCTIONS - -char * -_strcpy( char *s1, const char *s2 ) -{ - CYG_REPORT_FUNCNAMETYPE( "_strcpy", "returning addr %08x" ); - CYG_REPORT_FUNCARG2( "s1=%08x, s2=%08x", s1, s2 ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - -#if defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || defined(__OPTIMIZE_SIZE__) - char *s = s1; - - while ((*s1++ = *s2++) != '\0') - ; - - CYG_REPORT_RETVAL( s ); - - return s; -#else - char *dst = s1; - const char *src = s2; - CYG_WORD *aligned_dst; - const CYG_WORD *aligned_src; - - // If SRC or DEST is unaligned, then copy bytes. - if (CYG_LIBC_STR_UNALIGNED2 (src, dst)) - { - while ((*dst++ = *src++) != '\0') - ; - - CYG_REPORT_RETVAL( s1 ); - - return s1; - } - - aligned_dst = (CYG_WORD *)dst; - aligned_src = (const CYG_WORD *)src; - - // SRC and DEST are both "CYG_WORD" aligned, try to do "CYG_WORD" - // sized copies. - while (!CYG_LIBC_STR_DETECTNULL(*aligned_src)) - { - *aligned_dst++ = *aligned_src++; - } - - dst = (char*)aligned_dst; - src = (char*)aligned_src; - - while ((*dst++ = *src++) != '\0') - ; - - CYG_REPORT_RETVAL( s1 ); - - return s1; -#endif // not defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || - // defined(__OPTIMIZE_SIZE__) -} // _strcpy() - -#endif // ifdef CYGPKG_LIBC - -// EOF strcpy.cxx diff --git a/packages/language/c/libc/current/src/string/strcspn.cxx b/packages/language/c/libc/current/src/string/strcspn.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strcspn.cxx +++ /dev/null @@ -1,103 +0,0 @@ -//=========================================================================== -// -// strcspn.cxx -// -// ANSI standard strcspn() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC size_t -strcspn( const char *s1, const char *s2 ) CYGPRI_LIBC_WEAK_ALIAS("_strcspn"); - -// FUNCTIONS - -size_t -_strcspn( const char *s1, const char *s2 ) -{ - const char *s = s1; - const char *c; - size_t retval; - - CYG_REPORT_FUNCNAMETYPE( "_strcspn", "returning size %d" ); - CYG_REPORT_FUNCARG2( "s1=%08x, s2=%08x", s1, s2 ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - - while (*s1) - { - for (c = s2; *c; c++) - { - if (*s1 == *c) - break; - } - if (*c) - break; - s1++; - } - - retval = s1 - s; - - CYG_REPORT_RETVAL( retval ); - - return retval; -} // _strcspn() - -#endif // ifdef CYGPKG_LIBC - -// EOF strcspn.cxx diff --git a/packages/language/c/libc/current/src/string/strlen.cxx b/packages/language/c/libc/current/src/string/strlen.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strlen.cxx +++ /dev/null @@ -1,130 +0,0 @@ -//=========================================================================== -// -// strlen.cxx -// -// ANSI standard strlen() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC size_t -strlen( const char *s ) CYGPRI_LIBC_WEAK_ALIAS("_strlen"); - -// FUNCTIONS - -size_t -_strlen( const char *s ) -{ - int retval; - - CYG_REPORT_FUNCNAMETYPE( "_strlen", "returning length %d" ); - CYG_REPORT_FUNCARG1( "s=%08x", s ); - - CYG_CHECK_DATA_PTR( s, "s is not a valid pointer!" ); - -#if defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || defined(__OPTIMIZE_SIZE__) - const char *start = s; - - while (*s) - s++; - - retval = s - start; - - CYG_REPORT_RETVAL( retval ); - - return retval; - -#else - - const char *start = s; - CYG_WORD *aligned_addr; - - if (CYG_LIBC_STR_UNALIGNED (s)) - { - while (*s) - s++; - retval = s - start; - - CYG_REPORT_RETVAL( retval ); - - return retval; - } - - // If the string is word-aligned, we can check for the presence of - // a null in each word-sized block. - - aligned_addr = (CYG_WORD *)s; - while (!CYG_LIBC_STR_DETECTNULL (*aligned_addr)) - aligned_addr++; - - // Once a null is detected, we check each byte in that block for a - // precise position of the null. - s = (char*)aligned_addr; - while (*s) - s++; - retval = s - start; - - CYG_REPORT_RETVAL( retval ); - - return retval; -#endif // not defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || - // defined(__OPTIMIZE_SIZE__) -} // _strlen() - -#endif // ifdef CYGPKG_LIBC - -// EOF strlen.cxx diff --git a/packages/language/c/libc/current/src/string/strncat.cxx b/packages/language/c/libc/current/src/string/strncat.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strncat.cxx +++ /dev/null @@ -1,131 +0,0 @@ -//=========================================================================== -// -// strncat.cxx -// -// ANSI standard strncat() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC char * -strncat( char *s1, const char *s2, size_t n ) \ - CYGPRI_LIBC_WEAK_ALIAS("_strncat"); - -// FUNCTIONS - -char * -_strncat( char *s1, const char *s2, size_t n) -{ - CYG_REPORT_FUNCNAMETYPE( "_strncat", "returning %08x" ); - CYG_REPORT_FUNCARG3( "s1=%08x, s2=%08x, n=%d", s1, s2, n ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - -#if defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || defined(__OPTIMIZE_SIZE__) - char *s = s1; - - while (*s1) - s1++; - while (n-- != 0 && (*s1++ = *s2++)) - { - if (n == 0) - *s1 = '\0'; - } - - CYG_REPORT_RETVAL( s ); - - return s; -#else - char *s = s1; - - // Skip over the data in s1 as quickly as possible. - if (!CYG_LIBC_STR_UNALIGNED (s1)) - { - CYG_WORD *aligned_s1 = (CYG_WORD *)s1; - while (!CYG_LIBC_STR_DETECTNULL (*aligned_s1)) - aligned_s1++; - - s1 = (char *)aligned_s1; - } - - while (*s1) - s1++; - - // s1 now points to the its trailing null character, now copy - // up to N bytes from S2 into S1 stopping if a NULL is encountered - // in S2. - // - // It is not safe to use strncpy here since it copies EXACTLY N - // characters, NULL padding if necessary. - - while (n-- != 0 && (*s1++ = *s2++)) - { - if (n == 0) - *s1 = '\0'; - } - - CYG_REPORT_RETVAL( s ); - - return s; -#endif // not defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || - // defined(__OPTIMIZE_SIZE__) -} // _strncat() - -#endif // ifdef CYGPKG_LIBC - -// EOF strncat.cxx diff --git a/packages/language/c/libc/current/src/string/strncmp.cxx b/packages/language/c/libc/current/src/string/strncmp.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strncmp.cxx +++ /dev/null @@ -1,175 +0,0 @@ -//=========================================================================== -// -// strncmp.cxx -// -// ANSI standard strncmp() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC int -strncmp( const char *s1, const char *s2, size_t n ) \ - CYGPRI_LIBC_WEAK_ALIAS("_strncmp"); - -// FUNCTIONS - -int -_strncmp( const char *s1, const char *s2, size_t n ) -{ - int retval; - - CYG_REPORT_FUNCNAMETYPE( "_strncmp", "returning %d" ); - CYG_REPORT_FUNCARG3( "s1=%08x, s2=%08x, n=%d", s1, s2, n ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - -#if defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || defined(__OPTIMIZE_SIZE__) - if (n == 0) - return 0; - - while (n-- != 0 && *s1 == *s2) - { - if (n == 0 || *s1 == '\0' || *s2 == '\0') - break; - s1++; - s2++; - } - - retval = (*(unsigned char *) s1) - (*(unsigned char *) s2); - - CYG_REPORT_RETVAL( retval ); - - return retval; -#else - const CYG_WORD *aligned_s1; - const CYG_WORD *aligned_s2; - - if (n == 0) - { - CYG_REPORT_RETVAL( 0 ); - return 0; - } // if - - // If s1 or s2 are unaligned, then compare bytes. - if (CYG_LIBC_STR_UNALIGNED2 (s1, s2)) - { - while (n-- != 0 && *s1 == *s2) - { - // If we've run out of bytes or hit a null, return zero - // since we already know *s1 == *s2. - if (n == 0 || *s1 == '\0') - return 0; - s1++; - s2++; - } - retval = (*(unsigned char *) s1) - (*(unsigned char *) s2); - - CYG_REPORT_RETVAL( retval ); - - return retval; - } //if - - // If s1 and s2 are word-aligned, compare them a word at a time. - aligned_s1 = (const CYG_WORD *)s1; - aligned_s2 = (const CYG_WORD *)s2; - while (n >= sizeof(CYG_WORD) && *aligned_s1 == *aligned_s2) - { - n -= sizeof (CYG_WORD); - - // If we've run out of bytes or hit a null, return zero - // since we already know *aligned_s1 == *aligned_s2. - if (n == 0 || CYG_LIBC_STR_DETECTNULL (*aligned_s1)) - { - CYG_REPORT_RETVAL( 0 ); - return 0; - } // if - - aligned_s1++; - aligned_s2++; - } // while - - // A difference was detected in last few bytes of s1, so search bytewise - s1 = (const char *)aligned_s1; - s2 = (const char *)aligned_s2; - - while (n-- > 0 && *s1 == *s2) - { - // If we've run out of bytes or hit a null, return zero - // since we already know *s1 == *s2. - if (n == 0 || *s1 == '\0') - { - CYG_REPORT_RETVAL( 0 ); - return 0; - } // if - s1++; - s2++; - } // while - - retval = (*(unsigned char *) s1) - (*(unsigned char *) s2); - - CYG_REPORT_RETVAL( retval ); - - return retval; - -#endif // not defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || - // defined(__OPTIMIZE_SIZE__) -} // _strncmp() - -#endif // ifdef CYGPKG_LIBC - -// EOF strncmp.cxx diff --git a/packages/language/c/libc/current/src/string/strncpy.cxx b/packages/language/c/libc/current/src/string/strncpy.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strncpy.cxx +++ /dev/null @@ -1,137 +0,0 @@ -//=========================================================================== -// -// strncpy.cxx -// -// ISO C standard strncpy() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-18 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC char * -strncpy( char *s1, const char *s2, size_t n ) \ - CYGBLD_ATTRIB_WEAK_ALIAS(_strncpy); - -// FUNCTIONS - -char * -_strncpy( char *s1, const char *s2, size_t n) -{ - CYG_REPORT_FUNCNAMETYPE( "_strncpy", "returning %08x" ); - CYG_REPORT_FUNCARG3( "s1=%08x, s2=%08x, n=%d", s1, s2, n ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - -#if defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || defined(__OPTIMIZE_SIZE__) - char *dscan; - const char *sscan; - - dscan = s1; - sscan = s2; - while (n > 0) - { - --n; - if ((*dscan++ = *sscan++) == '\0') - break; - } - while (n-- > 0) - *dscan++ = '\0'; - - CYG_REPORT_RETVAL( s1 ); - - return s1; -#else - char *dst = s1; - const char *src = s2; - CYG_WORD *aligned_dst; - const CYG_WORD *aligned_src; - - // If SRC and DEST is aligned and count large enough, then copy words. - if (!CYG_LIBC_STR_UNALIGNED2 (src, dst) && - !CYG_LIBC_STR_OPT_TOO_SMALL (n)) { - - aligned_dst = (CYG_WORD *)dst; - aligned_src = (CYG_WORD *)src; - - // SRC and DEST are both "CYG_WORD" aligned, try to do "CYG_WORD" - // sized copies. - while (n >= sizeof (CYG_WORD) && - !CYG_LIBC_STR_DETECTNULL(*aligned_src)) { - - n -= sizeof (CYG_WORD); - *aligned_dst++ = *aligned_src++; - } - - dst = (char *)aligned_dst; - src = (const char *)aligned_src; - } // if - - while (n > 0) - { - --n; - if ((*dst++ = *src++) == '\0') - break; - } - - while (n-- > 0) - *dst++ = '\0'; - - CYG_REPORT_RETVAL( s1 ); - - return s1; -#endif // not defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || - // defined(__OPTIMIZE_SIZE__) -} // _strncpy() - -// EOF strncpy.cxx diff --git a/packages/language/c/libc/current/src/string/strpbrk.cxx b/packages/language/c/libc/current/src/string/strpbrk.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strpbrk.cxx +++ /dev/null @@ -1,109 +0,0 @@ -//=========================================================================== -// -// strpbrk.cxx -// -// ANSI standard strpbrk() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC char * -strpbrk( const char *s1, const char *s2 ) CYGPRI_LIBC_WEAK_ALIAS("_strpbrk"); - -// FUNCTIONS - -char * -_strpbrk( const char *s1, const char *s2 ) -{ - const char *c; - - CYG_REPORT_FUNCNAMETYPE( "_strpbrk", "returning %08x" ); - CYG_REPORT_FUNCARG2( "s1=%08x, s2=%08x", s1, s2 ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - - if (!*s1) - { - CYG_REPORT_RETVAL( NULL ); - return (char *) NULL; - } // if - - do - { - for (c = s2; *c; c++) - { - if (*s1 == *c) - break; - } - if (*c) - break; - s1++; - } - while (*s1); - - if (*c == '\0') - s1 = NULL; - - CYG_REPORT_RETVAL( s1 ); - - return (char *) s1; -} // _strpbrk() - -#endif // ifdef CYGPKG_LIBC - -// EOF strpbrk.cxx diff --git a/packages/language/c/libc/current/src/string/strrchr.cxx b/packages/language/c/libc/current/src/string/strrchr.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strrchr.cxx +++ /dev/null @@ -1,101 +0,0 @@ -//=========================================================================== -// -// strrchr.cxx -// -// ANSI standard strrchr() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC char * -strrchr( const char *s, int c ) CYGPRI_LIBC_WEAK_ALIAS("_strrchr"); - -// FUNCTIONS - -char * -_strrchr( const char *s, int c ) -{ - const char *last = NULL; - const char charc = c; - - CYG_REPORT_FUNCNAMETYPE( "_strrchr", "returning %08x" ); - CYG_REPORT_FUNCARG2( "s=%08x, c=%d", s, c ); - - CYG_CHECK_DATA_PTR( s, "s is not a valid pointer!" ); - - while (*s) - { - if (*s == charc) - { - last = s; - } - s++; - } - - if (*s == charc) - { - last = s; - } - - CYG_REPORT_RETVAL( last ); - - return (char *) last; -} // _strrchr() - -#endif // ifdef CYGPKG_LIBC - -// EOF strrchr.cxx diff --git a/packages/language/c/libc/current/src/string/strspn.cxx b/packages/language/c/libc/current/src/string/strspn.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strspn.cxx +++ /dev/null @@ -1,103 +0,0 @@ -//=========================================================================== -// -// strspn.cxx -// -// ANSI standard strspn() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC size_t -strspn( const char *s1, const char *s2 ) CYGPRI_LIBC_WEAK_ALIAS("_strspn"); - -// FUNCTIONS - -size_t -_strspn( const char *s1, const char *s2 ) -{ - const char *s = s1; - const char *c; - size_t retval; - - CYG_REPORT_FUNCNAMETYPE( "_strspn", "returning size %d" ); - CYG_REPORT_FUNCARG2( "s1=%08x, s2=%08x", s1, s2 ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - - while (*s1) - { - for (c = s2; *c; c++) - { - if (*s1 == *c) - break; - } - if (*c == '\0') - break; - s1++; - } - - retval = s1 - s; - - CYG_REPORT_RETVAL( retval ); - - return retval; -} // _strspn() - -#endif // ifdef CYGPKG_LIBC - -// EOF strspn.cxx diff --git a/packages/language/c/libc/current/src/string/strstr.cxx b/packages/language/c/libc/current/src/string/strstr.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strstr.cxx +++ /dev/null @@ -1,119 +0,0 @@ -//=========================================================================== -// -// strstr.cxx -// -// ANSI standard strstr() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC char * -strstr( const char *s1, const char *s2 ) CYGPRI_LIBC_WEAK_ALIAS("_strstr"); - -// FUNCTIONS - -char * -_strstr( const char *s1, const char *s2 ) -{ - CYG_REPORT_FUNCNAMETYPE( "_strstr", "returning %08x" ); - CYG_REPORT_FUNCARG2( "s1=%08x, s2=%08x", s1, s2 ); - - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - - if (*s1 == '\0') - { - if (*s2) - { - CYG_REPORT_RETVAL( NULL ); - return (char *) NULL; - } // if - else - { - CYG_REPORT_RETVAL( s1 ); - return (char *) s1; - } // else - } // if - - while (*s1) - { - cyg_ucount32 i; - - for (i=0 ; ; i++) - { - if (s2[i] == '\0') - { - CYG_REPORT_RETVAL( s1 ); - return (char *) s1; - } // if - - if (s2[i] != s1[i]) - { - break; - } // if - } // for - s1++; - } // while - - CYG_REPORT_RETVAL( NULL ); - - return (char *) NULL; -} // _strstr() - -#endif // ifdef CYGPKG_LIBC - -// EOF strstr.cxx diff --git a/packages/language/c/libc/current/src/string/strsuppt.cxx b/packages/language/c/libc/current/src/string/strsuppt.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strsuppt.cxx +++ /dev/null @@ -1,66 +0,0 @@ -//=========================================================================== -// -// strsuppt.cxx -// -// Support for the ANSI standard string functions -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include "clibincl/stringsupp.hxx" // Header for this file - -// CONSTANTS - -// Masks for CYG_LIBC_DETECTNULL macro so they are only defined once in -// the library -const cyg_uint64 Cyg_libc_str_null_mask_1 = 0x0101010101010101LL; -const cyg_uint64 Cyg_libc_str_null_mask_2 = 0x8080808080808080LL; - -#endif // ifdef CYGPKG_LIBC - -// EOF strsuppt.cxx diff --git a/packages/language/c/libc/current/src/string/strtok.cxx b/packages/language/c/libc/current/src/string/strtok.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strtok.cxx +++ /dev/null @@ -1,240 +0,0 @@ -//=========================================================================== -// -// strtok.cxx -// -// ISO standard strtok() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-19 -// Purpose: Provide ISO C strtok() and POSIX strtok_r() routines -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== -// -// This code is based on original code with the following copyright: -// -/* - * Copyright (c) 1988 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -#ifdef CYGSEM_LIBC_PER_THREAD_STRTOK -# include // kernel configuration -# include // per-thread data -# include // per-thread data -# include // mutexes -#endif - -// EXPORTED SYMBOLS - -externC char * -strtok( char *s1, const char *s2 ) CYGBLD_ATTRIB_WEAK_ALIAS(_strtok); - -externC char * -strtok_r( char *s1, const char *s2, char **lasts ) \ - CYGBLD_ATTRIB_WEAK_ALIAS(_strtok_r); - -// TRACE - -#if defined(CYGDBG_USE_TRACING) && defined(CYGNUM_LIBC_STRTOK_TRACE_LEVEL) -static int strtok_trace = CYGNUM_LIBC_STRTOK_TRACE_LEVEL; -# define TL1 (0 < strtok_trace) -#else -# define TL1 (0) -#endif - -// STATICS - -#ifdef CYGSEM_LIBC_PER_THREAD_STRTOK -static cyg_ucount32 strtok_data_index=CYGNUM_KERNEL_THREADS_DATA_MAX; -static Cyg_Mutex strtok_data_mutex CYG_INIT_PRIORITY(LIBC); -#else -static char *cyg_libc_strtok_last; -#endif - -// FUNCTIONS - -char * -_strtok( char *s1, const char *s2 ) -{ - char **lasts; - char *retval; - - CYG_REPORT_FUNCNAMETYPE( "_strtok", "returning %08x" ); - CYG_REPORT_FUNCARG2( "s1=%08x, s2=%08x", s1, s2 ); - - if (s1 != NULL) - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - -#ifdef CYGSEM_LIBC_PER_THREAD_STRTOK - Cyg_Thread *self = Cyg_Thread::self(); - - // Get a per-thread data slot if we haven't got one already - // Do a simple test before locking and retrying test, as this is a - // rare situation - if (CYGNUM_KERNEL_THREADS_DATA_MAX==strtok_data_index) { - strtok_data_mutex.lock(); - if (CYGNUM_KERNEL_THREADS_DATA_MAX==strtok_data_index) { - - // the kernel just throws an assert if this doesn't work - // FIXME: Should use real CDL to pre-allocate a slot at compile - // time to ensure there are enough slots - strtok_data_index = self->new_data_index(); - - } - strtok_data_mutex.unlock(); - } // if - - // we have a valid index now - - lasts = (char **)self->get_data_ptr(strtok_data_index); -#else - lasts = &cyg_libc_strtok_last; -#endif - - CYG_TRACE2( TL1, "Retrieved strtok_last address %08x containing %s", - lasts, *lasts ); - - retval = _strtok_r( s1, s2, lasts ); - - CYG_REPORT_RETVAL( retval ); - - return retval; -} // _strtok() - -char * -_strtok_r( char *s1, const char *s2, char **lasts ) -{ - char *spanp; - int c, sc; - char *tok; - - CYG_REPORT_FUNCNAMETYPE( "_strtok_r", "returning %08x" ); - CYG_REPORT_FUNCARG3( "s1=%08x, s2=%08x, lasts=%08x", s1, s2, lasts ); - - if (s1 != NULL) - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( lasts, "lasts is not a valid pointer!" ); - - - if (s1 == NULL && (s1 = *lasts) == NULL) - { - CYG_REPORT_RETVAL( NULL ); - return NULL; - } // if - - // - // Skip (span) leading delimiters (s += strspn(s, delim), sort of). - // -cont: - c = *s1++; - for (spanp = (char *)s2; (sc = *spanp++) != 0;) { - if (c == sc) - goto cont; - } // for - - if (c == 0) { // no non-delimiter characters - *lasts = NULL; - - CYG_REPORT_RETVAL( NULL ); - return NULL; - } // if - tok = s1 - 1; - - // - // Scan token (scan for delimiters: s += strcspn(s, delim), sort of). - // Note that delim must have one NUL; we stop if we see that, too. - // - for (;;) { - c = *s1++; - spanp = (char *)s2; - do { - if ((sc = *spanp++) == c) { - if (c == 0) - s1 = NULL; - else - s1[-1] = 0; - *lasts = s1; - - CYG_REPORT_RETVAL( tok ); - - return (tok); - } // if - } while (sc != 0); - } // for - // NOTREACHED -} // _strtok_r() - -// EOF strtok.cxx diff --git a/packages/language/c/libc/current/src/string/strxfrm.cxx b/packages/language/c/libc/current/src/string/strxfrm.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/string/strxfrm.cxx +++ /dev/null @@ -1,106 +0,0 @@ -//=========================================================================== -// -// strxfrm.cxx -// -// ANSI standard strxfrm() routine -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -// Include the C library? -#ifdef CYGPKG_LIBC - -// INCLUDES - -#include // Common type definitions -#include // Tracing support -#include // Assertion support -#include // Header for this file -#include // Compiler definitions such as size_t, NULL etc. -#include "clibincl/stringsupp.hxx" // Useful string function support and - // prototypes - -// EXPORTED SYMBOLS - -externC size_t -strxfrm( char *s1, const char *s2, size_t n ) \ - CYGPRI_LIBC_WEAK_ALIAS("_strxfrm"); - -// FUNCTIONS - -size_t -_strxfrm( char *s1, const char *s2, size_t n ) -{ - size_t res = 0; - - CYG_REPORT_FUNCNAMETYPE( "_strxfrm", "returning size %d" ); - CYG_REPORT_FUNCARG3( "s1=%08x, s2=%08x, n=%d", s1, s2, n ); - - if (s1 != NULL) - CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" ); - CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" ); - - while (n-- > 0) - { - if ((*s1++ = *s2++) != '\0') - ++res; - else - { - CYG_REPORT_RETVAL( res ); - return res; - } // else - } // while - - while (*s2) - { - ++s2; - ++res; - } // while - - CYG_REPORT_RETVAL( res ); - - return res; -} // _strxfrm() - -#endif // ifdef CYGPKG_LIBC - -// EOF strxfrm.cxx diff --git a/packages/language/c/libc/current/src/support/cstartup.cxx b/packages/language/c/libc/current/src/support/cstartup.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/support/cstartup.cxx +++ /dev/null @@ -1,92 +0,0 @@ -//======================================================================= -// -// cstartup.cxx -// -// Support for startup of ISO C environment -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: -// Description: -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support -#include // Common tracing support - -#ifdef CYGPKG_KERNEL -# include // eCos kernel configuration -# include // eCos thread support -# include -#endif - - -// FUNCTION PROTOTYPES - -externC void -cyg_libc_invoke_main( CYG_ADDRWORD ); - -// EXTERNS - -// let the main thread be global so people can play with it (e.g. suspend -// or resume etc.) if that's what they want to do -#ifdef CYGSEM_LIBC_STARTUP_MAIN_THREAD -extern Cyg_Thread cyg_libc_main_thread; -#endif - -// FUNCTIONS - -externC void -cyg_iso_c_start( void ) -{ - CYG_REPORT_FUNCNAME( "cyg_iso_c_start" ); - CYG_REPORT_FUNCARGVOID(); - -#ifdef CYGSEM_LIBC_STARTUP_MAIN_THREAD - CYG_TRACE0( true, "Resuming cyg_libc_main_thread" ); - cyg_libc_main_thread.resume(); -#else - cyg_libc_invoke_main(0); -#endif - - CYG_REPORT_RETURN(); -} // cyg_iso_c_start() - -// EOF cstartup.cxx diff --git a/packages/language/c/libc/current/src/support/environ.cxx b/packages/language/c/libc/current/src/support/environ.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/support/environ.cxx +++ /dev/null @@ -1,69 +0,0 @@ -//======================================================================== -// -// environ.cxx -// -// C library definition and allocation of POSIX 1003.1 environ -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: Provide extern char **environ as required by POSIX 1003.1 -// Description: C library definition and allocation of POSIX 1003.1 environ -// Usage: You can override environ at startup if you wish simply -// by redefining yourself. Setting the libc.h configuration -// option is the intended method though. -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support - -#ifdef CYGPKG_LIBC_ENVIRONMENT - -// GLOBALS - -// The global environment. The default can be configured in -// - -static char * const -cyg_libc_default_environ[] = CYGDAT_LIBC_DEFAULT_ENVIRONMENT; - -char **environ CYGBLD_ATTRIB_WEAK = (char **)cyg_libc_default_environ; - -#endif - -// EOF environ.cxx diff --git a/packages/language/c/libc/current/src/support/invokemain.cxx b/packages/language/c/libc/current/src/support/invokemain.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/support/invokemain.cxx +++ /dev/null @@ -1,97 +0,0 @@ -//======================================================================= -// -// invokemain.cxx -// -// Support for startup of ISO C environment -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: Provide entry point for thread which then calls main() -// Description: cyg_libc_invoke_main() is used as the entry point for -// the thread object that is created to call the -// user-supplied main() function. It sets up the arguments -// (if any) and invokes exit() if main() returns -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support -#include // Common tracing support -#include // Common assertion support -#include "clibincl/stdlibsupp.hxx" // __libc_exit() ( i.e. exit() ) - -// FUNCTION PROTOTYPES - -externC int -main( int argc, char *argv[] ); - -externC void -cyg_hal_invoke_constructors(void); - -// FUNCTIONS - -externC void -cyg_libc_invoke_main( CYG_ADDRWORD ) -{ - CYG_REPORT_FUNCNAME( "cyg_libc_invoke_main" ); - CYG_REPORT_FUNCARG1( "argument is %s", "ignored" ); - -#ifdef CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS - // finish invoking constructors that weren't called by default - cyg_hal_invoke_constructors(); -#endif - - // argv[argc] must be NULL according to the ISO C standard 5.1.2.2.1 - char *temp_argv[] = CYGDAT_LIBC_ARGUMENTS ; - int rc; - - rc = main( (sizeof(temp_argv)/sizeof(char *)) - 1, &temp_argv[0] ); - - CYG_TRACE1( true, "main() has returned with code %d. Calling exit()", - rc ); - - __libc_exit(rc); - - CYG_FAIL( "__libc_exit() returned!!!" ); - - CYG_REPORT_RETURN(); - -} // invoke_main(); - -// EOF invokemain.cxx diff --git a/packages/language/c/libc/current/src/support/main.cxx b/packages/language/c/libc/current/src/support/main.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/support/main.cxx +++ /dev/null @@ -1,103 +0,0 @@ -//======================================================================= -// -// main.cxx -// -// Default main() function -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-26 -// Purpose: Provide a default empty main() function -// Description: This file provides a default empty main() function so -// that things don't fall apart if the user starts the -// ISO C environment (the default setting) but doesn't -// provide their own main(). This is taken advantage of -// in some tests (for example) -// Usage: Obviously simply override main() in your own program to -// prevent the use of the one below -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // for CYGPKG_KERNEL - -// INCLUDES - -#include // Common type definitions and support -#include // Common tracing support -#include // Common assertion support - -// FUNCTION PROTOTYPES - -// We provide a weakly named main to allow this to link if the user -// doesn't provide their own main. This isn't strictly good behaviour, -// but if the user wants good performance then of _course_ they should -// play with the config options and this won't be called. Or it might -// be "giving them enough rope" etc. :-) - -externC int -main( int argc, char *argv[] ) CYGBLD_ATTRIB_WEAK; - -externC void -cyg_user_start(void); - -// FUNCTIONS - -externC int -main( int argc, char *argv[] ) -{ - CYG_REPORT_FUNCNAMETYPE("main", "returning %d" ); - - // try to be helpful by diagnosing malformed arguments - CYG_PRECONDITION( argv != NULL, "argv is NULL!" ); - CYG_PRECONDITION( argv[argc] == NULL, "argv[argc] isn't NULL!" ); - - CYG_REPORT_FUNCARG2("argc=%d, argv[0]=%s", argc, - (CYG_ADDRWORD)((argv[0]==NULL) ? "NULL" : argv[0]) ); - - CYG_TRACE0( true, "This is the system-supplied default main()" ); - - // If the kernel isn't present then cyg_lib_invoke_main() will have assumed - // main() is present and will call it. But if we're here, then - // evidently the user didn't supply one - which can't be right. So we - // assume that they have useful code to run in cyg_user_start() instead. - // Its better than just exiting -#ifndef CYGPKG_KERNEL - cyg_user_start(); -#endif - - CYG_REPORT_RETVAL(0); - return 0; // some CPUs have 0 hard-wired - faster than a reg -} // main() - -// EOF main.cxx diff --git a/packages/language/c/libc/current/src/support/mainthread.cxx b/packages/language/c/libc/current/src/support/mainthread.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/support/mainthread.cxx +++ /dev/null @@ -1,135 +0,0 @@ -//======================================================================= -// -// mainthread.cxx -// -// Support for startup of ISO C environment -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-01-21 -// Purpose: Provides a thread object to call into a user-supplied -// main() -// Description: Here we define the thread object that calls -// cyg_libc_invoke_main() which in turn will invoke -// the user-supplied main() entry point function (or -// alternatively the dummy empty one supplied by eCos) -// Usage: Both the stack (cyg_libc_main_stack) and the thread -// (cyg_libc_main_thread) can be overriden if you provide -// your own symbols with those names. In the case of the -// stack obviously you need to ensure -// CYGNUM_LIBC_MAIN_STACK_SIZE corresponds to your own -// stack. -// The thread object is also available externally if you -// want to control it (suspend/resume/etc.) either by -// extern Cyg_Thread cyg_libc_main_thread; from C++, using -// the kernel C++ API, or -// extern cyg_handle_t cyg_libc_main_thread; from C using -// the kernel C API. -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -#ifdef CYGSEM_LIBC_STARTUP_MAIN_THREAD - -// INCLUDES - -#include // Common type definitions and support -#include // eCos kernel configuration -#include // eCos thread support -#include -#include // for CYGNUM_HAL_STACK_SIZE_TYPICAL - - -// EXTERNS - -#ifdef CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS -extern cyg_bool cyg_hal_stop_constructors; -#endif - -// FUNCTION PROTOTYPES - -externC void -cyg_libc_invoke_main( CYG_ADDRWORD ); - -// STATICS - -#ifdef CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS -class cyg_libc_dummy_constructor_class { -public: - cyg_libc_dummy_constructor_class(void) { ++cyg_hal_stop_constructors; } -}; - -static cyg_libc_dummy_constructor_class cyg_libc_dummy_constructor_obj - CYG_INIT_PRIORITY(PREDEFAULT); -#endif - -#ifdef CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM - -// override stack size on some platforms -#ifdef CYGNUM_HAL_STACK_SIZE_TYPICAL -# if CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE < CYGNUM_HAL_STACK_SIZE_TYPICAL -# undef CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE -# define CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL -# endif -#endif - -static cyg_uint8 cyg_libc_main_stack[ CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE ]; - -#else // !ifdef CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM - -extern char *cyg_libc_main_stack; -extern int cyg_libc_main_stack_size; - -#endif // !ifdef CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM - -// GLOBALS - -// let the main thread be global so people can play with it (e.g. suspend -// or resume etc.) if that's what they want to do -Cyg_Thread cyg_libc_main_thread CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_LIBC) = - Cyg_Thread(CYGNUM_LIBC_MAIN_THREAD_PRIORITY, - &cyg_libc_invoke_main, (CYG_ADDRWORD) 0, - "main", - (CYG_ADDRESS) &cyg_libc_main_stack[0], -#ifdef CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM - CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE -#else - cyg_libc_main_stack_size -#endif - ); - -#endif // ifdef CYGSEM_LIBC_STARTUP_MAIN_THREAD - -// EOF mainthread.cxx diff --git a/packages/language/c/libc/current/src/time/asctime.cxx b/packages/language/c/libc/current/src/time/asctime.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/asctime.cxx +++ /dev/null @@ -1,75 +0,0 @@ -//======================================================================== -// -// asctime.cxx -// -// ISO C date and time implementation for asctime() -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide implementation of ISO C asctime() -// Description: This file provides the linkable symbol version of asctime() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support - -// The following lines allow __asctime() to be included non-inline which -// actually defines it as a function here -#define CYGPRI_LIBC_TIME_ASCTIME_INLINE -#ifndef CYGIMP_LIBC_TIME_ASCTIME_INLINE -# define CYGIMP_LIBC_TIME_ASCTIME_INLINE -#endif - -#include // Main date and time definitions - -// GLOBALS - -// 26 isn't such a magic value if you work out what asctime is returning -// It should do until 23:59:59 31st Dec 9999 anyway :-) -char cyg_libc_time_asctime_buf[26]; - -// SYMBOL DEFINITIONS - -#undef asctime - -externC char * -asctime( const struct tm *__timeptr ) CYGBLD_ATTRIB_WEAK_ALIAS(__asctime); - -// EOF asctime.cxx diff --git a/packages/language/c/libc/current/src/time/asctime_r.cxx b/packages/language/c/libc/current/src/time/asctime_r.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/asctime_r.cxx +++ /dev/null @@ -1,74 +0,0 @@ -//======================================================================== -// -// asctime_r.cxx -// -// POSIX 1003.1 date and time implementation for asctime_r() -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide implementation of POSIX 1003.1 asctime() -// Description: This file provides the linkable symbol version of asctime_r() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support - -// The following lines allow __asctime_r() to be included non-inline which -// actually defines it as a function here -#define CYGPRI_LIBC_TIME_ASCTIME_R_INLINE -#ifndef CYGIMP_LIBC_TIME_ASCTIME_R_INLINE -# define CYGIMP_LIBC_TIME_ASCTIME_R_INLINE -#endif - -#include // Main date and time definitions - -// SYMBOL DEFINITIONS - -#ifdef CYGFUN_LIBC_TIME_POSIX - -# undef asctime_r - -externC char * -asctime_r( const struct tm *__timeptr, char *__buf ) - CYGBLD_ATTRIB_WEAK_ALIAS(__asctime_r); - -#endif // ifdef CYGFUN_LIBC_TIME_POSIX - -// EOF asctime_r.cxx diff --git a/packages/language/c/libc/current/src/time/clock.cxx b/packages/language/c/libc/current/src/time/clock.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/clock.cxx +++ /dev/null @@ -1,127 +0,0 @@ -//=========================================================================== -// -// clock.cxx -// -// ISO C date and time implementation for clock() -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-05 -// Purpose: Provides an implementation of the ISO C function clock() -// from ISO C section 7.12.2.1 -// Description: This file uses the kernel real time clock to determine -// the complete running time of the system - since we only -// have one task, even though there are perhaps multiple threads -// that is still the running time of the "program" -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// CONFIGURATION - -#include // Configuration header - -#ifdef CYGSEM_LIBC_TIME_CLOCK_WORKING -# include // Kernel config header -#endif - -// INCLUDES - -#include // Common type definitions and support -#include // Assertion infrastructure -#include // Tracing infrastructure - -#include // Header for all time-related functions - -#ifdef CYGSEM_LIBC_TIME_CLOCK_WORKING -# include // Kernel clock definitions -# include // Kernel clock inline functions -#endif - - -// TRACE - -# if defined(CYGDBG_USE_TRACING) && defined(CYGNUM_LIBC_TIME_CLOCK_TRACE_LEVEL) -static int clock_trace = CYGNUM_LIBC_TIME_CLOCK_TRACE_LEVEL; -# define TL1 (0 < clock_trace) -# else -# define TL1 (0) -# endif - -// FUNCTIONS - -externC clock_t -__clock( void ) -{ - CYG_REPORT_FUNCNAMETYPE( "__clock", "returning clock tick %d" ); - CYG_REPORT_FUNCARGVOID(); - -#ifdef CYGSEM_LIBC_TIME_CLOCK_WORKING - cyg_tick_count curr_clock; // kernel clock value - Cyg_Clock::cyg_resolution resolution; // kernel clock resolution - clock_t clocks; - - CYG_TRACE0( TL1, "getting clock resolution" ); - - // get the resolution - resolution = Cyg_Clock::real_time_clock->get_resolution(); - - CYG_TRACE2( TL1, "got resolution dividend %d divisor %d. Getting " - "clock value", resolution.dividend, resolution.divisor ); - - // get the value - curr_clock = Cyg_Clock::real_time_clock->current_value(); - - CYG_TRACE1( TL1, "got clock value %d", curr_clock ); - - // scale the value so that clock()/CLOCKS_PER_SEC works - clock_t - // should be big enough to cope - clocks = ((clock_t)curr_clock * resolution.dividend) / - (resolution.divisor * (1000000000 / CLOCKS_PER_SEC)); - - CYG_REPORT_RETVAL( clocks ); - return clocks; - -#else // i.e. ifndef CYGSEM_LIBC_TIME_CLOCK_WORKING - CYG_REPORT_RETVAL( -1 ); - return (clock_t) -1; -#endif - -} // __clock() - - -// SYMBOL DEFINITIONS - -externC clock_t -clock( void ) CYGBLD_ATTRIB_WEAK_ALIAS(__clock); - -// EOF clock.cxx diff --git a/packages/language/c/libc/current/src/time/ctime.cxx b/packages/language/c/libc/current/src/time/ctime.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/ctime.cxx +++ /dev/null @@ -1,69 +0,0 @@ -//======================================================================== -// -// ctime.cxx -// -// ISO C date and time implementation for ctime() -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide implementation of ISO C ctime() -// Description: This file provides the linkable symbol version of ctime() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support - -// The following lines allow __ctime() to be included non-inline which -// actually defines it as a function here -#define CYGPRI_LIBC_TIME_CTIME_INLINE -#ifndef CYGIMP_LIBC_TIME_CTIME_INLINE -# define CYGIMP_LIBC_TIME_CTIME_INLINE -#endif - -#include // Main date and time definitions - -// SYMBOL DEFINITIONS - -#undef ctime - -externC char * -ctime( const time_t *__timer ) CYGBLD_ATTRIB_WEAK_ALIAS(__ctime); - -// EOF ctime.cxx diff --git a/packages/language/c/libc/current/src/time/ctime_r.cxx b/packages/language/c/libc/current/src/time/ctime_r.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/ctime_r.cxx +++ /dev/null @@ -1,74 +0,0 @@ -//======================================================================== -// -// ctime_r.cxx -// -// POSIX 1003.1 date and time implementation for ctime_r() -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide implementation of POSIX 1003.1 ctime() -// Description: This file provides the linkable symbol version of ctime_r() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support - -// The following lines allow __ctime_r() to be included non-inline which -// actually defines it as a function here -#define CYGPRI_LIBC_TIME_CTIME_R_INLINE -#ifndef CYGIMP_LIBC_TIME_CTIME_R_INLINE -# define CYGIMP_LIBC_TIME_CTIME_R_INLINE -#endif - -#include // Main date and time definitions - -// SYMBOL DEFINITIONS - -#ifdef CYGFUN_LIBC_TIME_POSIX - -# undef ctime_r - -externC char * -ctime_r( const time_t *__timer, char *__buf ) - CYGBLD_ATTRIB_WEAK_ALIAS(__ctime_r); - -#endif // ifdef CYGFUN_LIBC_TIME_POSIX - -// EOF ctime_r.cxx diff --git a/packages/language/c/libc/current/src/time/difftime.cxx b/packages/language/c/libc/current/src/time/difftime.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/difftime.cxx +++ /dev/null @@ -1,70 +0,0 @@ -//======================================================================== -// -// difftime.cxx -// -// ISO C date and time implementation for difftime() -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide implementation of ISO C difftime() -// Description: This file provides the linkable symbol version of difftime() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support - -// The following lines allow __difftime() to be included non-inline which -// actually defines it as a function here -#define CYGPRI_LIBC_TIME_DIFFTIME_INLINE -#ifndef CYGIMP_LIBC_TIME_DIFFTIME_INLINE -# define CYGIMP_LIBC_TIME_DIFFTIME_INLINE -#endif - -#include // Main date and time definitions - -// SYMBOL DEFINITIONS - -#undef difftime - -externC double -difftime( time_t __time1, time_t __time0 ) - CYGBLD_ATTRIB_WEAK_ALIAS(__difftime); - -// EOF difftime.cxx diff --git a/packages/language/c/libc/current/src/time/gmtime.cxx b/packages/language/c/libc/current/src/time/gmtime.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/gmtime.cxx +++ /dev/null @@ -1,73 +0,0 @@ -//======================================================================== -// -// gmtime.cxx -// -// ISO C date and time implementation for gmtime() -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide implementation of ISO C gmtime() -// Description: This file provides the linkable symbol version of gmtime() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support - -// The following lines allow __gmtime() to be included non-inline which -// actually defines it as a function here -#define CYGPRI_LIBC_TIME_GMTIME_INLINE -#ifndef CYGIMP_LIBC_TIME_GMTIME_INLINE -# define CYGIMP_LIBC_TIME_GMTIME_INLINE -#endif - -#include // Main date and time definitions - -// GLOBALS - -struct tm cyg_libc_time_gmtime_buf; - -// SYMBOL DEFINITIONS - -#undef gmtime - -externC struct tm * -gmtime( const time_t *__timer) CYGBLD_ATTRIB_WEAK_ALIAS(__gmtime); - -// EOF gmtime.cxx diff --git a/packages/language/c/libc/current/src/time/gmtime_r.cxx b/packages/language/c/libc/current/src/time/gmtime_r.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/gmtime_r.cxx +++ /dev/null @@ -1,74 +0,0 @@ -//======================================================================== -// -// gmtime_r.cxx -// -// POSIX 1003.1 date and time implementation for gmtime_r() -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide implementation of POSIX 1003.1 gmtime() -// Description: This file provides the linkable symbol version of gmtime_r() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support - -// The following lines allow __gmtime_r() to be included non-inline which -// actually defines it as a function here -#define CYGPRI_LIBC_TIME_GMTIME_R_INLINE -#ifndef CYGIMP_LIBC_TIME_GMTIME_R_INLINE -# define CYGIMP_LIBC_TIME_GMTIME_R_INLINE -#endif - -#include // Main date and time definitions - -// SYMBOL DEFINITIONS - -#ifdef CYGFUN_LIBC_TIME_POSIX - -# undef gmtime_r - -externC struct tm * -gmtime_r( const time_t *__timer, struct tm *__result ) - CYGBLD_ATTRIB_WEAK_ALIAS(__gmtime_r); - -#endif // ifdef CYGFUN_LIBC_TIME_POSIX - -// EOF gmtime_r.cxx diff --git a/packages/language/c/libc/current/src/time/localtime.cxx b/packages/language/c/libc/current/src/time/localtime.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/localtime.cxx +++ /dev/null @@ -1,73 +0,0 @@ -//======================================================================== -// -// localtime.cxx -// -// ISO C date and time implementation for localtime() -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide implementation of ISO C localtime() -// Description: This file provides the linkable symbol version of localtime() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support - -// The following lines allow __localtime() to be included non-inline which -// actually defines it as a function here -#define CYGPRI_LIBC_TIME_LOCALTIME_INLINE -#ifndef CYGIMP_LIBC_TIME_LOCALTIME_INLINE -# define CYGIMP_LIBC_TIME_LOCALTIME_INLINE -#endif - -#include // Main date and time definitions - -// GLOBALS - -struct tm cyg_libc_time_localtime_buf; - -// SYMBOL DEFINITIONS - -#undef localtime - -externC struct tm * -localtime( const time_t *__timer) CYGBLD_ATTRIB_WEAK_ALIAS(__localtime); - -// EOF localtime.cxx diff --git a/packages/language/c/libc/current/src/time/localtime_r.cxx b/packages/language/c/libc/current/src/time/localtime_r.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/localtime_r.cxx +++ /dev/null @@ -1,75 +0,0 @@ -//======================================================================== -// -// localtime_r.cxx -// -// POSIX 1003.1 date and time implementation for localtime_r() -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide implementation of POSIX 1003.1 localtime() -// Description: This file provides the linkable symbol version of -// localtime_r() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support - -// The following lines allow __localtime_r() to be included non-inline which -// actually defines it as a function here -#define CYGPRI_LIBC_TIME_LOCALTIME_R_INLINE -#ifndef CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE -# define CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE -#endif - -#include // Main date and time definitions - -// SYMBOL DEFINITIONS - -#ifdef CYGFUN_LIBC_TIME_POSIX - -# undef localtime_r - -externC struct tm * -localtime_r( const time_t *__timer, struct tm *__result ) - CYGBLD_ATTRIB_WEAK_ALIAS(__localtime_r); - -#endif // ifdef CYGFUN_LIBC_TIME_POSIX - -// EOF localtime_r.cxx diff --git a/packages/language/c/libc/current/src/time/mktime.cxx b/packages/language/c/libc/current/src/time/mktime.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/mktime.cxx +++ /dev/null @@ -1,69 +0,0 @@ -//======================================================================== -// -// mktime.cxx -// -// ISO C date and time implementation for mktime() -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide implementation of ISO C mktime() -// Description: This file provides the linkable symbol version of mktime() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support - -// The following lines allow __mktime() to be included non-inline which -// actually defines it as a function here -#define CYGPRI_LIBC_TIME_MKTIME_INLINE -#ifndef CYGIMP_LIBC_TIME_MKTIME_INLINE -# define CYGIMP_LIBC_TIME_MKTIME_INLINE -#endif - -#include // Main date and time definitions - -// SYMBOL DEFINITIONS - -#undef mktime - -externC time_t -mktime( struct tm *__timeptr ) CYGBLD_ATTRIB_WEAK_ALIAS(__mktime); - -// EOF mktime.cxx diff --git a/packages/language/c/libc/current/src/time/settime.cxx b/packages/language/c/libc/current/src/time/settime.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/settime.cxx +++ /dev/null @@ -1,88 +0,0 @@ -//======================================================================== -// -// settime.cxx -// -// Date and time support function to set time -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide support function to set the time -// Description: The wallclock device is used to store the time in UTC -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support -#include // Main date and time definitions -#include // Assertion infrastructure -#include // Tracing infrastructure -#ifdef CYGSEM_LIBC_TIME_SETTIME_WORKING -# include // Wallclock class definitions -#endif - -// FUNCTIONS - -///////////////////////////// -// cyg_libc_time_settime() // -///////////////////////////// -// -// This function sets the current time for the system. The time is -// specified as a time_t in UTC. It returns non-zero on error. -// - -externC cyg_bool -cyg_libc_time_settime( time_t utctime ) -{ - CYG_REPORT_FUNCNAMETYPE("cyg_libc_time_settime", "returning status %d"); - CYG_REPORT_FUNCARG1DV(utctime); - -#ifdef CYGSEM_LIBC_TIME_SETTIME_WORKING - - Cyg_WallClock::wallclock->set_current_time((cyg_uint32) utctime); - - CYG_REPORT_RETVAL(false); - return false; -#else - CYG_REPORT_RETVAL(true); - return true; -#endif - -} // cyg_libc_time_settime() - -// EOF settime.cxx diff --git a/packages/language/c/libc/current/src/time/strftime.cxx b/packages/language/c/libc/current/src/time/strftime.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/strftime.cxx +++ /dev/null @@ -1,312 +0,0 @@ -//======================================================================== -// -// strftime.cxx -// -// ISO C date and time implementation for strftime() -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide implementation of the ISO C function strftime() -// from ISO C section 7.12.3.5 -// Description: This file provides the implementation of strftime() -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support -#include // Assertion infrastructure -#include // Tracing infrastructure -#include // Main date and time definitions -#include // For cyg_libc_time_{day,month}_name{,_len} - -// FUNCTION PROTOTYPES - -// forward declaration for do_format() -externC size_t -__strftime( char *s, size_t maxsize, const char *format, - const struct tm *timeptr); - - -// FIXME: This all needs to be internationalized and localized, both in -// terms of reading and writing multibyte characters, and that it should -// refer to the settings of LC_TIME - -// FUNCTIONS - -// This helper function actually processes the format. Which format to insert -// is indicated by fmtchar, sizeleft is the maximum space allowed to be used -// in buf. The number of bytes written is returned, or -1 if there was no -// space - -static cyg_int8 -do_format(cyg_uint8 fmtchar, cyg_ucount32 sizeleft, char *buf, - const struct tm *timeptr) -{ - cyg_count8 i; - - switch (fmtchar) { - case 'a': - if (sizeleft<3) - return -1; - buf[0] = cyg_libc_time_day_name[timeptr->tm_wday][0]; - buf[1] = cyg_libc_time_day_name[timeptr->tm_wday][1]; - buf[2] = cyg_libc_time_day_name[timeptr->tm_wday][2]; - return 3; - case 'A': - if (sizeleft < cyg_libc_time_day_name_len[timeptr->tm_wday]) - return -1; - for (i=0; itm_wday]; ++i) - buf[i] = cyg_libc_time_day_name[timeptr->tm_wday][i]; - return i; - case 'b': - if (sizeleft<3) - return -1; - buf[0] = cyg_libc_time_month_name[timeptr->tm_mon][0]; - buf[1] = cyg_libc_time_month_name[timeptr->tm_mon][1]; - buf[2] = cyg_libc_time_month_name[timeptr->tm_mon][2]; - return 3; - case 'B': - if (sizeleft < cyg_libc_time_month_name_len[timeptr->tm_mon]) - return -1; - for (i=0; itm_mon]; ++i) - buf[i] = cyg_libc_time_month_name[timeptr->tm_mon][i]; - return i; - case 'c': - if (sizeleft < 26) - return -1; - - // Recurse! Note that we know that we will have left room for the - // trailing NULL in the strftime body - - i = __strftime( buf, sizeleft+1, "%a %b %d %I:%M:%S%p %Y", timeptr); - - return ((0==i) ? -1 : i); - case 'd': - if (sizeleft < 2) - return -1; - buf[0] = (timeptr->tm_mday / 10) + '0'; - buf[1] = (timeptr->tm_mday % 10) + '0'; - return 2; - case 'H': - if (sizeleft < 2) - return -1; - buf[0] = (timeptr->tm_hour / 10) + '0'; - buf[1] = (timeptr->tm_hour % 10) + '0'; - return 2; - case 'I': - if (sizeleft < 2) - return -1; - buf[0] = ((timeptr->tm_hour%12 + 1) / 10) + '0'; - buf[1] = ((timeptr->tm_hour%12 + 1) % 10) + '0'; - return 2; - case 'j': - if (sizeleft < 3) - return -1; - buf[0] = (timeptr->tm_yday / 100) + '0'; - buf[1] = ((timeptr->tm_yday % 100) / 10) + '0'; - buf[2] = (timeptr->tm_yday % 10) + '0'; - return 3; - case 'm': - if (sizeleft < 2) - return -1; - buf[0] = ((timeptr->tm_mon+1) / 10) + '0'; - buf[1] = ((timeptr->tm_mon+1) % 10) + '0'; - return 2; - case 'M': - if (sizeleft < 2) - return -1; - buf[0] = (timeptr->tm_min / 10) + '0'; - buf[1] = (timeptr->tm_min % 10) + '0'; - return 2; - case 'p': - if (sizeleft < 2) - return -1; - buf[0] = (timeptr->tm_hour > 11) ? 'p' : 'a'; - buf[1] = 'm'; - return 2; - case 'S': - if (sizeleft < 2) - return -1; - buf[0] = (timeptr->tm_sec / 10) + '0'; - buf[1] = (timeptr->tm_sec % 10) + '0'; - return 2; - case 'U': - if (sizeleft < 2) - return -1; - i = (timeptr->tm_yday - timeptr->tm_wday + 7) / 7; - buf[0] = (i / 10) + '0'; - buf[1] = (i % 10) + '0'; - return 2; - case 'w': - // Don't need to check size - we'll always be called with sizeleft > 0 - buf[0] = timeptr->tm_wday + '0'; - return 1; - case 'W': - if (sizeleft < 2) - return -1; - i = (timeptr->tm_yday + ((8-timeptr->tm_wday) % 7)) / 7; - buf[0] = (i / 10) + '0'; - buf[1] = (i % 10) + '0'; - return 2; - case 'x': - if (sizeleft < 15) - return -1; - - // Recurse! Note that we know that we will have left room for the - // trailing NULL in the strftime body - - i = __strftime( buf, sizeleft+1, "%a %b %d %Y", timeptr); - - return (0==i) ? -1 : i; - case 'X': - if (sizeleft < 10) - return -1; - - // Recurse! Note that we know that we will have left room for the - // trailing NULL in the strftime body - - i = __strftime( buf, sizeleft+1, "%I:%M:%S%p", timeptr); - - return (0==i) ? -1 : i; - case 'y': - if (sizeleft < 2) - return -1; - buf[0] = ((timeptr->tm_year % 100) / 10) + '0'; - buf[1] = ((timeptr->tm_year % 100) % 10) + '0'; - return 2; - case 'Y': - if (sizeleft < 4) - return -1; - buf[0] = ((1900+timeptr->tm_year) / 1000) + '0'; - buf[1] = (((1900+timeptr->tm_year) % 1000) / 100) + '0'; - buf[2] = ((timeptr->tm_year % 100) / 10) + '0'; - buf[3] = (timeptr->tm_year % 10) + '0'; - return 4; - case 'Z': - // FIXME: Should store zone in timeptr->tm_zone, or failing that - // read TZ env variable using tzset() - return 0; - case '%': - // Don't need to check size - we'll always be called with sizeleft > 0 - buf[0] = '%'; - return 1; - default: - CYG_FAIL("invalid format character!"); - return -1; - } // switch - -} // do_format() - -externC size_t -__strftime( char *s, size_t maxsize, const char *format, - const struct tm *timeptr) -{ - CYG_REPORT_FUNCNAMETYPE("__strftime", "returning string length %d"); - CYG_CHECK_DATA_PTR(s, "string s is not a valid address!"); - CYG_CHECK_DATA_PTR(format, "format string is not at a valid address!"); - CYG_CHECK_DATA_PTR(timeptr, - "struct tm argument is not at a valid address!"); - CYG_REPORT_FUNCARG4("s is at address %08x, maxsize=%d, format=\"%s\", " - "timeptr is at address %08x", - s, maxsize, format, timeptr); - - CYG_PRECONDITION((timeptr->tm_sec >= 0) && (timeptr->tm_sec < 62), - "timeptr->tm_sec out of range!"); - CYG_PRECONDITION((timeptr->tm_min >= 0) && (timeptr->tm_min < 60), - "timeptr->tm_min out of range!"); - CYG_PRECONDITION((timeptr->tm_hour >= 0) && (timeptr->tm_hour < 24), - "timeptr->tm_hour out of range!"); - // Currently I don't check _actual_ numbers of days in each month here - // FIXME: No reason why not though - CYG_PRECONDITION((timeptr->tm_mday >= 1) && (timeptr->tm_mday < 32), - "timeptr->tm_mday out of range!"); - CYG_PRECONDITION((timeptr->tm_mon >= 0) && (timeptr->tm_mon < 12), - "timeptr->tm_mon out of range!"); - CYG_PRECONDITION((timeptr->tm_wday >= 0) && (timeptr->tm_wday < 7), - "timeptr->tm_wday out of range!"); - CYG_PRECONDITION((timeptr->tm_yday >= 0) && (timeptr->tm_yday < 366), - "timeptr->tm_yday out of range!"); - CYG_PRECONDITION((timeptr->tm_year > -1900) && - (timeptr->tm_year < 8100), - "timeptr->tm_year out of range!"); - - if (!maxsize) { - CYG_REPORT_RETVAL(0); - return 0; - } // if - - // lets leave the room for the trailing null up front - --maxsize; - - cyg_ucount32 i, spos; - cyg_int8 dof_ret; - - for (i=0, spos=0; (spos // C library configuration - -// INCLUDES - -#include // Common type definitions and support -#include // Assertion infrastructure -#include // Tracing infrastructure -#include // Main date and time definitions - -#ifdef CYGSEM_LIBC_TIME_TIME_WORKING -# include // Wallclock class definitions -#endif - -// FUNCTIONS - -externC time_t -__time( time_t *timer ) -{ - CYG_REPORT_FUNCNAMETYPE("__time", "returning %d"); - if (timer) // its allowed to be NULL - CYG_CHECK_DATA_PTR( timer, "timer is not a valid pointer!"); - CYG_REPORT_FUNCARG1("timer = %08x", timer); - -#ifdef CYGSEM_LIBC_TIME_TIME_WORKING - time_t ret; - - ret = (time_t) Cyg_WallClock::wallclock->get_current_time(); - - if (timer) - *timer = ret; - - CYG_REPORT_RETVAL(ret); - - return ret; - -#else // i.e. ifndef CYGSEM_LIBC_TIME_TIME_WORKING - - if (timer) - *timer = (time_t)-1; - CYG_REPORT_RETVAL(-1); - return (time_t)-1; - -#endif - -} // __time() - - -// SYMBOL DEFINITIONS - -externC time_t -time( time_t *timer ) CYGBLD_ATTRIB_WEAK_ALIAS(__time); - -// EOF time.cxx diff --git a/packages/language/c/libc/current/src/time/timeutil.cxx b/packages/language/c/libc/current/src/time/timeutil.cxx deleted file mode 100644 --- a/packages/language/c/libc/current/src/time/timeutil.cxx +++ /dev/null @@ -1,209 +0,0 @@ -//======================================================================== -// -// timeutil.cxx -// -// ISO C date and time implementation support functions -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-26 -// Purpose: Provide support functions used by the ISO C date and time -// implementation -// Description: This file provides the functions: -// cyg_libc_time_normalize_structtm() -// cyg_libc_time_getzoneoffsets() -// cyg_libc_time_setzoneoffsets() -// cyg_libc_time_setdst() -// and the globals: -// cyg_libc_time_day_name -// cyg_libc_time_day_name_len -// cyg_libc_time_month_name -// cyg_libc_time_month_name_len -// cyg_libc_time_month_lengths -// cyg_libc_time_current_dst_stat -// cyg_libc_time_current_std_offset -// cyg_libc_time_current_dst_offset -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -// define these functions as outline, not inline, functions in this file -#define CYGPRI_LIBC_TIME_GETZONEOFFSETS_INLINE extern "C" -#define CYGPRI_LIBC_TIME_SETZONEOFFSETS_INLINE extern "C" -#define CYGPRI_LIBC_TIME_SETDST_INLINE extern "C" - -#include // Common type definitions and support -#include // Header for this file -#include // Main date and time definitions -#include // for div() - - -// GLOBALS - -// FIXME: PR19440 - const char & -fwritable-strings don't mix -/*const*/ char cyg_libc_time_day_name[7][10] = { - "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", - "Saturday" -}; -const cyg_uint8 cyg_libc_time_day_name_len[7] = { 6, 6, 7, 9, 8, 6, 8 }; - -// FIXME: PR19440 - const char & -fwritable-strings don't mix -/*const*/ char cyg_libc_time_month_name[12][10] = { - "January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December" -}; -const cyg_uint8 cyg_libc_time_month_name_len[12] = { 7, 8, 5, 5, 3, 4, - 4, 6, 9, 7, 8, 8 }; - -const cyg_uint8 cyg_libc_time_month_lengths[2][12] = { - {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, - {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} -}; - -Cyg_libc_time_dst cyg_libc_time_current_dst_stat = - (Cyg_libc_time_dst)CYGNUM_LIBC_TIME_DST_DEFAULT_STATE; -time_t cyg_libc_time_current_std_offset = - (time_t)CYGNUM_LIBC_TIME_STD_DEFAULT_OFFSET; -time_t cyg_libc_time_current_dst_offset = - (time_t)CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET; - - -// FUNCTIONS - -//////////////////////////////////////// -// cyg_libc_time_normalize_structtm() // -//////////////////////////////////////// -// -// cyg_libc_time_normalize_structtm() will adjust the fields of a struct tm -// so that they are within the normal ranges expected. -// tm_wday, tm_yday and tm_isdst are ignored - -externC void -cyg_libc_time_normalize_structtm( struct tm *timeptr ) -{ - div_t t; - - CYG_REPORT_FUNCNAME("cyg_libc_time_normalize_structtm"); - CYG_REPORT_FUNCARG1("timeptr is at address %08x", timeptr); - - // normalize seconds to 0..59 - if ((timeptr->tm_sec < 0) || (timeptr->tm_sec > 59)) { - t = div(timeptr->tm_sec, 60); - while (t.rem < 0) { - t.rem += 60; - --t.quot; - } - timeptr->tm_min += t.quot; - timeptr->tm_sec = t.rem; - } // if - - // normalize minutes to 0..59 - if ((timeptr->tm_min < 0) || (timeptr->tm_min > 59)) { - t = div(timeptr->tm_min, 60); - while (t.rem < 0) { - t.rem += 60; - --t.quot; - } - timeptr->tm_hour += t.quot; - timeptr->tm_min = t.rem; - } // if - - // normalize hours to 0..23 - if ((timeptr->tm_hour < 0) || (timeptr->tm_hour > 23)) { - t = div(timeptr->tm_hour, 24); - while (t.rem < 0) { - t.rem += 24; - --t.quot; - } - timeptr->tm_mday += t.quot; - timeptr->tm_hour = t.rem; - } // if - - // we wait before normalizing tm_mday as per ISO C 7.12.2.3 (although - // actually it only makes sense if you think about it - - // normalize months to 0..11 - if ((timeptr->tm_mon < 0) || (timeptr->tm_mon > 11)) { - t = div(timeptr->tm_mon, 12); - while (t.rem < 0) { - t.rem += 12; - --t.quot; - } - timeptr->tm_year += t.quot; - timeptr->tm_mon = t.rem; - } // if - - // now tm_mday which needs to go to 1..31 - cyg_bool leap = cyg_libc_time_year_is_leap(timeptr->tm_year); - - while (timeptr->tm_mday < 1) { - // move back a month - - if (--timeptr->tm_mon < 0) { - --timeptr->tm_year; - timeptr->tm_mon = 11; - leap = cyg_libc_time_year_is_leap(timeptr->tm_year); - } // if - - // we move backward the number of days in the _new_ current month - timeptr->tm_mday += cyg_libc_time_month_lengths[leap][timeptr->tm_mon]; - - } // while - - while (timeptr->tm_mday > - cyg_libc_time_month_lengths[leap][timeptr->tm_mon]) { - - // move forward a month - - // we move forward the number of days in the _old_ current month - timeptr->tm_mday -= cyg_libc_time_month_lengths[leap][timeptr->tm_mon]; - - if (++timeptr->tm_mon > 11) { - ++timeptr->tm_year; - timeptr->tm_mon = 0; - leap = cyg_libc_time_year_is_leap(timeptr->tm_year); - } // if - - } // while - - CYG_REPORT_RETURN(); - -} // cyg_libc_time_normalize_structtm() - - -// EOF timeutil.cxx diff --git a/packages/language/c/libc/current/tests/ctype/ctype.c b/packages/language/c/libc/current/tests/ctype/ctype.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/ctype/ctype.c +++ /dev/null @@ -1,219 +0,0 @@ -//================================================================= -// -// ctype.c -// -// General testcase for C library ctype functions -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1999-03-23 -// Description: Contains general testcode for C library ctype functions -// -// -//####DESCRIPTIONEND#### - -// INCLUDES - -#include -#include -#include -#include - - -// FUNCTIONS - -void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -int -main( int argc, char *argv[] ) -{ - int c; // character we use as a parameter - - CYG_TEST_INIT(); - - CYG_TEST_INFO( "Starting tests from testcase " __FILE__ " for C library " - " functions" ); - - // Check isalnum - c = 't'; - CYG_TEST_PASS_FAIL( isalnum(c), "isalnum('t')"); - c = '2'; - CYG_TEST_PASS_FAIL( isalnum(c), "isalnum('2')"); - c = 2; - CYG_TEST_PASS_FAIL( !isalnum(c), "!isalnum(2)"); - c = 127; - CYG_TEST_PASS_FAIL( !isalnum(c), "!isalnum(127)"); - - // Check isalpha - c = 'A'; - CYG_TEST_PASS_FAIL( isalpha(c), "isalpha('A')"); - c = 'a'; - CYG_TEST_PASS_FAIL( isalpha(c), "isalpha('a')"); - c = '2'; - CYG_TEST_PASS_FAIL( !isalpha(c), "!isalpha('2')"); - c = '\n'; - CYG_TEST_PASS_FAIL( !isalpha(c), "!isalpha('newline')"); - - // Check iscntrl - c = 'a'; - CYG_TEST_PASS_FAIL( !iscntrl(c), "!iscntrl('a')"); - c = 7; - CYG_TEST_PASS_FAIL( iscntrl(c), "iscntrl('7')"); - c = '\n'; - CYG_TEST_PASS_FAIL( iscntrl(c), "iscntrl(newline)"); - c = 0x7F; - CYG_TEST_PASS_FAIL( iscntrl(c), "iscntrl(0x7F)"); - - // Check isdigit - c = '2'; - CYG_TEST_PASS_FAIL( isdigit(c), "isdigit('2')"); - c = '0'; - CYG_TEST_PASS_FAIL( isdigit(c), "isdigit('0')"); - c = 't'; - CYG_TEST_PASS_FAIL( !isdigit(c), "!isdigit('t')"); - - // Check isgraph - c = ')'; - CYG_TEST_PASS_FAIL( isgraph(c), "isgraph(')')"); - c = '~'; - CYG_TEST_PASS_FAIL( isgraph(c), "isgraph('~')"); - c = '9'; - CYG_TEST_PASS_FAIL( isgraph(c), "isgraph('9')"); - c = 9; - CYG_TEST_PASS_FAIL( !isgraph(c), "!isgraph(9)"); - c = ' '; - CYG_TEST_PASS_FAIL( !isgraph(c), "!isgraph(' ')"); - c = '\t'; - CYG_TEST_PASS_FAIL( !isgraph(c), "!isgraph(tab)"); - c = '\n'; - CYG_TEST_PASS_FAIL( !isgraph(c), "!isgraph(newline)"); - c = 0x7F; - CYG_TEST_PASS_FAIL( !isgraph(c), "!isgraph(DEL)"); - c = 200; - CYG_TEST_PASS_FAIL( !isgraph(c), "!isgraph(200)"); - c = '\0'; - CYG_TEST_PASS_FAIL( !isgraph(c), "!isgraph(NUL)"); - - // Check islower - c = 'J'; - CYG_TEST_PASS_FAIL( !islower(c), "islower('J')"); - c = 'j'; - CYG_TEST_PASS_FAIL( islower(c), "islower('j')"); - c = '5'; - CYG_TEST_PASS_FAIL( !islower(c), "!islower(5)"); - - // Check isprint - c = ' '; - CYG_TEST_PASS_FAIL( isprint(c), "isprint(' ')"); - c = 'x'; - CYG_TEST_PASS_FAIL( isprint(c), "isprint('x')"); - c = '\b'; - CYG_TEST_PASS_FAIL( !isprint(c), "!isprint(backspace)"); - - // Check ispunct - c = '.'; - CYG_TEST_PASS_FAIL( ispunct(c), "ispunct('.')"); - c = '#'; - CYG_TEST_PASS_FAIL( ispunct(c), "ispunct('#')"); - c = '@'; - CYG_TEST_PASS_FAIL( ispunct(c), "ispunct('@')"); - c = 'f'; - CYG_TEST_PASS_FAIL( !ispunct(c), "!ispunct('f')"); - c = '7'; - CYG_TEST_PASS_FAIL( !ispunct(c), "!ispunct('7')"); - c = '\n'; - CYG_TEST_PASS_FAIL( !ispunct(c), "!ispunct('newline')"); - - // Check isspace - c = ' '; - CYG_TEST_PASS_FAIL( isspace(c), "isspace(' ')"); - c = '\t'; - CYG_TEST_PASS_FAIL( isspace(c), "isspace(tab)"); - c = '\r'; - CYG_TEST_PASS_FAIL( isspace(c), "isspace(return)"); - c = '\v'; - CYG_TEST_PASS_FAIL( isspace(c), "isspace(vertical tab)"); - c = '\n'; - CYG_TEST_PASS_FAIL( isspace(c), "isspace(newline)"); - c = 'd'; - CYG_TEST_PASS_FAIL( !isspace(c), "!isspace('d')"); - c = ','; - CYG_TEST_PASS_FAIL( !isspace(c), "!isspace(',')"); - - // Check isupper - c = 'A'; - CYG_TEST_PASS_FAIL( isupper(c), "isupper('A')"); - c = 'a'; - CYG_TEST_PASS_FAIL( !isupper(c), "!isupper('a')"); - c = '2'; - CYG_TEST_PASS_FAIL( !isupper(c), "!isupper('2')"); - c = '\b'; - CYG_TEST_PASS_FAIL( !isupper(c), "!isupper(backspace)"); - - // Check isxdigit - c = 'f'; - CYG_TEST_PASS_FAIL( isxdigit(c), "isxdigit('f')"); - c = 'D'; - CYG_TEST_PASS_FAIL( isxdigit(c), "isxdigit('D')"); - c = '1'; - CYG_TEST_PASS_FAIL( isxdigit(c), "isxdigit('1')"); - c = '0'; - CYG_TEST_PASS_FAIL( isxdigit(c), "isxdigit('0')"); - c = 'g'; - CYG_TEST_PASS_FAIL( !isxdigit(c), "!isxdigit('g')"); - c = 'x'; - CYG_TEST_PASS_FAIL( !isxdigit(c), "!isxdigit('x')"); - - // Check tolower - c = 'F'; - CYG_TEST_PASS_FAIL( tolower(c) == 'f', "tolower('F')"); - c = 'g'; - CYG_TEST_PASS_FAIL( tolower(c) == 'g', "tolower('g')"); - c = '3'; - CYG_TEST_PASS_FAIL( tolower(c) == '3', "tolower('3')"); - - // Check toupper - c = 'f'; - CYG_TEST_PASS_FAIL( toupper(c) == 'F', "toupper('f')"); - c = 'G'; - CYG_TEST_PASS_FAIL( toupper(c) == 'G', "toupper('G')"); - c = ','; - CYG_TEST_PASS_FAIL( toupper(c) == ',', "toupper(',')"); - - CYG_TEST_FINISH( "Finished tests from testcase " __FILE__ " for C library " - " functions" ); -} // main() - -// EOF ctype.c diff --git a/packages/language/c/libc/current/tests/i18n/setlocale.c b/packages/language/c/libc/current/tests/i18n/setlocale.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/i18n/setlocale.c +++ /dev/null @@ -1,149 +0,0 @@ -//================================================================= -// -// setlocale.c -// -// Testcase for C library setlocale() function -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998/8/31 -// Description: Contains testcode for C library setlocale() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - -// CONFIGURATION - -#include // Configuration header - - -// INCLUDES - -#include // header for functions to test -#include // Testcase API -#include // C library initialisation - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#if defined(CYGPKG_LIBC) -static int -my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() -#endif - - -int -main( int argc, char *argv[] ) -{ -#if defined(CYGPKG_LIBC) - char *str; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C " - "library setlocale() function"); - -#if defined(CYGPKG_LIBC) - - // Check 1 - str = setlocale(LC_CTYPE, NULL); - CYG_TEST_PASS_FAIL( !my_strcmp(str, "C" ), - "Initial locale for LC_CTYPE is \"C\"" ); - - // Check 2 - str = setlocale(LC_ALL, NULL); - CYG_TEST_PASS_FAIL( !my_strcmp(str, "#C#C#C#C#C#" ), - "Initial locale for LC_ALL is correct" ); - - // Check 3 - str = setlocale(LC_COLLATE, "C"); - CYG_TEST_PASS_FAIL( !my_strcmp(str, "C" ), - "Set locale for LC_COLLATE to \"C\"" ); - - // Check 4 - str = setlocale(LC_MONETARY, ""); - CYG_TEST_PASS_FAIL( !my_strcmp(str, "C" ), - "Set default locale for LC_MONETARY" ); - str = setlocale(LC_MONETARY, NULL); - CYG_TEST_PASS_FAIL( !my_strcmp(str, "C" ), - "Stored default locale for LC_MONETARY" ); - - // Check 5 - str = setlocale(LC_ALL, "C"); - CYG_TEST_PASS_FAIL( !my_strcmp(str, "C" ), - "Set locale for LC_COLLATE to \"C\"" ); - - // Check 6 - str = setlocale(LC_ALL, ""); - CYG_TEST_PASS_FAIL( !my_strcmp(str, "C" ), - "Set locale for LC_COLLATE to default" ); - - // Check 7 - str = setlocale(LC_ALL, NULL); - CYG_TEST_PASS_FAIL( !my_strcmp(str, "#C#C#C#C#C#" ), - "Get locale for LC_ALL" ); - str = setlocale(LC_ALL, str); - CYG_TEST_PASS_FAIL( !my_strcmp(str, "#C#C#C#C#C#" ), - "Set locale for LC_ALL from retrieved locale" ); - -#else - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // if defined(CYGPKG_LIBC) - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C " - "library setlocale() function"); -} // main() - -// EOF setlocale.c diff --git a/packages/language/c/libc/current/tests/setjmp/setjmp.c b/packages/language/c/libc/current/tests/setjmp/setjmp.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/setjmp/setjmp.c +++ /dev/null @@ -1,252 +0,0 @@ -//=========================================================================== -// -// setjmp.c -// -// Tests for ANSI standard setjmp() and longjmp() functions -// -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998-02-13 -// Purpose: -// Description: Contains test code for C library setjmp() and longjmp() -// functions -// The ANSI standard allows setjmp calls to be used ONLY in the -// forms: -// while (setjmp (jumpbuf)) -// while (setjmp (jumpbuf) < 42) -// while (!setjmp (jumpbuf)) -// setjmp (jumpbuf); -// result = setjmp(jumpbuf); -// -// Or "while" can also be "if" or "switch" or the implicit -// while of "for". -// Usage: -// -//####DESCRIPTIONEND#### -// -//=========================================================================== - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // Test infrastructure header -#include // Header for what we're testing -#include // C library initialisation - -// GLOBALS - -#ifdef CYGPKG_LIBC - -static jmp_buf jbuf, jbuf2, jbuf3; - - -// FUNCTIONS - -static int -test_fun( void ) -{ - volatile int i=0; // add something to the stack to confuse things - - longjmp( jbuf, 5 ); - i+=5; - - return i; -} // test_fun(); - -#endif // ifdef CYGPKG_LIBC - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -int -main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - static int static_i=0; // temporary variable - int j=0; // ditto - volatile int vol_k=0, vol_l=0; // ditto -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "setjmp()/longjmp() functions"); - -#ifdef CYGPKG_LIBC - // Test 1 - if ( setjmp(jbuf) == 0 ) - { - static_i=1; - longjmp(jbuf, 1); - static_i=2; - } // if - - CYG_TEST_PASS_FAIL( static_i==1, "Simple test 1" ); - - // Test 2 - j=2; - - if ( !setjmp(jbuf) ) - { - static_i=3; - longjmp(jbuf, 1); - static_i=4; - j=3; - } // if - - CYG_TEST_PASS_FAIL( (static_i==3) && (j==2), "Simple test 2" ); - - // Test 3 - - static_i=0; - switch (setjmp(jbuf)) - { - case 0: - static_i++; - if (static_i!=1) - CYG_TEST_FAIL("Test of value passed to longjmp()"); - else - longjmp(jbuf, 5); - break; - case 5: - static_i++; - CYG_TEST_PASS_FAIL( (static_i==2),"Test of value passed to longjmp()"); - break; - default: - CYG_TEST_FAIL( "Test of value passed to longjmp()"); - break; - } // switch - - // Test 3 - - static_i=0; - switch (setjmp(jbuf)) - { - case 0: - static_i++; - if (static_i!=1) - CYG_TEST_FAIL("Test of value passed to longjmp() being 0"); - else - longjmp(jbuf, 0); - break; - case 1: - static_i++; - CYG_TEST_PASS_FAIL( (static_i==2), - "Test of value passed to longjmp() being 0"); - break; - default: - CYG_TEST_FAIL( "Test of value passed to longjmp() being 0"); - break; - } // switch - - - // Test 4 - - vol_k=0; - static_i=0; - setjmp( jbuf ); - - static_i++; - setjmp( jbuf2 ); - - static_i++; - setjmp( jbuf3 ); - - if (vol_k==0) - { - vol_k++; - longjmp( jbuf2, 1 ); - } - else - { - CYG_TEST_PASS_FAIL( (vol_k==1) && (static_i==3), "Multiple setjmp's" ); - } - - // Test 5 - - vol_k=3; - if ( (j=setjmp(jbuf)) == 0 ) - { - volatile int l; // put something extra on the stack to confuse things - - vol_k++; - l=test_fun(); - l++; - vol_k=l; - } // if - - CYG_TEST_PASS_FAIL( (j==5) && (vol_k==4), "longjmp from a function" ); - - // Test 6 - - vol_k=0; - - vol_l=setjmp(jbuf); - - vol_k += 3; - - if (!vol_l) - test_fun(); - - vol_l=setjmp(jbuf); - - vol_k += 7; - - if (!vol_l) - test_fun(); - - CYG_TEST_PASS_FAIL ( (vol_k == 20), "Repeated longjmps from a function" ); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "setjmp()/longjmp() functions"); - -} // main() - -// EOF setjmp.c diff --git a/packages/language/c/libc/current/tests/signal/signal1.c b/packages/language/c/libc/current/tests/signal/signal1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/signal/signal1.c +++ /dev/null @@ -1,228 +0,0 @@ -//======================================================================== -// -// signal1.c -// -// ISO C signal handling test -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-18 -// Purpose: Test signal functionality -// Description: This file contains a number of tests for ISO C signal -// handling -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support -#include // Test infrastructure -#include // C library initialisation - -#ifdef CYGPKG_LIBC_SIGNALS -#include // Signal functions -#include // setjmp(), longjmp() -#include // abort() - -// STATICS - -static int state; -static jmp_buf jbuf; - -// PROTOTYPES - -// Private libc abort() function -externC void __abort(void); - -#endif // CYGPKG_LIBC_SIGNALS - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - -#ifdef CYGPKG_LIBC_SIGNALS - -static void -myhandler1(int signal) -{ - CYG_TEST_INFO("myhandler1 called"); - ++state; -} // myhandler1() - -static void -myhandler2(int signal) -{ - CYG_TEST_INFO("myhandler2 called"); - ++state; - longjmp(jbuf, 1); -} // myhandler2() - -#endif // ifdef CYGPKG_LIBC_SIGNALS - -int -main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC_SIGNALS - __sighandler_t handler1; - int rc; - - // special callout to request GDB to alter its handling of signals - CYG_TEST_GDBCMD("handle SIGTERM nostop"); - CYG_TEST_GDBCMD("handle SIGABRT nostop"); - -#endif // ifdef CYGPKG_LIBC_SIGNALS - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C " - "library signal functions"); -#ifdef CYGPKG_LIBC_SIGNALS - - // Test 1 - - CYG_TEST_INFO("Test 1"); - state = 1; - handler1 = signal(SIGTERM, &myhandler1); - - CYG_TEST_PASS_FAIL(handler1 == SIG_DFL, - "SIGTERM handler initialized to default"); - - rc = raise(SIGTERM); - - CYG_TEST_PASS_FAIL(0==rc, "raise(SIGTERM) did not return error"); - - CYG_TEST_PASS_FAIL(2==state, "SIGTERM handler returned correctly"); - - // Test 2 - - CYG_TEST_INFO("Test 2"); - - state = 2; - handler1 = signal(SIGTERM, &myhandler2); - - CYG_TEST_PASS_FAIL(handler1 == SIG_DFL, - "SIGTERM handler reset to default after test 1"); - - handler1 = signal(SIGTERM, &myhandler1); - - CYG_TEST_PASS_FAIL(handler1 == &myhandler2, - "SIGTERM handler was set correctly"); - - rc = raise(SIGTERM); - - CYG_TEST_PASS_FAIL(0==rc, "raise(SIGTERM) did not return error"); - - CYG_TEST_PASS_FAIL(3==state, "SIGTERM handler returned correctly"); - - // Test 3 - - CYG_TEST_INFO("Test 3"); - - handler1 = signal(SIGTERM, &myhandler2); - - CYG_TEST_PASS_FAIL(handler1 == SIG_DFL, - "SIGTERM handler reset to default after test 2"); - - handler1 = signal(SIGTERM, SIG_DFL); - - CYG_TEST_PASS_FAIL(handler1 == &myhandler2, - "SIGTERM handler was set correctly"); - - // Test 4 - - CYG_TEST_INFO("Test 4"); - - state = 4; - handler1 = signal(SIGTERM, SIG_IGN); - - CYG_TEST_PASS_FAIL(handler1 == SIG_DFL, - "SIGTERM handler was set correctly after test 3"); - rc = raise(SIGTERM); - - CYG_TEST_PASS_FAIL(0==rc, "raise(SIGTERM) did not return error"); - - CYG_TEST_PASS_FAIL(4==state, "SIGTERM ignored"); - - // Test 5 - - CYG_TEST_INFO("Test 5"); - - state = 5; - handler1 = signal(SIGTERM, &myhandler2); - - // SIG_IGN doesn't reset back to SIG_DFL after a raise() - CYG_TEST_PASS_FAIL(handler1 == SIG_IGN, - "SIGTERM handler was set correctly after test 4"); - - if (0==setjmp(jbuf)) { - raise(SIGTERM); - CYG_TEST_FAIL("raise returned"); - } - - CYG_TEST_PASS_FAIL(6==state, "SIGTERM handler returned correctly"); - - // Test 6 - - CYG_TEST_INFO("Test 6"); - - state = 6; - handler1 = signal(SIGABRT, &myhandler2); - - CYG_TEST_PASS_FAIL(handler1 == SIG_DFL, - "SIGABRT handler initialized to default"); - - if (0==setjmp(jbuf)) { - abort(); - CYG_TEST_FAIL("abort returned"); - } - - CYG_TEST_PASS_FAIL(7==state, "SIGABRT handler returned correctly"); - -#else - CYG_TEST_NA("Testing not applicable to this configuration"); -#endif - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C " - "library signal functions"); - -} // main() - -// EOF signal1.c diff --git a/packages/language/c/libc/current/tests/signal/signal2.c b/packages/language/c/libc/current/tests/signal/signal2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/signal/signal2.c +++ /dev/null @@ -1,284 +0,0 @@ -//======================================================================== -// -// signal2.c -// -// ISO C signal handling test -// -//======================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//======================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-02-18 -// Purpose: Test hardware signal functionality -// Description: This file contains a number of tests for ISO C signal -// handling when used with hardware exceptions -// Usage: -// -//####DESCRIPTIONEND#### -// -//======================================================================== - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include // Common type definitions and support -#include // Test infrastructure -#include // C library initialisation - -#ifdef CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS - -#include // exception ranges & - // HAL_VSR_SET_TO_ECOS_HANDLER - -#include // Signal functions -#include // setjmp(), longjmp() - -// STATICS - -static int state; -static jmp_buf jbuf; -#endif - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - -#ifdef CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS - -static void -myhandler(int sig) -{ - __sighandler_t handler1; - - CYG_TEST_INFO("myhandler() called"); - ++state; - - handler1 = signal(sig, &myhandler); - - CYG_TEST_PASS_FAIL(handler1 == SIG_DFL, - "handler reset itself to default"); - - longjmp(jbuf, 1); -} // myhandler() - -static void -cause_memerror(void) -{ - volatile int x; - volatile CYG_ADDRESS p=(CYG_ADDRESS) &state; - - do { - // do a read which prevents us accidentally writing over something - // important. Make it misaligned to increase the chances of an - // exception happening - x = *(volatile int *)(p+1); - p += (CYG_ADDRESS)0x100000; - } while(p != 0); -} // cause_memerror() - -// num must always be 0 - do it this way in case the optimizer tries to -// get smart -static int -cause_fpe(int num) -{ - double a; - - a = 1.0/num; // Depending on FPU emulation and/or - // the FPU architecture, this may - // cause an exception. - // (float division by zero) - - return ((int)a)/num; // This may cause an exception if - // the architecture supports it. - // (integer division by zero). -} // cause_fpe() - -#endif - -int -main( int argc, char *argv[] ) -{ -#ifdef CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS - __sighandler_t handler1; - - // special callout to request GDB to alter its handling of signals - CYG_TEST_GDBCMD("handle SIGBUS nostop"); - CYG_TEST_GDBCMD("handle SIGSEGV nostop"); - CYG_TEST_GDBCMD("handle SIGILL nostop"); - CYG_TEST_GDBCMD("handle SIGFPE nostop"); - CYG_TEST_GDBCMD("handle SIGSYS nostop"); - -// Not sure about this - Jifl. Do any of our targets generate SIGTRAP anyway? -#if 0 -#ifndef CYGPKG_HAL_I386_LINUX - CYG_TEST_GDBCMD("handle SIGTRAP nostop pass"); -#endif -#endif -#endif // ifdef CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS - - CYG_TEST_INIT(); - -#ifdef CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS - // Avoid compiler warnings if tests are not applicable. - if (0) cause_memerror(); - if (0) cause_fpe(0); -#endif - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C " - "library signal functions"); - -// Now reset the exception handlers various to eCos handlers so that we -// have control; this is the target side equivalent of the CYG_TEST_GDBCMD -// lines above: -#ifdef HAL_VSR_SET_TO_ECOS_HANDLER - // Reclaim the VSR off CygMon possibly -#ifdef CYGNUM_HAL_EXCEPTION_DATA_ACCESS - HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_DATA_ACCESS, NULL ); -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DATA_TLBMISS_ACCESS - HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_DATA_TLBMISS_ACCESS, NULL ); -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS - HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS, NULL ); -#endif -#ifdef CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION - HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION, NULL ); -#endif -#ifdef CYGNUM_HAL_EXCEPTION_DIV_BY_ZERO - HAL_VSR_SET_TO_ECOS_HANDLER( CYGNUM_HAL_EXCEPTION_DIV_BY_ZERO, NULL ); -#endif -#endif - -#ifdef CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS - - - // Test 1 - - CYG_TEST_INFO("Test 1"); - - handler1 = signal(SIGSEGV, &myhandler); - - CYG_TEST_PASS_FAIL(handler1 == SIG_DFL, - "SIGSEGV handler initialized to default"); - - - handler1 = signal(SIGBUS, &myhandler); - - CYG_TEST_PASS_FAIL(handler1 == SIG_DFL, - "SIGBUS handler initialized to default"); - - - handler1 = signal(SIGILL, &myhandler); - - CYG_TEST_PASS_FAIL(handler1 == SIG_DFL, - "SIGILL handler initialized to default"); - - handler1 = signal(SIGSYS, &myhandler); - - CYG_TEST_PASS_FAIL(handler1 == SIG_DFL, - "SIGSYS handler initialized to default"); - - handler1 = signal(SIGTRAP, &myhandler); - - CYG_TEST_PASS_FAIL(handler1 == SIG_DFL, - "SIGTRAP handler initialized to default"); - - handler1 = signal(SIGFPE, &myhandler); - - CYG_TEST_PASS_FAIL(handler1 == SIG_DFL, - "SIGFPE handler initialized to default"); - - // Test 2 - - CYG_TEST_INFO("Test 2"); - - state = 2; - -#if 0 -#elif defined(CYGPKG_HAL_POWERPC_SIM) - // The exception generated by the SIM is not recognized by GDB. - // PR 19945 workaround. - CYG_TEST_PASS("Test 2 not applicable to PowerPC SIM"); -#else - if (0==setjmp(jbuf)) { - cause_memerror(); - CYG_TEST_FAIL("Didn't cause exception"); - } - - CYG_TEST_PASS_FAIL(3==state, "handler returned correctly"); -#endif - - // Test 3 - - CYG_TEST_INFO("Test 3"); - - state = 3; - -#if 0 -#elif defined(CYGPKG_HAL_SH_7708) - CYG_TEST_PASS("Test 3 not applicable to sh 7708"); -#elif defined(CYGPKG_HAL_MN10300) - CYG_TEST_PASS("Test 3 not applicable to mn10300"); -#elif defined(CYGPKG_HAL_MIPS_TX39) - CYG_TEST_PASS("Test 3 not applicable to mips-tx39"); -#elif defined(CYGPKG_HAL_SPARCLITE) - CYG_TEST_PASS("Test 3 not applicable to sparclite"); -#elif defined(CYGPKG_HAL_I386_LINUX) - CYG_TEST_PASS("Test 3 not applicable to i386/Linux"); - // See linux.S for details. -#elif defined(CYGPKG_HAL_POWERPC) - CYG_TEST_PASS("Test 3 not applicable to PowerPC"); -#elif defined(CYGPKG_HAL_ARM) - CYG_TEST_PASS("Test 3 not applicable to ARM"); -#else - - if (0==setjmp(jbuf)) { - (void)cause_fpe(0); - CYG_TEST_FAIL("Didn't cause exception"); - } - - CYG_TEST_PASS_FAIL(4==state, "handler returned correctly"); -#endif - -#else - CYG_TEST_NA("Testing not applicable to this configuration"); -#endif - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C " - "library signal functions"); - -} // main() - -// EOF signal2.c diff --git a/packages/language/c/libc/current/tests/stdio/sprintf1.c b/packages/language/c/libc/current/tests/stdio/sprintf1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdio/sprintf1.c +++ /dev/null @@ -1,618 +0,0 @@ -//================================================================= -// -// sprintf1.c -// -// Testcase for C library sprintf() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library sprintf() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - - -// CONFIGURATION - -#include // Configuration header - - -// INCLUDES - -#include -#include -#include // C library initialisation - -// HOW TO START TESTS - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// Functions to avoid having to use libc strings - -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - - - -static void test(CYG_ADDRWORD data) -{ - static char x[500]; - static char y[500]; - int ret; - int tmp; - int *ptr; - - - // Check 1 - ret = sprintf(x, "%d", 20); - CYG_TEST_PASS_FAIL(my_strcmp(x, "20")==0, "%d test"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "%d test return code"); - - // Check 2 - my_strcpy(y, "Pigs noses. Get 'em while there 'ot"); - ret = sprintf(x, "%s", y); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%s test"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "%s test return code"); - - // Check 3 - ret = sprintf(x, "||%7d||", 2378); - CYG_TEST_PASS_FAIL(my_strcmp(x, "|| 2378||")==0, "padding test"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "padding test return code"); - - // Check 4 - ret = sprintf(x, "%x", 3573); - CYG_TEST_PASS_FAIL(my_strcmp(x, "df5")==0, "hex conversion (lowercase)"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "hex conv (lowercase) return code"); - - // Check 5 - ret = sprintf(x, "%X", 3573); - CYG_TEST_PASS_FAIL(my_strcmp(x, "DF5")==0, "hex conversion (uppercase)"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "hex conv (upperbase ) return code"); - - // Check 6 - ret = sprintf(x, "%c", 65); - CYG_TEST_PASS_FAIL(my_strcmp(x, "A")==0, "%c test"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "%c test return code"); - - // Check 7 - ret = sprintf(x, "%o",4628); - CYG_TEST_PASS_FAIL(my_strcmp(x, "11024")==0, "octal conversion"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "octal conversion return code"); - - // Check 8 - ret = sprintf(x, "%u", (unsigned int) 4738); - CYG_TEST_PASS_FAIL(my_strcmp(x, "4738")==0, "%u test"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "%u test return code"); - - // Check 9 - ptr = &tmp; - ret = sprintf(x, "1234567x%n||", ptr); - CYG_TEST_PASS_FAIL(tmp==8, "%n test"); - CYG_TEST_PASS_FAIL(ret==10, "%n test return code"); - - // Check 10 - ret = sprintf(x, "%%"); - CYG_TEST_PASS_FAIL(my_strcmp(x, "%")==0, "%% test"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "%% test return code"); - - // Check 11 - ret = sprintf(x, "%ld", (long)1<<30); - CYG_TEST_PASS_FAIL(my_strcmp(x, "1073741824")==0, "%ld test"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "%ld test return code"); - - // Check 12 - ret = sprintf(x, "%lu", (unsigned long)(1<<31) + 100); - CYG_TEST_PASS_FAIL(my_strcmp(x, "2147483748")==0, "%lu test"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "%lu test return code"); - - // Check 13 - ret = sprintf(x, "%x", 0x789a); - CYG_TEST_PASS_FAIL(my_strcmp(x, "789a")==0, "%x test"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "%x test return code"); - - // Check 14 - ret = sprintf(x, "%X", 0x789ab2); - CYG_TEST_PASS_FAIL(my_strcmp(x, "789AB2")==0, "%X test"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "%x test return code"); - - // Check 15 - ret = sprintf(x, "%08x", 0xdea2f2); - CYG_TEST_PASS_FAIL(my_strcmp(x, "00dea2f2")==0, "%0x test"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "%0x test return code"); - - // Check 16 - ret = sprintf(x, "%09X", 0x12fa1c); - CYG_TEST_PASS_FAIL(my_strcmp(x, "00012FA1C")==0, "%0X test"); - CYG_TEST_PASS_FAIL(ret==my_strlen(x), "%0X test return code"); - - // Check 17 - ptr=&tmp; - ret = sprintf(x, "%p", (void *)ptr); - // just check _something_ was returned - CYG_TEST_PASS_FAIL((ret==my_strlen(x)) && (ret > 0), - "%p test return code"); - -#ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - - CYG_TEST_INFO("Starting floating point specific tests"); - - // Check 18 - ret = sprintf(x, "%f", 2.5); - my_strcpy( y, "2.500000" ); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "simple %f test #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "simple %f test #1 return code"); - - // Check 19 - ret = sprintf(x, "hello %f world", 1.234); - my_strcpy( y, "hello 1.234000 world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "simple %f test #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "simple %f test #2 return code"); - - // Check 20 - ret = sprintf(x, "hello%fworld", 2.3456781); - my_strcpy( y, "hello2.345678world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "simple %f test #3"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "simple %f test #3 return code"); - - // Check 21 - ret = sprintf(x, "%s%f%d%s", "testing", -0.591, 3, "123"); - my_strcpy( y, "testing-0.5910003123"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%f mixed with others"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y),"%f mixed with others return code"); - - // Check 22 - ret = sprintf(x, "%s%f%d%s", "testing", -0.591, 3, "123"); - my_strcpy( y, "testing-0.5910003123"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%f mixed with others"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y),"%f mixed with others return code"); - - // Check 23 - ret = sprintf(x, "hello%fworld", 2.3456786); - my_strcpy( y, "hello2.345679world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "rounding test #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "rounding test #1 return code"); - - // Check 24 - ret = sprintf(x, "hello%fworld", -2.3456786); - my_strcpy( y, "hello-2.345679world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "rounding test #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "rounding test #2 return code"); - - // Check 25 - ret = sprintf(x, "hello%+fworld", -6.54321); - my_strcpy( y, "hello-6.543210world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "+ modifier #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "+ modifier #1 return code"); - - // Check 26 - ret = sprintf(x, "hello%+fworld", 6.54321); - my_strcpy( y, "hello+6.543210world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "+ modifier #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "+ modifier #2 return code"); - - // Check 27 - ret = sprintf(x, "hello%5fworld", 6.5); - my_strcpy( y, "hello6.500000world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "width modifier #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "width modifier #1 return code"); - - // Check 28 - ret = sprintf(x, "hello%2fworld", 4.3); - my_strcpy( y, "hello4.300000world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "width modifier #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "width modifier #2 return code"); - - // Check 29 - ret = sprintf(x, "hello%2.1fworld", 5.6); - my_strcpy( y, "hello5.6world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "width and precision modifier #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "width and precision modifier #1 return code"); - - // Check 30 - ret = sprintf(x, "hello%5.1fworld", 6.7); - my_strcpy( y, "hello 6.7world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "width and precision modifier #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "width and precision modifier #2 return code"); - - // Check 31 - ret = sprintf(x, "hello%3.1fworld", 7.8); - my_strcpy( y, "hello7.8world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "width and precision modifier #3"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "width and precision modifier #3 return code"); - - // Check 32 - ret = sprintf(x, "hello%3.2fworld", 7.8); - my_strcpy( y, "hello7.80world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "width and precision modifier #4"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "width and precision modifier #4 return code"); - - // Check 33 - ret = sprintf(x, "hello%05.1fworld", 6.5); - my_strcpy( y, "hello006.5world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "0 modifier #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "0 modifier #1 return code"); - - // Check 34 - ret = sprintf(x, "hello%03.0fworld", 6.2); - my_strcpy( y, "hello006world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "0 modifier #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "0 modifier #2 return code"); - - // Check 35 - ret = sprintf(x, "hello%05.*fworld",2, 7.5); - my_strcpy( y, "hello07.50world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "0 modifier plus *"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "0 modifier plus * return code"); - - // Check 36 - ret = sprintf(x, "hello%03.1fworld",-1.232); - my_strcpy( y, "hello-1.2world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "-ve number with 0 modifier #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "-ve number with 0 modifier #1 return code"); - - // Check 37 - ret = sprintf(x, "hello%04.1fworld",-1.232); - my_strcpy( y, "hello-1.2world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "-ve number with 0 modifier #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "-ve number with 0 modifier #2 return code"); - - // Check 38 - ret = sprintf(x, "hello%05.1fworld",-1.232); - my_strcpy( y, "hello-01.2world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "-ve number with 0 modifier #3"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "-ve number with 0 modifier #3 return code"); - - // Check 39 - ret = sprintf(x, "hello%fworld",0.0); - my_strcpy( y, "hello0.000000world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "0.0 test #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "0.0 test #1 return code"); - - // Check 40 - ret = sprintf(x, "hello%1.0fworld",0.0); - my_strcpy( y, "hello0world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "0.0 test #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "0.0 test #2 return code"); - - // Check 41 - ret = sprintf(x, "hello%1.1fworld",0.0); - my_strcpy( y, "hello0.0world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "0.0 test #3"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "0.0 test #3 return code"); - - // Check 42 - ret = sprintf(x, "hello%5.1fworld",0.0); - my_strcpy( y, "hello 0.0world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "0.0 test #4"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "0.0 test #4 return code"); - - // Check 43 - ret = sprintf(x, "hello%fworld",-0.0); - my_strcpy( y, "hello-0.000000world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "-0.0 test #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "-0.0 test #1 return code"); - - // Check 44 - ret = sprintf(x, "hello%fworld",0.234); - my_strcpy( y, "hello0.234000world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "number less than 1 #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "number less than 1 #1 return code"); - - // Check 45 - ret = sprintf(x, "hello%02fworld",-0.234); - my_strcpy( y, "hello-0.234000world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "number less than 1 #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "number less than 1 #2 return code"); - - // Check 46 - ret = sprintf(x, "hello%02.2fworld",-0.234); - my_strcpy( y, "hello-0.23world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "number less than 1 #3"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "number less than 1 #3 return code"); - - // Check 47 - ret = sprintf(x, "hello%06.2fworld",-0.234); - my_strcpy( y, "hello-00.23world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "number less than 1 #4"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "number less than 1 #4 return code"); - - // Check 48 - ret = sprintf(x, "hello%-6.2fworld",2.345); - my_strcpy( y, "hello2.35 world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "left justification #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "left justification #1 return code"); - - // Check 49 - ret = sprintf(x, "hello%-6.2fworld",2.345); - my_strcpy( y, "hello2.35 world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "left justification #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "left justification #2 return code"); - - // Check 50 - ret = sprintf(x, "hello%-3.2fworld",2.345); - my_strcpy( y, "hello2.35world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "left justification #3"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "left justification #3 return code"); - - // Check 51 - ret = sprintf(x, "hello%#1.0fworld",2.12); - my_strcpy( y, "hello2.world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "# modifier #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "# modifier #1 return code"); - - // Check 52 - ret = sprintf(x, "hello%#1.2fworld",2.0); - my_strcpy( y, "hello2.00world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "# modifier #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "# modifier #2 return code"); - - // Check 53 - ret = sprintf(x, "hello%eworld",2.3456); - my_strcpy( y, "hello2.345600e+00world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%e #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%e #1 return code"); - - // Check 54 - ret = sprintf(x, "hello%4.3eworld",-2.3456e-1); - my_strcpy( y, "hello-2.346e-01world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%e #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%e #2 return code"); - - // Check 55 - ret = sprintf(x, "hello%4.2eworld",2.56e2); - my_strcpy( y, "hello2.56e+02world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%e #3"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%e #3 return code"); - - // Check 56 - ret = sprintf(x, "hello%09.2eworld",2.56e2); - my_strcpy( y, "hello02.56e+02world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%e #4"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%e #4 return code"); - - // Check 57 - ret = sprintf(x, "hello%09.2Eworld",4.23e19); - my_strcpy( y, "hello04.23E+19world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%e #5"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%e #5 return code"); - - // Check 58 - ret = sprintf(x, "hello%gworld",4.0); - my_strcpy( y, "hello4world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%g #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%g #1 return code"); - - // Check 59 - ret = sprintf(x, "hello%gworld",4.56); - my_strcpy( y, "hello4.56world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%g #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%g #2 return code"); - - // Check 60 - ret = sprintf(x, "hello%5.2gworld",4.56); - my_strcpy( y, "hello 4.6world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%g #3"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%g #3 return code"); - - // Check 61 - ret = sprintf(x, "hello%gworld",0.002); - my_strcpy( y, "hello0.002world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%g #4"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%g #4 return code"); - - // Check 62 - ret = sprintf(x, "hello%06.1gworld",0.0026); - my_strcpy( y, "hello00.003world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%g #5"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%g #5 return code"); - - // Check 63 - ret = sprintf(x, "hello%06gworld",0.000026); - my_strcpy( y, "hello2.6e-05world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%g #5"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%g #5 return code"); - - // Check 64 - ret = sprintf(x, "hello%06Gworld",0.000037); - my_strcpy( y, "hello3.7E-05world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%g #6"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%g #6 return code"); - - // Check 65 - ret = sprintf(x, "hello%08Gworld",-123456.0); - my_strcpy( y, "hello-0123456world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%g #7"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%g #7 return code"); - - // Check 66 - ret = sprintf(x, "hello%07gworld",-1234567.0); - my_strcpy( y, "hello-1.23457e+06world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%g #8"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%g #8 return code"); - - // Check 67 - ret = sprintf(x, "hello%013Gworld",-1234567.0); - my_strcpy( y, "hello-01.23457E+06world"); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%g #9"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), "%g #9 return code"); - - -#else - CYG_TEST_PASS("Floating point tests skipped - not configured"); -#endif // ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - - // Long string tests - ret = sprintf(x, "This is a very long string so I hope this works as " - "otherwise I would be very, very, sad. The cat sat on the " - "hat, and the mat sat on the rat. Quick brown fax, etc.etc. " - "blah, blah and all that jazz. Isn't he finished yet? My " - "old man's a dustman, why do I have to think up this " - "drivel, isn't that what summer students are for, if " - "anything that seems thinking up mindless drivel seems to " - "be their occupation in life. Yoof of today, eh? What, " - "what? %s So there.", - "And this is a middly bit."); - my_strcpy(y, "This is a very long string so I hope this works as " - "otherwise I would be very, very, sad. The cat sat on the " - "hat, and the mat sat on the rat. Quick brown fax, etc.etc. " - "blah, blah and all that jazz. Isn't he finished yet? My " - "old man's a dustman, why do I have to think up this " - "drivel, isn't that what summer students are for, if " - "anything that seems thinking up mindless drivel seems to " - "be their occupation in life. Yoof of today, eh? What, " - "what? And this is a middly bit. So there."); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "long (480 char) string output #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "long (480 char) string output #1 return code"); - - ret = sprintf(x, "Boo! This %s So there.", - "is a very long string so I hope this works as " - "otherwise I would be very, very, sad. The cat sat on the " - "hat, and the mat sat on the rat. Quick brown fax, etc.etc. " - "blah, blah and all that jazz. Isn't he finished yet? My " - "old man's a dustman, why do I have to think up this " - "drivel, isn't that what summer students are for, if " - "anything that seems thinking up mindless drivel seems to " - "be their occupation in life. Yoof of today, eh? What, " - "what? And this is a middly bit."); - my_strcpy(y, "Boo! This is a very long string so I hope this works as " - "otherwise I would be very, very, sad. The cat sat on the " - "hat, and the mat sat on the rat. Quick brown fax, etc.etc. " - "blah, blah and all that jazz. Isn't he finished yet? My " - "old man's a dustman, why do I have to think up this " - "drivel, isn't that what summer students are for, if " - "anything that seems thinking up mindless drivel seems to " - "be their occupation in life. Yoof of today, eh? What, " - "what? And this is a middly bit. So there."); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "long (485 char) string output #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(y), - "long (485 char) string output #2 return code"); - - - - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "sprintf() function"); - -} // test() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "sprintf() function"); - CYG_TEST_INFO("These test individual features separately"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); - -} // main() - -// EOF sprintf1.c diff --git a/packages/language/c/libc/current/tests/stdio/sprintf2.c b/packages/language/c/libc/current/tests/stdio/sprintf2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdio/sprintf2.c +++ /dev/null @@ -1,221 +0,0 @@ -//================================================================= -// -// sprintf2.c -// -// Testcase for C library sprintf() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library sprintf() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// HOW TO START TESTS - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -// Functions to avoid having to use libc strings - -static int -my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static int -my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char * -my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - - - -static void -test( CYG_ADDRWORD data ) -{ - static char x[200]; - static char y[200]; - static char z[200]; - int ret; - int tmp; - int *ptr; - - // Check 1 - my_strcpy(x, "I'm afraid the shield generator"); - ptr = &tmp; - ret = sprintf(y, "%s%n will be quite operational - %5d%%%c%05X", x, - ptr, 13, '5', 0x89ab); - my_strcpy( z, "I'm afraid the shield generator will be " - "quite operational - 13%5089AB" ); - CYG_TEST_PASS_FAIL(my_strcmp(y,z) == 0, "%s%n%d%%%c%0X test"); - - CYG_TEST_PASS_FAIL(ret == my_strlen(z), - "%s%n%d%%%c%0X test return code" ); - - CYG_TEST_PASS_FAIL(tmp==31, "%n test"); - - // Check 2 - ret = sprintf(y, "|%5d|%10s|%03d|%c|%o|", 2, "times", 6, '=', 10 ); - my_strcpy(z, "| 2| times|006|=|12|"); - - CYG_TEST_PASS_FAIL(my_strcmp(y,z) == 0, "|%5d|%10s|%03d|%c|%o| test"); - - CYG_TEST_PASS_FAIL(ret == my_strlen(z), - "|%5d|%10s|%03d|%c|%o| test return code" ); - - // Check 3 - ret = snprintf(y, 19, "print up to here >< and not this bit" ); - my_strcpy(z, "print up to here >"); - CYG_TEST_PASS_FAIL(my_strcmp(y,z) == 0, "simple snprintf test #1"); - CYG_TEST_PASS_FAIL(ret == my_strlen(z), - "simple snprintf test #1 return code" ); - - // Check 4 - ret = snprintf(y, 31, "print a bit of this number: %05d nyer", 1234); - my_strcpy(z, "print a bit of this number: 01"); - CYG_TEST_PASS_FAIL(my_strcmp(y,z) == 0, "simple snprintf test #2"); - CYG_TEST_PASS_FAIL(ret == my_strlen(z), - "simple snprintf test #2 return code" ); - -#ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - - CYG_TEST_INFO("Starting floating point specific tests"); - - // Check 5 - ret = sprintf(y, "|%5f|%10s|%03d|%c|%+-5.2G|%010.3G|", - 2.0, "times", 6, '=', 12.0, -2.3451e-6 ); - my_strcpy(z, "|2.000000| times|006|=|+12 |-02.35E-06|"); - - CYG_TEST_PASS_FAIL(my_strcmp(y,z) == 0, - "|%5f|%10s|%03d|%c|%+-5.2G|%010.3G| test"); - - CYG_TEST_PASS_FAIL(ret == my_strlen(z), - "|%5f|%10s|%03d|%c|%+-5.2G|%010.3G| test " - "return code" ); - - // Check 6 - ret = snprintf(y, 20, "bit of this: %g double", 6.431e8); - my_strcpy(z, "bit of this: 6.431e"); - CYG_TEST_PASS_FAIL(my_strcmp(y,z) == 0, - "snprintf double test #1"); - - CYG_TEST_PASS_FAIL(ret == my_strlen(z), - "snprintf double test #1 return code"); - -#endif // ifdef CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ - " for C library sprintf() function"); - -} // test() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C " - "library sprintf() function"); - CYG_TEST_INFO("These test combinations of sprintf() features"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); - -} // main() - -// EOF sprintf2.c diff --git a/packages/language/c/libc/current/tests/stdio/sscanf.c b/packages/language/c/libc/current/tests/stdio/sscanf.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdio/sscanf.c +++ /dev/null @@ -1,323 +0,0 @@ -//================================================================= -// -// sscanf.c -// -// Testcase for C library sscanf() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library sscanf() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// HOW TO START TESTS - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) && defined(CYGFUN_LIBC_STDIO_ungetc) - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) && defined(CYGFUN_LIBC_STDIO_ungetc) - -// Functions to avoid having to use libc strings - -static int -my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0') - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char * -my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - - -static void -test( CYG_ADDRWORD data ) -{ - static char x[300]; - static char y[300]; - char z[20]; - int ret; - int int_test, int_test2, int_test3, int_test4; - - // Check 1 - my_strcpy(x, "20"); - ret = sscanf(x, "%d", &int_test); - CYG_TEST_PASS_FAIL(int_test==20, "%d test"); - CYG_TEST_PASS_FAIL(ret == 1, "%d test return code"); - - // Check 2 - my_strcpy(y, "PigsNoses"); - ret = sscanf(y, "%s", x); - CYG_TEST_PASS_FAIL(my_strcmp(x, y)==0, "%s test"); - CYG_TEST_PASS_FAIL(ret == 1, "%s test return code"); - - // Check 3 - my_strcpy(x, "FE8C"); - ret = sscanf(x, "%X", &int_test); - CYG_TEST_PASS_FAIL(int_test == 65164, "hex read leading zeroes"); - CYG_TEST_PASS_FAIL(ret == 1, "hex read leading zeroes return code"); - - // Check 4 - my_strcpy(x, "000053Ba"); - ret = sscanf(x, "%x", &int_test); - CYG_TEST_PASS_FAIL(int_test == 21434, "hex read leading zeroes"); - CYG_TEST_PASS_FAIL(ret == 1, "hex read leading zeros return code"); - - // Check 5 - my_strcpy(x, "53Ba"); - ret = sscanf(x, "%3x", &int_test); - CYG_TEST_PASS_FAIL(int_test == 1339, "hex read constrained width"); - CYG_TEST_PASS_FAIL(ret == 1, "hex read constrained width return code"); - - // Check 6 - my_strcpy(x, "get the first char test"); - ret = sscanf(x, "%c", &y[0]); - CYG_TEST_PASS_FAIL(y[0] == 'g', "%c test"); - CYG_TEST_PASS_FAIL(ret == 1, "%c test return code"); - - // Check 7 - my_strcpy(x, "-5"); - ret = sscanf(x, "%d", &int_test); - CYG_TEST_PASS_FAIL(int_test == -5, "negative integer"); - CYG_TEST_PASS_FAIL(ret == 1, "negative integer return code"); - - // Check 8 - my_strcpy(x, "53"); - ret = sscanf(x, "%o", &int_test); - CYG_TEST_PASS_FAIL(int_test == 43, "%o test"); - CYG_TEST_PASS_FAIL(ret == 1, "%o test return code"); - - // Check 9 - int_test=10; - my_strcpy(x, "-5 0"); - ret = sscanf(x, "%*d %d", &int_test); - CYG_TEST_PASS_FAIL(int_test == 0, "assignment suppression"); - CYG_TEST_PASS_FAIL(ret == 1, "assignment suppression return code"); - - // Check 10 - int_test=0; - my_strcpy(x, "052"); - ret = sscanf(x, "%i", &int_test); - CYG_TEST_PASS_FAIL(int_test == 42, "octal with %i"); - CYG_TEST_PASS_FAIL(ret == 1, "octal with %i return code"); - - // Check 10 - int_test=0; - my_strcpy(x, "0x05f"); - ret = sscanf(x, "%i", &int_test); - CYG_TEST_PASS_FAIL(int_test == 95, "hex with %i"); - CYG_TEST_PASS_FAIL(ret == 1, "hex with %i return code"); - - // Check 11 - int_test=0; - my_strcpy(x, "+023456"); - ret = sscanf(x, "%u", &int_test); - CYG_TEST_PASS_FAIL(int_test == 23456, "unsigned int with %u"); - CYG_TEST_PASS_FAIL(ret == 1, "unsigned int with %u return code"); - - // Check 12 - my_strcpy(x, "aString 2747 D"); - ret = sscanf(x, "%s %d %c", y, &int_test, z); - CYG_TEST_PASS_FAIL( (my_strcmp(y, "aString")==0) && - (int_test == 2747) && - (z[0] == 'D'), "A few combinations #1"); - CYG_TEST_PASS_FAIL(ret == 3, "Combinations #1 return code"); - - - // Check 13 - my_strcpy(x, "-6 52 awurble 2747 xxx"); - ret = sscanf(x, "%d %u %s %2d %n %c", - &int_test, &int_test2, y, &int_test3, &int_test4, z); - CYG_TEST_PASS_FAIL( (int_test == -6) && (int_test2 == 52) && - (my_strcmp(y, "awurble")==0) && - (int_test3 == 27) && - (int_test4 == 16) && - (z[0] == '4'), "A few combinations #2"); - CYG_TEST_PASS_FAIL(ret == 5, "Combinations #2 return code"); - - -#ifdef CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT - -// How much _relative_ error do we allow? -#define FLT_TOLERANCE 1.0e-3 - -#define MY_FABS(x) ((x) < 0.0 ? -(x) : (x)) - - CYG_TEST_INFO("Starting floating point specific tests"); - - { - float flt_test, wanted; - - // Check 14 - my_strcpy(x, "2.5"); - wanted = 2.5; - ret = sscanf(x, "%f", &flt_test); - CYG_TEST_PASS_FAIL( MY_FABS(flt_test - wanted) < - MY_FABS(wanted * FLT_TOLERANCE), - "Simple %f test #1" ); - CYG_TEST_PASS_FAIL( ret == 1, "Simple %f test #1 return code" ); - - - // Check 15 - my_strcpy(x, "-23.472345"); - wanted = -23.472345; - ret = sscanf(x, "%f", &flt_test); - CYG_TEST_PASS_FAIL( MY_FABS(flt_test - wanted) < - MY_FABS(wanted * FLT_TOLERANCE), - "Simple %f test #2" ); - CYG_TEST_PASS_FAIL( ret == 1, "Simple %f test #2 return code" ); - - // Check 16 - my_strcpy(x, "0.0"); - ret = sscanf(x, "%f", &flt_test); - CYG_TEST_PASS_FAIL( flt_test==0.0, "Simple %f test 0.0" ); - CYG_TEST_PASS_FAIL( ret == 1, "Simple %f test 0.0 return code" ); - - - // Check 17 - my_strcpy(x, "-2.6334e00"); - wanted = -2.6334; - ret = sscanf(x, "%e", &flt_test); - CYG_TEST_PASS_FAIL( MY_FABS(flt_test - wanted) < - MY_FABS(wanted * FLT_TOLERANCE), - "Simple %e test #1" ); - CYG_TEST_PASS_FAIL( ret == 1, "Simple %e test #1 return code" ); - - - // Check 18 - my_strcpy(x, "-2.56789e-06"); - wanted = -2.56789e-06; - ret = sscanf(x, "%e", &flt_test); - CYG_TEST_PASS_FAIL( MY_FABS(flt_test-wanted) < - MY_FABS(wanted * FLT_TOLERANCE), - "Simple %e test #2" ); - CYG_TEST_PASS_FAIL( ret == 1, "Simple %e test #2 return code" ); - - - // Check 19 - my_strcpy(x, "-2.12389e-06"); - wanted = -2.12389e-06; - ret = sscanf(x, "%g", &flt_test); - CYG_TEST_PASS_FAIL( MY_FABS(flt_test-wanted) < - MY_FABS(wanted * FLT_TOLERANCE), - "Simple %g test #1" ); - CYG_TEST_PASS_FAIL( ret == 1, "Simple %g test #1 return code" ); - - // Check 20 - my_strcpy(x, "1.3423345"); - wanted = 1.342335; - ret = sscanf(x, "%g", &flt_test); - CYG_TEST_PASS_FAIL( MY_FABS(flt_test-wanted) < - MY_FABS(wanted * FLT_TOLERANCE), - "Simple %g test #2" ); - CYG_TEST_PASS_FAIL( ret == 1, "Simple %g test #2 return code" ); - - - } // compound - -#else - CYG_TEST_PASS("Floating point tests skipped - not configured"); -#endif // ifdef CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT - - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "sscanf() function"); - -} // test() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) && defined(CYGFUN_LIBC_STDIO_ungetc) - - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "sscanf() function"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); -} // main() - - -// EOF sscanf.c diff --git a/packages/language/c/libc/current/tests/stdio/stdiooutput.c b/packages/language/c/libc/current/tests/stdio/stdiooutput.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdio/stdiooutput.c +++ /dev/null @@ -1,233 +0,0 @@ -//================================================================= -// -// stdiooutput.c -// -// Testcase for miscellaneous C library output functions -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998/9/4 -// Description: Contains testcode for C library stdio output -// functions -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // All the stdio functions -#include // errno -#include // Testcase API -#include // C library initialisation - -// HOW TO START TESTS - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - - -static void -test( CYG_ADDRWORD data ) -{ - int i; - - - // Check 1 - CYG_TEST_INFO("Expect: Hello printf world 42!"); - printf("Hello printf %s %d!\n", "world", 42); - - // Check 2 - CYG_TEST_INFO("Expect: This is fprintf 0x07f!"); - fprintf(stdout, "This is fprintf 0x%03x!\n", 0x7f); - - // Check 3 - CYG_TEST_INFO("Expect: char tests"); - fputc( 'c', stderr ); - putc( 'h', stdout ); - putchar( 'a' ); - fputc( 'r', stdout ); - putchar( ' ' ); - fflush(stdout); - putc( 't', stderr ); - fputc( 'e', stdout ); - putchar( 's' ); - fflush( NULL ); - putc( 't', stderr ); - fputc( 's', stderr ); - putchar( '\n' ); - - // Check 4 - CYG_TEST_INFO("Expect: puts test"); - puts("puts test"); - - // Check 5 - CYG_TEST_INFO("Expect: fputs test"); - fputs( "fputs test\n", stdout ); - - // Check 6 - CYG_TEST_INFO("Expect: fwrite test"); - fwrite( "fwrite test\n", 6, 2, stderr ); - - // Check 7 - CYG_TEST_INFO("Expect: wibble: No error"); - errno = ENOERR; - perror( "wibble" ); - - // Check 8 - CYG_TEST_INFO("Expect: Long string test!\nSitting on the side of the " - "highway waiting to catch speeding drivers, a State " - "Police Officer sees a car puttering along at 22 MPH. " - "He thinks to himself, \"This driver is just as " - "dangerous as a speeder!\" So he turns on his lights " - "and pulls the driver over. Approaching the car, " - "he notices that there are five old ladies-two in " - "the front seat and three in the back-wide eyed and " - "white as ghosts. The driver, obviously confused, says " - "to him, \"Officer, I don't understand, I was doing " - "exactly the speed limit! What seems to be the " - "problem?\" \"Ma'am,\" the officer replies, \"you " - "weren't speeding, but you should know that driving " - "slower than the speed limit can also be a danger to " - "other drivers.\" \"Slower than the speed limit? No " - "sir, I was doing the speed limit exactly...Twenty-two " - "miles an hour!\" the old woman says a bit proudly. " - "The State Police officer, trying to contain a " - "chuckle explains to her that \"22\" was the route " - "number, not the speed limit. A bit embarrassed, the " - "woman grinned and thanked the officer for pointing " - "out her error. \"But before I let you go, Ma'am, I " - "have to ask... Is everyone in this car OK? These " - "women seem awfully shaken and they haven't muttered a " - "single peep this whole time,\" the officer asks. \"Oh, " - "they'll be all right in a minute officer. We just got " - "off Route 119\"."); - - printf("Long string test!\nSitting on the side of the " - "highway waiting to catch speeding drivers, a State " - "Police Officer sees a car puttering along at %d MPH. " - "He thinks to himself, \"This driver is just as " - "dangerous as a speeder!\" So he turns on his lights " - "and pulls the driver over. Approaching the car, " - "he notices that there are five old ladies-two in " - "the front seat and three in the back-wide eyed and " - "white as ghosts. The driver, obviously confused, says " - "to him, \"Officer, I don't understand, I was doing " - "exactly the speed limit! What seems to be the " - "problem?\" \"Ma'am,\" the officer replies, \"you " - "weren't speeding, but you should know that driving " - "slower than the speed limit can also be a danger to " - "other drivers.\" \"Slower than the speed limit? No " - "sir, I was doing the speed limit exactly...Twenty-two " - "miles an hour!\" the old woman says a bit proudly. " - "The State Police officer, trying to contain a " - "chuckle explains to her that \"%d\" was the route " - "number, not the speed limit. A bit embarrassed, the " - "%coman grinned and thanked the officer for pointing " - "out her error. \"But before I let you go, Ma'am, I " - "have to ask... Is everyone in this car OK? These " - "women seem awfully shaken and they haven't muttered a " - "single peep this whole time,\" the officer asks. \"Oh, " - "they'll be all right in a minute officer. We just got " - "off Route %d\".\n", 22, 22, 'w', 119); - - // Check 9 - CYG_TEST_INFO("Expect: Another puts test, just for fun"); - puts("Another puts test, just for fun"); - - // Check 10 - CYG_TEST_INFO("Expect: more fputs testing"); - fputs( "more fputs testing\n", stderr ); - - // Check 11 - CYG_TEST_INFO("Expect all the numbers from 1 to 100 in 5 columns"); - for (i=1; i<101; ++i) { - - printf("%5d ", i); - if (i%5 == 0) - fputc( '\n', stdout); - - } // for - - CYG_TEST_PASS("Stdio output tests completed"); - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ - " for C library stdio output functions"); - -} // test() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO) - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C " - "library stdio output functions"); - CYG_TEST_INFO("The output of these tests needs to be manually " - "verified."); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); - -} // main() - -// EOF stdiooutput.c diff --git a/packages/language/c/libc/current/tests/stdlib/abs.c b/packages/language/c/libc/current/tests/stdlib/abs.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/abs.c +++ /dev/null @@ -1,110 +0,0 @@ -//================================================================= -// -// abs.c -// -// Testcase for C library abs() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1999-02-12 -// Description: Contains testcode for C library abs() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include -#include // C library initialisation - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -int -main( int argc, char *argv[] ) -{ - int x; - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C " - "library abs() function"); - - // Check 1 - x = 5; - CYG_TEST_PASS_FAIL( abs(x) == 5, "abs(5)"); - - // Check 2 - x = -5; - CYG_TEST_PASS_FAIL( abs(x) == 5, "abs(-5)"); - - // Check 3 - x = 12345; - CYG_TEST_PASS_FAIL( abs(x) == 12345, "abs(12345)"); - - // Check 4 - x = -23456; - CYG_TEST_PASS_FAIL( abs(x) == 23456, "abs(-23456"); - - // Check 5 - x = 0; - CYG_TEST_PASS_FAIL( abs(x) == 0, "abs(0)"); - - // Check 6 - x = INT_MAX; - CYG_TEST_PASS_FAIL( abs(x) == INT_MAX, "abs(INT_MAX)"); - - // Check 7 - x = -INT_MAX; - CYG_TEST_PASS_FAIL( abs(x) == INT_MAX, "abs(-INT_MAX)"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C " - "library abs() function"); - -} // main() - -// EOF abs.c diff --git a/packages/language/c/libc/current/tests/stdlib/atexit.c b/packages/language/c/libc/current/tests/stdlib/atexit.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/atexit.c +++ /dev/null @@ -1,138 +0,0 @@ -//================================================================= -// -// atexit.c -// -// Testcase for C library atexit() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-03 -// Description: Contains testcode for C library atexit() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // Main header for stdlib functions -#include // Testcase API -#include // C library initialisation - - -// STATICS - -static int stage; -static int failed; - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -static void -myfun1( void ) -{ - if (!failed) - { - CYG_TEST_PASS_FAIL( stage==0, "first function called correctly" ); - stage=1; - } // if -} // myfun1() - -static void -myfun2( void ) -{ - if (!failed) - { - CYG_TEST_PASS_FAIL( stage==1, "Second function called correctly" ); - stage=2; - } // if -} // myfun2() - -static void -myfun3( void ) -{ - if (!failed) - { - CYG_TEST_PASS_FAIL( stage==2, "Second function called correctly" ); - stage=3; - } // if - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C " - "library atexit() function"); - -} // myfun3() - -int -main( int argc, char *argv[] ) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C " - "library atexit() function"); - -#if defined(CYGFUN_LIBC_ATEXIT) - - // we only have one test in us! We can only exit once :-) - - CYG_TEST_PASS_FAIL( atexit(&myfun3)==0, - "Simple registration of first atexit() function" ); - - CYG_TEST_PASS_FAIL( atexit(&myfun2)==0, - "Simple registration of second atexit() function" ); - - CYG_TEST_PASS_FAIL( atexit(&myfun1)==0, - "Simple registration of third atexit() function" ); - - return 0; -#else - CYG_TEST_NA("Testing is not applicable to this configuration"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C " - "library atexit() function"); - -#endif // if defined(CYGFUN_LIBC_ATEXIT) - -} // main() - -// EOF atexit.c diff --git a/packages/language/c/libc/current/tests/stdlib/atoi.c b/packages/language/c/libc/current/tests/stdlib/atoi.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/atoi.c +++ /dev/null @@ -1,137 +0,0 @@ -//================================================================= -// -// atoi.c -// -// Testcase for C library atoi() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library atoi() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// HOW TO START TESTS - -#if defined(CYGPKG_LIBC) - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#ifdef CYGPKG_LIBC - -static char * -my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - - -static void -test( CYG_ADDRWORD data ) -{ - char x[30]; - - // Check 1 - my_strcpy(x, "20"); - CYG_TEST_PASS_FAIL( atoi(x) == 20, "atoi(20)"); - - // Check 2 - my_strcpy(x, "1972"); - CYG_TEST_PASS_FAIL( atoi(x) == 1972, "atoi(1972)"); - - // Check 3 - my_strcpy(x, "-9876"); - CYG_TEST_PASS_FAIL( atoi(x) == -9876, "atoi(-9876)"); - - // Check 4 - my_strcpy(x, " -9876xxx"); - CYG_TEST_PASS_FAIL( atoi(x) == -9876, "atoi( -9876xxx)"); - - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "atoi() function"); -} // test() - -#endif // ifndef CYGPKG_LIBC - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "atoi() function"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); -} // main() - -// EOF atoi.c diff --git a/packages/language/c/libc/current/tests/stdlib/atol.c b/packages/language/c/libc/current/tests/stdlib/atol.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/atol.c +++ /dev/null @@ -1,136 +0,0 @@ -//================================================================= -// -// atol.c -// -// Testcase for C library atol() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library atol() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// HOW TO START TESTS - -#if defined(CYGPKG_LIBC) - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#ifdef CYGPKG_LIBC -static char * -my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - - -static void -test( CYG_ADDRWORD data ) -{ - char x[30]; - - // Check 1 - my_strcpy(x, "20"); - CYG_TEST_PASS_FAIL( atol(x) == 20, "atol(20)"); - - // Check 2 - my_strcpy(x, "1972"); - CYG_TEST_PASS_FAIL( atol(x) == 1972, "atol(1972)"); - - // Check 3 - my_strcpy(x, "-98765"); - CYG_TEST_PASS_FAIL( atol(x) == -98765, "atol(-98765)"); - - // Check 4 - my_strcpy(x, " -98765xxx"); - CYG_TEST_PASS_FAIL( atol(x) == -98765, "atol( -98765xxx)"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "atol() function"); -} // test() - -#endif // ifndef CYGPKG_LIBC - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "atol() function"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); -} // main() - -// EOF atol.c diff --git a/packages/language/c/libc/current/tests/stdlib/bsearch.c b/packages/language/c/libc/current/tests/stdlib/bsearch.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/bsearch.c +++ /dev/null @@ -1,150 +0,0 @@ -//================================================================= -// -// bsearch.c -// -// Testcase for C library bsearch() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library bsearch() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#ifdef CYGPKG_LIBC -static int -Compar( const void *int1, const void *int2 ) -{ - if ( *(int*)int1 < *(int*)int2 ) - return -1; - else if ( *(int*)int1 == *(int*)int2 ) - return 0; - else - return 1; -} // Compar() -#endif - -int -main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - int key; - int *result; - int i_array[] = {1, 5, 8, 35, 84, 258, 1022, 1022, 5300, 7372, 9029}; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "bsearch() function"); - -#ifdef CYGPKG_LIBC - // Test 1 - key = 8; - result = bsearch(&key, i_array, sizeof(i_array)/sizeof(i_array[0]), - sizeof(i_array[0]), &Compar); - CYG_TEST_PASS_FAIL( (result!=NULL) && (*result == 8), - "bsearch() something in the middle"); - - // Test 2 - key = 5300; - result = bsearch(&key, i_array, sizeof(i_array)/sizeof(i_array[0]), - sizeof(i_array[0]), &Compar); - CYG_TEST_PASS_FAIL( (result!=NULL) && (*result == 5300), - "bsearch() something else in the middle"); - - // Test 3 - key = 1; - result = bsearch(&key, i_array, sizeof(i_array)/sizeof(i_array[0]), - sizeof(i_array[0]), &Compar); - CYG_TEST_PASS_FAIL( (result!=NULL) && (*result == 1), - "bsearch() first element"); - - // Test 4 - key = 9029; - result = bsearch(&key, i_array, sizeof(i_array)/sizeof(i_array[0]), - sizeof(i_array[0]), &Compar); - CYG_TEST_PASS_FAIL( (result!=NULL) && (*result == 9029), - "bsearch() last element"); - - // Test 5 - key = 1022; - result = bsearch(&key, i_array, sizeof(i_array)/sizeof(i_array[0]), - sizeof(i_array[0]), &Compar); - CYG_TEST_PASS_FAIL( (result!=NULL) && (*result == 1022), - "bsearch() duplicate element"); - - // Test 6 - key = 2; - result = bsearch(&key, i_array, sizeof(i_array)/sizeof(i_array[0]), - sizeof(i_array[0]), &Compar); - CYG_TEST_PASS_FAIL( result==NULL, "bsearch() nonexistent element"); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "bsearch() function"); - -} // main() - - -// EOF bsearch.c diff --git a/packages/language/c/libc/current/tests/stdlib/div.c b/packages/language/c/libc/current/tests/stdlib/div.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/div.c +++ /dev/null @@ -1,122 +0,0 @@ -//================================================================= -// -// div.c -// -// Testcase for C library div() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1999-03-03 -// Description: Contains testcode for C library div() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - -// INCLUDES - -#include -#include -#include // C library initialisation - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -int -main( int argc, char *argv[] ) -{ - int num, denom; - div_t result; - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "div() function"); - - num = 10232; - denom = 43; - result = div(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==237) && (result.rem==41), - "div( 10232, 43 )"); - - num = 4232; - denom = 2000; - result = div(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==2) && (result.rem==232), - "div( 4232, 2000 )"); - - - num = 20; - denom = 20; - result = div(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==1) && (result.rem==0), - "div( 20, 20 )"); - - num = -5; - denom = 4; - result = div(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==-1) && (result.rem==-1), - "div( -5, 4 )"); - - num = 5; - denom = -4; - result = div(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==-1) && (result.rem==1), - "div( 5, -4 )"); - - num = -5; - denom = -3; - result = div(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==1) && (result.rem==-2), - "div( -5, -3 )"); - - num = -7; - denom = -7; - result = div(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==1) && (result.rem==0), - "div( -7, -7 )"); - - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "div() function"); - -} // main() - -// EOF div.c diff --git a/packages/language/c/libc/current/tests/stdlib/getenv.c b/packages/language/c/libc/current/tests/stdlib/getenv.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/getenv.c +++ /dev/null @@ -1,164 +0,0 @@ -//================================================================= -// -// getenv.c -// -// Testcase for C library getenv() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998/8/31 -// Description: Contains testcode for C library getenv() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // Main header for stdlib functions -#include // Testcase API -#include // C library initialisation - -// GLOBALS - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_ENVIRONMENT) -extern char **environ; // Standard environment definition -#endif - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_ENVIRONMENT) -static int -my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() -#endif - -int -main( int argc, char *argv[] ) -{ -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_ENVIRONMENT) - char *str; - - char *env1[] = { NULL }; - char *env2[] = { "WIBBLE=fred", NULL }; - char *env3[] = { "PATH=/usr/local/bin:/usr/bin", - "HOME=/home/fred", - "TEST=1234=5678", - "home=hatstand", - NULL }; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C " - "library getenv() function"); - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_ENVIRONMENT) - - // Check 1 - str = getenv("ThisIsAVeryUnlikelyName"); - CYG_TEST_PASS_FAIL( str==NULL, "Simple getenv() default environ" ); - - // Check 2 - environ = (char **)&env1; - str = getenv("wibble"); - CYG_TEST_PASS_FAIL( str==NULL, "Simple getenv() with empty environ" ); - - // Check 3 - environ = (char **)&env2; - str = getenv("WIBBLE"); - CYG_TEST_PASS_FAIL( (str != NULL) && !my_strcmp(str, "fred"), - "Simple getenv()" ); - - // Check 4 - str = getenv("wibble"); - CYG_TEST_PASS_FAIL( str==NULL, - "Simple getenv() for something not in the " - "environment" ); - - // Check 5 - environ = (char **)&env3; - str = getenv("PATH"); - CYG_TEST_PASS_FAIL( (str!= NULL) && - !my_strcmp(str,"/usr/local/bin:/usr/bin"), - "Multiple string environment" ); - - // Check 6 - str = getenv("PATh"); - CYG_TEST_PASS_FAIL( str==NULL, "getenv() for something not in the " - "environment for multiple string environment" ); - - // Check 7 - str = getenv("home"); - CYG_TEST_PASS_FAIL( (str != NULL) && !my_strcmp(str, "hatstand"), - "Case-sensitive environment names" ); - - // Check 8 - str = getenv("TEST"); - CYG_TEST_PASS_FAIL( (str != NULL) && !my_strcmp(str, "1234=5678"), - "environment value containing '='" ); - - -#else - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_ENVIRONMENT) - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C " - "library getenv() function"); - -} // main() - -// EOF getenv.c diff --git a/packages/language/c/libc/current/tests/stdlib/labs.c b/packages/language/c/libc/current/tests/stdlib/labs.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/labs.c +++ /dev/null @@ -1,115 +0,0 @@ -//================================================================= -// -// labs.c -// -// Testcase for C library labs() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library labs() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -int -main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - int x; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "labs() function"); - -#ifdef CYGPKG_LIBC - // Check 1 - x = 5; - CYG_TEST_PASS_FAIL( labs(x) == 5, "labs(5)"); - - // Check 2 - x = -5; - CYG_TEST_PASS_FAIL( labs(x) == 5, "labs(-5)"); - - // Check 3 - x = 12345; - CYG_TEST_PASS_FAIL( labs(x) == 12345, "labs(12345)"); - - // Check 4 - x = -23456; - CYG_TEST_PASS_FAIL( labs(x) == 23456, "labs(-23456"); - - // Check 5 - x = 3456789; - CYG_TEST_PASS_FAIL( labs(x) == 3456789, "labs(3456789"); - - // Check 6 - x = -23456789; - CYG_TEST_PASS_FAIL( labs(x) == 23456789, "labs(-23456789"); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "labs() function"); -} // main() - -// EOF labs.c diff --git a/packages/language/c/libc/current/tests/stdlib/ldiv.c b/packages/language/c/libc/current/tests/stdlib/ldiv.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/ldiv.c +++ /dev/null @@ -1,133 +0,0 @@ -//================================================================= -// -// ldiv.c -// -// Testcase for C library ldiv() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1999-02-03 -// Description: Contains testcode for C library ldiv() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -int -main( int argc, char *argv[] ) -{ - long num, denom; - ldiv_t result; - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "ldiv() function"); - - num = 10232; - denom = 43; - result = ldiv(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==237) && (result.rem==41), - "ldiv( 10232, 43 )"); - - num = 4232; - denom = 2000; - result = ldiv(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==2) && (result.rem==232), - "ldiv( 4232, 2000 )"); - - num = 20; - denom = 20; - result = ldiv(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==1) && (result.rem==0), - "ldiv( 20, 20 )"); - - num = -5; - denom = 4; - result = ldiv(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==-1) && (result.rem==-1), - "ldiv( -5, 4 )"); - - num = 5; - denom = -4; - result = ldiv(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==-1) && (result.rem==1), - "ldiv( 5, -4 )"); - - num = -5; - denom = -3; - result = ldiv(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==1) && (result.rem==-2), - "ldiv( -5, -3 )"); - - num = -7; - denom = -7; - result = ldiv(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==1) && (result.rem==0), - "ldiv( -7, -7 )"); - - num = 90123456; - denom = 12345678; - result = ldiv(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==7) && (result.rem==3703710), - "ldiv( 90123456, 12345678 )"); - - num = 90123456; - denom = 123; - result = ldiv(num, denom); - CYG_TEST_PASS_FAIL( (result.quot==732711) && (result.rem==3), - "ldiv( 90123456, 123 )"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "ldiv() function"); - -} // main() - -// EOF ldiv.c diff --git a/packages/language/c/libc/current/tests/stdlib/malloc1.c b/packages/language/c/libc/current/tests/stdlib/malloc1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/malloc1.c +++ /dev/null @@ -1,238 +0,0 @@ -//================================================================= -// -// malloc1.c -// -// Testcase for C library malloc(), calloc() and free() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library malloc(), calloc() and -// free() functions -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - -// INCLUDES - -#include // config header for C library so we can know size - // of malloc pool -#include -#include -#include // C library initialisation - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -int -main( int argc, char *argv[] ) -{ -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) - int *i; - char *str, *str2, *str3; - int j; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "malloc(), calloc() and free() functions"); - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) - - // Test 1 - i = (int *) malloc( sizeof(int) ); - - // check if it should fit into pool - if (sizeof(int) > CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE) - { - // didn't fit into pool, so should be NULL - CYG_TEST_PASS_FAIL( i == NULL, - "1 int malloc with no space left works" ); - } - else - { - // since it should fit into pool, we can fiddle with i - *i=-12345; - CYG_TEST_PASS_FAIL( i && (*i==-12345), - "1 int malloc with space left works" ); - free(i); - } // else - - // Test 2 - str=(char *) malloc( 4096 ); - - if ( 4096 > CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE) - { - // didn't fit into pool, so should be NULL - CYG_TEST_PASS_FAIL( str == NULL,"4K string with no space left works" ); - } - else - { - // since it should fit into pool, we can fiddle with it. - for (j=0; j<1024; j++) - { - str[j*4] = 'f'; - str[(j*4)+1] = 'r'; - str[(j*4)+2] = 'e'; - str[(j*4)+3] = 'd'; - } // for - - for (j=0; j<1024; j++) - { - if ( ((str[j*4] != 'f') || - (str[(j*4)+1] != 'r') || - (str[(j*4)+2] != 'e') || - (str[(j*4)+3] != 'd')) ) - break; - } // for - - // did j reach the top? - CYG_TEST_PASS_FAIL( j==1024, "4K string with space left works" ); - - free(str); - } // else - - - // Test 3 - str=(char *) calloc( 2, 1024 ); - - if ( 2048 > CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE) - { - // didn't fit into pool, so should be NULL - CYG_TEST_PASS_FAIL( str == NULL, - "calloc 2K string with no space left works" ); - } - else - { - // check its zeroed - for ( j=0; j<2048; j++ ) - { - if (str[j] != 0) - break; - } // for - - CYG_TEST_PASS_FAIL( j==2048, "calloc 2K string is cleared" ); - - // since it should fit into pool, we can fiddle with it. - for (j=0; j<512; j++) - { - str[j*4] = 'j'; - str[(j*4)+1] = 'i'; - str[(j*4)+2] = 'f'; - str[(j*4)+3] = 'l'; - } // for - - for (j=0; j<512; j++) - { - if ( ((str[j*4] != 'j') || - (str[(j*4)+1] != 'i') || - (str[(j*4)+2] != 'f') || - (str[(j*4)+3] != 'l')) ) - break; - } // for - - // did j reach the top? - CYG_TEST_PASS_FAIL( j==512, - "calloc 2K string - with space left works" ); - - free(str); - } // else - - - // Test 4 - str=(char *)malloc( CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE+1 ); - - CYG_TEST_PASS_FAIL( str==NULL, "malloc too much data returns NULL" ); - - // Test 5 - str=(char *)calloc( 1, CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE+1 ); - CYG_TEST_PASS_FAIL( str==NULL, "calloc too much data returns NULL" ); - - // Test 6 - str=(char *)malloc(0); - str=(char *)calloc(0, 1); - str=(char *)calloc(1, 0); - str=(char *)calloc(0, 0); - // simply shouldn't barf by this point - - CYG_TEST_PASS_FAIL( 1, "malloc and calloc of 0 bytes doesn't crash" ); - - // Test 7 - str = (char *)malloc(10); - i = (int *)malloc(sizeof(int)); - str2 = (char *)malloc(10); - - str3=(char *)i; - - CYG_TEST_PASS_FAIL( ((str3 <= str-sizeof(int)) || (str >= &str[10])) && - ((str3 <= str2-sizeof(int)) || (str3 >= &str2[10])) && - ((str+10 <= str2) || (str2+10 <= str)), - "Objects don't overlap" ); - - // Test 8 - - free(i); - i=(int *)malloc(sizeof(int)*2); - str3=(char *)i; - - CYG_TEST_PASS_FAIL( ((str3 <= str-sizeof(int)) || (str3 >= &str[10])) && - ((str3 <= str2-sizeof(int)) || (str3 >= &str2[10])) && - ((&str[10] <= str2) || (&str2[10] <= str)), - "Objects don't overlap when middle is freed" ); - - free(i); - free(str); - free(str2); - -#else - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "malloc(), calloc() and free() functions"); -} // main() - -// EOF malloc1.c diff --git a/packages/language/c/libc/current/tests/stdlib/malloc2.c b/packages/language/c/libc/current/tests/stdlib/malloc2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/malloc2.c +++ /dev/null @@ -1,252 +0,0 @@ -//================================================================= -// -// malloc2.c -// -// Stress testcase for C library malloc(), calloc() and free() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode to stress-test C library malloc(), -// calloc() and free() functions -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// CYG_TEST_HEARTBEAT=120 - -// INCLUDES - -#include // Overall system configuration -#include // config header for C library so we can know - // size of malloc pool -#include -#include -#include // C library initialisation -#ifdef CYGPKG_KERNEL -# include // CYGSEM_KERNEL_MEMORY_COALESCE -#endif - -// CONSTANTS - -#define NUM_ITERATIONS 1000 - -// GLOBALS - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && \ - defined(CYGSEM_KERNEL_MEMORY_COALESCE) -static int problem=0; -#endif - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && \ - defined(CYGSEM_KERNEL_MEMORY_COALESCE) - -static void * -safe_malloc( size_t size ) -{ - void *ptr; - - ptr=malloc(size); - - if (ptr==NULL) - { - CYG_TEST_FAIL( "malloc returned NULL! " - "Perhaps the allocator doesn't coalesce?" ); - problem++; - } // if - - return ptr; -} // safe_malloc() - - -static void * -safe_calloc( size_t size ) -{ - void *ptr; - int i; - - ptr=calloc(size,1); - - if (ptr==NULL) - { - CYG_TEST_FAIL( "calloc returned NULL! " - "Perhaps the allocator doesn't coalesce" ); - problem++; - } // if - else - { - for (i=0; i < size; i++) - { - if (((char *)ptr)[i] != 0) - { - CYG_TEST_FAIL("calloc didn't clear data completely"); - problem++; - return ptr; - } // if - } // for - } // else - - return ptr; -} // safe_calloc() - - -static void -fill_with_data( char *buf, int size ) -{ - int i; - - for (i=0; i < size; i++) - buf[i] = 'f'; - - for (i=0; i < size; i++) - if (buf[i] != 'f') - { - CYG_TEST_FAIL( "data written to buffer does not compare " - "correctly! #1" ); - problem++; - return; - } // if - - - for (i=0; i < size; i++) - buf[i] = 'z'; - - for (i=0; i < size; i++) - if (buf[i] != 'z') - { - CYG_TEST_FAIL( "data written to buffer does not compare " - "correctly! #2" ); - problem++; - return; - } // if - -} // fill_with_data() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && - // defined(CYGSEM_KERNEL_MEMORY_COALESCE) - -int -main( int argc, char *argv[] ) -{ -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && \ - defined(CYGSEM_KERNEL_MEMORY_COALESCE) - - char *str1, *str2, *str3; - int j; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting stress tests from testcase " __FILE__ " for C " - "library malloc(), calloc() and free() functions"); - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && \ - defined(CYGSEM_KERNEL_MEMORY_COALESCE) - - if ( CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE < 300 ) - { - CYG_TEST_FAIL_FINISH("This testcase cannot safely be used with a " - "memory pool for malloc less than 300 bytes"); - } // if - - - for ( j=1; j < NUM_ITERATIONS; j++) - { -// if ((j % 100) == 0) -// CYG_TEST_STILL_ALIVE( j, "Multiple mallocs and frees continuing" ); - - - str1 = (char *)safe_malloc(50); - fill_with_data( str1, 50 ); - str2 = (char *)safe_calloc(11); - fill_with_data( str2, 11 ); - str3 = (char *)safe_malloc(32); - fill_with_data( str3, 32 ); - - free(str2); - free(str1); - - str2 = (char *)safe_calloc(11); - fill_with_data( str2, 11 ); - free(str2); - - str1 = (char *)safe_calloc(50); - fill_with_data( str1, 50 ); - free(str3); - - str3 = (char *)safe_malloc(32); - fill_with_data( str3, 32 ); - free(str1); - - str2 = (char *)safe_calloc(11); - fill_with_data( str2, 11 ); - str1 = (char *)safe_malloc(50); - fill_with_data( str1, 50 ); - - free(str3); - free(str1); - free(str2); - - if (problem != 0) - break; - } // for - - // Did it completely successfully? - if (j==NUM_ITERATIONS) - CYG_TEST_PASS("Stress test completed successfully"); - -#else - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && - // defined(CYGSEM_KERNEL_MEMORY_COALESCE) - - - CYG_TEST_FINISH("Finished stress tests from testcase " __FILE__ " for C " - "library malloc(), calloc() and free() functions"); -} // main() - -// EOF malloc2.c diff --git a/packages/language/c/libc/current/tests/stdlib/malloc3.c b/packages/language/c/libc/current/tests/stdlib/malloc3.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/malloc3.c +++ /dev/null @@ -1,192 +0,0 @@ -//================================================================= -// -// malloc3.c -// -// Testcase for C library malloc(), calloc() and free() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library malloc(), calloc() and -// free() functions -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - - -// INCLUDES - -#include // Overall system configuration -#include // config header for C library so we can know - // size of malloc pool -#ifdef CYGPKG_KERNEL -# include // CYGSEM_KERNEL_MEMORY_COALESCE -#endif -#include -#include -#include // C library initialisation - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && \ - defined(CYGSEM_KERNEL_MEMORY_COALESCE) -static int -fill_with_data( char *buf, int size ) -{ - int i; - - for (i=0; i < size; i++) - buf[i] = 'f'; - - for (i=0; i < size; i++) - if (buf[i] != 'f') { - CYG_TEST_FAIL( "data written to buffer does not compare " - "correctly! #1" ); - return 0; - } // if - - - for (i=0; i < size; i++) - buf[i] = 'z'; - - for (i=0; i < size; i++) - if (buf[i] != 'z') { - CYG_TEST_FAIL( "data written to buffer does not compare " - "correctly! #2" ); - return 0; - } // if - - return 1; -} // fill_with_data() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && - // defined(CYGSEM_KERNEL_MEMORY_COALESCE) - - -int -main( int argc, char *argv[] ) -{ -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && \ - defined(CYGSEM_KERNEL_MEMORY_COALESCE) - - char *str; - int size = CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE/2; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "malloc() and free() functions"); - CYG_TEST_INFO("This checks allocation and freeing of large regions"); - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && \ - defined(CYGSEM_KERNEL_MEMORY_COALESCE) - - // Don't allocate all the memory at once - leave room for any structures - // used to manage the memory - str = (char *)malloc( size ); - CYG_TEST_PASS_FAIL( str != NULL, "allocation 1"); - CYG_TEST_PASS_FAIL( fill_with_data( str, size ), "allocation 1 usability"); - free( str ); - - - str = (char *)malloc( size ); - CYG_TEST_PASS_FAIL( str != NULL, "allocation 2"); - CYG_TEST_PASS_FAIL( fill_with_data( str, size ), "allocation 2 usability"); - free( str ); - - str = (char *)malloc( size ); - CYG_TEST_PASS_FAIL( str != NULL, "allocation 3"); - CYG_TEST_PASS_FAIL( fill_with_data( str, size ), "allocation 3 usability"); - free( str ); - - str = (char *)malloc( size ); - CYG_TEST_PASS_FAIL( str != NULL, "allocation 4"); - CYG_TEST_PASS_FAIL( fill_with_data( str, size ), "allocation 4 usability"); - free( str ); - - str = (char *)malloc( size ); - CYG_TEST_PASS_FAIL( str != NULL, "allocation 5"); - CYG_TEST_PASS_FAIL( fill_with_data( str, size ), "allocation 5 usability"); - free( str ); - - str = (char *)malloc( size ); - CYG_TEST_PASS_FAIL( str != NULL, "allocation 6"); - CYG_TEST_PASS_FAIL( fill_with_data( str, size ), "allocation 6 usability"); - free( str ); - - str = (char *)malloc( size ); - CYG_TEST_PASS_FAIL( str != NULL, "allocation 7"); - CYG_TEST_PASS_FAIL( fill_with_data( str, size ), "allocation 7 usability"); - free( str ); - - str = (char *)malloc( size ); - CYG_TEST_PASS_FAIL( str != NULL, "allocation 8"); - CYG_TEST_PASS_FAIL( fill_with_data( str, size ), "allocation 8 usability"); - free( str ); - - str = (char *)malloc( size ); - CYG_TEST_PASS_FAIL( str != NULL, "allocation 9"); - CYG_TEST_PASS_FAIL( fill_with_data( str, size ), "allocation 9 usability"); - free( str ); - - str = (char *)malloc( size ); - CYG_TEST_PASS_FAIL( str != NULL, "allocation 10"); - CYG_TEST_PASS_FAIL( fill_with_data( str, size ),"allocation 10 usability"); - free( str ); - - -#else - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && - // defined(CYGSEM_KERNEL_MEMORY_COALESCE) - - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "malloc() and free() functions"); -} // main() - -// EOF malloc3.c diff --git a/packages/language/c/libc/current/tests/stdlib/qsort.c b/packages/language/c/libc/current/tests/stdlib/qsort.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/qsort.c +++ /dev/null @@ -1,125 +0,0 @@ -//================================================================= -// -// qsort.c -// -// Testcase for C library qsort() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library qsort() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#ifdef CYGPKG_LIBC -static int -Compar( const void *int1, const void *int2 ) -{ - if ( *(int*)int1 < *(int*)int2 ) - return -1; - else if ( *(int*)int1 == *(int*)int2 ) - return 0; - else - return 1; -} // Compar() -#endif - - -int -main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - unsigned int ctr; - int fail=0; - int i_array_sorted[] = {1, 5, 8, 35, 84, 258, 1022, 5300, 7372, 9029}; - int i_array_unsorted[] = {258, 8, 7372, 1, 5, 9029, 1022, 35, 5300, 84}; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "qsort() function"); - -#ifdef CYGPKG_LIBC - qsort(i_array_unsorted, - sizeof(i_array_unsorted) / sizeof(i_array_unsorted[0]), - sizeof(int), &Compar); - - for (ctr = 0; - ctr < (sizeof(i_array_unsorted) / sizeof(i_array_unsorted[0])); - ++ctr) - { - if (i_array_sorted[ctr] != i_array_unsorted[ctr]) - ++fail; - } // for - - CYG_TEST_PASS_FAIL( fail == 0, "qsort() sorts correctly" ); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "qsort() function"); - -} // main() - -// EOF qsort.c diff --git a/packages/language/c/libc/current/tests/stdlib/rand1.c b/packages/language/c/libc/current/tests/stdlib/rand1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/rand1.c +++ /dev/null @@ -1,132 +0,0 @@ -//================================================================= -// -// rand1.c -// -// Testcase for C library rand() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1999-01-20 -// Description: Contains testcode for C library rand() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// HOW TO START TESTS - -#if defined(CYGPKG_LIBC) - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif // if defined(CYGPKG_LIBC) - - -// CONSTANTS - -// This is the max allowable hits, where a hit is an element -// of a random array being the same as index+1 or index+2 -#define TOLERANCE 2 - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -#if defined(CYGPKG_LIBC) - -static void -test( CYG_ADDRWORD data ) -{ - int ctr; - static int array[1024]; - int hits=0; - - for (ctr=0; ctr<1024; ctr++) - array[ctr] = rand(); - - for (ctr=0; ctr< 1021; ctr++) - if ((array[ctr]==array[ctr+1]) || - (array[ctr]==array[ctr+2]) || - (array[ctr]==array[ctr+3])) - hits++; - - CYG_TEST_PASS_FAIL(hits <= TOLERANCE, - "Simple test for rand() repetition"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for " - "C library rand() function"); -} // test() - -#endif // if defined(CYGPKG_LIBC) - - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "rand() function"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); -} // main() - -// EOF rand1.c diff --git a/packages/language/c/libc/current/tests/stdlib/rand2.c b/packages/language/c/libc/current/tests/stdlib/rand2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/rand2.c +++ /dev/null @@ -1,136 +0,0 @@ -//================================================================= -// -// rand2.c -// -// Testcase for C library rand() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1999-01-20 -// Description: Contains testcode for C library rand() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include // CYGNUM_LIBC_RAND_SEED -#include -#include -#include // C library initialisation - - -// HOW TO START TESTS - -#if defined(CYGPKG_LIBC) - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif // if defined(CYGPKG_LIBC) - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#if defined(CYGPKG_LIBC) - -static void -test( CYG_ADDRWORD data ) -{ - static int rand_data1[100]; - static int rand_data2[100]; - int count; - int fail=0; - - // Test that rand starts with the seed as CYGNUM_LIBC_RAND_SEED - - for ( count=0; count < 100; ++count ) { - rand_data1[count] = rand(); - } // for - - // set seed to CYGNUM_LIBC_RAND_SEED - srand(CYGNUM_LIBC_RAND_SEED); - - for ( count=0; count < 100; ++count ) { - rand_data2[count] = rand(); - } // for - - for ( count=0; count < 100; ++count ) { - if (rand_data1[count] != rand_data2[count]) - ++fail; - } // for - - CYG_TEST_PASS_FAIL(fail==0, "rand() has seed initialised to " - "CYGNUM_LIBC_RAND_SEED"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C " - "library rand() function"); -} // test() - -#endif // if defined(CYGPKG_LIBC) - - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C " - "library rand() function"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); -} // main() - - -// EOF rand2.c diff --git a/packages/language/c/libc/current/tests/stdlib/rand3.c b/packages/language/c/libc/current/tests/stdlib/rand3.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/rand3.c +++ /dev/null @@ -1,153 +0,0 @@ -//================================================================= -// -// rand3.c -// -// Testcase for C library rand() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: ctarpy, jlarmour -// Date: 1999-03-23 -// Description: Contains testcode for C library rand() function. This tests -// that random numbers are distributed well between 0 and -// RAND_MAX -// -// -//####DESCRIPTIONEND#### - - -// CONFIGURATION - -#include // Configuration header - - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// CONSTANTS - -#define NUM_BUCKETS 1000 // how many categories to define -#define TEST_LENGTH 200000 // how many samples to take - careful - // when reducing this since it also reduces - // BUCKET_DIFF_TOLERANCE below. If you reduce - // it too low, BUCKET_DIFF_TOLERANCE will need - // a fudge factor - -#define BUCKET_SIZE (RAND_MAX / NUM_BUCKETS) // number space allocated - // to bucket from 0..RAND_MAX -#define NUM_PER_BUCKET (TEST_LENGTH/NUM_BUCKETS) // Expected number that went - // into each bucket at end - -// how much the buckets can vary at the end. -#define BUCKET_DIFF_TOLERANCE (NUM_PER_BUCKET/4) // allowed to vary 25% - - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -static __inline__ int -my_abs(int i) -{ - return (i < 0) ? -i : i; -} // my_abs() - -int -main(int argc, char *argv[]) -{ - // divide the space from 0..RAND_MAX into NUM_BUCKETS categories *BUT* - // RAND_MAX / NUM_BUCKETS may not divide exactly so we leave space for - // the bits left over, in case there are any! So we add 1. - - static cyg_uint8 rand_bucket[NUM_BUCKETS+1]; - cyg_ucount32 count; // loop variable - int r; // temp for rand() variable - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "rand() function"); - - CYG_TEST_INFO("This test tests the distribution of random numbers and"); - CYG_TEST_INFO("may take some time"); - - for ( count=0; count < TEST_LENGTH; ++count ) { - r = rand(); - ++rand_bucket[ r / BUCKET_SIZE ]; - if ((count%10000)==0) - CYG_TEST_STILL_ALIVE(count, "Still testing..."); - } // for - - for ( count=0; count < NUM_BUCKETS; ++count ) { - cyg_ucount32 diff; - - diff = my_abs( rand_bucket[count] - NUM_PER_BUCKET ); - if ( diff > BUCKET_DIFF_TOLERANCE ) - break; - } // for - - // if the previous loop completed, we may want to check the "extra" - // bucket (see the comment at the top) that may have some bits in if - // RAND_MAX doesn't split into NUM_BUCKETS evenly. The number of random - // digits that fell into that bucket would be expected to be proportional - // to the ratio of the remainder of (RAND_MAX % NUM_BUCKETS) to - // NUM_BUCKETS. - if (count == NUM_BUCKETS) { - cyg_ucount32 rem; - cyg_ucount32 last_bucket_expected; - cyg_ucount32 diff; - - rem = RAND_MAX % NUM_BUCKETS; - - last_bucket_expected = (rem * NUM_PER_BUCKET) / BUCKET_SIZE; - - diff = my_abs(last_bucket_expected - rand_bucket[count]); - CYG_TEST_PASS_FAIL(diff <= BUCKET_DIFF_TOLERANCE, - "Upper bound fencepost test"); - } - CYG_TEST_PASS_FAIL( (count >= NUM_BUCKETS), - "even distribution of rand()"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for " - "C library rand() function"); -} // main() - - -// EOF rand3.c diff --git a/packages/language/c/libc/current/tests/stdlib/rand4.c b/packages/language/c/libc/current/tests/stdlib/rand4.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/rand4.c +++ /dev/null @@ -1,119 +0,0 @@ -//================================================================= -// -// rand4.c -// -// Testcase for C library rand() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): rosalia -// Contributors: rosalia, jlarmour -// Date: 1999-03-19 -// Description: Contains testcode for C library rand() function. This tests -// that random numbers do not have periodicity in the lower -// bit -// -// -//####DESCRIPTIONEND#### - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include -#include -#include // C library initialisation - -// CONSTANTS - -#define TEST_LENGTH 100000 // how many samples to take - -// DEFINES - -#define TEST_VALID (!defined(CYGIMP_LIBC_RAND_SIMPLEST)) - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - -int -main(int argc, char *argv[]) -{ -#if TEST_VALID - int i; - int r, prev, prevprev; - int how_many_periodics = 0; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "rand() function"); - - CYG_TEST_INFO("This test tests the distribution of random numbers and"); - CYG_TEST_INFO("may take some time"); - -#if TEST_VALID - r = rand() % 2; - prev = r; - r = rand() % 2; - for (i = 0; i < TEST_LENGTH; ++i) { - prevprev = prev; - prev = r; - r = rand() % 2; - if (r == prevprev) { - ++how_many_periodics; - } - if (how_many_periodics > (2*TEST_LENGTH)/3) { - break; - } - } - - CYG_TEST_PASS_FAIL( (how_many_periodics <= (2*TEST_LENGTH)/3), - "periodicity of rand() in lowest bit"); - -#else - - // FIXME: should be an _expected_ fail i.e. XFAIL - CYG_TEST_NA("Chosen rand algorithm is known to fail this test"); - -#endif - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for " - "C library rand() function"); -} // main() - - -// EOF rand4.c diff --git a/packages/language/c/libc/current/tests/stdlib/realloc.c b/packages/language/c/libc/current/tests/stdlib/realloc.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/realloc.c +++ /dev/null @@ -1,188 +0,0 @@ -//================================================================= -// -// realloc.c -// -// Testcase for C library realloc() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1998/8/31 -// Description: Contains testcode for C library realloc() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - - -// INCLUDES - -#include // Overall system configuration -#include // config header for C library so we can know - // size of malloc pool -#ifdef CYGPKG_KERNEL -# include // CYGSEM_KERNEL_MEMORY_COALESCE -#endif -#include -#include -#include // C library initialisation - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && \ - defined(CYGSEM_KERNEL_MEMORY_COALESCE) - -static const char alphabet[]="abcdefghijklmnopqrstuvwxyz{-}[]#';:@~!$^&*()" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; - -static int -compare_with_alphabet( char *buf, int size, int offset ) -{ - int i, buf_offset; - - for (i=offset, buf_offset=0; - buf_offset < size; - buf_offset++,i++ ) { - - if ( i==sizeof(alphabet)-1 ) - i=0; - - if ( buf[buf_offset] != alphabet[i] ) { - CYG_TEST_FAIL( "buffer has not retained correct data!"); - return 0; // fail - } // if - } // for - - return 1; // success -} // compare_with_alphabet() - -static int -fill_with_alphabet( char *buf, int size, int offset ) -{ - int i, buf_offset; - - for (i=offset, buf_offset=0; - buf_offset < size; - buf_offset++,i++ ) { - - if ( i==sizeof(alphabet)-1 ) - i=0; - - buf[buf_offset] = alphabet[i]; - - } // for - - return compare_with_alphabet( buf, size, offset); // be sure -} // fill_with_alphabet() - -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && - // defined(CYGSEM_KERNEL_MEMORY_COALESCE) - - -int -main( int argc, char *argv[] ) -{ -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && \ - defined(CYGSEM_KERNEL_MEMORY_COALESCE) - - char *str; - int size = CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE/2; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "realloc() function"); - -#if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && \ - defined(CYGSEM_KERNEL_MEMORY_COALESCE) - - str = (char *)realloc( NULL, size ); - CYG_TEST_PASS_FAIL( str != NULL, "realloc doing only allocation"); - CYG_TEST_PASS_FAIL( fill_with_alphabet( str, size, 0 ), - "allocation usability"); - - str = (char *)realloc( str, 0 ); - CYG_TEST_PASS_FAIL( str == NULL, "realloc doing implicit free" ); - - str = (char *)realloc( NULL, size/2 ); - CYG_TEST_PASS_FAIL( str != NULL, "realloc doing allocation to half size"); - CYG_TEST_PASS_FAIL( fill_with_alphabet( str, size/2, 5 ), - "half allocation usability"); - - str = (char *)realloc( str, size ); - CYG_TEST_PASS_FAIL( str != NULL, - "reallocing allocation back to normal size"); - CYG_TEST_PASS_FAIL( compare_with_alphabet(str, size/2, 5), - "after realloc to normal size, old contents kept" ); - CYG_TEST_PASS_FAIL( fill_with_alphabet( str, size, 3 ), - "reallocation normal size usability"); - - str = (char *)realloc( str, size/4 ); - CYG_TEST_PASS_FAIL( str != NULL, "reallocing allocation to quarter size"); - CYG_TEST_PASS_FAIL( compare_with_alphabet(str, size/4, 3), - "after realloc to quarter size, old contents kept" ); - CYG_TEST_PASS_FAIL( fill_with_alphabet( str, size/4, 1 ), - "reallocation quarter size usability"); - - CYG_TEST_PASS_FAIL( realloc( str, size*100 ) == NULL, - "reallocing allocation that is too large" ); - CYG_TEST_PASS_FAIL( compare_with_alphabet( str, size/4, 1 ), - "Checking old contents maintained despite failure" ); - - str = (char *)realloc( str, 0 ); - CYG_TEST_PASS_FAIL( str == NULL, "realloc doing implicit free again" ); - - -#else - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_MALLOC) && - // defined(CYGSEM_KERNEL_MEMORY_COALESCE) - - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "realloc() function"); -} // main() - -// EOF realloc.c diff --git a/packages/language/c/libc/current/tests/stdlib/srand.c b/packages/language/c/libc/current/tests/stdlib/srand.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/srand.c +++ /dev/null @@ -1,159 +0,0 @@ -//================================================================= -// -// srand.c -// -// Testcase for C library srand() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1999-01-20 -// Description: Contains testcode for C library srand() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// HOW TO START TESTS - -#if defined(CYGPKG_LIBC) - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif // if defined(CYGPKG_LIBC) - - -// CONSTANTS - -// Max cross correlation value of two sequences of -// different seed -#define X_CORREL 10 - -// size of arrays to use for testing -#define TEST_SIZE 1024 - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#if defined(CYGPKG_LIBC) - -static void -test( CYG_ADDRWORD data ) -{ - int ctr; - static int array_1[TEST_SIZE]; - static int array_2[TEST_SIZE]; - static int array_3[TEST_SIZE]; - int hits; - int fail; - - - srand(3); - for (ctr=0; ctr // Configuration header - -// INCLUDES - -#include -#include -#include -#include -#include // C library initialisation - - -// HOW TO START TESTS - -#if defined(CYGPKG_LIBC) - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif - - -// FUNCTIONS - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#ifdef CYGPKG_LIBC -static char * -my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - - -static void -test( CYG_ADDRWORD data ) -{ - char x[30]; - long z; - char *endptr; - - my_strcpy(x, "20"); - CYG_TEST_PASS_FAIL( strtol(x, (char**)NULL, 10) == 20, - "Simple strtol(20 ,...)" ); - - my_strcpy(x, "1972100"); - CYG_TEST_PASS_FAIL( strtol(x, (char**)NULL, 10) == 1972100, - "Simple strtol(1972100, ..." ); - - my_strcpy(x, "0xFFEE"); - z = strtol(x, (char**)NULL, 16); - CYG_TEST_PASS_FAIL(z == 65518, "Hex base strtol()"); - - my_strcpy(x, "100111011"); - z = strtol(x, (char**)NULL, 2); - CYG_TEST_PASS_FAIL(z == 315, "Binary base strtol()"); - - my_strcpy(x, "10372"); - z = strtol(x, (char**)NULL, 8); - CYG_TEST_PASS_FAIL(z == 4346, "Octal base strtol()" ); - - my_strcpy(x, "317823"); - z = strtol(x, (char**)NULL, 8); - CYG_TEST_PASS_FAIL(z == 207, "Partial string" ); - - my_strcpy(x, " 53ab823"); - z = strtol(x, &endptr, 10); - CYG_TEST_PASS_FAIL((z == 53) && (endptr==&x[3]), "Correct end pointer" ); - - my_strcpy(x, "-479"); - z = strtol(x, (char**)NULL, 10); - CYG_TEST_PASS_FAIL(z == -479, "Negative string"); - - my_strcpy(x, "+4796"); - z = strtol(x, (char**)NULL, 10); - CYG_TEST_PASS_FAIL(z == 4796, "Positive string"); - - my_strcpy(x, ""); - z = strtol(x, (char**)NULL, 10); - CYG_TEST_PASS_FAIL(z == 0, "Empty string"); - - my_strcpy(x, ""); - z = strtol(x, &endptr, 10); - CYG_TEST_PASS_FAIL((z == 0) && (endptr==x), - "Empty string sets endptr correctly"); - - my_strcpy(x, " "); - z = strtol(x, &endptr, 10); - CYG_TEST_PASS_FAIL((z == 0) && (endptr==x), - "White space only string sets endptr correctly"); - - my_strcpy(x, "0XFFEE"); - z = strtol(x, (char**)NULL, 0); - CYG_TEST_PASS_FAIL(z == 65518, "Base 0 but hex"); - - my_strcpy(x, "\t 0629"); - z = strtol(x, (char**)NULL, 0); - CYG_TEST_PASS_FAIL(z == 50, "Base 0 but octal"); - - my_strcpy(x, "42"); - z = strtol(x, (char**)NULL, 0); - CYG_TEST_PASS_FAIL(z == 42, "Base 0 but decimal"); - - my_strcpy(x, "hello"); - z = strtol(x, &endptr, 0); - CYG_TEST_PASS_FAIL((z == 0) && (endptr==x), - "endptr set correctly on conversion failure"); - - my_strcpy(x, "z2f"); - z = strtol(x, (char**)NULL, 36); - CYG_TEST_PASS_FAIL(z == 45447, "Base==36"); - - my_strcpy(x, "h547324"); - z = strtol(x, (char**)NULL, 10); - CYG_TEST_PASS_FAIL(z == 0, "No valid number string"); - - my_strcpy(x, "545425876654547324"); - z = strtol(x, (char**)NULL, 10); - CYG_TEST_PASS_FAIL( (z == LONG_MAX) && (errno == ERANGE), - "Number out of range"); - - my_strcpy(x, "-545425876654547324"); - z = strtol(x, (char**)NULL, 10); - CYG_TEST_PASS_FAIL( (z == LONG_MIN) && (errno == ERANGE), - "Number out of range"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strtol() function"); -} // test() - -#endif // ifndef CYGPKG_LIBC - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strtol() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); -} // main() - -// EOF strtol.c diff --git a/packages/language/c/libc/current/tests/stdlib/strtoul.c b/packages/language/c/libc/current/tests/stdlib/strtoul.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/stdlib/strtoul.c +++ /dev/null @@ -1,209 +0,0 @@ -//================================================================= -// -// strtoul.c -// -// Testcase for C library strtoul() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strtoul() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - - -// CONFIGURATION - -#include // Configuration header - - -// INCLUDES - -#include -#include -#include -#include -#include // C library initialisation - - -// HOW TO START TESTS - -#if defined(CYGPKG_LIBC) - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#ifdef CYGPKG_LIBC -static char * -my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - - -static void -test( CYG_ADDRWORD data ) -{ - char x[30]; - unsigned long z; - char *endptr; - - my_strcpy(x, "20"); - CYG_TEST_PASS_FAIL( strtoul(x, (char**)NULL, 10) == 20, - "Simple strtoul(20 ,...)" ); - - my_strcpy(x, "1972100"); - CYG_TEST_PASS_FAIL( strtoul(x, (char**)NULL, 10) == 1972100, - "Simple strtoul(1972100, ..." ); - - my_strcpy(x, "0xFFEE"); - z = strtoul(x, (char**)NULL, 16); - CYG_TEST_PASS_FAIL(z == 65518, "Hex base strtoul()"); - - my_strcpy(x, "100111011"); - z = strtoul(x, (char**)NULL, 2); - CYG_TEST_PASS_FAIL(z == 315, "Binary base strtoul()"); - - my_strcpy(x, "10372"); - z = strtoul(x, (char**)NULL, 8); - CYG_TEST_PASS_FAIL(z == 4346, "Octal base strtoul()" ); - - my_strcpy(x, "317823"); - z = strtoul(x, (char**)NULL, 8); - CYG_TEST_PASS_FAIL(z == 207, "Partial string" ); - - my_strcpy(x, " 53ab823"); - z = strtoul(x, &endptr, 10); - CYG_TEST_PASS_FAIL( (z == 53) && (endptr==&x[3]), "Correct end pointer" ); - - my_strcpy(x, "-479"); - z = strtoul(x, (char**)NULL, 0); - CYG_TEST_PASS_FAIL( (z == (unsigned long) -479), - "Negative string"); - - my_strcpy(x, "+4796"); - z = strtoul(x, (char**)NULL, 10); - CYG_TEST_PASS_FAIL(z == 4796, "Positive string"); - - my_strcpy(x, ""); - z = strtoul(x, (char**)NULL, 10); - CYG_TEST_PASS_FAIL(z == 0, "Empty string"); - - my_strcpy(x, ""); - z = strtoul(x, &endptr, 10); - CYG_TEST_PASS_FAIL( (z == 0) && (endptr==x), - "Empty string sets endptr correctly"); - - my_strcpy(x, " "); - z = strtoul(x, &endptr, 10); - CYG_TEST_PASS_FAIL( (z == 0) && (endptr==x), - "White space only string sets endptr correctly"); - - my_strcpy(x, "0XFFEE"); - z = strtoul(x, (char**)NULL, 0); - CYG_TEST_PASS_FAIL(z == 65518, "Base 0 but hex"); - - my_strcpy(x, "\t 0629"); - z = strtoul(x, (char**)NULL, 0); - CYG_TEST_PASS_FAIL(z == 50, "Base 0 but octal"); - - my_strcpy(x, "42"); - z = strtoul(x, (char**)NULL, 0); - CYG_TEST_PASS_FAIL(z == 42, "Base 0 but decimal"); - - my_strcpy(x, "hello"); - z = strtoul(x, &endptr, 0); - CYG_TEST_PASS_FAIL((z == 0) && (endptr==x), - "endptr set correctly on conversion failure"); - - my_strcpy(x, "z2f"); - z = strtoul(x, (char**)NULL, 36); - CYG_TEST_PASS_FAIL(z == 45447, "Base==36"); - - my_strcpy(x, "h547324"); - z = strtoul(x, (char**)NULL, 10); - CYG_TEST_PASS_FAIL(z == 0, "No valid number string"); - - my_strcpy(x, "545425876654547324"); - z = strtoul(x, (char**)NULL, 10); - CYG_TEST_PASS_FAIL( (z == ULONG_MAX) && (errno == ERANGE), - "Number out of range"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strtoul() function"); -} // test() - -#endif // ifndef CYGPKG_LIBC - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strtoul() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); -} // main() - -// EOF strtoul.c diff --git a/packages/language/c/libc/current/tests/string/memchr.c b/packages/language/c/libc/current/tests/string/memchr.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/memchr.c +++ /dev/null @@ -1,135 +0,0 @@ -//================================================================= -// -// memchr.c -// -// Testcase for C library memchr() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library memchr() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() -#endif - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[] = "Your feeble skills are no match for the power of " - "the dark side!"; - void *ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "memchr() function"); - -#ifdef CYGPKG_LIBC - // Check 1 - ret = memchr(x, (int)'k', sizeof(x)); - CYG_TEST_PASS_FAIL( (my_strcmp(ret, x+13) == 0), "Simple test 1" ); - - // Check 2 - ret = memchr(x, (int)'p', sizeof(x)); - CYG_TEST_PASS_FAIL( (my_strcmp(ret, x+40) == 0), "Simple test 2" ); - - // Check 3 - ret = memchr(x, (int)'z', sizeof(x)); - CYG_TEST_PASS_FAIL( (ret == NULL), "Simple test 3" ); - - // Check 4 (boundary condition) - ret = memchr(x, (int)'\0', sizeof(x)); - CYG_TEST_PASS_FAIL( ret == (x+sizeof(x)-1), "Boundary test 1" ); - - // Check 5 (boundary condition) - ret = memchr(x, (int)'\0', sizeof(x)-1); - CYG_TEST_PASS_FAIL( ret == NULL, "Boundary test 2" ); - - // Check 6 (boundary condition) - ret = memchr( (void *)"", (int)'\0', 0 ); - CYG_TEST_PASS_FAIL( ret == NULL, "Boundary test 3" ); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "memchr() function"); -} // main() - -// EOF memchr.c diff --git a/packages/language/c/libc/current/tests/string/memcmp1.c b/packages/language/c/libc/current/tests/string/memcmp1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/memcmp1.c +++ /dev/null @@ -1,165 +0,0 @@ -//================================================================= -// -// memcmp1.c -// -// Testcase for C library memcmp() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library memcmp() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "memcmp() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "I have become, comfortably numb"); - my_strcpy(y, "I have become, comfortably numb"); - CYG_TEST_PASS_FAIL( (memcmp(x, y, my_strlen(x)) == 0), "Simple compare"); - - - // Check 2 - my_strcpy(x, ""); - my_strcpy(y, ""); - CYG_TEST_PASS_FAIL( (memcmp(x, y, 0) == 0), "Simple empty string compare"); - - - // Check 3 - my_strcpy(x, "..shall snuff it. And the Lord did grin"); - my_strcpy(y, "..shall snuff it. And the Lord did grio"); - CYG_TEST_PASS_FAIL( (memcmp(x, y, my_strlen(x)) < 0), - "Memory less than #1" ); - - - // Check 4 - my_strcpy(x, "A reading from the Book of Armaments, Chapter 4, " - "Verses 16 to 20:"); - my_strcpy(y, "Bless this, O Lord, that with it thou mayst blow thine " - "enemies to tiny bits, in thy mercy."); - CYG_TEST_PASS_FAIL( (memcmp(x, y, my_strlen(x)) < 0), - "Memory less than #2"); - - // Check 5 - my_strcpy(x, "Lobeth this thy holy hand grenade at thy foe"); - my_strcpy(y, "Lobeth this thy holy hand grenade at thy fod"); - CYG_TEST_PASS_FAIL( (memcmp(x, y, my_strlen(x)) > 0), - "Memory greater than #1" ); - - - // Check 6 - my_strcpy(y, "Three shall be the number of the counting and the"); - my_strcpy(x, "number of the counting shall be three"); - CYG_TEST_PASS_FAIL( (memcmp(x, y, my_strlen(x)) > 0), - "Memory greater than #2" ); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "memcmp() function"); -} // main() - - - -// EOF memcmp1.c diff --git a/packages/language/c/libc/current/tests/string/memcmp2.c b/packages/language/c/libc/current/tests/string/memcmp2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/memcmp2.c +++ /dev/null @@ -1,150 +0,0 @@ -//================================================================= -// -// memcmp2.c -// -// Testcase for C library memcmp() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library memcmp() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// CONSTANTS - -#define NUM_ROBUSTNESS_RUNS 300 - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - char z[300]; - int ctr; - int fail; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "memcmp() function"); - CYG_TEST_INFO("This testcase tests robustness, and may take some time"); - -#ifdef CYGPKG_LIBC - fail = 0; - for (ctr = 0; ctr < NUM_ROBUSTNESS_RUNS; ctr++) - { - my_strcpy(x, "Spare a talent for an old ex-leper"); - my_strcpy(y, "Spare a talent for an old ex-leper"); - my_strcpy(z, "I was hopping along, when suddenly he"); - - if (memcmp(x, y,my_strlen(x)) != 0) - { - fail = 1; - break; - } - if (memcmp(x, z, my_strlen(z)) == 0) - { - fail = 1; - break; - } // if - } // for - - CYG_TEST_PASS_FAIL( (fail==0), "Robustness test"); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "memcmp() function"); -} // main() - - -// EOF memcmp2.c diff --git a/packages/language/c/libc/current/tests/string/memcpy1.c b/packages/language/c/libc/current/tests/string/memcpy1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/memcpy1.c +++ /dev/null @@ -1,174 +0,0 @@ -//================================================================= -// -// memcpy1.c -// -// Testcase for C library memcpy() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library memcpy() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - void *ret, *ptr1, *ptr2; - char *c_ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "memcpy() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - ptr1 = x; - ptr2 = y; - my_strcpy(x, "Great shot kid! That was one in a million!"); - ret = memcpy(ptr2, ptr1, my_strlen(x) + 1); - CYG_TEST_PASS_FAIL( (my_strcmp(x, ptr2)==0), "Simple copy" ); - - // Check return value - CYG_TEST_PASS_FAIL( (my_strcmp(ret, ptr2)==0), "Simple copy return value"); - - - // Check 2 - ptr1 = x; - ptr2 = y; - my_strcpy(x, ""); - my_strcpy(y, "xxxx"); // Bogus val to get overwritten - ret = memcpy(ptr2, ptr1, 1); - c_ret = ret; - if ((*c_ret == '\0') && (y[0] == '\0') && (y[1] == 'x')) - CYG_TEST_PASS("Simple copy with boundary check worked"); - else - CYG_TEST_FAIL("Simple copy with boundary check failed"); - - // Check 3 - ptr1 = x; - ptr2 = y; - my_strcpy(x, "xxxx"); - my_strcpy(y, "yyyy"); - ret = memcpy(ptr1, ptr2, 0); - c_ret = ret; - if ((*c_ret =='x') && (x[0] == 'x')) - CYG_TEST_PASS("Simple copy with size=0 worked"); - else - CYG_TEST_FAIL("Simple copy with size=0 failed"); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "memcpy() function"); -} // main() - - -// EOF memcpy1.c diff --git a/packages/language/c/libc/current/tests/string/memcpy2.c b/packages/language/c/libc/current/tests/string/memcpy2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/memcpy2.c +++ /dev/null @@ -1,161 +0,0 @@ -//================================================================= -// -// memcpy2.c -// -// Testcase for C library memcpy() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library memcpy() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// CONSTANTS - -#define NUM_ROBUSTNESS_RUNS 300 - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - void *ret, *ptr1, *ptr2; - char *c_ret; - int ctr; - int fail; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "memcpy() function"); - CYG_TEST_INFO("This testcase tests robustness, and may take some time"); - - -#ifdef CYGPKG_LIBC - - fail = 0; - for (ctr = 0; ctr < NUM_ROBUSTNESS_RUNS; ctr++) { - my_strcpy(x, "in the land of Mordor"); - my_strcpy(y, " "); - ptr1 = x; - ptr2 = y; - ret = memcpy(ptr2, ptr1, my_strlen(x) + 1); - c_ret = ret; - if ((my_strcmp(y, x) != 0) || (my_strcmp(c_ret, x)!=0)) { - fail = 1; - break; - } - } - - CYG_TEST_PASS_FAIL( (fail == 0), "Robustness test"); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "memcpy() function"); -} // main() - - -// EOF memcpy2.c diff --git a/packages/language/c/libc/current/tests/string/memmove1.c b/packages/language/c/libc/current/tests/string/memmove1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/memmove1.c +++ /dev/null @@ -1,197 +0,0 @@ -//================================================================= -// -// memmove1.c -// -// Testcase for C library memmove() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library memmove() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - void *ret, *ptr1, *ptr2; - char *c_ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "memmove() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - ptr1 = x; - ptr2 = y; - my_strcpy(x, "Great shot kid! That was one in a million!"); - ret = memmove(ptr2, ptr1, my_strlen(x) + 1); - CYG_TEST_PASS_FAIL( (my_strcmp(x, ptr2)==0), "Simple copy" ); - - // Check return value - CYG_TEST_PASS_FAIL( (my_strcmp(ret, ptr2)==0), "Simple copy return value"); - - - // Check 2 - ptr1 = x; - ptr2 = y; - my_strcpy(x, ""); - my_strcpy(y, "xxxx"); // Bogus val to get overwritten - ret = memmove(ptr2, ptr1, 1); - c_ret = ret; - if ((*c_ret == '\0') && (y[0] == '\0') && (y[1] == 'x')) - CYG_TEST_PASS("Simple copy with boundary check worked"); - else - CYG_TEST_FAIL("Simple copy with boundary check failed"); - - // Check 3 - ptr1 = x; - ptr2 = y; - my_strcpy(x, "xxxx"); - my_strcpy(y, "yyyy"); - ret = memmove(ptr1, ptr2, 0); - c_ret = ret; - if ((*c_ret =='x') && (x[0] == 'x')) - CYG_TEST_PASS("Simple copy with size=0 worked"); - else - CYG_TEST_FAIL("Simple copy with size=0 failed"); - - // Check 4 - ptr1 = &x[0]; - ptr2 = &x[1]; - my_strcpy(x, "abcd"); - ret = memmove(ptr1, ptr2, 4); - c_ret = ret; - if ( (c_ret==x) && (my_strcmp(x, "bcd")==0) ) - CYG_TEST_PASS("Overlapping copy #1 worked"); - else - CYG_TEST_FAIL("Overlapping copy #1 worked"); - - // Check 5 - ptr1 = &x[0]; - ptr2 = &x[4]; - my_strcpy(x, "abcdefghijk"); - ret = memmove(ptr1, ptr2, 6); - c_ret = ret; - if ( (c_ret==x) && (my_strcmp(x, "efghijghijk")==0) ) - CYG_TEST_PASS("Overlapping copy #2 worked"); - else - CYG_TEST_FAIL("Overlapping copy #2 worked"); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "memmove() function"); -} // main() - - -// EOF memmove1.c diff --git a/packages/language/c/libc/current/tests/string/memmove2.c b/packages/language/c/libc/current/tests/string/memmove2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/memmove2.c +++ /dev/null @@ -1,161 +0,0 @@ -//================================================================= -// -// memmove2.c -// -// Testcase for C library memmove() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library memmove() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// CONSTANTS - -#define NUM_ROBUSTNESS_RUNS 300 - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - void *ret, *ptr1, *ptr2; - char *c_ret; - int ctr; - int fail; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "memmove() function"); - CYG_TEST_INFO("This testcase tests robustness, and may take some time"); - - -#ifdef CYGPKG_LIBC - - fail = 0; - for (ctr = 0; ctr < NUM_ROBUSTNESS_RUNS; ctr++) { - my_strcpy(x, "in the land of Mordor"); - my_strcpy(y, " "); - ptr1 = x; - ptr2 = y; - ret = memmove(ptr2, ptr1, my_strlen(x) + 1); - c_ret = ret; - if ((my_strcmp(y, x) != 0) || (my_strcmp(c_ret, x)!=0)) { - fail = 1; - break; - } - } - - CYG_TEST_PASS_FAIL( (fail == 0), "Robustness test"); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "memmove() function"); -} // main() - - -// EOF memmove2.c diff --git a/packages/language/c/libc/current/tests/string/memset.c b/packages/language/c/libc/current/tests/string/memset.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/memset.c +++ /dev/null @@ -1,142 +0,0 @@ -//================================================================= -// -// memset.c -// -// Testcase for C library memset() function -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library memset() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - - -#ifdef CYGPKG_LIBC -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char *ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "memset() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, " "); - ret = memset(x, 'X', 5); - if ((my_strcmp(x, "XXXXX ") == 0) && (ret == x)) - CYG_TEST_PASS("Simple memset"); - else - CYG_TEST_FAIL("Simple memset"); - - // Check 2 - my_strcpy(x, "XXXXX "); - ret = memset(x, 'Y', 0); - if ((my_strcmp(x, "XXXXX ") == 0) && (ret == x)) - CYG_TEST_PASS("Boundary case of 0 bytes"); - else - CYG_TEST_FAIL("Boundary case of 0 bytes"); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "memset() function"); - -} // main() - -// EOF memset.c diff --git a/packages/language/c/libc/current/tests/string/strcat1.c b/packages/language/c/libc/current/tests/string/strcat1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strcat1.c +++ /dev/null @@ -1,164 +0,0 @@ -//================================================================= -// -// strcat1.c -// -// Testcase for C library strcat() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strcat() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - char *ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strcat() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "One ring to rule them all."); - my_strcpy(y, "One ring to find them."); - ret = strcat(x, y); - if ( my_strcmp(x, "One ring to rule them all.One ring to find them.")==0 ) - CYG_TEST_PASS("Simple concatenation"); - else - CYG_TEST_FAIL("Simple concatenation"); - // Check return val - CYG_TEST_PASS_FAIL( ( ret == x ), "Simple concatenation return value" ); - - - // Check 2 - my_strcpy(x, "One ring to bring them all,"); - my_strcpy(y, ""); - ret = strcat(x, y); - if ( my_strcmp(x, "One ring to bring them all,")==0 ) - CYG_TEST_PASS("Concatenation of empty string"); - else - CYG_TEST_FAIL("Concatenation of empty string"); - // Check return val - CYG_TEST_PASS_FAIL( ( ret == x ), - "Concatenation of empty string return value" ); - - - // Check 3 - my_strcpy(x, "and in the darkness bind them"); - my_strcpy(y, ""); - ret = strcat(y, x); - if ( my_strcmp(x, "and in the darkness bind them")==0 ) - CYG_TEST_PASS("Concatenation to empty string"); - else - CYG_TEST_FAIL("Concatenation to empty string"); - // Check return val - CYG_TEST_PASS_FAIL( ( ret == y ), - "Concatenation to empty string return value" ); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strcat() function"); -} // main() - - -// EOF strcat1.c diff --git a/packages/language/c/libc/current/tests/string/strcat2.c b/packages/language/c/libc/current/tests/string/strcat2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strcat2.c +++ /dev/null @@ -1,152 +0,0 @@ -//================================================================= -// -// strcat2.c -// -// Testcase for C library strcat() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strcat() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// CONSTANTS - -#define NUM_ROBUSTNESS_RUNS 300 - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - char *ret; - int ctr; - int fail; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strcat() function"); - CYG_TEST_INFO("This testcase tests robustness, and may take some time"); - -#ifdef CYGPKG_LIBC - - fail = 0; - for (ctr = 0; ctr < NUM_ROBUSTNESS_RUNS; ctr++) - { - my_strcpy(x, "in the land of Mordor, "); - my_strcpy(y, "where the shadows lie."); - ret = strcat(x, y); - if ((my_strcmp(x, "in the land of Mordor, where the shadows lie.")!=0)) - { - fail = 1; - break; - } // if - if (ret != x) - { - fail = 1; - break; - } // if - } - CYG_TEST_PASS_FAIL( (fail == 0), "Robustness test passed" ); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strcat() function"); - -} // main() - - -// EOF strcat2.c diff --git a/packages/language/c/libc/current/tests/string/strchr.c b/packages/language/c/libc/current/tests/string/strchr.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strchr.c +++ /dev/null @@ -1,134 +0,0 @@ -//================================================================= -// -// strchr.c -// -// Testcase for C library strchr() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strchr() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() -#endif - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[] = "Your feeble skills are no match for the power of " - "the dark side!"; - char empty_str[] = ""; - char *ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strchr() function"); - -#ifdef CYGPKG_LIBC - - // Check 1 - ret = strchr(x, (int)'k'); - CYG_TEST_PASS_FAIL( (my_strcmp(ret, x+13) == 0), "Simple test 1" ); - - // Check 2 - ret = strchr(x, (int)'p'); - CYG_TEST_PASS_FAIL( (my_strcmp(ret, x+40) == 0), "Simple test 2" ); - - // Check 3 - ret = strchr(x, (int)'z'); - CYG_TEST_PASS_FAIL( (ret == NULL), "Simple test 3" ); - - // Check 4 (boundary condition) - ret = strchr(x, (int)'\0'); - CYG_TEST_PASS_FAIL( ret == (x+sizeof(x)-1), "Boundary test 1" ); - - // Check 5 (boundary condition) - ret = strchr( empty_str, (int)'\0' ); - CYG_TEST_PASS_FAIL( ret == empty_str, "Boundary test 2" ); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strchr() function"); -} // main() - -// EOF strchr.c diff --git a/packages/language/c/libc/current/tests/string/strcmp1.c b/packages/language/c/libc/current/tests/string/strcmp1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strcmp1.c +++ /dev/null @@ -1,155 +0,0 @@ -//================================================================= -// -// strcmp1.c -// -// Testcase for C library strcmp() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strcmp() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - - -#ifdef CYGPKG_LIBC -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strcmp() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "I have become, comfortably numb"); - my_strcpy(y, "I have become, comfortably numb"); - CYG_TEST_PASS_FAIL( (strcmp(x, y) == 0), "Simple compare"); - - - // Check 2 - my_strcpy(x, ""); - my_strcpy(y, ""); - CYG_TEST_PASS_FAIL( (strcmp(x, y) == 0), "Simple empty string compare"); - - - // Check 3 - my_strcpy(x, "..shall snuff it. And the Lord did grin"); - my_strcpy(y, "..shall snuff it. And the Lord did grio"); - CYG_TEST_PASS_FAIL( (strcmp(x, y) < 0), - "Memory less than #1" ); - - - // Check 4 - my_strcpy(x, "A reading from the Book of Armaments, Chapter 4, " - "Verses 16 to 20:"); - my_strcpy(y, "Bless this, O Lord, that with it thou mayst blow thine " - "enemies to tiny bits, in thy mercy."); - CYG_TEST_PASS_FAIL( (strcmp(x, y) < 0), - "Memory less than #2"); - - // Check 5 - my_strcpy(x, "Lobeth this thy holy hand grenade at thy foe"); - my_strcpy(y, "Lobeth this thy holy hand grenade at thy fod"); - CYG_TEST_PASS_FAIL( (strcmp(x, y) > 0), - "Memory greater than #1" ); - - - // Check 6 - my_strcpy(y, "Three shall be the number of the counting and the"); - my_strcpy(x, "number of the counting shall be three"); - CYG_TEST_PASS_FAIL( (strcmp(x, y) > 0), - "Memory greater than #2" ); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strcmp() function"); -} // main() - - - -// EOF strcmp1.c diff --git a/packages/language/c/libc/current/tests/string/strcmp2.c b/packages/language/c/libc/current/tests/string/strcmp2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strcmp2.c +++ /dev/null @@ -1,142 +0,0 @@ -//================================================================= -// -// strcmp2.c -// -// Testcase for C library strcmp() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strcmp() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// CONSTANTS - -#define NUM_ROBUSTNESS_RUNS 300 - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - - -#ifdef CYGPKG_LIBC -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - char z[300]; - int ctr; - int fail; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strcmp() function"); - CYG_TEST_INFO("This testcase tests robustness, and may take some time"); - -#ifdef CYGPKG_LIBC - - fail = 0; - for (ctr = 0; ctr < NUM_ROBUSTNESS_RUNS; ctr++) - { - my_strcpy(x, "Spare a talent for an old ex-leper"); - my_strcpy(y, "Spare a talent for an old ex-leper"); - my_strcpy(z, "I was hopping along, when suddenly he"); - - if (strcmp(x, y) != 0) - { - fail = 1; - break; - } - if (strcmp(x, z) == 0) - { - fail = 1; - break; - } // if - } // for - - CYG_TEST_PASS_FAIL( (fail==0), "Robustness test"); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strcmp() function"); -} // main() - - -// EOF strcmp2.c diff --git a/packages/language/c/libc/current/tests/string/strcoll1.c b/packages/language/c/libc/current/tests/string/strcoll1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strcoll1.c +++ /dev/null @@ -1,156 +0,0 @@ -//================================================================= -// -// strcoll1.c -// -// Testcase for C library strcoll() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strcoll() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - - -#ifdef CYGPKG_LIBC -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strcoll() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "I have become, comfortably numb"); - my_strcpy(y, "I have become, comfortably numb"); - CYG_TEST_PASS_FAIL( (strcoll(x, y) == 0), "Simple compare"); - - - // Check 2 - my_strcpy(x, ""); - my_strcpy(y, ""); - CYG_TEST_PASS_FAIL( (strcoll(x, y) == 0), "Simple empty string compare"); - - - // Check 3 - my_strcpy(x, "..shall snuff it. And the Lord did grin"); - my_strcpy(y, "..shall snuff it. And the Lord did grio"); - CYG_TEST_PASS_FAIL( (strcoll(x, y) < 0), - "Memory less than #1" ); - - - // Check 4 - my_strcpy(x, "A reading from the Book of Armaments, Chapter 4, " - "Verses 16 to 20:"); - my_strcpy(y, "Bless this, O Lord, that with it thou mayst blow thine " - "enemies to tiny bits, in thy mercy."); - CYG_TEST_PASS_FAIL( (strcoll(x, y) < 0), - "Memory less than #2"); - - // Check 5 - my_strcpy(x, "Lobeth this thy holy hand grenade at thy foe"); - my_strcpy(y, "Lobeth this thy holy hand grenade at thy fod"); - CYG_TEST_PASS_FAIL( (strcoll(x, y) > 0), - "Memory greater than #1" ); - - - // Check 6 - my_strcpy(y, "Three shall be the number of the counting and the"); - my_strcpy(x, "number of the counting shall be three"); - CYG_TEST_PASS_FAIL( (strcoll(x, y) > 0), - "Memory greater than #2" ); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strcoll() function"); -} // main() - - - -// EOF strcoll1.c diff --git a/packages/language/c/libc/current/tests/string/strcoll2.c b/packages/language/c/libc/current/tests/string/strcoll2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strcoll2.c +++ /dev/null @@ -1,126 +0,0 @@ -//================================================================= -// -// strcoll2.c -// -// Testcase for C library strcoll() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strcoll() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// INCLUDES - -#include -#include -#include // C library initialisation - -// CONSTANTS - -#define NUM_ROBUSTNESS_RUNS 300 - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - - -int main( int argc, char *argv[] ) -{ - char x[300]; - char y[300]; - char z[300]; - int ctr; - int fail; - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strcoll() function"); - CYG_TEST_INFO("This testcase tests robustness, and may take some time"); - - fail = 0; - for (ctr = 0; ctr < NUM_ROBUSTNESS_RUNS; ctr++) - { - my_strcpy(x, "Spare a talent for an old ex-leper"); - my_strcpy(y, "Spare a talent for an old ex-leper"); - my_strcpy(z, "I was hopping along, when suddenly he"); - - if (strcoll(x, y) != 0) - { - fail = 1; - break; - } - if (strcoll(x, z) == 0) - { - fail = 1; - break; - } // if - } // for - - CYG_TEST_PASS_FAIL( (fail==0), "Robustness test"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strcoll() function"); -} // main() - - -// EOF strcoll2.c diff --git a/packages/language/c/libc/current/tests/string/strcpy1.c b/packages/language/c/libc/current/tests/string/strcpy1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strcpy1.c +++ /dev/null @@ -1,143 +0,0 @@ -//================================================================= -// -// strcpy1.c -// -// Testcase for C library strcpy() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strcpy() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#ifdef CYGPKG_LIBC - -// Functions to avoid having to use libc strings - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - char *ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strcpy() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "Nine rings for men doomed to die"); - ret = strcpy(y, "Nine rings for men doomed to die"); - CYG_TEST_PASS_FAIL( (my_strcmp(x, y) == 0), "Simple copy" ); - // Check return value - CYG_TEST_PASS_FAIL( (y == ret), "Simple copy return value" ); - - - // Check 2 - my_strcpy(x, ""); - my_strcpy(y, "Seven rings for the dwarves in their halls of stone"); - ret = strcpy(y, x); - CYG_TEST_PASS_FAIL( (my_strcmp(y, "") == 0), "Copy empty string" ); - // Check return value - CYG_TEST_PASS_FAIL( (y == ret), "Copy empty string return value" ); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strcpy() function"); - -} // main() - -// EOF strcpy1.c diff --git a/packages/language/c/libc/current/tests/string/strcpy2.c b/packages/language/c/libc/current/tests/string/strcpy2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strcpy2.c +++ /dev/null @@ -1,145 +0,0 @@ -//================================================================= -// -// strcpy2.c -// -// Testcase for C library strcpy() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strcpy() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// CONSTANTS - -#define NUM_ROBUSTNESS_RUNS 300 - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - char *ret; - int ctr; - int fail; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strcpy() function"); - CYG_TEST_INFO("This testcase tests robustness, and may take some time"); - -#ifdef CYGPKG_LIBC - - fail = 0; - for (ctr = 0; ctr < NUM_ROBUSTNESS_RUNS; ctr++) { - my_strcpy(x, "Green plastic watering can, "); - my_strcpy(y, "for her fake Chineese rubber plant"); - ret = strcpy(x, y); - if ( (my_strcmp(x, "for her fake Chineese rubber plant") != 0) || - ( ret != x ) ) - { - fail = 1; - break; - } // if - } // for - CYG_TEST_PASS_FAIL( (fail == 0), "Robustness test" ); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strcpy() function"); -} // main() - -// EOF strcpy2.c diff --git a/packages/language/c/libc/current/tests/string/strcspn.c b/packages/language/c/libc/current/tests/string/strcspn.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strcspn.c +++ /dev/null @@ -1,164 +0,0 @@ -//================================================================= -// -// strcspn.c -// -// Testcase for C library strcspn() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strcspn() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#ifdef CYGPKG_LIBC - -// Functions to avoid having to use libc strings - -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - int ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strcspn() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "ah blow my nose at you, so-called Arthur king!"); - my_strcpy(y, "A"); - ret = strcspn(x, y); - CYG_TEST_PASS_FAIL( (ret == 34), "Simple strcspn() for one char" ); - - - // Check 2 - my_strcpy(x, "Not bad for a little fur ball. You! Stay here."); - my_strcpy(y, "fd"); - ret = strcspn(x, y); - CYG_TEST_PASS_FAIL( (ret == 6), "Simple strcspn() for two chars" ); - - // Check 3 (boundary condition) - my_strcpy(x, ""); - my_strcpy(y, "zx"); - ret = strcspn(x, y); - CYG_TEST_PASS_FAIL( (ret == 0), "Empty string to search"); - - - // Check 4 (boundary condition) - my_strcpy(x, "So, if she weighs the same as a duck, she's made of wood!"); - my_strcpy(y, "zx"); - ret = strcspn(x, y); - CYG_TEST_PASS_FAIL( (ret == my_strlen(x)), "Characters not in string" ); - - // Check 5 (boundary condition) - my_strcpy(x, "So, if she weighs the same as a duck, she's made of wood!"); - my_strcpy(y, "S"); - ret = strcspn(x, y); - CYG_TEST_PASS_FAIL( (ret == 0), "First character of string" ); - - // Check 6 (boundary condition) - my_strcpy(x, "So, if she weighs the same as a duck, she's made of wood!"); - my_strcpy(y, "!"); - ret = strcspn(x, y); - CYG_TEST_PASS_FAIL( (ret == (my_strlen(x) - 1)), - "Penultimate character of string" ); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strcspn() function"); -} // main() - -// EOF strcspn.c diff --git a/packages/language/c/libc/current/tests/string/strlen.c b/packages/language/c/libc/current/tests/string/strlen.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strlen.c +++ /dev/null @@ -1,105 +0,0 @@ -//================================================================= -// -// strlen.c -// -// Testcase for C library strlen() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strlen() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[]=""; - char y[]="The force is strong in this one"; - char z[]="I told you. We're an anarcho-cynicalist commune"; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strlen() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - CYG_TEST_PASS_FAIL( (strlen(x) == 0), "strlen(\"\")" ); - - CYG_TEST_PASS_FAIL( (strlen(y) == 31), "Simple length check #1" ); - - CYG_TEST_PASS_FAIL( (strlen(z) == 47), "Simple length check #2" ); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strlen() function"); -} // main() - - -// EOF strlen.c diff --git a/packages/language/c/libc/current/tests/string/strncat1.c b/packages/language/c/libc/current/tests/string/strncat1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strncat1.c +++ /dev/null @@ -1,190 +0,0 @@ -//================================================================= -// -// strncat1.c -// -// Testcase for C library strncat() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strncat() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -#ifdef CYGPKG_LIBC - -// Functions to avoid having to use libc strings - -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - char *ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "memmove() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "One ring to rule them all."); - my_strcpy(y, "One ring to find them."); - ret = strncat(x, y, my_strlen(y)+1); - if ( my_strcmp(x, "One ring to rule them all.One ring to find them.")==0 ) - CYG_TEST_PASS("Simple concatenation"); - else - CYG_TEST_FAIL("Simple concatenation"); - // Check return val - CYG_TEST_PASS_FAIL( ( ret == x ), "Simple concatenation return value" ); - - - // Check 2 - my_strcpy(x, "One ring to bring them all,"); - my_strcpy(y, ""); - ret = strncat(x, y, my_strlen(y)+1); - if ( my_strcmp(x, "One ring to bring them all,")==0 ) - CYG_TEST_PASS("Concatenation of empty string"); - else - CYG_TEST_FAIL("Concatenation of empty string"); - // Check return val - CYG_TEST_PASS_FAIL( ( ret == x ), - "Concatenation of empty string return value" ); - - - // Check 3 - my_strcpy(x, "and in the darkness bind them"); - my_strcpy(y, ""); - ret = strncat(y, x, my_strlen(x)+1 ); - if ( my_strcmp(x, "and in the darkness bind them")==0 ) - CYG_TEST_PASS("Concatenation to empty string"); - else - CYG_TEST_FAIL("Concatenation to empty string"); - // Check return val - CYG_TEST_PASS_FAIL( ( ret == y ), - "Concatenation to empty string return value" ); - - // Check 4 - my_strcpy(x, "in the land of "); - my_strcpy(y, "Mordor, where the shadows lie"); - ret = strncat(x, y, 6 ); - if ( my_strcmp(x, "in the land of Mordor")==0 ) - CYG_TEST_PASS("Concatenation of partial string string"); - else - CYG_TEST_FAIL("Concatenation of partial string"); - // Check return val - CYG_TEST_PASS_FAIL( ( ret == x ), - "Concatenation to empty string return value" ); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strncat() function"); -} // main() - - -// EOF strncat1.c diff --git a/packages/language/c/libc/current/tests/string/strncat2.c b/packages/language/c/libc/current/tests/string/strncat2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strncat2.c +++ /dev/null @@ -1,165 +0,0 @@ -//================================================================= -// -// strncat2.c -// -// Testcase for C library strncat() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strncat() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// CONSTANTS - -#define NUM_ROBUSTNESS_RUNS 300 - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - char *ret; - int ctr; - int fail; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strncat() function"); - CYG_TEST_INFO("This testcase tests robustness, and may take some time"); - -#ifdef CYGPKG_LIBC - - fail = 0; - for (ctr = 0; ctr < NUM_ROBUSTNESS_RUNS; ctr++) - { - my_strcpy(x, "in the land of Mordor, "); - my_strcpy(y, "where the shadows lie."); - ret = strncat(x, y, my_strlen(y)+1 ); - if ((my_strcmp(x, "in the land of Mordor, where the shadows lie.")!=0)) - { - fail = 1; - break; - } // if - if (ret != x) - { - fail = 1; - break; - } // if - } - CYG_TEST_PASS_FAIL( (fail == 0), "Robustness test passed" ); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strncat() function"); - -} // main() - - -// EOF strncat2.c diff --git a/packages/language/c/libc/current/tests/string/strncpy1.c b/packages/language/c/libc/current/tests/string/strncpy1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strncpy1.c +++ /dev/null @@ -1,186 +0,0 @@ -//================================================================= -// -// strncpy1.c -// -// Testcase for C library strncpy() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strncpy() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static int my_strncmp(const char *s1, const char *s2, size_t n) -{ - if (n==0) - return 0; - - while (n-- != 0 && *s1 == *s2) - { - if (n == 0 || *s1 == '\0' || *s2 == '\0') - break; - s1++; - s2++; - } - - return (*s1 - *s2); -} // my_strncmp() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif // ifdef CYGPKG_LIBC - - -int -main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - char *ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strncpy() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "Nine rings for men doomed to die"); - ret = strncpy(y, "Nine rings for men doomed to die", my_strlen(x)); - CYG_TEST_PASS_FAIL( (my_strncmp(x, y, my_strlen(x)) == 0), - "Simple copy" ); - // Check return value - CYG_TEST_PASS_FAIL( (y == ret), "Simple copy return value" ); - - - // Check 2 - my_strcpy(x, ""); - my_strcpy(y, "Seven rings for the dwarves in their halls of stone"); - ret = strncpy(y, x, 1); - CYG_TEST_PASS_FAIL( (my_strcmp(y, "") == 0), "Copy empty string" ); - // Check return value - CYG_TEST_PASS_FAIL( (y == ret), "Copy empty string return value" ); - - // Check 3 - my_strcpy(x, ""); - my_strcpy(y, "Seven rings for the dwarves in their halls of stone"); - ret = strncpy(y, x, 0); - if (my_strcmp(y, "Seven rings for the dwarves " - "in their halls of stone") == 0) - CYG_TEST_PASS("Copy 0 characters"); - else - CYG_TEST_FAIL("Copy 0 characters"); - // Check return value - CYG_TEST_PASS_FAIL( (y == ret), "Copy empty string return value" ); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strncpy() function"); - -} // main() - -// EOF strncpy1.c diff --git a/packages/language/c/libc/current/tests/string/strncpy2.c b/packages/language/c/libc/current/tests/string/strncpy2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strncpy2.c +++ /dev/null @@ -1,157 +0,0 @@ -//================================================================= -// -// strncpy2.c -// -// Testcase for C library strncpy() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strncpy() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// CONSTANTS - -#define NUM_ROBUSTNESS_RUNS 300 - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#ifdef CYGPKG_LIBC - -// Functions to avoid having to use libc strings - -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - char *ret; - int ctr; - int fail; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strncpy() function"); - CYG_TEST_INFO("This testcase tests robustness, and may take some time"); - -#ifdef CYGPKG_LIBC - - fail = 0; - for (ctr = 0; ctr < NUM_ROBUSTNESS_RUNS; ctr++) { - my_strcpy(x, "Green plastic watering can, "); - my_strcpy(y, "for her fake Chineese rubber plant"); - ret = strncpy(x, y, my_strlen(y)+1); - if ( (my_strcmp(x, "for her fake Chineese rubber plant") != 0) || - ( ret != x ) ) - { - fail = 1; - break; - } // if - } // for - CYG_TEST_PASS_FAIL( (fail == 0), "Robustness test" ); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strncpy() function"); -} // main() - -// EOF strncpy2.c diff --git a/packages/language/c/libc/current/tests/string/strpbrk.c b/packages/language/c/libc/current/tests/string/strpbrk.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strpbrk.c +++ /dev/null @@ -1,145 +0,0 @@ -//================================================================= -// -// strpbrk.c -// -// Testcase for C library strpbrk() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strpbrk() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - - -#ifdef CYGPKG_LIBC -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - char *ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strpbrk() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "I will not have my fwends widiculed by the common soldiewy"); - my_strcpy(y, "zpm1"); // Finds the 'm' - ret = strpbrk(x, y); - CYG_TEST_PASS_FAIL( (ret == &x[16]), "Simple strpbrk()" ); - - // Check 2 - my_strcpy(x, "Not bad for a little fur ball. You! Stay here."); - my_strcpy(y, "zx"); - ret = strpbrk(x, y); - CYG_TEST_PASS_FAIL( (ret == NULL), "Letters not found"); - - // Check 3 (boundary condition) - my_strcpy(x, ""); - my_strcpy(y, "zx"); - ret = strpbrk(x, y); - CYG_TEST_PASS_FAIL( (ret == NULL), "String to search empty" ); - - // Check 4 (boundary condition) - my_strcpy(x, "zx"); - my_strcpy(y, ""); - ret = strpbrk(x, y); - CYG_TEST_PASS_FAIL( (ret == NULL), "Empty search string" ); - - // Check 5 (boundary condition) - my_strcpy(x, ""); - my_strcpy(y, ""); - ret = strpbrk(x, y); - CYG_TEST_PASS_FAIL( (ret == NULL), "Both strings empty" ); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strpbrk() function"); - -} // main() - -// EOF strpbrk.c diff --git a/packages/language/c/libc/current/tests/string/strrchr.c b/packages/language/c/libc/current/tests/string/strrchr.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strrchr.c +++ /dev/null @@ -1,140 +0,0 @@ -//================================================================= -// -// strrchr.c -// -// Testcase for C library strrchr() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strrchr() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - - -#ifdef CYGPKG_LIBC -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char *ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strrchr() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "I will not have my fwends widiculed by the common soldiewy"); - ret = strrchr(x, (int) 'c'); - CYG_TEST_PASS_FAIL( (ret == &x[43]), "Simple strrchr()" ); - - // Check 2 - my_strcpy(x, "Not bad for a little fur ball. You! Stay here."); - ret = strrchr(x, (int) 'z'); - CYG_TEST_PASS_FAIL( (ret == NULL), "Character not found"); - - // Check 3 (boundary condition) - my_strcpy(x, ""); - ret = strrchr(x, (int) 'c'); - CYG_TEST_PASS_FAIL( (ret == NULL), "String to search empty" ); - - // Check 4 (boundary condition) - my_strcpy(x, "zx"); - ret = strrchr(x, '\0'); - CYG_TEST_PASS_FAIL( (ret == &x[2]), "Null search character" ); - - // Check 5 (boundary condition) - my_strcpy(x, ""); - ret = strrchr(x, '\0'); - CYG_TEST_PASS_FAIL( (ret == x), "String empty and null search char" ); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strrchr() function"); - -} // main() - -// EOF strrchr.c diff --git a/packages/language/c/libc/current/tests/string/strspn.c b/packages/language/c/libc/current/tests/string/strspn.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strspn.c +++ /dev/null @@ -1,153 +0,0 @@ -//================================================================= -// -// strspn.c -// -// Testcase for C library strspn() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strspn() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - -#ifdef CYGPKG_LIBC -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - int ret; -#endif - - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strspn() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "ah blow my nose at you, so-called Arthur king!"); - my_strcpy(y, "wolbah "); - ret = strspn(x, y); - CYG_TEST_PASS_FAIL( (ret == 8), "Simple strspn() #1" ); - - - // Check 2 - my_strcpy(x, "Not bad for a little fur ball. You! Stay here."); - my_strcpy(y, "litea rofdbN"); - ret = strspn(x, y); - CYG_TEST_PASS_FAIL( (ret == 22), "Simple strspn() #2" ); - - // Check 3 - my_strcpy(x, "Not bad for a little fur ball. You! Stay here."); - my_strcpy(y, "litearofdbN"); - ret = strspn(x, y); - CYG_TEST_PASS_FAIL( (ret == 3), "Simple strspn() #3"); - - // Check 4 (boundary condition) - my_strcpy(x, "Not bad for a little fur ball. You! Stay here."); - my_strcpy(y, "litearofdb"); - ret = strspn(x, y); - CYG_TEST_PASS_FAIL( (ret == 0), "First character not in string"); - - - // Check 5 (boundary condition) - my_strcpy(x, "So, if she weighs the same as a duck, she's made of wood!"); - my_strcpy(y, "zx"); - ret = strspn(x, y); - CYG_TEST_PASS_FAIL( (ret == 0), "No characters in string" ); - - // Check 6 (boundary condition) - my_strcpy(x, ""); - my_strcpy(y, "qwerty"); - ret = strspn(x, y); - CYG_TEST_PASS_FAIL( (ret == 0), "Empty search string" ); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strspn() function"); -} // main() - -// EOF strspn.c diff --git a/packages/language/c/libc/current/tests/string/strstr.c b/packages/language/c/libc/current/tests/string/strstr.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strstr.c +++ /dev/null @@ -1,148 +0,0 @@ -//================================================================= -// -// strstr.c -// -// Testcase for C library strstr() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strstr() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - - -// Functions to avoid having to use libc strings - - -#ifdef CYGPKG_LIBC -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() -#endif - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - char *ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strstr() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "I will not have my fwends widiculed by the common soldiewy"); - my_strcpy(y, "fwends"); - ret = strstr(x, y); - CYG_TEST_PASS_FAIL( (ret == &x[19]), "Simple strstr()" ); - - - // Check 2 (boundary condition) - my_strcpy(x, "Not bad for a little fur ball. You! Stay here."); - my_strcpy(y, "ball "); - ret = strstr(x, y); - CYG_TEST_PASS_FAIL( (ret == NULL), "String to search for not present" ); - - - // Check 3 (boundary condition) - my_strcpy(x, ""); - my_strcpy(y, "zx"); - ret = strstr(x, y); - CYG_TEST_PASS_FAIL( (ret == NULL), "Empty string to search" ); - - - // Check 4 (boundary condition) - my_strcpy(x, "fdafdafdfahjgf"); - my_strcpy(y, ""); - ret = strstr(x, y); - CYG_TEST_PASS_FAIL( (ret == x), "Empty search string" ); - - // Check 5 (boundary condition) - my_strcpy(x, ""); - my_strcpy(y, ""); - ret = strstr(x, y); - CYG_TEST_PASS_FAIL( (ret == x), "Both strings empty" ); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strstr() function"); - -} // main() - -// EOF strstr.c diff --git a/packages/language/c/libc/current/tests/string/strtok.c b/packages/language/c/libc/current/tests/string/strtok.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strtok.c +++ /dev/null @@ -1,188 +0,0 @@ -//================================================================= -// -// strtok.c -// -// Testcase for C library strtok() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1999-01-20 -// Description: Contains testcode for C library strtok() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// HOW TO START TESTS - -#if defined(CYGPKG_LIBC) - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif // if defined(CYGPKG_LIBC) - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#if defined(CYGPKG_LIBC) - -// Functions to avoid having to use libc strings - - -static int -my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char * -my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - - -static void -test( CYG_ADDRWORD data ) -{ - char x[300]; - - // Check 1 - my_strcpy(x, "tok1 tok2 3kot"); - if (( my_strcmp("tok1", strtok(x, " ")) == 0 ) && - ( my_strcmp("tok2", strtok(NULL, " ")) == 0 ) && - ( my_strcmp("3kot", strtok(NULL, " ")) == 0 )) - - CYG_TEST_PASS("Simple strtok() #1"); - else - CYG_TEST_FAIL("Simple strtok() #1"); - - // Check 2 - my_strcpy(x, "Hitteth@ye *not, the vicar"); - if (( my_strcmp("Hitteth", strtok(x, "@,*")) == 0 ) && - ( my_strcmp("ye ", strtok(NULL, ",@*")) == 0 ) && - ( my_strcmp("not", strtok(NULL, "*@,")) == 0 ) && - ( my_strcmp(" the vicar", strtok(NULL, "*@,")) == 0 ) ) - - CYG_TEST_PASS("Simple strtok() #2"); - else - CYG_TEST_FAIL("Simple strtok() #2"); - - // Check 3 - my_strcpy(x, "on his bonce, with thine football"); - if ( my_strcmp(strtok(x, "@*"), x) == 0 ) - CYG_TEST_PASS("strtok() with token delimiters not found"); - else - CYG_TEST_FAIL("strtok() with token delimiters not found"); - - // Check 4 - my_strcpy(x, "@@@,,,...@,.,.@"); - if (strtok(x, "@,.") == NULL) - CYG_TEST_PASS("All characters of string are token delimiters"); - else - CYG_TEST_FAIL("All characters of string are token delimiters"); - - // Check 5 - my_strcpy(x, ""); - if (strtok(x, "@,.") == NULL) - CYG_TEST_PASS("String to tokenize empty"); - else - CYG_TEST_FAIL("String to tokenize empty"); - - // Check 6 - my_strcpy(x, "fdafda"); - if (strtok(x, "") == x) - CYG_TEST_PASS("String to tokenize empty"); - else - CYG_TEST_FAIL("String to tokenize empty"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strtok() function"); - -} // test() - -#endif // if defined(CYGPKG_LIBC) - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strtok() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); -} // main() - - -// EOF strtok.c diff --git a/packages/language/c/libc/current/tests/string/strxfrm1.c b/packages/language/c/libc/current/tests/string/strxfrm1.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strxfrm1.c +++ /dev/null @@ -1,170 +0,0 @@ -//================================================================= -// -// strxfrm1.c -// -// Testcase for C library strxfrm() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strxfrm() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#ifdef CYGPKG_LIBC - -// Functions to avoid having to use libc strings - -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - int ret; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strxfrm() function"); - CYG_TEST_INFO("This testcase provides simple basic tests"); - -#ifdef CYGPKG_LIBC - - // Check 1 - my_strcpy(x, "Nine rings for men doomed to die"); - ret = strxfrm(y, x, my_strlen(x)+1); - if (my_strcmp(x, y) == 0) - CYG_TEST_PASS("Simple strxfrm()"); - else - CYG_TEST_FAIL("Simple strxfrm()"); - // Check return value - CYG_TEST_PASS_FAIL( (my_strlen(x) == ret), - "Simple strxfrm() return value"); - - // Check 2 - x[0] = '\0'; - my_strcpy(y, "Seven rings for the dwarves in their halls of stone"); - ret = strxfrm(y, x, my_strlen(x)+1); - if (my_strcmp(y, "") == 0) - CYG_TEST_PASS("strxfrm() of empty string"); - else - CYG_TEST_FAIL("strxfrm() of empty string"); - // Check return value - CYG_TEST_PASS_FAIL( (my_strlen(x) == ret), - "strxfrm() of empty string return value"); - - // Check 3 - my_strcpy(y, "Seven rings for the dwarves in their halls of stone"); - ret = strxfrm(NULL, y, 0); - - // Check return value - CYG_TEST_PASS_FAIL( (my_strlen(y) == ret), - "strxfrm() of NULL string for 0 bytes return value"); - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strxfrm() function"); -} // main() - - -// EOF strxfrm1.c diff --git a/packages/language/c/libc/current/tests/string/strxfrm2.c b/packages/language/c/libc/current/tests/string/strxfrm2.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/string/strxfrm2.c +++ /dev/null @@ -1,158 +0,0 @@ -//================================================================= -// -// strxfrm2.c -// -// Testcase for C library strxfrm() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy, jlarmour -// Contributors: jlarmour -// Date: 1998/6/3 -// Description: Contains testcode for C library strxfrm() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE -// COMPOUND_TESTCASE - - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// CONSTANTS - -#define NUM_ROBUSTNESS_RUNS 300 - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ -#ifdef CYGPKG_LIBC - cyg_iso_c_start(); -#else - (void)main(0, NULL); -#endif -} // cyg_package_start() - - -#ifdef CYGPKG_LIBC - -// Functions to avoid having to use libc strings - -static int my_strlen(const char *s) -{ - const char *ptr; - - ptr = s; - for ( ptr=s ; *ptr != '\0' ; ptr++ ) - ; - - return (int)(ptr-s); -} // my_strlen() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static char *my_strcpy(char *s1, const char *s2) -{ - while (*s2 != '\0') { - *(s1++) = *(s2++); - } - *s1 = '\0'; - - return s1; -} // my_strcpy() - -#endif // ifdef CYGPKG_LIBC - - -int main( int argc, char *argv[] ) -{ -#ifdef CYGPKG_LIBC - char x[300]; - char y[300]; - int ret; - int ctr; - int fail; -#endif - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strxfrm() function"); - CYG_TEST_INFO("This testcase tests robustness, and may take some time"); - -#ifdef CYGPKG_LIBC - - fail = 0; - for (ctr = 0; ctr < NUM_ROBUSTNESS_RUNS; ctr++) { - my_strcpy(x, "Green plastic watering can, "); - my_strcpy(y, "for her fake Chineese rubber plant"); - ret = strxfrm(x, y, my_strlen(y)+1); - if ( (my_strcmp(x, "for her fake Chineese rubber plant") != 0) || - (my_strlen(y) != ret) ) { - fail = 1; - break; - } - } - CYG_TEST_PASS_FAIL( (fail == 0), "Robustness test" ); - - -#else // ifndef CYGPKG_LIBC - CYG_TEST_NA("Testing is not applicable to this configuration"); -#endif // ifndef CYGPKG_LIBC - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strxfrm() function"); -} // main() - -// EOF strxfrm2.c diff --git a/packages/language/c/libc/current/tests/time/asctime.c b/packages/language/c/libc/current/tests/time/asctime.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/time/asctime.c +++ /dev/null @@ -1,204 +0,0 @@ -//================================================================= -// -// asctime.c -// -// Testcase for C library asctime() function -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-05 -// Description: Contains testcode for C library asctime() function -// -// -//####DESCRIPTIONEND#### - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include -#include -#include // C library initialisation - -// HOW TO START TESTS - -# define START_TEST( test ) test(0) - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static void -test( CYG_ADDRWORD data ) -{ - struct tm tm1; - char *ret; - - tm1.tm_sec = 4; - tm1.tm_min = 23; - tm1.tm_hour = 20; - tm1.tm_mday = 21; - tm1.tm_mon = 1; - tm1.tm_year = 74; - tm1.tm_wday = 4; - tm1.tm_yday = 51; - tm1.tm_isdst = 0; - - ret = asctime(&tm1); - - CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Thu Feb 21 20:23:04 1974\n"), - "asctime test #1"); - tm1.tm_sec = 3; - tm1.tm_min = 51; - tm1.tm_hour = 5; - tm1.tm_mday = 2; - tm1.tm_mon = 11; - tm1.tm_year = 68; - tm1.tm_wday = 1; - tm1.tm_yday = 336; - tm1.tm_isdst = 0; - - ret = asctime(&tm1); - - CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Mon Dec 02 05:51:03 1968\n"), - "asctime test #2"); - - // make this predictable - independent of the user option - cyg_libc_time_setzoneoffsets(0, 3600); - - tm1.tm_sec = 3; - tm1.tm_min = 51; - tm1.tm_hour = 5; - tm1.tm_mday = 2; - tm1.tm_mon = 6; - tm1.tm_year = 68; - tm1.tm_wday = 2; - tm1.tm_yday = 183; - tm1.tm_isdst = 1; - - ret = asctime(&tm1); - - CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Tue Jul 02 05:51:03 1968\n"), - "asctime test #3"); - - tm1.tm_sec = 0; - tm1.tm_min = 0; - tm1.tm_hour = 0; - tm1.tm_mday = 1; - tm1.tm_mon = 0; - tm1.tm_year = 0; - tm1.tm_wday = 1; - tm1.tm_yday = 0; - tm1.tm_isdst = 0; - - ret = asctime(&tm1); - - CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Mon Jan 01 00:00:00 1900\n"), - "asctime test #4"); - - tm1.tm_sec = 0; - tm1.tm_min = 0; - tm1.tm_hour = 0; - tm1.tm_mday = 1; - tm1.tm_mon = 0; - tm1.tm_year = 100; - tm1.tm_wday = 6; - tm1.tm_yday = 0; - tm1.tm_isdst = 0; - - ret = asctime(&tm1); - - CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Sat Jan 01 00:00:00 2000\n"), - "asctime Y2K test #5"); - -#ifdef CYGFUN_LIBC_TIME_POSIX - { - char ret2[100]; - - tm1.tm_sec = 3; - tm1.tm_min = 51; - tm1.tm_hour = 5; - tm1.tm_mday = 2; - tm1.tm_mon = 11; - tm1.tm_year = 68; - tm1.tm_wday = 1; - tm1.tm_yday = 336; - tm1.tm_isdst = 0; - - ret = asctime_r(&tm1, ret2); - - CYG_TEST_PASS_FAIL((ret==ret2) && - !my_strcmp(ret, "Mon Dec 02 05:51:03 1968\n"), - "asctime_r test #1"); - - } -#endif - - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "asctime() function"); -} // test() - - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "asctime() function"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); - -} // main() - -// EOF asctime.c diff --git a/packages/language/c/libc/current/tests/time/clock.c b/packages/language/c/libc/current/tests/time/clock.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/time/clock.c +++ /dev/null @@ -1,213 +0,0 @@ -//================================================================= -// -// clock.c -// -// Testcase for C library clock() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): ctarpy -// Contributors: ctarpy, jlarmour -// Date: 1999-03-05 -// Description: Contains testcode for C library clock() function -// -// -//####DESCRIPTIONEND#### - -// Declarations for test system: -// -// TESTCASE_TYPE=CYG_TEST_MODULE - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -#define RUN_TEST 1 - -// This test is bound to fail on Linux -- we don't have exclusive access -// to the CPU. -#if defined(CYGPKG_HAL_I386_LINUX) -#undef RUN_TEST -#define RUN_TEST 0 -#endif - - -// HOW TO START TESTS - -#if RUN_TEST - -#include -#include - -# define START_TEST( test ) test(0) - -#else - -# define START_TEST( test ) CYG_EMPTY_STATEMENT - -#endif - - -// CONSTANTS - -// This defines how many loops before we decide that -// the clock doesnt work -#define MAX_TIMEOUT 1000000 - -// Percentage error before we declare fail: range 0 - 100 -#define TOLERANCE 40 - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -#if RUN_TEST - -static int -my_abs(int i) -{ - return (i < 0) ? -i : i; -} // my_abs() - - -static void -test( CYG_ADDRWORD data ) -{ - unsigned long ctr, ctr2, err; - clock_t clock_init; - clock_t clock_first=0, clock_second=0, clock_third=0; - - // First disable the caches - they may affect the timing loops - // below - especially if tracing or assertions are enabled, causing - // the elapsed time during the clock() call to vary. - { - register CYG_INTERRUPT_STATE oldints; - - HAL_DISABLE_INTERRUPTS(oldints); - HAL_DCACHE_SYNC(); - HAL_ICACHE_DISABLE(); - HAL_DCACHE_DISABLE(); - HAL_DCACHE_SYNC(); - HAL_ICACHE_INVALIDATE_ALL(); - HAL_DCACHE_INVALIDATE_ALL(); - HAL_RESTORE_INTERRUPTS(oldints); - } - - // This waits for a clock tick, to ensure that we are at the - // start of a clock period. Then sit in a tight loop to get - // the clock period. Repeat this, and make sure that it the - // two timed periods are acceptably close. - - err = 101; - clock_init = clock(); - - if (clock_init == (clock_t)-1) // unimplemented is just as valid - { - CYG_TEST_PASS_FINISH( "clock() returns -1, meaning unimplemented"); - } // if - - for (ctr = 0; ctr clock_init) - break; // Hit the next clock pulse - } - if (ctr < MAX_TIMEOUT) - { - // We hit a clock pulse, rather than a timeout - // Now we are at the beginning of a pulse, so time until the - // next one in order to get a measure of the length. - for (ctr = 0; ctr clock_first) - break; // Hit the next clock pulse - } // for - if (ctr < MAX_TIMEOUT) - { - // We hit a clock pulse, rather than a timeout. ctr contains - // the number of loops/tick. Measure this again, and see if - // the two results are acceptably close. - for (ctr2 = 0; ctr2 clock_second) - break; // Hit the next clock pulse - } // for - if (ctr2 < MAX_TIMEOUT) - { - err = (100 * my_abs(ctr-ctr2)) / ctr; - } // if (ctr < MAX_TIMEOUT) - else - { - CYG_TEST_FAIL_FINISH("No change in clock state!"); - } // else (ctr < MAX_TIMEOUT) - } // if (ctr < MAX_TIMEOUT) - else - { - CYG_TEST_FAIL_FINISH("No change in clock state!"); - } // else (ctr < MAX_TIMEOUT) - - } // if (ctr < MAX_TIMEOUT) - else - { - CYG_TEST_FAIL_FINISH("No change in clock state!"); - } // else (ctr < MAX_TIMEOUT) - - CYG_TEST_PASS_FAIL(err < TOLERANCE, "clock() stability"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "clock() function"); -} // test() -#endif - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "clock() function"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); - -} // main() - -// EOF clock.c diff --git a/packages/language/c/libc/current/tests/time/ctime.c b/packages/language/c/libc/current/tests/time/ctime.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/time/ctime.c +++ /dev/null @@ -1,141 +0,0 @@ -//================================================================= -// -// ctime.c -// -// Testcase for C library ctime() function -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-05 -// Description: Contains testcode for C library ctime() function -// -// -//####DESCRIPTIONEND#### - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include -#include -#include // C library initialisation - -// HOW TO START TESTS - -# define START_TEST( test ) test(0) - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - - -static void -test( CYG_ADDRWORD data ) -{ - time_t t; - char *ret; - - // make this predictable - independent of the user option - cyg_libc_time_setzoneoffsets(0, 3600); - cyg_libc_time_setdst( CYG_LIBC_TIME_DSTOFF ); - - t = (time_t)130710184; - - ret = ctime(&t); - CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Thu Feb 21 20:23:04 1974\n"), - "ctime test #1"); - - t = (time_t)946689894; - - ret = ctime(&t); - CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Sat Jan 01 01:24:54 2000\n"), - "ctime Y2K test #2"); - - cyg_libc_time_setdst( CYG_LIBC_TIME_DSTON ); - - t = (time_t)-113186106; - - ret = ctime(&t); - CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Tue Jun 01 00:24:54 1966\n"), - "ctime test #3"); - -#ifdef CYGFUN_LIBC_TIME_POSIX - cyg_libc_time_setdst( CYG_LIBC_TIME_DSTOFF ); - - t = (time_t)915510061; - - { - char ret2[26]; - - ret = ctime_r(&t, ret2); - CYG_TEST_PASS_FAIL(!my_strcmp(ret2, "Tue Jan 05 04:21:01 1999\n"), - "ctime_r test #1"); - } -#endif - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "ctime() function"); -} // test() - - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "ctime() function"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); - -} // main() - -// EOF ctime.c diff --git a/packages/language/c/libc/current/tests/time/gmtime.c b/packages/language/c/libc/current/tests/time/gmtime.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/time/gmtime.c +++ /dev/null @@ -1,205 +0,0 @@ -//================================================================= -// -// gmtime.c -// -// Testcase for C library gmtime() function -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-05 -// Description: Contains testcode for C library gmtime() function -// -// -//####DESCRIPTIONEND#### - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include -#include -#include // C library initialisation - -// HOW TO START TESTS - -# define START_TEST( test ) test(0) - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -static int -cmp_structtm(struct tm *tm1, struct tm *tm2) -{ - if ((tm1->tm_sec != tm2->tm_sec) || - (tm1->tm_min != tm2->tm_min) || - (tm1->tm_hour != tm2->tm_hour) || - (tm1->tm_mday != tm2->tm_mday) || - (tm1->tm_mon != tm2->tm_mon) || - (tm1->tm_year != tm2->tm_year) || - (tm1->tm_wday != tm2->tm_wday) || - (tm1->tm_yday != tm2->tm_yday) || - (tm1->tm_isdst != tm2->tm_isdst)) - return 1; - else - return 0; -} - -static void -test( CYG_ADDRWORD data ) -{ - struct tm tm1, *tm2; - time_t t; - - // make this predictable - independent of the user option - cyg_libc_time_setzoneoffsets(0, 3600); - cyg_libc_time_setdst( CYG_LIBC_TIME_DSTOFF ); - - tm1.tm_sec = 4; - tm1.tm_min = 23; - tm1.tm_hour = 20; - tm1.tm_mday = 21; - tm1.tm_mon = 1; - tm1.tm_year = 74; - tm1.tm_wday = 4; - tm1.tm_yday = 51; - tm1.tm_isdst = 0; - - t = (time_t)130710184; - - tm2 = gmtime(&t); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "gmtime test #1"); - - - tm1.tm_sec = 1; - tm1.tm_min = 21; - tm1.tm_hour = 4; - tm1.tm_mday = 5; - tm1.tm_mon = 0; - tm1.tm_wday = 2; - tm1.tm_yday = 4; - tm1.tm_year = 99; - tm1.tm_isdst = 0; - - t = (time_t)915510061; - - tm2 = gmtime(&t); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "gmtime test #2"); - - tm1.tm_sec = 54; - tm1.tm_min = 24; - tm1.tm_hour = 1; - tm1.tm_mday = 1; - tm1.tm_mon = 0; - tm1.tm_year = 100; - tm1.tm_wday = 6; - tm1.tm_yday = 0; - tm1.tm_isdst = 0; - - t = (time_t)946689894; - - tm2 = gmtime(&t); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "gmtime Y2K test #3"); - - cyg_libc_time_setdst( CYG_LIBC_TIME_DSTON ); - - tm1.tm_sec = 54; - tm1.tm_min = 24; - tm1.tm_hour = 23; - tm1.tm_mday = 31; - tm1.tm_mon = 4; - tm1.tm_wday = 2; - tm1.tm_yday = 150; - tm1.tm_year = 66; - tm1.tm_isdst = 0; - - t = (time_t)-113186106; - - tm2 = gmtime(&t); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "gmtime test #4"); - - tm1.tm_sec = 59; - tm1.tm_min = 59; - tm1.tm_hour = 23; - tm1.tm_mday = 31; - tm1.tm_mon = 4; - tm1.tm_wday = 3; - tm1.tm_yday = 151; - tm1.tm_year = 100; - tm1.tm_isdst = 0; - - t = (time_t)959817599; - - tm2 = gmtime(&t); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "gmtime test #5"); - - tm1.tm_sec = 0; - tm1.tm_min = 0; - tm1.tm_hour = 0; - tm1.tm_mday = 1; - tm1.tm_mon = 5; - tm1.tm_wday = 4; - tm1.tm_yday = 152; - tm1.tm_year = 100; - tm1.tm_isdst = 0; - - t = (time_t)959817600; - - tm2 = gmtime(&t); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "gmtime test #6"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "gmtime() function"); -} // test() - - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "gmtime() function"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); - -} // main() - -// EOF gmtime.c diff --git a/packages/language/c/libc/current/tests/time/localtime.c b/packages/language/c/libc/current/tests/time/localtime.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/time/localtime.c +++ /dev/null @@ -1,175 +0,0 @@ -//================================================================= -// -// localtime.c -// -// Testcase for C library localtime() function -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-05 -// Description: Contains testcode for C library localtime() function -// -// -//####DESCRIPTIONEND#### - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include -#include -#include // C library initialisation - -// HOW TO START TESTS - -# define START_TEST( test ) test(0) - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -static int -cmp_structtm(struct tm *tm1, struct tm *tm2) -{ - if ((tm1->tm_sec != tm2->tm_sec) || - (tm1->tm_min != tm2->tm_min) || - (tm1->tm_hour != tm2->tm_hour) || - (tm1->tm_mday != tm2->tm_mday) || - (tm1->tm_mon != tm2->tm_mon) || - (tm1->tm_year != tm2->tm_year) || - (tm1->tm_wday != tm2->tm_wday) || - (tm1->tm_yday != tm2->tm_yday) || - (tm1->tm_isdst != tm2->tm_isdst)) - return 1; - else - return 0; -} - -static void -test( CYG_ADDRWORD data ) -{ - struct tm tm1, *tm2; - time_t t; - - // make this predictable - independent of the user option - cyg_libc_time_setzoneoffsets(0, 3600); - cyg_libc_time_setdst( CYG_LIBC_TIME_DSTOFF ); - - tm1.tm_sec = 4; - tm1.tm_min = 23; - tm1.tm_hour = 20; - tm1.tm_mday = 21; - tm1.tm_mon = 1; - tm1.tm_year = 74; - tm1.tm_wday = 4; - tm1.tm_yday = 51; - tm1.tm_isdst = 0; - - t = (time_t)130710184; - - tm2 = localtime(&t); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "localtime test #1"); - - - tm1.tm_sec = 1; - tm1.tm_min = 21; - tm1.tm_hour = 4; - tm1.tm_mday = 5; - tm1.tm_mon = 0; - tm1.tm_wday = 2; - tm1.tm_yday = 4; - tm1.tm_year = 99; - tm1.tm_isdst = 0; - - t = (time_t)915510061; - - tm2 = localtime(&t); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "localtime test #2"); - - tm1.tm_sec = 54; - tm1.tm_min = 24; - tm1.tm_hour = 1; - tm1.tm_mday = 1; - tm1.tm_mon = 0; - tm1.tm_year = 100; - tm1.tm_wday = 6; - tm1.tm_yday = 0; - tm1.tm_isdst = 0; - - t = (time_t)946689894; - - tm2 = localtime(&t); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "localtime Y2K test #3"); - - cyg_libc_time_setdst( CYG_LIBC_TIME_DSTON ); - - tm1.tm_sec = 54; - tm1.tm_min = 24; - tm1.tm_hour = 0; - tm1.tm_mday = 1; - tm1.tm_mon = 5; - tm1.tm_wday = 2; - tm1.tm_yday = 150; - tm1.tm_year = 66; - tm1.tm_isdst = 1; - - t = (time_t)-113186106; - - tm2 = localtime(&t); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "localtime test #4"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "localtime() function"); -} // test() - - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "localtime() function"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); - -} // main() - -// EOF localtime.c diff --git a/packages/language/c/libc/current/tests/time/mktime.c b/packages/language/c/libc/current/tests/time/mktime.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/time/mktime.c +++ /dev/null @@ -1,177 +0,0 @@ -//================================================================= -// -// mktime.c -// -// Testcase for C library mktime() function -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-05 -// Description: Contains testcode for C library mktime() function -// -// -//####DESCRIPTIONEND#### - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include -#include -#include // C library initialisation - -// HOW TO START TESTS - -# define START_TEST( test ) test(0) - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -static int -cmp_structtm(struct tm *tm1, struct tm *tm2) -{ - if ((tm1->tm_sec != tm2->tm_sec) || - (tm1->tm_min != tm2->tm_min) || - (tm1->tm_hour != tm2->tm_hour) || - (tm1->tm_mday != tm2->tm_mday) || - (tm1->tm_mon != tm2->tm_mon) || - (tm1->tm_year != tm2->tm_year) || - (tm1->tm_wday != tm2->tm_wday) || - (tm1->tm_yday != tm2->tm_yday) || - (tm1->tm_isdst != tm2->tm_isdst)) - return 1; - else - return 0; -} - -static void -test( CYG_ADDRWORD data ) -{ - struct tm tm1, tm2; - time_t t; - - // make this predictable - independent of the user option - cyg_libc_time_setzoneoffsets(0, 3600); - - tm1.tm_sec = 4; - tm1.tm_min = 23; - tm1.tm_hour = 20; - tm1.tm_mday = 21; - tm1.tm_mon = 1; - tm1.tm_year = 74; - tm1.tm_isdst = 0; - - tm2 = tm1; - tm2.tm_wday = 4; - tm2.tm_yday = 51; - - t = mktime(&tm1); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, &tm2), "mktime test #1"); - CYG_TEST_PASS_FAIL(t == 130710184, "mktime return test #1"); - - tm1.tm_sec = 61; - tm1.tm_min = 20; - tm1.tm_hour = 4; - tm1.tm_mday = 5; - tm1.tm_mon = 0; - tm1.tm_year = 99; - tm1.tm_isdst = 0; - - tm2 = tm1; - tm2.tm_sec=1; - tm2.tm_min = 21; - tm2.tm_wday = 2; - tm2.tm_yday = 4; - - t = mktime(&tm1); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, &tm2), "mktime test #2"); - CYG_TEST_PASS_FAIL(t == 915510061, "mktime return test #2"); - - tm1.tm_sec = 54; - tm1.tm_min = 24; - tm1.tm_hour = 1; - tm1.tm_mday = 1; - tm1.tm_mon = 0; - tm1.tm_year = 100; - tm1.tm_isdst = 0; - - tm2 = tm1; - tm2.tm_wday = 6; - tm2.tm_yday = 0; - - t = mktime(&tm1); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, &tm2), "mktime Y2K test #3"); - CYG_TEST_PASS_FAIL(t == 946689894, "mktime Y2K return test #3"); - - tm1.tm_sec = 54; - tm1.tm_min = 24; - tm1.tm_hour = 23; - tm1.tm_mday = 31; - tm1.tm_mon = 4; - tm1.tm_year = 66; - tm1.tm_isdst = 1; - - tm2 = tm1; - tm2.tm_wday = 2; - tm2.tm_yday = 150; - - t = mktime(&tm1); - CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, &tm2), "mktime test #4"); - CYG_TEST_PASS_FAIL(t == -113186106, "mktime return test #4"); - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "mktime() function"); -} // test() - - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "mktime() function"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); - -} // main() - -// EOF mktime.c diff --git a/packages/language/c/libc/current/tests/time/strftime.c b/packages/language/c/libc/current/tests/time/strftime.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/time/strftime.c +++ /dev/null @@ -1,195 +0,0 @@ -//================================================================= -// -// strftime.c -// -// Testcase for C library strftime() function -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-05 -// Description: Contains testcode for C library strftime() function -// -// -//####DESCRIPTIONEND#### - -// CONFIGURATION - -#include // C library configuration - -// INCLUDES - -#include -#include -#include // C library initialisation - -// HOW TO START TESTS - -# define START_TEST( test ) test(0) - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -static int my_strcmp(const char *s1, const char *s2) -{ - for ( ; *s1 == *s2 ; s1++,s2++ ) - { - if ( *s1 == '\0' ) - break; - } // for - - return (*s1 - *s2); -} // my_strcmp() - -static void -test( CYG_ADDRWORD data ) -{ - struct tm tm1; - char s[1000]; - size_t size; - - tm1.tm_sec = 4; - tm1.tm_min = 23; - tm1.tm_hour = 20; - tm1.tm_mday = 21; - tm1.tm_mon = 1; - tm1.tm_year = 74; - tm1.tm_wday = 4; - tm1.tm_yday = 51; - tm1.tm_isdst = 0; - - size = strftime(s, 1000, "", &tm1); - CYG_TEST_PASS_FAIL((size==0) && (*s=='\0'), "strftime test #1"); - - size = strftime(s, 1000, "%a", &tm1); - CYG_TEST_PASS_FAIL((size==3) && !my_strcmp(s, "Thu"), "strftime test #2"); - - size = strftime(s, 1000, "%A", &tm1); - CYG_TEST_PASS_FAIL((size==8) && !my_strcmp(s, "Thursday"), - "strftime test #3"); - - size = strftime(s, 1000, "%b", &tm1); - CYG_TEST_PASS_FAIL((size==3) && !my_strcmp(s, "Feb"), - "strftime test #4"); - - size = strftime(s, 1000, "%B", &tm1); - CYG_TEST_PASS_FAIL((size==8) && !my_strcmp(s, "February"), - "strftime test #5"); - - size = strftime(s, 1000, "%d", &tm1); - CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "21"), - "strftime test #6"); - - size = strftime(s, 1000, "%H", &tm1); - CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "20"), - "strftime test #7"); - - size = strftime(s, 1000, "%I", &tm1); - CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "09"), - "strftime test #8"); - - size = strftime(s, 1000, "%j", &tm1); - CYG_TEST_PASS_FAIL((size==3) && !my_strcmp(s, "051"), - "strftime test #9"); - - size = strftime(s, 1000, "%m", &tm1); - CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "02"), - "strftime test #10"); - - size = strftime(s, 1000, "%M", &tm1); - CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "23"), - "strftime test #11"); - - size = strftime(s, 1000, "%p", &tm1); - CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "pm"), - "strftime test #12"); - - size = strftime(s, 1000, "%S", &tm1); - CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "04"), - "strftime test #13"); - - size = strftime(s, 1000, "%U", &tm1); - CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "07"), - "strftime test #14"); - - size = strftime(s, 1000, "%w", &tm1); - CYG_TEST_PASS_FAIL((size==1) && !my_strcmp(s, "4"), - "strftime test #15"); - - size = strftime(s, 1000, "%W", &tm1); - CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "07"), - "strftime test #16"); - - size = strftime(s, 1000, "%y", &tm1); - CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "74"), - "strftime test #17"); - - size = strftime(s, 1000, "%Y", &tm1); - CYG_TEST_PASS_FAIL((size==4) && !my_strcmp(s, "1974"), - "strftime test #18"); - - size = strftime(s, 1000, "%%", &tm1); - CYG_TEST_PASS_FAIL((size==1) && !my_strcmp(s, "%"), - "strftime test #19"); - - size = strftime(s, 5, "%Y", &tm1); - CYG_TEST_PASS_FAIL((size==4) && !my_strcmp(s, "1974"), - "strftime test #20"); - - size = strftime(s, 4, "%Y", &tm1); - CYG_TEST_PASS_FAIL((size==0), "strftime test #21"); - - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "strftime() function"); -} // test() - - -int -main(int argc, char *argv[]) -{ - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "strftime() function"); - - START_TEST( test ); - - CYG_TEST_NA("Testing is not applicable to this configuration"); - -} // main() - -// EOF strftime.c diff --git a/packages/language/c/libc/current/tests/time/time.c b/packages/language/c/libc/current/tests/time/time.c deleted file mode 100644 --- a/packages/language/c/libc/current/tests/time/time.c +++ /dev/null @@ -1,123 +0,0 @@ -//================================================================= -// -// time.c -// -// Testcase for C library time() -// -//================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jlarmour -// Contributors: jlarmour -// Date: 1999-03-05 -// Description: Contains testcode for C library time() function -// -// -//####DESCRIPTIONEND#### - -// CONFIGURATION - -#include // Configuration header - -// INCLUDES - -#include -#include -#include // C library initialisation - -// CONSTANTS - -// This defines how many loops before we decide that -// time() doesn't work -#define MAX_TIMEOUT 5000000 - - -// FUNCTIONS - - -externC void -cyg_package_start( void ) -{ - cyg_iso_c_start(); -} // cyg_package_start() - - -int -main(int argc, char *argv[]) -{ - time_t t1, t2; - unsigned long ctr; - - CYG_TEST_INIT(); - - CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library " - "time() function"); - - t1 = time(&t2); - - CYG_TEST_PASS_FAIL(t1==t2, "time() return value == argument"); - - if (t1 == (time_t)-1) // unimplemented is just as valid - { -#ifndef CYGSEM_LIBC_TIME_TIME_WORKING - CYG_TEST_PASS_FINISH( "time() returns -1, meaning unimplemented"); -#else - CYG_TEST_FAIL("time() returned -1 unnecessarily"); -#endif - } // if - - // First wait for a clock tick - - for (ctr = 0; ctr t1) - break; // Hit the next time pulse - } - CYG_TEST_PASS_FAIL( ctr< MAX_TIMEOUT, "time()'s state changes"); - -#ifdef CYGSEM_LIBC_TIME_SETTIME_WORKING - CYG_TEST_PASS_FAIL(cyg_libc_time_settime(0)==0, "Set time to 0"); - - t1 = time(NULL); - - // give it a small amount of tolerance - CYG_TEST_PASS_FAIL(t1 < 3, "t1 remembered setting"); - - CYG_TEST_PASS_FAIL(cyg_libc_time_settime(1000)==0, "Set time to 1000"); - - // give it a small amount of tolerance - CYG_TEST_PASS_FAIL(t1 < 1003, "t1 remembered setting"); - -#else // ! CYGSEM_LIBC_TIME_SETTIME_WORKING - CYG_TEST_PASS_FAIL(cyg_libc_time_settime(0)!=0, - "Set time expected fail"); -#endif // CYGSEM_LIBC_TIME_SETTIME_WORKING - - CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library " - "time() function"); -} // main() - -// EOF time.c diff --git a/packages/net/drivers/eth/common/current/ChangeLog b/packages/net/drivers/eth/common/current/ChangeLog deleted file mode 100644 --- a/packages/net/drivers/eth/common/current/ChangeLog +++ /dev/null @@ -1,81 +0,0 @@ -2000-07-15 Gary Thomas - - * include/eth_drv.h: Add [initial] extensions to let this - layer work either in an eCos environment or stand-alone. - -2000-06-23 Hugo Tyson - - * src/eth_drv.c (eth_drv_send): Do not consume an SG entry for - zero length data; tolerate overflow of the SG. Before this, pings - of 6000 bytes crashed the system! - - You can now set net_debug to 2 to get quieter output; 1 gives the - whole packet dump as before. - - * include/eth_drv.h (MAX_ETH_DRV_SG): Make this 16 so that an MTU - made of all mbufs will not overflow. - -2000-03-28 Gary Thomas - - * src/eth_drv.c (eth_drv_recv): Tolerate running out of MBUFs - instead of "panic"ing. - -2000-03-08 Gary Thomas - - * src/eth_drv.c: Add some function [block] comments. - (eth_drv_send): Use eCos scheduler lock instead of interrupt lock. - -2000-03-08 Hugo Tyson - - * doc/driver_doc: Add some clarification about what's called when, - proofreading results, shorter lines so I can print it nicely. - -2000-03-06 Gary Thomas - - * src/eth_drv.c: - * include/eth_drv.h: - * doc/driver_doc: Remove generic "priv"ate references. - -2000-02-29 Gary Thomas - - * src/eth_drv.c: - * include/eth_drv.h: New expanded API for hardware drivers. - -2000-02-18 Gary Thomas - - * src/eth_drv.c (eth_drv_send): Disable interrupts while initiating - the buffer send - avoid a possible race. - -2000-02-08 John Dallaway - - * cdl/eth_drivers.cdl: - Reparent under CYGPKG_NET and tidy display strings. - -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//=========================================================================== - - - diff --git a/packages/net/drivers/eth/common/current/cdl/eth_drivers.cdl b/packages/net/drivers/eth/common/current/cdl/eth_drivers.cdl deleted file mode 100644 --- a/packages/net/drivers/eth/common/current/cdl/eth_drivers.cdl +++ /dev/null @@ -1,67 +0,0 @@ -# ==================================================================== -# -# eth_drivers.cdl -# -# Ethernet drivers - platform independent support -# -# ==================================================================== -#####COPYRIGHTBEGIN#### -# -# ------------------------------------------- -# The contents of this file are subject to the Red Hat eCos Public License -# Version 1.1 (the "License"); you may not use this file except in -# compliance with the License. You may obtain a copy of the License at -# http://www.redhat.com/ -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -# License for the specific language governing rights and limitations under -# the License. -# -# The Original Code is eCos - Embedded Configurable Operating System, -# released September 30, 1998. -# -# The Initial Developer of the Original Code is Red Hat. -# Portions created by Red Hat are -# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -# All Rights Reserved. -# ------------------------------------------- -# -#####COPYRIGHTEND#### -# ==================================================================== -######DESCRIPTIONBEGIN#### -# -# Author(s): gthomas -# Original data: gthomas -# Contributors: -# Date: 2000-01-25 -# -#####DESCRIPTIONEND#### -# -# ==================================================================== - -cdl_package CYGPKG_NET_ETH_DRIVERS { - display "Common ethernet support" - include_dir . - requires CYGPKG_NET - parent CYGPKG_NET - description "Platform independent ethernet drivers" - compile eth_drv.c - - cdl_component CYGPKG_NET_ETH_DRIVERS_OPTIONS { - display "Common ethernet support build options" - flavor none - no_define - - cdl_option CYGPKG_NET_ETH_DRIVERS_CFLAGS_ADD { - display "Additional compiler flags" - flavor data - no_define - default_value { "-D_KERNEL -D__ECOS" } - description " - This option modifies the set of compiler flags for - building the common ethernet support package. These flags are used in addition - to the set of global flags." - } - } -} diff --git a/packages/net/drivers/eth/common/current/doc/driver_doc b/packages/net/drivers/eth/common/current/doc/driver_doc deleted file mode 100644 --- a/packages/net/drivers/eth/common/current/doc/driver_doc +++ /dev/null @@ -1,328 +0,0 @@ -This file provides a simple description of how to write a low-level, -hardware dependent ethernet driver. - -The basic idea is that there is a high-level driver (which is only -code/functions) that is part of the stack. There will be one or more -low-level driver tied to the actual network hardware. Each of these -drivers contains one or more driver instances. The principal idea is -that the low-level drivers know nothing of the details of the stack that -will be using them. Thus, the same driver can be used by the eCos -supported TCP/IP stack, or any other, with no changes. - -A driver instance is contained within a "struct eth_drv_sc". - - struct eth_drv_funs { - // Initialize hardware (including startup) - void (*start)(struct eth_drv_sc *sc, - unsigned char *enaddr); - // Shut down hardware - void (*stop)(struct eth_drv_sc *sc); - // Control interface - int (*control)(struct eth_drv_sc *sc, - unsigned long cmd, - void *data, - int len); - // Query interface - can a packet be sent? - int (*can_send)(struct eth_drv_sc *sc); - // Send a packet of data - void (*send)(struct eth_drv_sc *sc, - struct eth_drv_sg *sg_list, - int sg_len, - int total_len, - unsigned long key); - // Receive [unload] a packet of data - void (*recv)(struct eth_drv_sc *sc, - struct eth_drv_sg *sg_list, - int sg_len); - }; - - struct eth_drv_sc { - struct eth_drv_funs *funs; - void *driver_private; - const char *dev_name; - struct arpcom sc_arpcom; /* ethernet common */ - }; - -You create one of these instances using the "ETH_DRV_SC()" macro which -sets up the structure, including the prototypes for the functions, etc. -By doing things this way, if the internal design of the ethernet drivers -changes (e.g. we need to add a new low-level implementation function), -existing drivers will no longer compile until updated. This is much -better than to have all of the definitions in the low-level drivers -themselves and have them be [quietly] broken if the interfaces change. - -The "magic" which gets the drivers started [and indeed, linked] is -similar to what is used for the I/O subsystem. [Note: I may try and -make it part of the I/O subsystem later.] This is done using the -"NETDEVTAB_ENTRY()" macro, which defines an initialization function -and the basic data structures for the low-level driver. - - typedef struct cyg_netdevtab_entry { - const char *name; - bool (*init)(struct cyg_netdevtab_entry *tab); - void *device_instance; - unsigned long status; - } cyg_netdevtab_entry_t; - -The "device_instance" entry here would point to the "struct -eth_drv_sc" entry previously defined. This allows the network driver -setup to work with any class of driver, not just ethernet drivers. In -the future, there will surely be serial PPP drivers, etc. These will -use the "NETDEVTAB" setup to create the basic driver, but they will -most likely be built on top of other high-level device driver layers. - -So, the bottom line is that a hardware driver will have a template -(boilerplate) which looks like this: - - #include - #include - #include - #include - #include - #include - - ETH_DRV_SC(DRV_sc, - 0, // No driver specific data needed - "eth0", // Name for this interface - HRDWR_start, - HRDWR_stop, - HRDWR_control, - HRDWR_can_send - HRDWR_send, - HRDWR_recv); - - NETDEVTAB_ENTRY(DRV_netdev, - "DRV", - DRV_HRDWR_init, - &DRV_sc); - -This, along with the referenced functions, completely define the driver. -Extensibility note: if one needed the same low-level driver to handle -multiple similar hardware interfaces, you would need multiple invocations -of the "ETH_DRV_SC()/NETDEVTAB_ENTRY()" macros. You would add a pointer -to some instance specific data, e.g. containing base addresses, interrupt -numbers, etc, where the "0, // No driver specific data" is currently. - -Now a quick waltz through the functions. This discussion will use the -generic names from above. - -static bool DRV_HDWR_init(struct cyg_netdevtab_entry *tab) -========================================================== - -This function is called as part of system initialization. Its primary -function is to decide if the hardware [as indicated via -tab->device_instance] is working and if the interface needs to be made -available in the system. If this is the case, this function needs to -finish with a call to the ethernet driver function: - - eth_drv_init((struct eth_drv_sc *)tab->device_instance, - unsigned char *enaddr); - -where 'enaddr' is a pointer to the ethernet station address for this -unit. Note: the ethernet station address is supposed to be a -world-unique, 48 bit address for this particular ethernet interface. -Typically it is provided by the board/hardware manufacturer in ROM. - -static void -HRDWR_start(struct eth_drv_sc *sc, unsigned char *enaddr, int flags) -==================================================================== - -This function is called, perhaps much later than system initialization -time, when the system (an application) is ready for the interface to -become active. The purpose of this function is to set up the hardware -interface to start accepting packets from the network and be able to -send packets out. Note: this function will be called whenever the -up/down state of the logical interface changes, e.g. when the IP address -changes. This may occur more than one time, so this function needs to -be prepared for that case. - -FUTURE: the "flags" field (currently unused) may be used to tell the -function how to start up, e.g. whether interrupts will be used, -selection of "promiscuous" mode etc. - -static void HRDWR_stop(struct eth_drv_sc *sc) -============================================= - -This function is the inverse of "start". It should shut down the -hardware and keep it from interacting with the physical network. - -static int -HRDWR_control(struct eth_drv_sc *sc, unsigned long key, void *data, int len) -============================================================================ - -This function is used to perform low-level "control" operations on the -interface. These operations would be initiated via 'ioctl()' in the BSD -stack, and would be anything that would require the hardware setup to -possibly change (i.e. cannot be performed totally by the -platform-independent layers). - -Current operations: - -ETH_DRV_SET_MAC_ADDRESS: - This function sets the ethernet station address (ESA or MAC) for the - device. Normally this address is kept in non-volatile memory and is - unique in the world. This function must at least set the interface to - use the new address. It may also update the NVM as appropriate. - -This function should return zero if the specified operation was -completed successfully. It should return non-zero if the operation -could not be performed, for any reason. - -static int HRDWR_can_send(struct eth_drv_sc *sc) -================================================ - -This function is called to determine if it is possible to start the -transmission of a packet on the interface. Some interfaces will allow -multiple packets to be "queued" and this function allows for the highest -possible utilization of that mode. - -Return the number of packets which could be accepted at this time, zero -implies that the interface is saturated/busy. - -static void -HRDWR_send(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, int sg_len, - int total_len, unsigned long key) -========================================================================= - -This function is used to send a packet of data to the network. It is -the responsibility of this function to somehow hand the data over to the -hardware interface. This will most likely require copying, but just the -address/length values could be used by smart hardware. - -NOTE: All data in/out of the driver is specified via a "scatter-gather" -list. This is just an array of address/length pairs which describe -sections of data to move (in the order given by the array). - -Once the data has been successfully sent by the interface (or if an -error occurs), the driver should call 'eth_drv_tx_done()' using the -specified 'key'. Only then will the upper layers release the resources -for that packet and start another transmission. - -FUTURE: This function may be extended so that the data need not be -copied by having the function return a "disposition" code (done, send -pending, etc). At this point, you should move the data to some "safe" -location before returning. - -static void -HRDWR_recv(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, int sg_len) -========================================================================= - -This function is actually a call back, only invoked after the -upper-level function - eth_drv_recv(struct eth_drv_sc *sc, int total_len) -has been called. This upper level function is called by the hardware -driver when it knows that a packet of data is available on the -interface. The 'eth_drv_recv()' function then arranges network buffers -and structures for the data and then calls "HRDWR_recv()" to actually -move the data from the interface. - - -Upper layer functions - called by drivers -========================================= - -These functions are defined by the upper layers (machine independent) of -the networking driver support. They are present to hide the interfaces -to the actual networking stack so that the hardware drivers may possibly -be used by any network stack implementation. - -These functions require a pointer to a "struct eth_drv_sc" table which -describes the interface at a logical level. It is assumed that the -driver [lowest level hardware support] will keep track of this pointer -so it may be passed "up" as appropriate. - - struct eth_drv_sc { - struct eth_drv_funs *funs; // Pointer to hardware functions (see above) - void *driver_private; // Device specific data - const char *dev_name; - struct arpcom sc_arpcom; // ethernet common - }; - -This structure is created, one per logical interface, via ETH_DRV_SC macro. - -void eth_drv_init(struct eth_drv_sc *sc, unsigned char *enaddr) -=============================================================== - -This function establishes the device at initialization time. The -hardware should be totally intialized (not "started") when this function -is called. - -void eth_drv_tx_done(struct eth_drv_sc *sc, unsigned long key, int status) -========================================================================== - -This function is called when a packet completes transmission on the -interface. The 'key' value must be one of the keys provided to -"HRDWR_send()" above. The value 'status' should be non-zero (currently -undefined) to indicate that an error occurred during the transmission. - -void eth_drv_recv(struct eth_drv_sc *sc, int len) -================================================= - -This function is called to indicate that a packet of length 'len' has -arrived at the interface. The callback "HRDWR_recv()" function -described above will be used to actually unload the data from the -interface into buffers used by the machine independent layers. - - - -Calling graph for Transmit and Receive --------------------------------------- - -It may be worth clarifying further the flow of control in the transmit -and receive cases, where the hardware driver does use interrupts and so -DSRs to tell the "foreground" when something asynchronous has occurred. - -Transmit: - Foreground task calls into network stack to send a packet (or the - stack decides to send a packet in response to incoming traffic). - The driver calls the HRDWR_can_send() function in the hardware driver. - HRDWR_can_send() returns the number of available "slots" in which it - can store a pending transmit packet. - If it cannot send at this time, the packet is queued outside the - hardware driver for later; in this case, the hardware is already busy - transmitting, so expect an interrupt as described below for completion - of the packet currently outgoing. - If it can send right now, HRDWR_send() is called. - HRDWR_send() copies the data into special hardware buffers, or - instructs the hardware to "send that". - It also remembers the key that is associated with this tx request. - these calls return. - ... - - Asynchronously, the hardware makes an interrupt to say "transmit is - done"; the ISR quietens the interrupt source in the hardware and - requests that the associated DSR be run. - The DSR realizes that a transmit request has completed, and calls - eth_drv_tx_done() with the same key that it remembered for this tx. - eth_drv_tx_done() uses the key to find the resources associated with - this transmit request; thus the stack knows that the transmit has - completed and its resources can be freed. - eth_drv_tx_done() also enquires whether HRDWR_can_send() now says - "yes, we can send" and if so, dequeues a further transmit request - which may have been queued as described above. If so: - HRDWR_send() copies the data into the hardware buffers, or - instructs the hardware to "send that" and remembers the new key. - these calls return to the DSR and thus to the foreground. - ... - - -Receive: - ... - - Asynchronously, the hardware makes an interrupt to say "there is ready - data in a receive buffer"; the ISR quietens the interrupt source in - the hardware and requests that the associated DSR be run. - The DSR realizes that there is data ready and calls eth_drv_recv() - with the length of the data that is available. - eth_drv_recv() prepares a set of scatter-gather buffers that can - accommodate that data. - It then calls back into the hardware driver routine HRDWR_recv(). - HRDWR_recv() must copy the data from the hardware's buffers into - the scatter-gather buffers provided, and return. - eth_drv_recv() sends the new packet up the network stack and returns. - Back in the DSR now, the driver cleans the receive buffer and returns - it to the hardware's control, available to receive another packet from - the network. - The DSR returns to the foreground. - ... - - diff --git a/packages/net/drivers/eth/common/current/include/eth_drv.h b/packages/net/drivers/eth/common/current/include/eth_drv.h deleted file mode 100644 --- a/packages/net/drivers/eth/common/current/include/eth_drv.h +++ /dev/null @@ -1,157 +0,0 @@ -//========================================================================== -// -// include/eth_drv.h -// -// High level networking driver interfaces -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//####BSDCOPYRIGHTBEGIN#### -// -// ------------------------------------------- -// -// Portions of this software may have been derived from OpenBSD or other sources, -// and are covered by the appropriate copyright disclaimers included herein. -// -// ------------------------------------------- -// -//####BSDCOPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): gthomas -// Contributors: gthomas -// Date: 2000-01-10 -// Purpose: -// Description: High level networking driver interfaces -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -// Ethernet driver structure - -#ifndef _ETH_DRV_H_ -#define _ETH_DRV_H_ - -#include - -#ifdef CYGPKG_NET -#include -#include - -#include - -#ifdef INET -#include -#include -#include -#include -#include -#endif - -#if NBPFILTER > 0 -#include -#include -#endif -#endif - -struct eth_drv_sg { - CYG_ADDRESS buf; - CYG_ADDRWORD len; -}; - -// This is 16 to ensure that an MTU made of mbufs (not clusters) will fit. -// 1600 is more that the MTU of 1500; it must be right. -#define MAX_ETH_DRV_SG 16 - -struct eth_drv_sc; - -struct eth_drv_funs { - // Initialize hardware (including startup) - void (*start)(struct eth_drv_sc *sc, - unsigned char *enaddr, - int flags); - // Shut down hardware - void (*stop)(struct eth_drv_sc *sc); - // Device control (ioctl pass-thru) - int (*control)(struct eth_drv_sc *sc, - unsigned long key, - void *data, - int data_length); - // Query - can a packet be sent? - int (*can_send)(struct eth_drv_sc *sc); - // Send a packet of data - void (*send)(struct eth_drv_sc *sc, - struct eth_drv_sg *sg_list, - int sg_len, - int total_len, - unsigned long key); - // Receive [unload] a packet of data - void (*recv)(struct eth_drv_sc *sc, - struct eth_drv_sg *sg_list, - int sg_len); - // Poll for interrupts/device service - void (*poll)(struct eth_drv_sc *sc); -}; - -#ifndef CYGPKG_NET -struct arpcom { - unsigned char esa[6]; -}; -#endif - -struct eth_drv_sc { - struct eth_drv_funs *funs; - void *driver_private; - const char *dev_name; - struct arpcom sc_arpcom; /* ethernet common */ -}; - -#define ETH_DRV_SC(sc,priv,name,start,stop,control,can_send,send,recv,poll) \ -static void start(struct eth_drv_sc *sc, unsigned char *enaddr, int flags); \ -static void stop(struct eth_drv_sc *sc); \ -static int control(struct eth_drv_sc *sc, unsigned long key, void *data, int data_length); \ -static int can_send(struct eth_drv_sc *sc); \ -static void send(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, int sg_len, int total, unsigned long key); \ -static void recv(struct eth_drv_sc *sc, struct eth_drv_sg *sg_list, int sg_len); \ -static void poll(struct eth_drv_sc *sc); \ -static struct eth_drv_funs sc##_funs = {start, stop, control, can_send, send, recv, poll}; \ -struct eth_drv_sc sc = {&sc##_funs, priv, name}; - -void eth_drv_init(struct eth_drv_sc *sc, unsigned char *enaddr); -void eth_drv_recv(struct eth_drv_sc *sc, int total_len); -void eth_drv_tx_done(struct eth_drv_sc *sc, unsigned long key, int status); - - -// Control 'key's -#define ETH_DRV_SET_MAC_ADDRESS 0x0100 - -#ifndef ETHER_ADDR_LEN -#define ETHER_ADDR_LEN 6 -#endif - -#endif // _ETH_DRV_H_ diff --git a/packages/net/drivers/eth/common/current/src/eth_drv.c b/packages/net/drivers/eth/common/current/src/eth_drv.c deleted file mode 100644 --- a/packages/net/drivers/eth/common/current/src/eth_drv.c +++ /dev/null @@ -1,444 +0,0 @@ -//========================================================================== -// -// ecos/eth_drv.c -// -// Hardware independent ethernet driver -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//####BSDCOPYRIGHTBEGIN#### -// -// ------------------------------------------- -// -// Portions of this software may have been derived from OpenBSD or other sources, -// and are covered by the appropriate copyright disclaimers included herein. -// -// ------------------------------------------- -// -//####BSDCOPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): gthomas -// Contributors: gthomas -// Date: 2000-01-10 -// Purpose: Hardware independent ethernet driver -// Description: -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -// High-level ethernet driver - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#ifdef INET -#include -#include -#include -#include -#include -#endif - -#if NBPFILTER > 0 -#include -#include -#endif - -#include -#include - -static int eth_drv_ioctl(struct ifnet *, u_long, caddr_t); -static void eth_drv_send(struct ifnet *); - -extern int net_debug; // FIXME - -// -// This function is called during system initialization to register a -// network interface with the system. -// -void -eth_drv_init(struct eth_drv_sc *sc, unsigned char *enaddr) -{ - struct ifnet *ifp = &sc->sc_arpcom.ac_if; - - // Set up hardware address - bcopy(enaddr, &sc->sc_arpcom.ac_enaddr, ETHER_ADDR_LEN); - - // Initialize ifnet structure - bcopy((void *)sc->dev_name, ifp->if_xname, IFNAMSIZ); - ifp->if_softc = sc; - ifp->if_start = eth_drv_send; - ifp->if_ioctl = eth_drv_ioctl; - ifp->if_flags = - IFF_BROADCAST | IFF_SIMPLEX | IFF_NOTRAILERS | IFF_MULTICAST; - - // Attach the interface - if_attach(ifp); - ether_ifattach(ifp); -} - -// -// This [internal] function will be called to stop activity on an interface. -// -static void -eth_drv_stop(struct eth_drv_sc *sc) -{ - (sc->funs->stop)(sc); -} - -// -// This [internal] function will be called to start activity on an interface. -// -static void -eth_drv_start(struct eth_drv_sc *sc) -{ - struct ifnet *ifp = &sc->sc_arpcom.ac_if; - // Perform any hardware initialization - (sc->funs->start)(sc, (unsigned char *)&sc->sc_arpcom.ac_enaddr, 0); - // Set 'running' flag, and clear output active flag. - ifp->if_flags |= IFF_RUNNING; - ifp->if_flags &= ~IFF_OACTIVE; - eth_drv_send(ifp); // Try and start up transmit -} - -// -// This function supports "I/O control" operations on an interface. -// -static int -eth_drv_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) -{ - struct eth_drv_sc *sc = ifp->if_softc; - struct ifaddr *ifa = (struct ifaddr *) data; - struct ifreq *ifr = (struct ifreq *)data; - int s, error = 0; - - s = splnet(); - - if ((error = ether_ioctl(ifp, &sc->sc_arpcom, cmd, data)) > 0) { - splx(s); - return error; - } - - switch (cmd) { - - case SIOCSIFADDR: - ifp->if_flags |= IFF_UP; - - switch (ifa->ifa_addr->sa_family) { -#ifdef INET - case AF_INET: - eth_drv_start(sc); - arp_ifinit(&sc->sc_arpcom, ifa); - break; -#endif - default: - eth_drv_start(sc); - break; - } - break; - - case SIOCGIFHWADDR: - // Get hardware (MAC) address - ifr->ifr_hwaddr.sa_family = AF_INET; - bcopy(&sc->sc_arpcom.ac_enaddr, &ifr->ifr_hwaddr.sa_data, ETHER_ADDR_LEN); - break; - - case SIOCSIFHWADDR: - // Set hardware (MAC) address - bcopy(&ifr->ifr_hwaddr.sa_data, &sc->sc_arpcom.ac_enaddr, ETHER_ADDR_LEN); - if ((sc->funs->control)(sc, ETH_DRV_SET_MAC_ADDRESS, - &sc->sc_arpcom.ac_enaddr, ETHER_ADDR_LEN)) { - error = EINVAL; - } - break; - - case SIOCSIFFLAGS: - if ((ifp->if_flags & IFF_UP) == 0 && - (ifp->if_flags & IFF_RUNNING) != 0) { - /* - * If interface is marked down and it is running, then - * stop it. - */ - eth_drv_stop(sc); - ifp->if_flags &= ~IFF_RUNNING; - } else - if ((ifp->if_flags & IFF_UP) != 0 && - (ifp->if_flags & IFF_RUNNING) == 0) { - /* - * If interface is marked up and it is stopped, then - * start it. - */ - eth_drv_start(sc); - } else { - /* - * Reset the interface to pick up changes in any other - * flags that affect hardware registers. - */ - eth_drv_stop(sc); - eth_drv_start(sc); - } - break; - -#if 0 - case SIOCADDMULTI: - case SIOCDELMULTI: - /* Update our multicast list. */ - error = (cmd == SIOCADDMULTI) ? - ether_addmulti(ifr, &sc->sc_arpcom) : - ether_delmulti(ifr, &sc->sc_arpcom); - - if (error == ENETRESET) { - /* - * Multicast list has changed; set the hardware filter - * accordingly. - */ - eth_drv_stop(sc); /* XXX for ds_setmcaf? */ - eth_drv_start(sc); - error = 0; - } - break; -#endif - - default: - error = EINVAL; - break; - } - - splx(s); - return (error); -} - -// -// This routine is called to start transmitting if there is data -// available. -// -static void -eth_drv_send(struct ifnet *ifp) -{ - struct eth_drv_sc *sc = ifp->if_softc; - struct eth_drv_sg sg_list[MAX_ETH_DRV_SG]; - int sg_len; - struct mbuf *m0, *m; - int len, total_len; - unsigned char *data; - - cyg_scheduler_lock(); // Prevent DSRs from running - if ((ifp->if_flags & IFF_RUNNING) != IFF_RUNNING) { - cyg_scheduler_unlock(); - return; - } - - while ((sc->funs->can_send)(sc) > 0) { - IF_DEQUEUE(&ifp->if_snd, m0); - if (m0 == 0) { - break; - } - - if (net_debug) - diag_printf("Sending %d bytes\n", m0->m_pkthdr.len); - - /* We need to use m->m_pkthdr.len, so require the header */ - if ((m0->m_flags & M_PKTHDR) == 0) - panic("eth_drv_send: no header mbuf"); - -#if NBPFILTER > 0 - /* Tap off here if there is a BPF listener. */ - if (ifp->if_bpf) - bpf_mtap(ifp->if_bpf, m0); -#endif - - // Extract data pointers (don't actually move data here) - sg_len = 0; total_len = 0; - for (m = m0; m ; m = m->m_next) { - data = mtod(m, u_char *); - len = m->m_len; - total_len += len; - sg_list[sg_len].buf = (CYG_ADDRESS)data; - sg_list[sg_len].len = len; - if ( len ) - sg_len++; - if (net_debug) { - diag_printf("xmit %d bytes at %x sg[%d]\n", len, data, sg_len); - if ( 1 & net_debug ) - diag_dump_buf(data, len); - } - if ( MAX_ETH_DRV_SG < sg_len ) { - diag_printf("too many mbufs to tx, %d > %d\n", sg_len, MAX_ETH_DRV_SG ); - sg_len = 0; - break; // drop it on the floor - } - } - - // Tell hardware to send this packet - if ( sg_len ) - (sc->funs->send)(sc, sg_list, sg_len, total_len, (unsigned long)m0); - } - - cyg_scheduler_unlock(); // Allow DSRs to run -} - -// -// This function is called from the hardware driver when an output operation -// has completed - i.e. the packet has been sent. -// -void -eth_drv_tx_done(struct eth_drv_sc *sc, unsigned long key, int status) -{ - struct ifnet *ifp = &sc->sc_arpcom.ac_if; - struct mbuf *m0 = (struct mbuf *)key; - // Check for errors here (via 'status') - // Done with packet - m_freem(m0); - // Start another if possible - eth_drv_send(ifp); -} - -// -// This function is called from a hardware driver to indicate that an input -// packet has arrived. The routine will set up appropriate network resources -// (mbuf's) to hold the data and call back into the driver to retrieve the data. -// -void -eth_drv_recv(struct eth_drv_sc *sc, int total_len) -{ - struct ifnet *ifp = &sc->sc_arpcom.ac_if; - struct ether_header _eh, *eh=&_eh; - struct mbuf *top, **mp, *m; - int i, mlen; - unsigned char *data; - struct eth_drv_sg sg_list[MAX_ETH_DRV_SG]; - int sg_len; - - /* Pull packet off interface. */ - MGETHDR(m, M_DONTWAIT, MT_DATA); - if (m == 0) { - diag_printf("warning: eth_recv out of MBUFs\n"); - } - - // Set up buffers - // Unload ethernet header separately so IP/UDP/TCP headers are aligned - sg_list[0].buf = (CYG_ADDRESS)eh; - sg_list[0].len = sizeof(*eh); - sg_len = 1; - - // Compute total length (minus ethernet header) - total_len -= sizeof(*eh); - - top = 0; - mlen = MHLEN; - mp = ⊤ - - if (m) { - m->m_pkthdr.rcvif = ifp; - m->m_pkthdr.len = total_len; - } else { - sg_list[sg_len].buf = (CYG_ADDRESS)0; - sg_list[sg_len].len = min(total_len, MCLBYTES); - sg_len++; - total_len = 0; - } - - while (total_len > 0) { - if (top) { - MGET(m, M_DONTWAIT, MT_DATA); - if (m == 0) { - m_freem(top); - panic("out of MBUFs [2]"); - } - mlen = MLEN; - } - if (total_len >= MINCLSIZE) { - MCLGET(m, M_DONTWAIT); - if ((m->m_flags & M_EXT) == 0) { - m_freem(top); - diag_printf("warning: eth_recv out of MBUFs\n"); - sg_list[sg_len].buf = (CYG_ADDRESS)0; - sg_list[sg_len].len = min(total_len, MCLBYTES); - sg_len++; - top = 0; - break; - } - mlen = MCLBYTES; - } - m->m_len = mlen = min(total_len, mlen); - total_len -= mlen; - data = mtod(m, caddr_t); - sg_list[sg_len].buf = (CYG_ADDRESS)data; - sg_list[sg_len].len = mlen; - sg_len++; - *mp = m; - mp = &m->m_next; - } - - // Ask hardware to unload buffers - (sc->funs->recv)(sc, sg_list, sg_len); - - if (net_debug) { - for (i = 0; i < sg_len; i++) { - if (sg_list[i].buf) { - diag_printf("rx %d bytes at %x sg[%d]\n", sg_list[i].len, sg_list[i].buf, i); - if ( 1 & net_debug ) - diag_dump_buf((void *)sg_list[i].buf, sg_list[i].len); - } - } - } - - m = top; - if (m == 0) { - ifp->if_ierrors++; - return; - } - - ifp->if_ipackets++; - - -#if NBPFILTER > 0 -#error FIXME - Need mbuf with ethernet header attached - /* - * Check if there's a BPF listener on this interface. - * If so, hand off the raw packet to bpf. - */ - if (ifp->if_bpf) - bpf_mtap(ifp->if_bpf, m); -#endif - - // Push data into protocol stacks - ether_input(ifp, eh, m); -} - - -// EOF eth_drv.c diff --git a/packages/net/snmp/agent/current/ChangeLog b/packages/net/snmp/agent/current/ChangeLog --- a/packages/net/snmp/agent/current/ChangeLog +++ b/packages/net/snmp/agent/current/ChangeLog @@ -1,3 +1,15 @@ +2000-08-25 Hugo Tyson + + * src/mibgroup/mibII/dot3.c (var_dot3StatsTable): A little further + diddling; have a bool to say whether the dot3 info is filled in. + +2000-08-24 Hugo Tyson + + * src/mibgroup/mibII/dot3.c (var_dot3StatsTable): + * src/mibgroup/mibII/interfaces.c (var_ifTable): Use new ioctl() + interface to get information out of ethernet devices. If the + ioctl call is not supported, we just get default values. + 2000-08-16 Hugo Tyson * src/snmpd.c (snmpd): Remove call to diff --git a/packages/net/snmp/agent/current/src/mibgroup/mibII/dot3.c b/packages/net/snmp/agent/current/src/mibgroup/mibII/dot3.c --- a/packages/net/snmp/agent/current/src/mibgroup/mibII/dot3.c +++ b/packages/net/snmp/agent/current/src/mibgroup/mibII/dot3.c @@ -98,16 +98,10 @@ CONNECTION WITH THE USE OR PERFORMANCE O // Get info about the device #include -#include - -#ifdef CYGBLD_DEVS_ETH_DEVICE_H -#include CYGBLD_DEVS_ETH_DEVICE_H -#endif - -#ifdef CYGBLD_DEVS_ETH_INFO_H -#include CYGBLD_DEVS_ETH_INFO_H -#endif - +// These two two acquire all the statistics. +#include +#include + /* * dot3_variables_oid: * this is the top level oid that we want to register under. This @@ -208,22 +202,21 @@ void init_dot3(void) */ unsigned char * var_dot3StatsTable(struct variable *vp, - oid *name, - size_t *length, - int exact, - size_t *var_len, - WriteMethod **write_method) + oid *name, + size_t *length, + int exact, + size_t *var_len, + WriteMethod **write_method) { static long long_ret; - struct eth_drv_sc *sc; -#ifdef ETH_DEV_DOT3STATSETHERCHIPSET - static oid etherobjid[] = { ETH_DEV_DOT3STATSETHERCHIPSET }; -#endif static oid nullobjid[] = { 0,0 }; - + static oid etherobjid[ SNMP_CHIPSET_LEN ]; + register struct ifnet *ifp; int interface_count = 0; - + int supports_dot3 = 0, i; + struct ether_drv_stats x; + for (ifp = ifnet.tqh_first; ifp != 0; ifp = ifp->if_list.tqe_next) interface_count++; @@ -240,167 +233,118 @@ var_dot3StatsTable(struct variable *vp, if ( ! ifp ) return NULL; - if ( IFT_LOOP == ifp->if_type ) { + /* If its an ethernet call the IOCTL and see if the device supports + dot3. If it does it will return all the values needed */ + if ( IFT_ETHER == ifp->if_type ) { + bzero( &x, sizeof( x ) ); + if ( NULL != ifp->if_ioctl ) { + if (!(*ifp->if_ioctl)(ifp, SIOCGIFSTATSUD, (caddr_t)&x)) { + supports_dot3 = x.supports_dot3; + } + } + } + + if ( (IFT_LOOP == ifp->if_type ) || + (IFT_PROPVIRTUAL == ifp->if_type ) || + (!supports_dot3)) { switch(vp->magic) { case DOT3STATSINDEX: long_ret = name[(*length)-1]; return (unsigned char *) &long_ret; - + case DOT3STATSETHERCHIPSET: *var_len = sizeof(nullobjid); return (unsigned char *) nullobjid; - + case DOT3STATSDUPLEXSTATUS: long_ret = 1; return (unsigned char *) &long_ret; - + default: long_ret = 0; // a dummy value for most of them return (unsigned char *) &long_ret; } } - - sc = ifp->if_softc; - // Otherwise, assume it is ethernet... - { -#ifdef ETH_STATS_INIT - ETH_STATS_INIT( sc ); -#endif - - switch(vp->magic) { - case DOT3STATSINDEX: - long_ret = name[(*length)-1]; - return (unsigned char *) &long_ret; - - case DOT3STATSALIGNMENTERRORS: -#ifdef ETH_DEV_STATSALIGNMENTERRORS - long_ret = ETH_DEV_STATSALIGNMENTERRORS( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - case DOT3STATSFCSERRORS: -#ifdef ETH_DEV_STATSFCSERRORS - long_ret = ETH_DEV_STATSFCSERRORS( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - - case DOT3STATSSINGLECOLLISIONFRAMES: -#ifdef ETH_DEV_STATSSINGLECOLLISIONFRAMES - long_ret = ETH_DEV_STATSSINGLECOLLISIONFRAMES( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - - case DOT3STATSMULTIPLECOLLISIONFRAMES: -#ifdef ETH_DEV_STATSMULTIPLECOLLISIONFRAMES - long_ret = ETH_DEV_STATSMULTIPLECOLLISIONFRAMES( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - - case DOT3STATSSQETESTERRORS: -#ifdef ETH_DEV_STATSSQETESTERRORS - long_ret = ETH_DEV_STATSSQETESTERRORS( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - - case DOT3STATSDEFERREDTRANSMISSIONS: -#ifdef ETH_DEV_STATSDEFERREDTRANSMISSIONS - long_ret = ETH_DEV_STATSDEFERREDTRANSMISSIONS( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - - case DOT3STATSLATECOLLISIONS: -#ifdef ETH_DEV_STATSLATECOLLISIONS - long_ret = ETH_DEV_STATSLATECOLLISIONS( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - - case DOT3STATSEXCESSIVECOLLISIONS: -#ifdef ETH_DEV_STATSEXCESSIVECOLLISIONS - long_ret = ETH_DEV_STATSEXCESSIVECOLLISIONS( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - - case DOT3STATSINTERNALMACTRANSMITERRORS: -#ifdef ETH_DEV_STATSINTERNALMACTRANSMITERRORS - long_ret = ETH_DEV_STATSINTERNALMACTRANSMITERRORS( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - - case DOT3STATSCARRIERSENSEERRORS: -#ifdef ETH_DEV_STATSCARRIERSENSEERRORS - long_ret = ETH_DEV_STATSCARRIERSENSEERRORS( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - - case DOT3STATSFRAMETOOLONGS: -#ifdef ETH_DEV_STATSFRAMETOOLONGS - long_ret = ETH_DEV_STATSFRAMETOOLONGS( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - - case DOT3STATSINTERNALMACRECEIVEERRORS: -#ifdef ETH_DEV_STATSINTERNALMACRECEIVEERRORS - long_ret = ETH_DEV_STATSINTERNALMACRECEIVEERRORS( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - - case DOT3STATSETHERCHIPSET: -#ifdef ETH_DEV_DOT3STATSETHERCHIPSET - *var_len = sizeof(etherobjid); - return (unsigned char *) etherobjid; -#else - *var_len = sizeof(nullobjid); - return (unsigned char *) nullobjid; -#endif - - case DOT3STATSSYMBOLERRORS: -#ifdef ETH_DEV_STATSSYMBOLERRORS - long_ret = ETH_DEV_STATSSYMBOLERRORS( sc ); -#else - long_ret = 0; -#endif - return (unsigned char *) &long_ret; - - case DOT3STATSDUPLEXSTATUS: -#ifdef ETH_DEV_FULLDUPLEX - if ( ETH_DEV_FULLDUPLEX( sc ) ) - long_ret = 3; // fullDuplex - else - long_ret = 2; // halfDuplex -#else - long_ret = 1; // Unknown -#endif - return (unsigned char *) &long_ret; - - default: - ERROR_MSG(""); + /* If we got here, the device does support dot3 */ + switch(vp->magic) { + case DOT3STATSINDEX: + long_ret = name[(*length)-1]; + return (unsigned char *) &long_ret; + + case DOT3STATSALIGNMENTERRORS: + long_ret = x.rx_align_errors; + return (unsigned char *) &long_ret; + + case DOT3STATSFCSERRORS: + long_ret = x.rx_crc_errors; + return (unsigned char *) &long_ret; + + case DOT3STATSSINGLECOLLISIONFRAMES: + long_ret = x.tx_single_collisions; + return (unsigned char *) &long_ret; + + case DOT3STATSMULTIPLECOLLISIONFRAMES: + long_ret = x.tx_mult_collisions; + return (unsigned char *) &long_ret; + + case DOT3STATSSQETESTERRORS: + long_ret = x.tx_sqetesterrors; + return (unsigned char *) &long_ret; + + case DOT3STATSDEFERREDTRANSMISSIONS: + long_ret = x.tx_deferred; + return (unsigned char *) &long_ret; + + case DOT3STATSLATECOLLISIONS: + long_ret = x.tx_late_collisions; + return (unsigned char *) &long_ret; + + case DOT3STATSEXCESSIVECOLLISIONS: + long_ret = x.tx_max_collisions; + return (unsigned char *) &long_ret; + + case DOT3STATSINTERNALMACTRANSMITERRORS: + long_ret = x.tx_underrun; + return (unsigned char *) &long_ret; + + case DOT3STATSCARRIERSENSEERRORS: + long_ret = x.tx_carrier_loss; + return (unsigned char *) &long_ret; + + case DOT3STATSFRAMETOOLONGS: + long_ret = x.rx_too_long_frames; + return (unsigned char *) &long_ret; + + case DOT3STATSINTERNALMACRECEIVEERRORS: + long_ret = x.rx_overrun_errors + + x.rx_resource_errors; + return (unsigned char *) &long_ret; + + case DOT3STATSSYMBOLERRORS: + long_ret = x.rx_symbol_errors; + return (unsigned char *) &long_ret; + + case DOT3STATSETHERCHIPSET: + i = 0; + while ( i < sizeof(etherobjid) ) { + if ( 0 == (etherobjid[i] = x.snmp_chipset[i]) ) + break; + i++; } + *var_len = i; + return (unsigned char *) etherobjid; + + case DOT3STATSDUPLEXSTATUS: + long_ret = x.duplex; + if ( 1 > long_ret || 3 < long_ret ) + long_ret = 1; + return (unsigned char *) &long_ret; + + default: + ERROR_MSG(""); + return NULL; } - return NULL; } @@ -412,11 +356,11 @@ var_dot3StatsTable(struct variable *vp, */ unsigned char * var_dot3ControlTable(struct variable *vp, - oid *name, - size_t *length, - int exact, - size_t *var_len, - WriteMethod **write_method) + oid *name, + size_t *length, + int exact, + size_t *var_len, + WriteMethod **write_method) { /* variables we may use later */ static long long_ret; @@ -449,11 +393,11 @@ var_dot3ControlTable(struct variable *vp */ unsigned char * var_dot3PauseTable(struct variable *vp, - oid *name, - size_t *length, - int exact, - size_t *var_len, - WriteMethod **write_method) + oid *name, + size_t *length, + int exact, + size_t *var_len, + WriteMethod **write_method) { /* variables we may use later */ static long long_ret; diff --git a/packages/net/snmp/agent/current/src/mibgroup/mibII/interfaces.c b/packages/net/snmp/agent/current/src/mibgroup/mibII/interfaces.c --- a/packages/net/snmp/agent/current/src/mibgroup/mibII/interfaces.c +++ b/packages/net/snmp/agent/current/src/mibgroup/mibII/interfaces.c @@ -98,15 +98,10 @@ CONNECTION WITH THE USE OR PERFORMANCE O // Get info about the device #include +// These two two acquire all the statistics. #include - -#ifdef CYGBLD_DEVS_ETH_DEVICE_H -#include CYGBLD_DEVS_ETH_DEVICE_H -#endif - -#ifdef CYGBLD_DEVS_ETH_INFO_H -#include CYGBLD_DEVS_ETH_INFO_H -#endif +#include +#include /* * interfaces_variables_oid: @@ -266,40 +261,84 @@ var_ifTable(struct variable *vp, { - /* variables we may use later */ - static long long_ret; - static unsigned char string[SPRINT_MAX_LEN]; - static oid objid[MAX_OID_LEN]; + /* variables we may use later */ + static long long_ret; + static unsigned char string[SPRINT_MAX_LEN]; + static oid objid[MAX_OID_LEN]; // static struct counter64 c64; - - register struct ifnet *ifp; - int interface_count = 0; - - for (ifp = ifnet.tqh_first; ifp != 0; ifp = ifp->if_list.tqe_next) - interface_count++; + + register struct ifnet *ifp; + int interface_count = 0; + + for (ifp = ifnet.tqh_first; ifp != 0; ifp = ifp->if_list.tqe_next) + interface_count++; - /* - * This assumes that the table is a 'simple' table. - * See the implementation documentation for the meaning of this. - * You will need to provide the correct value for the TABLE_SIZE parameter - * - * If this table does not meet the requirements for a simple table, - * you will need to provide the replacement code yourself. - * Mib2c is not smart enough to write this for you. - * Again, see the implementation documentation for what is required. - */ - if ( header_simple_table( vp,name,length,exact,var_len,write_method, - interface_count) - == MATCH_FAILED ) - return NULL; + /* + * This assumes that the table is a 'simple' table. + * See the implementation documentation for the meaning of this. + * You will need to provide the correct value for the TABLE_SIZE parameter + * + * If this table does not meet the requirements for a simple table, + * you will need to provide the replacement code yourself. + * Mib2c is not smart enough to write this for you. + * Again, see the implementation documentation for what is required. + */ + if ( header_simple_table( vp,name,length,exact,var_len,write_method, + interface_count) + == MATCH_FAILED ) + return NULL; + + for ( interface_count = name[ (*length)-1 ], ifp = ifnet.tqh_first; + interface_count > 1 && ifp != 0; + interface_count-- ) + ifp = ifp->if_list.tqe_next; + + if ( ! ifp ) + return NULL; - for ( interface_count = name[ (*length)-1 ], ifp = ifnet.tqh_first; - interface_count > 1 && ifp != 0; - interface_count-- ) - ifp = ifp->if_list.tqe_next; + if ( IFT_ETHER == ifp->if_type && + ((IFDESCR == vp->magic) || + (IFSPEED == vp->magic) || + (IFOUTDISCARDS == vp->magic) || + (IFOUTQLEN == vp->magic) ) + ) { + // then acquire up to date information and deal with the relevent + // keys (only): + int i = -1; + struct ether_drv_stats x; + bzero( &x, sizeof( x ) ); + + // Call the ioctl to get all the info. + // (We KNOW it's an ether dev here, it should have an ioctl()) + if ( NULL != ifp->if_ioctl ) + i = (*ifp->if_ioctl)(ifp, SIOCGIFSTATSUD, (caddr_t)&x); - if ( ! ifp ) - return NULL; + switch(vp->magic) { + case IFDESCR: + if ( i || 0 == x.description[0] ) + strcpy( string, "" ); + else + strcpy( string, x.description ); + *var_len = strlen(string); + return (unsigned char *) string; + + case IFSPEED: + long_ret = x.speed; + return (unsigned char *) &long_ret; + + case IFOUTDISCARDS: + long_ret = x.tx_dropped; + return (unsigned char *) &long_ret; + + case IFOUTQLEN: + long_ret = x.tx_queue_len; + return (unsigned char *) &long_ret; + + default: + CYG_FAIL( "Bad magic; shouldn't be in here" ); + break; + } + } switch(vp->magic) { @@ -308,14 +347,16 @@ var_ifTable(struct variable *vp, return (unsigned char *) &long_ret; case IFDESCR: - if ( IFT_LOOP == ifp->if_type ) + switch ( ifp->if_type ) { + case IFT_LOOP: strcpy( string, "(Loopback device)" ); - else { -#ifdef CYGDAT_DEVS_ETH_DESCRIPTION - strcpy( string, CYGDAT_DEVS_ETH_DESCRIPTION ); -#else - strcpy( string, "Some shy Ethernet adaptor" ); -#endif + break; + case IFT_PROPVIRTUAL: + strcpy( string, "(Proprietary Virtual/Internal)" ); + break; + default: + strcpy( string, "Some shy network adaptor" ); + break; } *var_len = strlen(string); return (unsigned char *) string; @@ -331,25 +372,17 @@ var_ifTable(struct variable *vp, case IFSPEED: if ( IFT_LOOP == ifp->if_type ) long_ret = 0; - else { -#ifdef ETH_DEV_IFSPEED - struct eth_drv_sc *sc = ifp->if_softc; -#ifdef ETH_STATS_INIT - ETH_STATS_INIT( sc ); -#endif - long_ret = ETH_DEV_IFSPEED( sc ); -#else + else long_ret = ifp->if_baudrate; -#endif - } return (unsigned char *) &long_ret; case IFPHYSADDRESS: { - if ( IFT_LOOP == ifp->if_type ) - bzero( string, ETHER_ADDR_LEN ); + if ( IFT_ETHER == ifp->if_type ) { + struct arpcom *ac = (struct arpcom *)ifp; + bcopy(&ac->ac_enaddr, string, ETHER_ADDR_LEN); + } else { - struct eth_drv_sc *sc = ifp->if_softc; - bcopy(&sc->sc_arpcom.ac_enaddr, string, ETHER_ADDR_LEN); + bzero( string, ETHER_ADDR_LEN ); } *var_len = ETHER_ADDR_LEN; return (unsigned char *) string; @@ -404,15 +437,7 @@ var_ifTable(struct variable *vp, return (unsigned char *) &long_ret; case IFOUTDISCARDS: - if ( IFT_LOOP == ifp->if_type ) - long_ret = 0; - else { -#ifdef ETH_DEV_IFOUTDISCARDS - long_ret = ETH_DEV_IFOUTDISCARDS( (struct eth_drv_sc *)(ifp->if_softc) ); -#else - long_ret = 0; -#endif - } + long_ret = 0; // ETHER case dealt with above return (unsigned char *) &long_ret; case IFOUTERRORS: @@ -420,15 +445,7 @@ var_ifTable(struct variable *vp, return (unsigned char *) &long_ret; case IFOUTQLEN: - if ( IFT_LOOP == ifp->if_type ) - long_ret = 0; - else { -#ifdef ETH_DEV_IFOUTQLEN - long_ret = ETH_DEV_IFOUTQLEN( (struct eth_drv_sc *)(ifp->if_softc) ); -#else - long_ret = 0; -#endif - } + long_ret = 0; // ETHER case dealt with above return (unsigned char *) &long_ret; case IFSPECIFIC: diff --git a/packages/net/tcpip/current/ChangeLog b/packages/net/tcpip/current/ChangeLog --- a/packages/net/tcpip/current/ChangeLog +++ b/packages/net/tcpip/current/ChangeLog @@ -1,3 +1,15 @@ +2000-08-24 Hugo Tyson + + * src/sys/net/if.c (ifioctl): Support the two new ioctl() keys; at + this level, the struct ifreq at the head of the data area must be + filled to select an interface. + + * include/sys/sockio.h (SIOCGIFSTATSUD): Add two new eCos-only + ioctl() keys, SIOCGIFSTATSUD and SIOCGIFSTATS, for reading + statistical information out of ethernet devices, for SNMP. This + should allow SNMP (a) to not explode, (b) to get useful info out + of other device implementations than this one. + 2000-08-17 Hugo Tyson * src/ecos/timeout.c (timeout): Rework the timeout system to diff --git a/packages/net/tcpip/current/include/netdev.h b/packages/net/tcpip/current/include/netdev.h deleted file mode 100644 --- a/packages/net/tcpip/current/include/netdev.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef _NETDEV_H_ -#define _NETDEV_H_ -//========================================================================== -// -// include/netdev.h -// -// Network device description -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//####BSDCOPYRIGHTBEGIN#### -// -// ------------------------------------------- -// -// Portions of this software may have been derived from OpenBSD or other sources, -// and are covered by the appropriate copyright disclaimers included herein. -// -// ------------------------------------------- -// -//####BSDCOPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): gthomas -// Contributors: gthomas -// Date: 2000-01-10 -// Purpose: -// Description: -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -// Network device support - -typedef struct cyg_netdevtab_entry { - const char *name; - bool (*init)(struct cyg_netdevtab_entry *tab); - void *device_instance; // Local data, instance specific - unsigned long status; -} cyg_netdevtab_entry_t; - -#define CYG_NETDEVTAB_STATUS_AVAIL 0x0001 - -extern cyg_netdevtab_entry_t __NETDEVTAB__[], __NETDEVTAB_END__; - -#define NETDEVTAB_ENTRY(_l,_name,_init,_instance) \ -static bool _init(struct cyg_netdevtab_entry *tab); \ -cyg_netdevtab_entry_t _l __attribute__ ((section(".netdevtab"))) = { \ - _name, \ - _init, \ - _instance \ -}; - -#endif // _NETDEV_H_ diff --git a/packages/net/tcpip/current/include/sys/sockio.h b/packages/net/tcpip/current/include/sys/sockio.h --- a/packages/net/tcpip/current/include/sys/sockio.h +++ b/packages/net/tcpip/current/include/sys/sockio.h @@ -119,6 +119,9 @@ #define SIOCGIFHWADDR _IOWR('i', 15, struct ifreq) /* get MAC address */ #ifdef __ECOS #define SIOCSIFHWADDR _IOW('i',101, struct ifreq) /* set MAC address */ +/* NB these two take a struct ifreq followed by the useful data */ +#define SIOCGIFSTATSUD _IOWR('i',102, struct ifreq) /* get uptodate if stats */ +#define SIOCGIFSTATS _IOWR('i',103, struct ifreq) /* get interface stats */ #endif #define SIOCSIFDSTADDR _IOW('i', 14, struct ifreq) /* set p-p address */ #define OSIOCGIFDSTADDR _IOWR('i', 15, struct ifreq) /* get p-p address */ diff --git a/packages/net/tcpip/current/include/sys/types.h b/packages/net/tcpip/current/include/sys/types.h deleted file mode 100644 --- a/packages/net/tcpip/current/include/sys/types.h +++ /dev/null @@ -1,261 +0,0 @@ -//========================================================================== -// -// include/sys/types.h -// -// -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//####BSDCOPYRIGHTBEGIN#### -// -// ------------------------------------------- -// -// Portions of this software may have been derived from OpenBSD or other sources, -// and are covered by the appropriate copyright disclaimers included herein. -// -// ------------------------------------------- -// -//####BSDCOPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): gthomas -// Contributors: gthomas -// Date: 2000-01-10 -// Purpose: -// Description: -// -// -//####DESCRIPTIONEND#### -// -//========================================================================== - - -/* $OpenBSD: types.h,v 1.15 1999/02/15 18:53:57 millert Exp $ */ -/* $NetBSD: types.h,v 1.29 1996/11/15 22:48:25 jtc Exp $ */ - -/*- - * Copyright (c) 1982, 1986, 1991, 1993 - * The Regents of the University of California. All rights reserved. - * (c) UNIX System Laboratories, Inc. - * All or some portions of this file are derived from material licensed - * to the University of California by American Telephone and Telegraph - * Co. or Unix System Laboratories, Inc. and are reproduced herein with - * the permission of UNIX System Laboratories, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)types.h 8.4 (Berkeley) 1/21/94 - */ - -#ifndef _SYS_TYPES_H_ -#define _SYS_TYPES_H_ - -/* Machine type dependent parameters. */ -#include - -#include -#include - -#if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE) -typedef unsigned char u_char; -typedef unsigned short u_short; -typedef unsigned int u_int; -typedef unsigned long u_long; - -typedef unsigned char unchar; /* Sys V compatibility */ -typedef unsigned short ushort; /* Sys V compatibility */ -typedef unsigned int uint; /* Sys V compatibility */ -typedef unsigned long ulong; /* Sys V compatibility */ -#endif - -typedef u_int64_t u_quad_t; /* quads */ -typedef int64_t quad_t; -typedef quad_t * qaddr_t; - -typedef char * caddr_t; /* core address */ -typedef int32_t daddr_t; /* disk address */ -typedef int32_t dev_t; /* device number */ -typedef u_int32_t fixpt_t; /* fixed point number */ -typedef u_int32_t gid_t; /* group id */ -typedef u_int32_t ino_t; /* inode number */ -typedef long key_t; /* IPC key (for Sys V IPC) */ -typedef u_int16_t mode_t; /* permissions */ -typedef u_int16_t nlink_t; /* link count */ -typedef quad_t off_t; /* file offset */ -typedef int32_t pid_t; /* process id */ -typedef quad_t rlim_t; /* resource limit */ -typedef int32_t segsz_t; /* segment size */ -typedef int32_t swblk_t; /* swap offset */ -typedef u_int32_t uid_t; /* user id */ -typedef u_int32_t useconds_t; /* microseconds */ -typedef int32_t suseconds_t; /* microseconds (signed) */ - -/* - * XPG4.2 states that inclusion of must pull these - * in and that inclusion of must pull in sa_family_t. - * We put there here because there are other headers that require - * these types and and will indirectly - * include . Thus we are compliant without too many hoops. - */ -typedef u_int32_t in_addr_t; /* base type for internet address */ -typedef u_int16_t in_port_t; /* IP port type */ -typedef u_int8_t sa_family_t; /* sockaddr address family type */ -typedef u_int32_t socklen_t; /* length type for network syscalls */ - -/* - * These belong in unistd.h, but are placed here too to ensure that - * long arguments will be promoted to off_t if the program fails to - * include that header or explicitly cast them to off_t. - */ -#if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE) -#ifndef _KERNEL -#include -__BEGIN_DECLS -off_t lseek __P((int, off_t, int)); -int ftruncate __P((int, off_t)); -int truncate __P((const char *, off_t)); -__END_DECLS -#endif /* !_KERNEL */ -#endif /* !defined(_POSIX_SOURCE) ... */ - -#if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE) -/* Major, minor numbers, dev_t's. */ -#define major(x) ((int32_t)(((u_int32_t)(x) >> 8) & 0xff)) -#define minor(x) ((int32_t)((x) & 0xff)) -#define makedev(x,y) ((dev_t)(((x) << 8) | (y))) -#endif - -#ifdef _BSD_CLOCK_T_ -typedef _BSD_CLOCK_T_ clock_t; -#undef _BSD_CLOCK_T_ -#endif - -#ifndef __ECOS -#ifdef _BSD_SIZE_T_ -typedef _BSD_SIZE_T_ size_t; -#undef _BSD_SIZE_T_ -#endif -#endif - -#ifdef _BSD_SSIZE_T_ -typedef _BSD_SSIZE_T_ ssize_t; -#undef _BSD_SSIZE_T_ -#endif - -#ifdef _BSD_TIME_T_ -typedef _BSD_TIME_T_ time_t; -#undef _BSD_TIME_T_ -#endif - -#ifdef _BSD_CLOCKID_T_ -typedef _BSD_CLOCKID_T_ clockid_t; -#undef _BSD_CLOCKID_T_ -#endif - -#ifdef _BSD_TIMER_T_ -typedef _BSD_TIMER_T_ timer_t; -#undef _BSD_TIMER_T_ -#endif - -#if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE) -#define NBBY 8 /* number of bits in a byte */ - -/* - * Select uses bit masks of file descriptors in longs. These macros - * manipulate such bit fields (the filesystem macros use chars). - * FD_SETSIZE may be defined by the user, but the default here should - * be enough for most uses. - */ -#ifndef FD_SETSIZE -#define FD_SETSIZE 256 -#endif - -typedef int32_t fd_mask; -#define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */ - -#ifndef howmany -#define howmany(x, y) (((x) + ((y) - 1)) / (y)) -#endif - -typedef struct fd_set { - fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; -} fd_set; - -#define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS))) -#define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS))) -#define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS))) -#ifdef _KERNEL -#define FD_COPY(f, t) bcopy(f, t, sizeof(*(f))) -#define FD_ZERO(p) bzero(p, sizeof(*(p))) -#else -#define FD_COPY(f, t) memcpy(t, f, sizeof(*(f))) -#define FD_ZERO(p) memset(p, 0, sizeof(*(p))) -#endif - -#if defined(__STDC__) && defined(_KERNEL) -/* - * Forward structure declarations for function prototypes. We include the - * common structures that cross subsystem boundaries here; others are mostly - * used in the same place that the structure is defined. - */ -struct proc; -struct pgrp; -struct ucred; -struct rusage; -struct file; -struct buf; -struct tty; -struct uio; -#endif - -#endif /* !defined(_POSIX_SOURCE) ... */ -#endif /* !_SYS_TYPES_H_ */ diff --git a/packages/net/tcpip/current/src/sys/net/if.c b/packages/net/tcpip/current/src/sys/net/if.c --- a/packages/net/tcpip/current/src/sys/net/if.c +++ b/packages/net/tcpip/current/src/sys/net/if.c @@ -804,6 +804,12 @@ ifioctl(so, cmd, data, p) return (error); #endif /* FALLTHROUGH */ +#ifdef SIOCGIFSTATS + case SIOCGIFSTATS: +#ifdef SIOCGIFSTATSUD + case SIOCGIFSTATSUD: +#endif +#endif // SIOCGIFSTATS case SIOCGIFMEDIA: if (ifp->if_ioctl == 0) return (EOPNOTSUPP); diff --git a/packages/redboot/current/ChangeLog b/packages/redboot/current/ChangeLog --- a/packages/redboot/current/ChangeLog +++ b/packages/redboot/current/ChangeLog @@ -1,3 +1,34 @@ +2000-08-25 Gary Thomas + + * src/load.c (getc): Fix edge condition when file is an exact multiple + of internal buffer size (got stuck at end of file). + +2000-08-24 Gary Thomas + + * src/load.c: Fix some prints. Also use command line parse functions + instead of ad hoc code. + + * src/flash.c: Better configuration control. + +2000-08-23 Gary Thomas + + * src/load.c (do_load): Use paramterized command line parser. + + * include/redboot.h: + * src/main.c (scan_opts): Better support for simple flags. + + * src/flash.c: Add "-l" (list only) option to 'fconfig'. + + * src/net/net_io.c: Add handling of ^C via network connections. + + * include/flash_config.h: + + * include/redboot.h: Fully qualify table entries (for proper + sorting and order control). + + * cdl/redboot.cdl: Update requirements to support ^C and thread + debugging. + 2000-08-21 Gary Thomas * cdl/redboot.cdl: diff --git a/packages/redboot/current/cdl/redboot.cdl b/packages/redboot/current/cdl/redboot.cdl --- a/packages/redboot/current/cdl/redboot.cdl +++ b/packages/redboot/current/cdl/redboot.cdl @@ -60,9 +60,11 @@ cdl_package CYGPKG_REDBOOT { # requires { CYG_HAL_STARTUP == "ROM" } requires CYGPKG_INFRA requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - requires ! CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +# requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT requires ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT -# requires ! CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM no_define description "This option enables the building of the Redboot ELF image. diff --git a/packages/redboot/current/include/flash_config.h b/packages/redboot/current/include/flash_config.h --- a/packages/redboot/current/include/flash_config.h +++ b/packages/redboot/current/include/flash_config.h @@ -69,7 +69,7 @@ struct config_option { #define RedBoot_config_option(_t_,_n_,_e_,_ie_,_type_) \ struct config_option _config_option_##_n_ \ -CYG_HAL_TABLE_ENTRY(RedBoot_config_options) = {#_n_,_t_,/*&_v_,*/_e_,_ie_,_type_}; +CYG_HAL_TABLE_QUALIFIED_ENTRY(RedBoot_config_options,_n_) = {#_n_,_t_,_e_,_ie_,_type_}; void flash_get_config(char *key, void *val, int type); diff --git a/packages/redboot/current/include/redboot.h b/packages/redboot/current/include/redboot.h --- a/packages/redboot/current/include/redboot.h +++ b/packages/redboot/current/include/redboot.h @@ -123,7 +123,7 @@ extern void cmd_usage(struct cmd #define RedBoot_cmd(_s_,_h_,_u_,_f_) cmd_entry(_s_,_h_,_u_,_f_,RedBoot_commands) #define _cmd_entry(_s_,_h_,_u_,_f_,_n_) \ cmd_fun _f_; \ -struct cmd _cmd_tab_##_f_ CYG_HAL_TABLE_ENTRY(_n_) = {_s_, _h_, _u_, _f_}; +struct cmd _cmd_tab_##_f_ CYG_HAL_TABLE_QUALIFIED_ENTRY(_n_,_f_) = {_s_, _h_, _u_, _f_}; #define cmd_entry(_s_,_h_,_u_,_f_,_n_) \ extern _cmd_entry(_s_,_h_,_u_,_f_,_n_) #define local_cmd_entry(_s_,_h_,_u_,_f_,_n_) \ @@ -136,7 +136,7 @@ static _cmd_entry(_s_,_h_,_u_,_f_,_n_) typedef void void_fun(void); typedef void_fun *void_fun_ptr; #define _RedBoot_init(_f_,_p_) \ -void_fun_ptr _init_tab_##_p_##_f_ CYG_HAL_TABLE_ENTRY(RedBoot_inits) = _f_; +void_fun_ptr _init_tab_##_p_##_f_ CYG_HAL_TABLE_QUALIFIED_ENTRY(RedBoot_inits,_f_) = _f_; #define RedBoot_init(_f_,_p_) _RedBoot_init(_f_,_p_) @@ -151,8 +151,9 @@ struct option_info { char *name; }; -#define OPTION_ARG_TYPE_NUM 0 -#define OPTION_ARG_TYPE_STR 1 +#define OPTION_ARG_TYPE_NUM 0 // Numeric data +#define OPTION_ARG_TYPE_STR 1 // Generic string +#define OPTION_ARG_TYPE_FLG 2 // Flag only extern void init_opts(struct option_info *opts, char flag, bool takes_arg, int arg_type, void **arg, bool *arg_set, char *name); diff --git a/packages/redboot/current/src/flash.c b/packages/redboot/current/src/flash.c --- a/packages/redboot/current/src/flash.c +++ b/packages/redboot/current/src/flash.c @@ -63,16 +63,18 @@ RedBoot_cmd("fis", "{cmds}", do_fis ); +#ifdef CYGSEM_REDBOOT_FLASH_CONFIG RedBoot_cmd("fconfig", "Manage configuration kept in FLASH memory", - "", + "[-l]", do_flash_config ); +#endif // Internal commands local_cmd_entry("init", "Initialize FLASH Image System [FIS]", - "", + "[-f]", fis_init, FIS_cmds ); @@ -141,14 +143,15 @@ fis_init(int argc, char *argv[]) void *cfg_base; #endif bool full_init = false; + struct option_info opts[1]; - if (argc > 2) { - if (strcmp(argv[2], "-f") != 0) { - fis_usage("bad parameter"); - return; - } - full_init = true; + init_opts(&opts[0], 'f', false, OPTION_ARG_TYPE_FLG, + (void **)&full_init, (bool *)0, "full initialization, erases all of flash"); + if (!scan_opts(argc, argv, 2, opts, 1, 0, 0, "")) + { + return; } + if (!verify_action("About to initialize [format] FLASH image system")) { printf("** Aborted\n"); return; @@ -332,7 +335,6 @@ fis_create(int argc, char *argv[]) return; } - if (!mem_addr_set || !length_set || !name) { fis_usage("required parameter missing"); return; @@ -646,7 +648,7 @@ CYG_HAL_TABLE_END( __CONFIG_options_TAB_ extern struct config_option __CONFIG_options_TAB__[], __CONFIG_options_TAB_END__[]; static int -get_config(struct config_option *opt, int offset) +get_config(struct config_option *opt, int offset, bool list_only) { char line[80], *sp, *lp; int ret; @@ -703,6 +705,10 @@ get_config(struct config_option *opt, in } break; } + if (list_only) { + printf("\n"); + return CONFIG_OK; + } if (opt->type != CONFIG_SCRIPT) { ret = gets(line, sizeof(line), 0); if (ret < 0) return CONFIG_ABORT; @@ -842,13 +848,22 @@ do_flash_config(int argc, char *argv[]) struct config_option *opt = __CONFIG_options_TAB__; struct _config hold_config; int offset = sizeof(unsigned long); + struct option_info opts[1]; + bool list_only; if (!do_flash_init()) return; memcpy(&hold_config, &config, sizeof(config)); script = (unsigned char *)0; + init_opts(&opts[0], 'l', false, OPTION_ARG_TYPE_FLG, + (void **)&list_only, (bool *)0, "list configuration only"); + if (!scan_opts(argc, argv, 1, opts, 1, 0, 0, "")) + { + return; + } + while (opt != optend) { - ret = get_config(opt, offset); + ret = get_config(opt, offset, list_only); switch (ret) { case CONFIG_DONE: goto done; diff --git a/packages/redboot/current/src/load.c b/packages/redboot/current/src/load.c --- a/packages/redboot/current/src/load.c +++ b/packages/redboot/current/src/load.c @@ -48,7 +48,7 @@ // Exported CLI function RedBoot_cmd("load", "Load a file", - "[-raw] [-b ]]", + "[-v] [-r] [-b ] ", do_load ); @@ -113,15 +113,15 @@ load_srec_image(int (*getc)(void), unsig lp = line; len = 0; // Start of line if (c != 'S') { - printf("Invalid S-record at offset 0x%lx, input: %c\n", - (unsigned long)offset, c); + printf("Invalid S-record at offset %p, input: %c\n", + (void *)offset, c); return; } type = (*getc)(); offset += 2; sum = 0; if ((count = _hex2(getc, 1, &sum)) < 0) { - printf("Bad S-record count at offset 0x%lx\n", (unsigned long)offset); + printf("Bad S-record count at offset %p\n", (void *)offset); return; } offset += 1; @@ -136,7 +136,7 @@ load_srec_image(int (*getc)(void), unsig if (first_addr) { if (base) { addr_offset = (unsigned long)base - (unsigned long)addr; - printf("Address offset = %lx\n", (unsigned long)addr_offset); + printf("Address offset = %p\n", (void *)addr_offset); } else { addr_offset = 0; } @@ -213,7 +213,7 @@ getc(void) } getc_info.bufp = getc_info.buf; getc_info.len = (*getc_info.fun)(getc_info.bufp, BUF_SIZE, &getc_info.err); - if ((getc_info.avail = getc_info.len) < 0) { + if ((getc_info.avail = getc_info.len) <= 0) { if (getc_info.verbose) printf("\n"); return -1; } @@ -245,18 +245,21 @@ getc_rewind(void) void do_load(int argc, char *argv[]) { - int i, res, err; + int i, res, err, num_options; int mode; - int verbose = 0; - bool raw = false; - bool base_addr_set = false; + bool verbose, raw; + bool base_addr_set, mode_str_set; + char *mode_str; #ifdef CYGPKG_REDBOOT_NETWORKING struct sockaddr_in host; + bool hostname_set; + char *hostname; #endif unsigned long base = 0; char type[4]; char *filename = 0; char *usage = "usage: load [-r] [-v] [-h ] [-m {TFTP | ZMODEM}] [-b ]\n"; + struct option_info opts[5]; #ifdef CYGPKG_REDBOOT_NETWORKING memset((char *)&host, 0, sizeof(host)); @@ -270,78 +273,47 @@ do_load(int argc, char *argv[]) #else mode = MODE_ZMODEM; #endif - for (i = 1; i < argc; i++) { - if (argv[i][0] == '-') { - // Option - switch (argv[i][1]) { - case 'v': - verbose++; - break; - case 'r': - raw = true; - break; + + init_opts(&opts[0], 'v', false, OPTION_ARG_TYPE_FLG, + (void **)&verbose, 0, "verbose"); + init_opts(&opts[1], 'r', false, OPTION_ARG_TYPE_FLG, + (void **)&raw, 0, "load raw data"); + init_opts(&opts[2], 'b', true, OPTION_ARG_TYPE_NUM, + (void **)&base, (bool *)&base_addr_set, "load address"); + init_opts(&opts[3], 'm', true, OPTION_ARG_TYPE_STR, + (void **)&mode_str, (bool *)&mode_str_set, "download mode (TFTP or ZMODEM)"); + num_options = 4; #ifdef CYGPKG_REDBOOT_NETWORKING - case 'h': - if ((i+1) >= argc) { - printf("Invalid option: %s\n", argv[i]); - printf(usage); - return; - } - if (!inet_aton(argv[i+1], (in_addr_t *)&host)) { - printf("Invalid IP address: %s\n", argv[i+1]); - return; - } - i++; // Skip parameter - break; + init_opts(&opts[4], 'h', true, OPTION_ARG_TYPE_STR, + (void **)&hostname, (bool *)&hostname_set, "host name (IP address)"); + num_options = 5; #endif - case 'm': - if ((i+1) >= argc) { - printf("Invalid option: %s\n", argv[i]); - printf(usage); - return; - } - if (strcmpci(argv[i+1], "zmodem") == 0) { - mode = MODE_ZMODEM; + if (!scan_opts(argc, argv, 1, opts, num_options, (void *)&filename, OPTION_ARG_TYPE_STR, "file name")) + { + return; + } #ifdef CYGPKG_REDBOOT_NETWORKING - } else if (strcmpci(argv[i+1], "tftp") == 0) { - mode = MODE_TFTP; - if (!have_net) { - printf("TFTP mode requires a working network\n"); - return; - } + if (hostname_set) { + if (!inet_aton(hostname, (in_addr_t *)&host)) { + printf("Invalid IP address: %s\n", hostname); + return; + } + } #endif - } else { - printf("Invalid 'mode': %s\n", argv[i+1]); - return; - } - i++; // Skip parameter - break; - case 'b': - if ((i+1) >= argc) { - printf("Invalid option: %s\n", argv[i]); - printf(usage); - return; - } - if (!parse_num(argv[i+1], &base, 0, 0)) { - printf("Invalid offset: %s\n", argv[i+1]); - printf(usage); - return; - } - base_addr_set = true; - i++; // Skip parameter - break; - default: - printf("Invalid option: %s\n", argv[i]); - printf(usage); + if (mode_str_set) { + if (strcmpci(mode_str, "zmodem") == 0) { + mode = MODE_ZMODEM; +#ifdef CYGPKG_REDBOOT_NETWORKING + } else if (strcmpci(mode_str, "tftp") == 0) { + mode = MODE_TFTP; + if (!have_net) { + printf("TFTP mode requires a working network\n"); return; } +#endif } else { - if (filename) { - printf("Only one file name allowed\n"); - printf(usage); - return; - } - filename = argv[i]; + printf("Invalid 'mode': %s\n", mode_str); + return; } } if ((mode == MODE_TFTP) && !filename) { diff --git a/packages/redboot/current/src/main.c b/packages/redboot/current/src/main.c --- a/packages/redboot/current/src/main.c +++ b/packages/redboot/current/src/main.c @@ -303,9 +303,18 @@ scan_opts(int argc, char *argv[], int fi } opt = opts; for (j = 0; j < num_opts; j++, opt++) { - *opt->arg_set = false; + if (opt->arg_set) { + *opt->arg_set = false; + } if (!opt->takes_arg) { - *(int *)opt->arg = 0; + switch (opt->arg_type) { + case OPTION_ARG_TYPE_NUM: + *(int *)opt->arg = 0; + break; + case OPTION_ARG_TYPE_FLG: + *(bool *)opt->arg = false; + break; + } } } for (i = first; i < argc; i++) { @@ -315,7 +324,7 @@ scan_opts(int argc, char *argv[], int fi opt = opts; for (j = 0; j < num_opts; j++, opt++) { if (c == opt->flag) { - if (*opt->arg_set) { + if (opt->arg_set && *opt->arg_set) { printf("%s alread set\n", opt->name); ret = false; } @@ -339,7 +348,14 @@ scan_opts(int argc, char *argv[], int fi } *opt->arg_set = true; } else { - *(int *)opt->arg = *(int *)opt->arg + 1; + switch (opt->arg_type) { + case OPTION_ARG_TYPE_NUM: + *(int *)opt->arg = *(int *)opt->arg + 1; + break; + case OPTION_ARG_TYPE_FLG: + *(bool *)opt->arg = true; + break; + } } flag_ok = true; break; diff --git a/packages/redboot/current/src/net/net_io.c b/packages/redboot/current/src/net/net_io.c --- a/packages/redboot/current/src/net/net_io.c +++ b/packages/redboot/current/src/net/net_io.c @@ -47,6 +47,8 @@ #include #include // Helper functions #include // HAL I/O interfaces +#include +#include #ifdef CYGSEM_REDBOOT_FLASH_CONFIG #include @@ -285,28 +287,27 @@ net_io_getc_timeout(void* __ch_data, cyg static int net_io_control(void *__ch_data, __comm_control_cmd_t __func, ...) { + static int vector = 0; int ret = 0; - int old_console; + static int irq_state = 0; CYGARC_HAL_SAVE_GP(); switch (__func) { case __COMMCTL_IRQ_ENABLE: - old_console = start_console(); - printf("%s.%d\n", __FUNCTION__, __LINE__); - end_console(old_console); + irq_state = 1; + if (vector == 0) { + vector = eth_drv_int_vector(); + } + HAL_INTERRUPT_UNMASK(vector); break; case __COMMCTL_IRQ_DISABLE: - old_console = start_console(); - printf("%s.%d\n", __FUNCTION__, __LINE__); - end_console(old_console); - ret = 0; + ret = irq_state; + irq_state = 0; + HAL_INTERRUPT_MASK(vector); break; case __COMMCTL_DBG_ISR_VECTOR: - old_console = start_console(); - printf("%s.%d\n", __FUNCTION__, __LINE__); - end_console(old_console); - ret = 0; + ret = vector; break; case __COMMCTL_SET_TIMEOUT: { @@ -328,13 +329,18 @@ net_io_control(void *__ch_data, __comm_c static int net_io_isr(void *__ch_data, int* __ctrlc, - CYG_ADDRWORD __vector, CYG_ADDRWORD __data) + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) { - int old_console; + char ch; - old_console = start_console(); - printf("%s.%d\n", __FUNCTION__, __LINE__); - end_console(old_console); + cyg_drv_interrupt_acknowledge(__vector); + *__ctrlc = 0; + if (net_io_getc_nonblock(__ch_data, &ch)) { + if (ch == 0x03) { + *__ctrlc = 1; + } + } + return CYG_ISR_HANDLED; } // TEMP