Exemplo n.º 1
0
bool loadLastSpreadSheet(Cell spreadsheet[], int socket)
{
  int valsRead;
  int i;
  char formatStr[80];

  FILE* file = fopen(BIN_FILE, "rb+");
  if (file == NULL)
  {
     SOCKET_WRITE(socket, "File was null\n", MSG_DONTWAIT);
     return false;
  }

  for (i = 0, valsRead = 0; i < GRID; i++)
     valsRead += fread(&spreadsheet[i], sizeof(Cell), 1, file);
  if (valsRead != GRID)
  {
     sprintf(formatStr, "Vals read = %d\n", valsRead);
     SOCKET_WRITE(socket, formatStr, MSG_DONTWAIT);
     SOCKET_WRITE(socket, "Well sheet not all vals read\n", MSG_DONTWAIT);
     fclose(file);
     return false;
  }
  fclose(file);

  return true;
}
Exemplo n.º 2
0
bool doSpreadsheetStuff(int socket)
{
   // int numBytes;
   char buffer[BUFFER_SIZE];
   char formula[IN_BUF_LIMIT] = "";
   FormulaType formulaType = SUM;
   FormulaType *formulaTypePtr = &formulaType;
   size_t addr = 0;
   size_t *addressPtr = &addr;
   char response[IN_BUF_LIMIT] = "";
   char value[IN_BUF_LIMIT] = "";
   Cell spreadsheet[GRID];

   memset(buffer, 0, BUFFER_SIZE);
   if (!isFirstRun())
   {
      SOCKET_WRITE(socket, "Do you want to load last spreadsheet? y/n: ", 0);
      read(socket, response, 3);
      printf("%s\n", response);
      if (toupper(response[0]) == 'Y')
      {
         if (loadLastSpreadSheet(spreadsheet, socket) != true)
            SOCKET_WRITE(socket, "Could not load last SpreadSheet\n", MSG_DONTWAIT);
         else
         {
            SOCKET_WRITE(socket, "Last spreadSheet loaded\n", MSG_DONTWAIT);
            recoveredSpreadSheet = true;
         }
      }
   }
   run(response, spreadsheet, value, addressPtr, formula, formulaTypePtr, socket); //runs program until user quits
   saveLastSpreadSheet(spreadsheet);
   SOCKET_WRITE(socket, "Session saved\n", MSG_DONTWAIT);
   return false;
}
Exemplo n.º 3
0
/**
* Initiates loop to run spreadsheet program until user quits
* @param response    Pointer to store the value entered by user at command prompt
* @param spreadsheet The spreadsheet of cells
* @param value       Pointer that stores the value to be entered into a cell within the spreadsheet
* @param address     Pointer that stores the address of cell to store value
* @param formula     Pointer that stores formula
* @param fType       Pointer that stores the FormulaType to perform calculations
*/
void run(char *response, Cell spreadsheet[], char *value, size_t *address, char *formula, FormulaType *fType, int socket) {
   size_t addr;
   char val[IN_BUF_LIMIT];
   char cacheAddr[CELL_ADDRESS];
   char formatStr[80];
   if (!recoveredSpreadSheet)
     initSpreadSheet(spreadsheet);
   displaySpreadSheetToClient(spreadsheet, socket);

   while (true) {
      if (!prompt(response, value, socket))
         break;
      // cell guaranteed to be valid, no need for if statement.
      findCell(spreadsheet, response, address);
      addr = *address;
      printf("Address is: %lu\n", addr);
      printf("Value has %lu chars and is %s\n", strlen(value), value);
      sprintf(formatStr, "Old value: %s. New value: %s.\n", spreadsheet[addr].value, value);
      // fflush(st)
      printf("%s\n", value);
      // SOCKET_WRITE(socket, formatStr, MSG_DONTWAIT);
      SOCKET_WRITE(socket, "Return to reload spreadsheet", 0);


      if (isFormula(value, formula, fType)) {
         strcpy(cacheAddr, response);
         spreadsheet[addr].type = FORMULA;
         puts("FORMULA");
         sprintf(val, "%f", calculateFormula(value, fType, spreadsheet, address));
         printf("Val is %s\n", val);
         strcpy(spreadsheet[addr].value, val);

         spreadsheet[addr].address[0] = cacheAddr[0];
         spreadsheet[addr].address[1] = cacheAddr[1];
         spreadsheet[addr].address[2] = '\0';
     } else if (cellAlNum(value) == true) {
         spreadsheet[addr].type = ALNUM;
         puts("ALNUM");
         strcpy(spreadsheet[addr].value, value);
     } else {
         spreadsheet[addr].type = NUM;
         puts("NUM");
         strcpy(spreadsheet[addr].value, value); // SEG-FAULTS HERE!
     }
     displaySpreadSheetToClient(spreadsheet, socket);
     saveWorkSheet(spreadsheet, socket);
   }
   SOCKET_WRITE(socket, "U got served bitch!", MSG_DONTWAIT);
}
Exemplo n.º 4
0
/*---------------------------------------------------------------------------*/
static int writen( SOCKET fd, char *buf, int n )
{
    long nleft, nwritten;

    nleft = n;
    while( nleft > 0 )
    {
        nwritten = SOCKET_WRITE( fd, buf, nleft );
        if( nwritten < 0 )
        {
	    break;
        }
        else if( nwritten == 0 )
        {
	    break;
        }
        else
        {
            nleft -= nwritten;
            buf += nwritten;
        }
    }

    return (n - nleft);
}
Exemplo n.º 5
0
Arquivo: proc.c Projeto: Lembed/uTLS
static int special_write(struct connstruct *cn,
                         const char *buf, size_t count)
{
    if (cn->is_ssl) {
        SSL *ssl = cn->ssl;
        return ssl ? ssl_write(ssl, (uint8_t *)buf, count) : -1;
    } else {
        return SOCKET_WRITE(cn->networkdesc, buf, count);
    }
}
Exemplo n.º 6
0
void saveWorkSheet(Cell spreadsheet[], int socket)
{
  FILE* file = fopen(FILE_NAME, "w+");
  if (file == NULL )
  {
     fprintf(stderr, "Could not open %s for writing\n", FILE_NAME);
     SOCKET_WRITE(socket, "Sorry could not save spreadsheet\n", 0);
     return;
  }
  renderSpreadSheet(spreadsheet, file, -1);
  fclose(file);
}
Exemplo n.º 7
0
/**
* Prompts user for input
* @param response Pointer to store address user inputted
* @param value    Pointer to store value user inputted
*/
bool prompt(char *response, char *value, int socket) {
   // printf("In %s\n",__func__);
   SOCKET_WRITE(socket, "Enter row and column you would like to manipulate or enter 'exit' to exit program: ", 0);
   read(socket, response, IN_BUF_LIMIT);
   printf("%s\n", response);
   if (strcmp(response, "exit") == 0)
      return false;

   response[0] = toupper(response[0]);

   while(!validCell(response) || !response)
   {
      SOCKET_WRITE(socket, "Invalid cell. Enter cell to edit ('exit' to quit): ", 0);
      read(socket, response, IN_BUF_LIMIT);
      if (strcmp(response, "exit") == 0)
         return false;
      response[0] = toupper(response[0]);
   }
   SOCKET_WRITE(socket, "Enter value: ", 0);
   read(socket, value, IN_BUF_LIMIT);

   return true;
}
Exemplo n.º 8
0
// Write a formatted string to a socket.
//
static int DCL_CDECL mod_email_sock_printf(SOCKET sock, const UTF8 *format, ...)
{
    va_list vargs;
    UTF8 mybuf[2*LBUF_SIZE];

    if (IS_INVALID_SOCKET(sock))
    {
        return 0;
    }

    va_start(vargs, format);
    mux_vsnprintf(mybuf, sizeof(mybuf), format, vargs);
    va_end(vargs);

    return SOCKET_WRITE(sock, (char *)&mybuf[0], strlen((char *)mybuf), 0);
}
Exemplo n.º 9
0
// Write a formatted string to a socket.
//
static int DCL_CDECL mod_email_sock_printf(SOCKET sock, const char *format, ...)
{
    va_list vargs;
    char mybuf[2*LBUF_SIZE];

    if (IS_INVALID_SOCKET(sock))
    {
        return 0;
    }

    va_start(vargs, format);
    mux_vsnprintf(mybuf, sizeof(mybuf), format, vargs);
    va_end(vargs);

    return SOCKET_WRITE(sock, &mybuf[0], strlen(mybuf), 0);
   // return sock.writeToSocket(&mybuf[0], strlen(mybuf));
}
Exemplo n.º 10
0
/*ARGSUSED*/
int
krb5_net_write(krb5_context context, int fd, register const char *buf, int len)
{
    int cc;
    register int wrlen = len;
    do {
	cc = SOCKET_WRITE((SOCKET)fd, buf, wrlen);
	if (cc < 0) {
	    if (SOCKET_ERRNO == SOCKET_EINTR)
		continue;

		/* XXX this interface sucks! */
        errno = SOCKET_ERRNO;           

	    return(cc);
	}
	else {
	    buf += cc;
	    wrlen -= cc;
	}
    } while (wrlen > 0);
    return(len);
}