static void
process_envvar (char *envvar)
{
  int argc = 0;
  char **argv;
  char *p = envvar;

  while (p && *p)
    {
      p = strchr (p, ' ');
      argc++;
      if (p)
	while (*p == ' ')
	  p++;
    }

  argv = malloc (argc * sizeof (char *));

  p = envvar;
  argc = 0;
  while (p && *p)
    {
      char *q = strchr (p, ' ');
      if (q)
	*q = 0;
      argv[argc++] = p;
      if (q)
	{
	  while (*q == ' ')
	    q++;
	  p = q;
	}
    }
  process_argv (argc, argv);
}
int
main (int argc,
      char **argv)
{
  int retval;

  int i, j, k;
  char *p;
  
  libraries = malloc (argc * sizeof (char *));
  libdirs = malloc ((argc+10) * sizeof (char *));
  objects = malloc (argc * sizeof (char *));

  for (k = 0, i = 1; i < argc; i++)
    k += strlen (argv[i]);

  k += 500 + argc;
  cmdline = malloc (k);

  /* -MD: Use msvcrt.dll runtime */
  strcpy (cmdline, "cl -MD");

  p = getenv ("CPPFLAGS");
  if (p && *p)
    process_envvar (p);

  p = getenv ("LDFLAGS");
  if (p && *p)
    process_envvar (p);

  process_argv (argc, argv);

  if (!verbose)
    strcat (cmdline, " -nologo");

  if (output_executable != NULL)
    {
      if (stricmp (executable_type, ".dll") == 0)
	strcat (cmdline, " -LD");
    }

  if (debug)
    strcat (cmdline, " -Zi");

  if (nsources == 0)
    {
      FILE *dummy = fopen ("__dummy__.c", "w");
      fprintf (dummy, "static int foobar = 42;\n");
      fclose (dummy);

      strcat (cmdline, " __dummy__.c");
    }

  if (!output && !compileonly)
    strcat (cmdline, " -Fea.exe");

  if (!compileonly)
    {
      strcat (cmdline, " -link");

      for (i = 0; i < object_ix; i++)
	{
	  strcat (cmdline, " ");
	  strcat (cmdline, objects[i]);
	}

      for (i = 0; i < lib_ix; i++)
	{
	  strcat (cmdline, " ");
	  for (j = 0; j < libdir_ix; j++)
	    {
	      char b[1000];
	      
	      sprintf (b, "%s\\%s.lib", libdirs[j], libraries[i]);
	      if (access (b, 4) == 0)
		{
		  strcat (cmdline, b);
		  break;
		}
	      sprintf (b, "%s\\lib%s.lib", libdirs[j], libraries[i]);
	      if (access (b, 4) == 0)
		{
		  strcat (cmdline, b);
		  break;
		}
	    }
	  
	  if (j == libdir_ix)
	    {
	      strcat (cmdline, libraries[i]);
	      strcat (cmdline, ".lib");
	    }
	}
    }
  
  fprintf (stderr, "%s\n", cmdline);
      
  retval = system (cmdline);

  if (nsources == 0)
    remove ("__dummy__.c");

  return retval;
}
示例#3
0
int main(int argc, char* argv[]) {
	int r;
	// set up
	strcpy(i2c_bus,"/dev/i2c-1");
	
	// print header
	fprintf(stderr, "AM2321 reader application by saper_2 v.0.1\n");
	process_argv(argc, argv);
	
	fprintf(stderr, "Using i2c bus device: %s\n",i2c_bus);
	
	if (info_mode) {
		uint8_t data[16];
		memset(data,0xff,16);
		r = am2321_read_info(data, i2c_bus);
		fprintf(stderr,"Info read result %i\n",r);
		fprintf(stderr,"Info data: ");
		for(int i=0;i<8;i++) fprintf(stderr, "%02X ",data[i]);
		fprintf(stderr,"\n");
		
		uint16_t model = data[0]<<8 | data[1];
		uint8_t version = data[2];
		uint32_t devid = data[3]<<24 | data[4]<<16 | data[5]<<8 | data[6];
		uint8_t stat = data[7];
		fprintf(stderr, "Model: 0x%04X (%iu)\n",model,model);
		fprintf(stderr, "Version: 0x%02X (%iu)\n",version,version);
		fprintf(stderr, "Device ID: 0x%08X (%iu)\n",devid,devid);
		fprintf(stderr, "Status: 0x%02X (%iu)\n",stat,stat);
		
		// format: i:[res_code];[model];[version];[dev_id];[status]
		printf("i:%i;%04x;%02x;%08x;%02x\n", r, model, version, devid, stat);
		
		if (raw_mode || val_mode) {
			//printf("\n");
			fprintf(stderr,"\nDelay 1sec before reading values...\n");
			delay1us(1*1000*1000);
		}
	}
	
	if (val_mode || raw_mode) {
		am2321_t val;
		time_t tt;
		unsigned long ts = (unsigned)time(NULL);
		time(&tt);
		memset(&val,0,sizeof(val));
		r = am2321_read_raw(&val, i2c_bus);
		fprintf(stderr,"Read values result %i\n",r);
		fprintf(stderr,"Read values data: \n");
		fprintf(stderr, "   humi = 0x%04X (%i , %3.1f %%)\n",val.humi,val.humi, (val.humi*1.0f)/10.0f);
		fprintf(stderr, "   temp = 0x%04X (%i , %3.1f degC)\n",val.temp,val.temp, (val.temp*1.0f)/10.0f);
		struct tm *tti = localtime(&tt);
		fprintf(stderr, "Current time is: %lu - %s\n",ts,asctime(tti));
		
		fprintf(stderr,"\n");
		if (val_mode>0 && raw_mode==0) {
			// val mode
			// format: v:[unix_time_stamp];[mode];[result];[humi];[temp]
			printf("v:%lu;r;%i;%3.1f;%3.1f\n", ts, r, (val.humi*1.0f)/10.0f, (val.temp*1.0f)/10.0f);
		} else if (val_mode==0 && raw_mode>0) {
			// raw mode
			// format: v:[unix_time_stamp];[mode];[result];[hex humi];[hex temp]
			printf("v:%lu;v;%i;%04x;%04x\n", ts, r, val.humi, val.temp);
		} else if (val_mode>0 && raw_mode>0) {
			// raw + val
			// format: v:[unix_time_stamp];[mode];[result];[hex humi];[hex temp];[humi];[temp]
			printf("v:%lu;rv;%i;%04x;%04x;%3.1f;%3.1f\n", ts, r, val.humi, val.temp, (val.humi*1.0f)/10.0f, (val.temp*1.0f)/10.0f);
		} else {
			// no format ?
			// format: x:[unix_time_stamp];[mode];9;FFFF;FFFF;65535;32767
			printf("x:%lu;x;9;FFFF;FFFF;65535;32767\n", ts);
		}
	}
	
	if (val_mode==0 && raw_mode==0 && info_mode==0) {
		print_help();
		fprintf(stderr,"No read mode selected.\n");
		// format: x:[unix_time_stamp=0];[mode=E (=error)];9;FFFF;FFFF;65535;32767
		printf("x:0;E;9;FFFF;FFFF;65535;32767\n");
	}
	
	return 0;
}