コード例 #1
0
ファイル: sub_app.c プロジェクト: nmaxwell/EE
/*
*-------------------------------------------------------------------------------
* START
*-------------------------------------------------------------------------------
*/
int main( int argc, char* argv[] )
{
    int     rc=0,i,tmp,cmd;
	sub_int32_t tmp1;
	struct usb_device* dev;

    /* Init */
    config.fpwm_duty[0]=config.fpwm_duty[1]=config.fpwm_duty[2]=-1;
    for( i=0; i<8; i++ )
        config.pwm_duty[i] = -1;

	config.serno=-1;	/* by default open first available device */
    config.bb_i2c_ch=-1;
    config.bb_i2c_mode=BB_I2C_STD;

    /* Parse command line */
    rc=parse_argv( argc, argv, OPTIONS_N );
    if( rc )
        return rc;

	dev = NULL;
	if( config.serno != -1 )
	{
		char sn_buf[20];
		int found = 0 ;
		while( ( dev =  sub_find_devices( dev ) ) )
		{
			fd = sub_open( dev );
			if(!fd)
			{
				printf("ERROR: Cannot open handle to device\n" );
				return -1;
			}

            rc = sub_get_serial_number( fd, sn_buf, sizeof(sn_buf) );

			sub_close( fd );

			if(rc<0)
			{
				printf("ERROR: Cannot obtain seral number: %d\n", rc );
				return -1;
			}

			if( config.serno == strtoul(sn_buf, NULL, 16 ) )
			{
				/* device found */
				found = 1;
				break;
			}
		}

		if( !found )
		{
			printf("ERROR: Device with SN=0x%04x not found\n", config.serno );
			return -1;
		}
	}

	/* Open USB device */
	fd = sub_open( dev );

	if( !fd )
	{
		printf("sub_open: %s\n", sub_strerror(sub_errno));
		return -1;
	}    


    /*
    * Command
    */
    if( config.cmd_sz )
    {
        rc = usb_transaction( fd, 
                    config.cmd, config.cmd_sz, 
                    config.cmd, config.resp_sz,
                    config.usb_to_ms );
        if( rc<0 )
        {
            printf( "Transaction failed (%s)\n", sub_strerror( sub_errno ) );
        }
        rc=0;
    }

    /*
    * todo
    */
    for( cmd=0; cmd<config.todo_sz; cmd++ )
    {
        switch( config.todo[cmd] )
        {
        /* FIFO */
        case 'a':
            rc = sub_fifo_read( fd, config.buf, config.sz, 10000 );
            if( rc >= 0 )
            {
                printf("%d byte(s) read from FIFO\n", rc );
                hex_ascii_dump( config.buf, rc );
                rc = 0;
            }
            break;

        case 'A':
            rc = sub_fifo_write( fd, config.buf, config.sz, 10000 );
            if( rc >=0 )
            {
                printf("%d byte(s) written to FIFO\n", rc );
                rc = 0;
            }
            break; 

        case 'B':
            rc = sub_control_request( fd, 0x40, 0x80, 0, 0, 0, 0, 1000 );
            if( rc < 0 )
                printf("Control Request failed\n");
            else
                printf("Device in Boot Mode\n");
            return rc; 
        case 'b':
            rc = sub_i2c_freq( fd, &config.i2c_freq );
            if( !rc )
#if (_MSC_VER==800)
				printf("I2C Frequency: %ld\n", config.i2c_freq);
#else
				printf("I2C Frequency: %d\n", config.i2c_freq);
#endif
            break;

            /* FIFO Config */
        case 'c':
            rc = sub_fifo_config( fd, config.fifo_cfg );
            break;

        case 'C':
            rc = sub_bb_i2c_config( fd, config.bb_i2c_mode, 
                                                config.bb_i2c_stretch );
            break;

            /* I2C Config */
        case 'd':
            rc = sub_i2c_config( fd, config.i2c_sa, 0x00 );
            break;

        case 'D':
            /* GPIO Config */
            rc = sub_gpio_config( fd, config.gpio_val, &tmp1, config.gpio_mask );
            if( !rc )
            {
                printf("GPIO Config: val=%08X,mask=%08X\n",
                                    config.gpio_val, config.gpio_mask);
                printf("GPIO Config: %08X\n", tmp1 ); 
            }
            break;
        case 'E':
            /* GPIOB Config */
            rc = sub_gpiob_config( fd, config.gpiob_val, &tmp1, config.gpiob_mask );
            if( !rc )
            {
                printf("GPIOB Config: val=%02X,mask=%02X\n",
                                    config.gpiob_val, config.gpiob_mask);
                printf("GPIOB Config: %02X\n", tmp1 ); 
            }
            break;

        case 'f':
            rc = sub_spi_config( fd, config.spi_config, 0 );
            break;

        case 'G':
            rc = sub_spi_config( fd, 0, &tmp );
            if( !rc )
                printf("SPI Config: %02xh\n", tmp);
            break;
    
        case 'I':
            /* GPIO Read */
            rc = sub_gpio_read( fd, &tmp1 );
            if( !rc )
                printf("GPIO: %08X\n", tmp1 );
            break;
        case 'e':
            /* GPIOB Read */
            rc = sub_gpiob_read( fd, &tmp1 );
            if( !rc )
                printf("GPIOB: %02X\n", tmp1 );
            break;

        case 'i':
        {
            char id_buf[30];
            rc = sub_get_product_id( fd, id_buf, 30 );
            if( rc )
                printf("Product ID: %s\n", id_buf);
            rc = !rc;
        }    
            break; 

        case 'K':
            /* PWM */
            rc = sub_pwm_config( fd, config.pwm_res, config.pwm_limit );
            break;
        case 'k':
            for( i=0; i<8; i++ )
            {
                if( config.pwm_duty[i] != -1 )
                {
                    printf( "PWM%d: duty=%d\n", i, config.pwm_duty[i] );
                    rc = sub_pwm_set( fd, i, config.pwm_duty[i] );
                    config.pwm_duty[i] = -1;
                }
            }
            break;

        case 'L':
            /* LCD Write */
            rc = sub_lcd_write( fd, config.lcd_str );
            break;
            
        case 'M':
            /* Fast PWM */
            printf("Fast PWM frequency: %lf Hz\n", config.fpwm_freq); 
            rc = sub_fpwm_config( fd, config.fpwm_freq, config.fpwm_flags );
            break;
        case 'm':
            for( i=0; i<3; i++ )
            {    
                if( config.fpwm_duty[i] != -1 )
                {
                    printf( "Fast PWM%d: %lf%%\n", i,config.fpwm_duty[i] );
                    rc = sub_fpwm_set( fd, i, config.fpwm_duty[i] );
                    config.fpwm_duty[i] = -1;
                    break;
                }
            }
            break;
        
        case 'N':
        {
            char    scan_buf[128];
            int     n_slave;   
            if( config.bb_i2c_ch != -1 )
                rc = sub_bb_i2c_scan( fd, config.bb_i2c_ch, 
                                                &n_slave, scan_buf );
            else
                rc = sub_i2c_scan( fd, &n_slave, scan_buf );
            if( !rc )
            {
                if( config.bb_i2c_ch != -1 )
                    printf( "I2Cx%d ",config.bb_i2c_ch );
                printf("I2C Slaves(%d): ",n_slave); 
                for( i=0; i<n_slave; i++ ) 
                    printf("0x%02X ", scan_buf[i] );
                printf("\n");
            }
        }
            break;

        case 'O':
            /* GPIO Write */
            rc = sub_gpio_write( fd, config.gpio_val, &tmp1, config.gpio_mask );
            if( !rc )
            {
                printf("GPIO Write: val=%08X,mask=%08X\n",
                                    config.gpio_val, config.gpio_mask);
                printf("GPIO: %08X\n", tmp1 ); 
            }
            break;
        case 'n':
            /* GPIOB Write */
            rc = sub_gpiob_write( fd, config.gpiob_val, &tmp1, config.gpiob_mask );
            if( !rc )
            {
                printf("GPIOB Write: val=%02X,mask=%02X\n",
                                    config.gpiob_val, config.gpiob_mask);
                printf("GPIOB: %02X\n", tmp1 ); 
            }
            break;

        case 'o':
            /* mdio */
            if( (config.mdio_n == 1) && !config.mdio_channel )
            {
                if( config.mdios[0].clause22.op & SUB_MDIO22 )
                    rc = sub_mdio22( fd, 
                                config.mdios[0].clause22.op, 
                                config.mdios[0].clause22.phyad,
                                config.mdios[0].clause22.regad,
                                config.mdios[0].clause22.data,
                                &config.mdios[0].clause22.data );
                else
                    rc = sub_mdio45( fd, 
                                config.mdios[0].clause45.op, 
                                config.mdios[0].clause45.prtad,
                                config.mdios[0].clause45.devad,
                                config.mdios[0].clause45.data,
                                &config.mdios[0].clause45.data );
            }
            else if( config.mdio_n >= 1 )
            {
                if( config.mdio_channel )
                    rc = sub_mdio_xfer_ex( fd, config.mdio_channel,
                                            config.mdio_n, config.mdios );
                else
                    rc = sub_mdio_xfer( fd, config.mdio_n, config.mdios );
            }
            else
                break;

            if( !rc )
            for( i=0; i<config.mdio_n; i++ )
                printf( "MDIO[%d] data=0x%04X\n", 
                        i, config.mdios[i].clause45.data );

            config.mdio_n=0;
            break;

        case 'P':
            rc = sub_i2c_stop( fd );
            break;
        case 'R':
            if( config.bb_i2c_ch != -1 )
                rc = sub_bb_i2c_read( fd, config.bb_i2c_ch, config.sa, 
                            config.ma, config.ma_sz, config.buf, config.sz );
            else
                rc = sub_i2c_read( fd, config.sa, 
                            config.ma, config.ma_sz, config.buf, config.sz );
            if( !rc )
                hex_ascii_dump( config.buf, config.sz );
            break;
        case 'r':
            if( config.rs_baud )
                rc=sub_rs_set_config( fd, config.rs_config, config.rs_baud );
            else
                rc=sub_rs_get_config( fd,&config.rs_config,&config.rs_baud );
            if( !rc )
                printf( "RS Config:0x%02X Baud=%d\n", 
                                        config.rs_config, config.rs_baud );
            break;
        case 'S':
            rc = sub_i2c_start( fd );
            break;
        case 's':
        {
            char sn_buf[20];
            rc = sub_get_serial_number( fd, sn_buf, 20 );
            if( rc )
                printf("Serial number: %s\n", sn_buf);
            rc = !rc;
        }    
            break; 

        case 't':
            /* SPI Read */
            rc = sub_spi_transfer( fd, 0, config.buf, 
                                                config.spi_in_sz, config.ss );
            if( !rc )
                hex_ascii_dump( config.buf, config.sz );
            break;
        case 'T':
            /* SPI Write */
            rc = sub_spi_transfer( fd, config.buf, config.buf, 
                                                config.spi_in_sz, config.ss );
            if( !rc )
                hex_ascii_dump( config.buf, config.spi_in_sz );
            break;
        case 'U':
            /* SPI SDIO */
            rc = sub_sdio_transfer( fd, config.buf, config.buf, 
                            config.spi_out_sz, config.spi_in_sz, config.ss );
            if( !rc && config.spi_in_sz )
                hex_ascii_dump( config.buf, config.spi_in_sz );
            break;

        case 'u':
            /* Set RS Timing */
            rc = sub_rs_timing( fd, config.rs_flags, config.rs_tx_space, 
                                config.rs_rx_msg_to, config.rs_rx_byte_to );
            break;

        case 'V':
        {
            const struct sub_version* sub_ver;
            sub_ver = sub_get_version( fd );
            printf("DLL/Lib: %d.%d.%d.%d\n", 
                sub_ver->dll.major,sub_ver->dll.minor,
                sub_ver->dll.micro,sub_ver->dll.nano);
            printf("Driver : %d.%d.%d.%d\n",
                sub_ver->driver.major,sub_ver->driver.minor,
                sub_ver->driver.micro,sub_ver->driver.nano);
            printf("SUB-20 : %d.%d.%d\n",
                sub_ver->sub_device.major,
                sub_ver->sub_device.minor,
                sub_ver->sub_device.micro);
            printf("Boot   : %x.%x\n",
                sub_ver->sub_device.boot>>4,
                sub_ver->sub_device.boot&0x0F);
        }
            break;

        case 'v':
        {
            /* Get boot_cfg.vpd */
            const struct sub_cfg_vpd* cfg_vpd;
            cfg_vpd = sub_get_cfg_vpd( fd );
            if( !cfg_vpd )
                rc = -1;
            else
            {
                printf("LCD Width  : %d\n", cfg_vpd->lcd_w );
                printf("LCD Lines  : %d\n", cfg_vpd->lcd_h );
                printf("Serial     : %d\n", cfg_vpd->serial);
                printf("Buttons    : %d\n", cfg_vpd->buttons);
                printf("IR Carrier : %d\n", cfg_vpd->ir_car);
                rc = 0;
            }
        }
            break;
            

        case 'W':
            if( config.bb_i2c_ch != -1 )
                rc = sub_bb_i2c_write( fd, config.bb_i2c_ch, config.sa, 
                            config.ma, config.ma_sz, config.buf, config.sz );
            else
                rc = sub_i2c_write( fd, config.sa, 
                            config.ma, config.ma_sz, config.buf, config.sz );
            break;

        case 'X':
            /* RS Xfer */
            rc = sub_rs_xfer( fd, 
                config.buf, config.rs_tx_sz, config.buf, config.rs_rx_sz );
            if( rc >= 0 )
            {
                printf( "Resecived %d bytes\n", rc );
                hex_ascii_dump( config.buf, rc );
                rc = 0;
            }
            break;
       
        case 'Z':
            /* ADC Config */
            rc = sub_adc_config( fd, config.adc_cfg );
            break;

        case 'z':
            /* ADC Read */
        {
            int ibuf[30];    
            rc = sub_adc_read( fd, ibuf, config.adc_mux, config.adc_reads );
            if( !rc )
            {
                printf( 
"Analog Input   ADC           Vref=5.0V Vref=3.3V Vref=2.56V\n" ); 
                for( i=0; i<config.adc_reads; i++ )
                    adc_printf( ibuf[i], config.adc_mux[i] );
            }
        }
            break;
             
        }/*end case*/

        if( rc )
            break;
    }

	if( rc )
    {
        printf("Failed(rc=%d): %s\n", rc,sub_strerror(sub_errno));
        if( rc == SE_I2C )
            printf("I2C Status: %02x\n", sub_i2c_status );
        
    }
    sub_close( fd );
	return rc;
}
コード例 #2
0
ファイル: myip.cpp プロジェクト: Galleondragon/qb64
qbs* WHATISMYIP(){ //changed name from FUNC_WHATISMYIP to WHATISMYIP
qbs *tqbs;
ptrszint tmp_long;
int32 tmp_fileno;
uint32 qbs_tmp_base=qbs_tmp_list_nexti;
uint8 *tmp_mem_static_pointer=mem_static_pointer;
uint32 tmp_cmem_sp=cmem_sp;


//data.txt
qbs *_FUNC_WHATISMYIP_STRING_WHATISMYIP=NULL;
if (!_FUNC_WHATISMYIP_STRING_WHATISMYIP)_FUNC_WHATISMYIP_STRING_WHATISMYIP=qbs_new(0,0);
float *_FUNC_WHATISMYIP_SINGLE_C=NULL;
if(_FUNC_WHATISMYIP_SINGLE_C==NULL){
_FUNC_WHATISMYIP_SINGLE_C=(float*)mem_static_malloc(4);
*_FUNC_WHATISMYIP_SINGLE_C=0;
}
qbs *_FUNC_WHATISMYIP_STRING_E=NULL;
if (!_FUNC_WHATISMYIP_STRING_E)_FUNC_WHATISMYIP_STRING_E=qbs_new(0,0);
qbs *_FUNC_WHATISMYIP_STRING_X=NULL;
if (!_FUNC_WHATISMYIP_STRING_X)_FUNC_WHATISMYIP_STRING_X=qbs_new(0,0);
byte_element_struct *byte_element_5276=NULL;
if (!byte_element_5276){
if ((mem_static_pointer+=12)<mem_static_limit) byte_element_5276=(byte_element_struct*)(mem_static_pointer-12); else byte_element_5276=(byte_element_struct*)mem_static_malloc(12);
}
float *_FUNC_WHATISMYIP_SINGLE_T=NULL;
if(_FUNC_WHATISMYIP_SINGLE_T==NULL){
_FUNC_WHATISMYIP_SINGLE_T=(float*)mem_static_malloc(4);
*_FUNC_WHATISMYIP_SINGLE_T=0;
}
qbs *_FUNC_WHATISMYIP_STRING_A2=NULL;
if (!_FUNC_WHATISMYIP_STRING_A2)_FUNC_WHATISMYIP_STRING_A2=qbs_new(0,0);
qbs *_FUNC_WHATISMYIP_STRING_A=NULL;
if (!_FUNC_WHATISMYIP_STRING_A)_FUNC_WHATISMYIP_STRING_A=qbs_new(0,0);
float *_FUNC_WHATISMYIP_SINGLE_DOTS=NULL;
if(_FUNC_WHATISMYIP_SINGLE_DOTS==NULL){
_FUNC_WHATISMYIP_SINGLE_DOTS=(float*)mem_static_malloc(4);
*_FUNC_WHATISMYIP_SINGLE_DOTS=0;
}
float *_FUNC_WHATISMYIP_SINGLE_START=NULL;
if(_FUNC_WHATISMYIP_SINGLE_START==NULL){
_FUNC_WHATISMYIP_SINGLE_START=(float*)mem_static_malloc(4);
*_FUNC_WHATISMYIP_SINGLE_START=0;
}
float *_FUNC_WHATISMYIP_SINGLE_X=NULL;
if(_FUNC_WHATISMYIP_SINGLE_X==NULL){
_FUNC_WHATISMYIP_SINGLE_X=(float*)mem_static_malloc(4);
*_FUNC_WHATISMYIP_SINGLE_X=0;
}
double fornext_value5279;
double fornext_finalvalue5279;
double fornext_step5279;
uint8 fornext_step_negative5279;
byte_element_struct *byte_element_5280=NULL;
if (!byte_element_5280){
if ((mem_static_pointer+=12)<mem_static_limit) byte_element_5280=(byte_element_struct*)(mem_static_pointer-12); else byte_element_5280=(byte_element_struct*)mem_static_malloc(12);
}
float *_FUNC_WHATISMYIP_SINGLE_A=NULL;
if(_FUNC_WHATISMYIP_SINGLE_A==NULL){
_FUNC_WHATISMYIP_SINGLE_A=(float*)mem_static_malloc(4);
*_FUNC_WHATISMYIP_SINGLE_A=0;
}
qbs *_FUNC_WHATISMYIP_STRING_IP=NULL;
if (!_FUNC_WHATISMYIP_STRING_IP)_FUNC_WHATISMYIP_STRING_IP=qbs_new(0,0);



if (new_error) goto exit_subfunc;
mem_lock *sf_mem_lock;
new_mem_lock();
sf_mem_lock=mem_lock_tmp;
sf_mem_lock->type=3;
*_FUNC_WHATISMYIP_SINGLE_C=func__openclient(qbs_new_txt_len("TCP/IP:80:www.qb64.net",22));
qbs_cleanup(qbs_tmp_base,0);
if ((-(*_FUNC_WHATISMYIP_SINGLE_C== 0 ))||new_error){
goto exit_subfunc;
}
qbs_set(_FUNC_WHATISMYIP_STRING_E,qbs_add(func_chr( 13 ),func_chr( 10 )));
qbs_cleanup(qbs_tmp_base,0);
qbs_set(_FUNC_WHATISMYIP_STRING_X,qbs_add(qbs_new_txt_len("GET /ip.php HTTP/1.1",20),_FUNC_WHATISMYIP_STRING_E));
qbs_cleanup(qbs_tmp_base,0);
qbs_set(_FUNC_WHATISMYIP_STRING_X,qbs_add(qbs_add(_FUNC_WHATISMYIP_STRING_X,qbs_new_txt_len("Host: www.qb64.net",18)),_FUNC_WHATISMYIP_STRING_E));
qbs_cleanup(qbs_tmp_base,0);
qbs_set(_FUNC_WHATISMYIP_STRING_X,qbs_add(qbs_add(_FUNC_WHATISMYIP_STRING_X,qbs_new_txt_len("",0)),_FUNC_WHATISMYIP_STRING_E));
qbs_cleanup(qbs_tmp_base,0);
sub_put2(qbr(*_FUNC_WHATISMYIP_SINGLE_C),NULL,byte_element((uint64)_FUNC_WHATISMYIP_STRING_X->chr,_FUNC_WHATISMYIP_STRING_X->len,byte_element_5276),0);
qbs_cleanup(qbs_tmp_base,0);
*_FUNC_WHATISMYIP_SINGLE_T=func_timer(NULL,0);
do{
if ((-((func_timer(NULL,0)-*_FUNC_WHATISMYIP_SINGLE_T)>( 5 )))||new_error){
sub_close(qbr(*_FUNC_WHATISMYIP_SINGLE_C),1);
goto exit_subfunc;
}
sub__delay( 0.1E+0 );
sub_get2(qbr(*_FUNC_WHATISMYIP_SINGLE_C),NULL,_FUNC_WHATISMYIP_STRING_A2,0);
qbs_cleanup(qbs_tmp_base,0);
qbs_set(_FUNC_WHATISMYIP_STRING_A,qbs_add(_FUNC_WHATISMYIP_STRING_A,_FUNC_WHATISMYIP_STRING_A2));
qbs_cleanup(qbs_tmp_base,0);
*_FUNC_WHATISMYIP_SINGLE_DOTS= 0 ;
*_FUNC_WHATISMYIP_SINGLE_START= 0 ;
fornext_value5279= 1 ;
fornext_finalvalue5279=_FUNC_WHATISMYIP_STRING_A->len;
fornext_step5279= 1 ;
if (fornext_step5279<0) fornext_step_negative5279=1; else fornext_step_negative5279=0;
if (new_error) goto fornext_error5279;
goto fornext_entrylabel5279;
while(1){
fornext_value5279=fornext_step5279+(*_FUNC_WHATISMYIP_SINGLE_X);
fornext_entrylabel5279:
*_FUNC_WHATISMYIP_SINGLE_X=fornext_value5279;
qbs_cleanup(qbs_tmp_base,0);
if (fornext_step_negative5279){
if (fornext_value5279<fornext_finalvalue5279) break;
}else{
if (fornext_value5279>fornext_finalvalue5279) break;
}
fornext_error5279:;
*_FUNC_WHATISMYIP_SINGLE_A=qbs_asc(_FUNC_WHATISMYIP_STRING_A,qbr(*_FUNC_WHATISMYIP_SINGLE_X));
qbs_cleanup(qbs_tmp_base,0);
if (((-(*_FUNC_WHATISMYIP_SINGLE_A>= 48 ))&(-(*_FUNC_WHATISMYIP_SINGLE_A<= 57 )))||new_error){
if ((-(*_FUNC_WHATISMYIP_SINGLE_START== 0 ))||new_error){
*_FUNC_WHATISMYIP_SINGLE_START=*_FUNC_WHATISMYIP_SINGLE_X;
}
}else{
if (((-(*_FUNC_WHATISMYIP_SINGLE_A== 46 ))&(-(*_FUNC_WHATISMYIP_SINGLE_START!= 0 )))||new_error){
*_FUNC_WHATISMYIP_SINGLE_DOTS=*_FUNC_WHATISMYIP_SINGLE_DOTS+ 1 ;
}else{
if ((-(*_FUNC_WHATISMYIP_SINGLE_DOTS== 3 ))||new_error){
qbs_set(_FUNC_WHATISMYIP_STRING_IP,func_mid(_FUNC_WHATISMYIP_STRING_A,qbr(*_FUNC_WHATISMYIP_SINGLE_START),qbr(*_FUNC_WHATISMYIP_SINGLE_X-*_FUNC_WHATISMYIP_SINGLE_START),1));
qbs_cleanup(qbs_tmp_base,0);
goto dl_exit_5277;
}
*_FUNC_WHATISMYIP_SINGLE_START= 0 ;
*_FUNC_WHATISMYIP_SINGLE_DOTS= 0 ;
}
}
}
fornext_exit_5278:;
}while(1);
dl_exit_5277:;
sub_close(qbr(*_FUNC_WHATISMYIP_SINGLE_C),1);
qbs_set(_FUNC_WHATISMYIP_STRING_WHATISMYIP,_FUNC_WHATISMYIP_STRING_IP);
qbs_cleanup(qbs_tmp_base,0);
exit_subfunc:;
free_mem_lock(sf_mem_lock);


//free.txt
qbs_free(_FUNC_WHATISMYIP_STRING_E);
qbs_free(_FUNC_WHATISMYIP_STRING_X);
qbs_free(_FUNC_WHATISMYIP_STRING_A2);
qbs_free(_FUNC_WHATISMYIP_STRING_A);
qbs_free(_FUNC_WHATISMYIP_STRING_IP);



if ((tmp_mem_static_pointer>=mem_static)&&(tmp_mem_static_pointer<=mem_static_limit)) mem_static_pointer=tmp_mem_static_pointer; else mem_static_pointer=mem_static;
cmem_sp=tmp_cmem_sp;
qbs_maketmp(_FUNC_WHATISMYIP_STRING_WHATISMYIP);return _FUNC_WHATISMYIP_STRING_WHATISMYIP;
}