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; }
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; }
/** * 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); }
/*---------------------------------------------------------------------------*/ 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); }
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); } }
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); }
/** * 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; }
// 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); }
// 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)); }
/*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); }