text: /*
   * libGammu example to show how to set configuration manually instead
   * of parsing ~/.gammurc
   */
  #include <gammu.h>
  #include <stdlib.h>
  #include <stdio.h>
  #include <string.h>
  
  GSM_StateMachine *s;
  GSM_Error error;
  char buffer[100];
  
  /* Function to handle errors */
  void error_handler(void)
  {
  	if (error != ERR_NONE) {
  		printf("ERROR: %s\n", GSM_ErrorString(error));
  		if (GSM_IsConnected(s))
  			GSM_TerminateConnection(s);
  		exit(error);
  	}
  }
  
  int main(int argc, char **argv)
  {
  	GSM_Debug_Info *debug_info;
  	GSM_Config *cfg;
  
  	if (argc != 4) {
  		printf("Usage: custom-config DEVICE CONNECTION MODEL\n");
  	}
  
  	/*
  	 * We don't need gettext, but need to set locales so that
  	 * charset conversion works.
  	 */
  	GSM_InitLocales(NULL);
  
  	/* Enable global debugging to stderr */
  	debug_info = GSM_GetGlobalDebug();
  	GSM_SetDebugFileDescriptor(stderr, FALSE, debug_info);
  	GSM_SetDebugLevel("textall", debug_info);
  
  	/* Allocates state machine */
  	s = GSM_AllocStateMachine();
  	if (s == NULL)
  		return 3;
  
  	/*
  	 * Enable state machine debugging to same config as global one.
  	 */
  	debug_info = GSM_GetDebug(s);
  	GSM_SetDebugGlobal(TRUE, debug_info);
  
  	/*
  	 * Get pointer to config structure.
  	 */
  	cfg = GSM_GetConfig(s, 0);
  
  	/*
  	 * Set configuration, first freeing old values.
  	 */
  	free(cfg->Device);
  	cfg->Device = strdup(argv[1]);
  	free(cfg->Connection);
  	cfg->Connection = strdup(argv[2]);
  	/* For historical reasons this is not a pointer */
  	strcpy(cfg->Model, argv[3]);
  
  	/* We have one valid configuration */
  	GSM_SetConfigNum(s, 1);
  
  	/* Connect to phone */
  	/* 1 means number of replies you want to wait for */
  	error = GSM_InitConnection(s, 1);
  	error_handler();
  
  	/* Here you can do some stuff with phone... */
  
  	/* As an example we read some information about phone: */
  
  	/* Manufacturer name */
  	error = GSM_GetManufacturer(s, buffer);
  	error_handler();
  	printf("Manufacturer  : %s\n", buffer);
  
  	/* Model name */
  	error = GSM_GetModel(s, buffer);
  	error_handler();
  	printf("Model         : %s (%s)\n",
  		GSM_GetModelInfo(s)->model,
  		buffer);
  
  	/* Terminate connection */
  	error = GSM_TerminateConnection(s);
  	error_handler();
  
  	/* Free up used memory */
  	GSM_FreeStateMachine(s);
  
  	return 0;
  }
  
  /* Editor configuration
   * vim: noexpandtab sw=8 ts=8 sts=8 tw=72:
   */
  
  