/* install-user.c:  User name
 *
 * This is free software, licensed under the GNU Public License V2.
 * See the file COPYING for details.
 */
 
/* Note: if you use this program to change the user name on the Pilot, I
 * _highly_ reccomend that you perform a hard reset before HotSyncing with a
 * Windows machine. This is because the user-id information has only been
 * partially altered, and it is not worth trying to predict what the Desktop
 * will do. - KJA
 */
 

#include <stdio.h>
#include <stdlib.h>
#include "pi-source.h"
#include "pi-socket.h"
#include "pi-dlp.h"

int main(int argc, char *argv[])
{
  struct pi_sockaddr addr;
  int sd;
  struct PilotUser U;
  struct SysInfo S;
  struct CardInfo C;
  struct NetSyncInfo N;
  unsigned long romversion;
  int ret;

  if (argc < 2) {
    fprintf(stderr,"usage:%s %s [User name [User ID]]\n",argv[0],TTYPrompt);
    exit(2);
  }

  if (!(sd = pi_socket(PI_AF_SLP, PI_SOCK_STREAM, PI_PF_PADP))) {
    perror("pi_socket");
    exit(1);
  }
    
  addr.pi_family = PI_AF_SLP;
  strcpy(addr.pi_device,argv[1]);
  
  ret = pi_bind(sd, (struct sockaddr*)&addr, sizeof(addr));
  if(ret == -1) {
    perror("pi_bind");
    exit(1);
  }

  ret = pi_listen(sd, 1);
  if(ret == -1) {
    perror("pi_listen");
    exit(1);
  }

  sd = pi_accept(sd, 0, 0);
  if(sd < 0) {
    perror("pi_accept");
    exit(1);
  }
  
  /* Tell user (via Pilot) that we are starting things up */
  dlp_OpenConduit(sd);

  dlp_ReadUserInfo(sd, &U);
  
  dlp_ReadSysInfo(sd, &S);
  
  C.card = -1;
  C.more = 1;
  while(C.more) {
    if(dlp_ReadStorageInfo(sd, C.card+1, &C)<0)
      break;
    
    printf(" Card #%d has %lu bytes of ROM, and %lu bytes of RAM (%lu of that is free)\n",
       C.card, C.romSize, C.ramSize, C.ramFree);
    printf(" It is called '%s', and was made by '%s'.\n", C.name, C.manufacturer);
  }
  

  if (argc == 2) {
    printf ("Pilot user %s\n",U.username);
    printf("UserID %ld \n", U.userID );
  }
  else {
    strcpy(U.username, argv[2]);
    if (argc == 4) { U.userID = atoi(argv[3]); }
    U.lastSyncDate = time( (time_t *)0);
    dlp_WriteUserInfo(sd, &U);
  }
  
  printf( "Through ReadSysInfo: ROM Version: 0x%8.8lX, locale: 0x%8.8lX, name: '%s'\n", 
              S.romVersion, S.locale, S.name);

  dlp_ReadFeature(sd, makelong("psys"), 1, &romversion);
  
  printf( "ROM Version through ReadFeature: 0x%8.8lX\n", romversion);
  
  if (dlp_ReadNetSyncInfo(sd, &N) >= 0) {
    printf( "NetSync: LAN sync = %d, Host name = '%s', address = '%s', netmask ='%s'\n",
    	N.lanSync, N.hostName, N.hostAddress, N.hostSubnetMask);
  }
  
  pi_close(sd);
  exit(0);
}
