void SessionServer::rloop() { if(!validHeader()) return; char cmd[_CMD_SIZE + 1]; cmd[_CMD_SIZE] = '\0'; if(!readSBuf(cmd, _CMD_SIZE)) return; if(strcmp(cmd, "cdr") == 0) createFolder(); else if(strcmp(cmd, "cfl") == 0) createFile(); else if(strcmp(cmd, "rdr") == 0) readFolder(); else if(strcmp(cmd, "cmd") == 0) changeModel(); else if(strcmp(cmd, "ofl") == 0) openFile(); else if(strcmp(cmd, "rfl") == 0) readFile(); else if(strcmp(cmd, "wfl") == 0) writeFile(); else if(strcmp(cmd, "skf") == 0) seekFile(); else if(strcmp(cmd, "tlf") == 0) tellFile(); else if(strcmp(cmd, "csf") == 0) closeFile(); else if(strcmp(cmd, "del") == 0) deleteItem(); else if(strcmp(cmd, "gsf") == 0) getItemSafeInfo(); // else if(strcmp(cmd, "fdk") == 0) // formatDisk(); else if(strcmp(cmd, "lgt") == 0) logout(); else if(strcmp(cmd, "aur") == 0) addUsr(); else if(strcmp(cmd, "cpd") == 0) changePsd(); else cmdError(); }
void SessionServer::rlogin() { if(!validHeader()) return; char username[_MAXUNAMESIZE]; char password[_MAXPSDSIZE]; if(!readSBuf(username, _MAXUNAMESIZE)) return; if(!readSBuf(password, _MAXPSDSIZE)) return; int rrs; uidsize_t uid = validAuth(username, password); if(uid) { rrs = 0; status = SessionServer::LOOPING; userId = uid; } else rrs = err; writeSBuf((char*) &uid, sizeof(uid)); if(rrs != 0) writeSBuf((char*) &rrs, sizeof(rrs)); }
int main(int argc, char* argv[]) { FILE *fileDump1, *fileDump2, *file8xu; //input file pointers char fileNameDump1[FILE_NAME_LENGTH], fileNameDump2[FILE_NAME_LENGTH], fileName8xu[FILE_NAME_LENGTH]; char calcType[CALCTYPE_LENGTH+1]; //5 characters and NULL int calcModel; //number of calculator (like _GetHardwareVersion) char calcModelNumber; //either '3' or '4' char calcModelType; //either 'B' or 'S' int numPages; //number of pages for the calc model int fD1, fD2, f8xu; //flags if the command line arguments were present and valid int v_major, v_minor; int count; char temp[5]; //for GetOSVersion stuff //if too few arguments or arguments (excluding calcType) are not an even count //since every switch precedes a file name if (argc <= 1 || ((argc - 2) % 2 != 0)) //subtraction is redundant { fprintf(stderr,usage); exit(EXIT_FAILURE); } //now loop through command-line arguments //printf("Parsing arguments...\n"); if (!validModel(calcType, argv[1], &calcModel)) //if model was not detected { fprintf(stderr,"%s is not a supported model.\n",calcType); exit(EXIT_FAILURE); } //check if file names available or if 8xu file specified fD1 = fD2 = f8xu = FALSE; count = 2; while (count < argc) //for (count = 2; count < argc; count += 2) //pay attention to even # of arguments { if (argv[count][0] == '-') { if ((strlen(argv[count]) == 2) && (count + 1 < argc)) { switch (argv[count][1]) { case '1': fD1 = TRUE; count++; //increment to next argument strcpy(fileNameDump1,argv[count]); break; case '2': fD2 = TRUE; count++; strcpy(fileNameDump2,argv[count]); break; case 'u': f8xu = TRUE; count++; strcpy(fileName8xu,argv[count]); break; default: fprintf(stderr,"%s: invalid switch.\n",argv[count]); break; } } else { fprintf(stderr,"%s: not enough parameters.\n",argv[count]); } } else { fprintf(stderr,"%s: unknown option.\n",argv[count]); } count++; } //fD1, fD2, and f8xu determine if there was a command-line switch available. // next, they will determine if the files were successfully opened, but not now. //if fD1 or fD2 were not specified, set the default file name //(maybe) also check to see if the correct # of files were specified // switch (calcModel) // { // case 0: //83PBE // calcModelNumber = '3'; // calcModelType = 'B'; // break; // case 1: //83PSE // calcModelNumber = '3'; // calcModelType = 'S'; // break; // case 2: //84PBE // calcModelNumber = '4'; // calcModelType = 'B'; // break; // case 3: //84PSE // calcModelNumber = '4'; // calcModelType = 'S'; // break; // default: // fprintf(stderr,"*** Fatal error! You should never get this message! O_O"); // exit(EXIT_FAILURE); // } // //Why doesn't the following compile? O_o // char ModelNumber[5] = "3344"; // char ModelType[] = "BSBS"; calcModelNumber = ModelNumber[calcModel]; calcModelType = ModelType[calcModel]; numPages = NumPagesList[calcModel]; if (!fD1) //set default file name for #1 { strcpy(fileNameDump1,"D8"); //strcat(fileNameDump1,calcModelNumber); fileNameDump1[2] = calcModelNumber; fileNameDump1[3] = '\0'; //NULL strcat(fileNameDump1,"P"); //strcat(fileNameDump1,calcModelType); fileNameDump1[4] = calcModelType; fileNameDump1[5] = '\0'; strcat(fileNameDump1,"E1.8xv"); } if (!fD2) //set default file name for #2 { strcpy(fileNameDump2,"D8"); //strcat(fileNameDump2,calcModelNumber); fileNameDump2[2] = calcModelNumber; fileNameDump2[3] = '\0'; //NULL strcat(fileNameDump2,"P"); //strcat(fileNameDump2,calcModelType); fileNameDump2[4] = calcModelType; fileNameDump2[5] = '\0'; //NULL strcat(fileNameDump2,"E2.8xv"); } fprintf(stderr,"Calculator model: %s\nDump 1: %s\n",calcTypeNames,fileNameDump1); if (calcModel == 2 || calcModel == 3) fprintf(stderr,"Dump 2: %s\n",fileNameDump2); if (f8xu) fprintf(stderr,"Upgrade file: %s\n",fileName8xu); fprintf(stderr,"\n"); //Now open files (and check if the right files exist for the right calculator) fileDump1 = fopen(fileNameDump1,"rb"); //open in reading and binary if (!fileDump1) { perror(fileNameDump1); exit(EXIT_FAILURE); } if (!validHeader(fileDump1, NONFLASH, calcModel)) { fprintf(stderr,"%s: invalid dump file.\n",fileNameDump1); exit(EXIT_FAILURE); } if (calcModel == 2 || calcModel == 3) //if 84PBE or 84PSE { fileDump2 = fopen(fileNameDump2,"rb"); if (!fileDump2) { perror(fileNameDump2); exit(EXIT_FAILURE); } if (!validHeader(fileDump2, NONFLASH, calcModel)) { fprintf(stderr,"%s: invalid dump file.\n",fileNameDump2); exit(EXIT_FAILURE); } } if (f8xu) //OS upgrade file { file8xu = fopen(fileName8xu,"rb"); if (!file8xu) { perror(fileName8xu); exit(EXIT_FAILURE); } if (!validHeader(file8xu, FLASH, calcModel)) { fprintf(stderr,"%s: invalid OS file.\n",fileName8xu); exit(EXIT_FAILURE); } } //and now the ROM file itself, but first initialize the name strcpy(fileNameRom,calcType); if (f8xu) { GetOSVersion(file8xu, &v_major, &v_minor); //printf("%i\n",v_minor); strcat(fileNameRom,"_v"); temp[0] = v_major + '0'; temp[1] = ((v_minor - (v_minor % 10))/10) + '0'; temp[2] = (v_minor % 10) + '0'; temp[3] = '\0'; strcat(fileNameRom,temp); } strcat(fileNameRom,".rom"); romFile = fopen(fileNameRom,"w+b"); //I suppose r+ could work to one's advantage, but it doesn't compile correctly... if (!romFile) { perror(fileNameRom); exit(EXIT_FAILURE); } romCreated = FALSE; ExitHandlerPtr = ExitHandler; atexit(ExitHandlerPtr); //set the "error handler" //Let's make the ROM file! if (!makeBlankRom(/*romFile,*/ numPages)) { fprintf(stderr,"%s: unable to make blank ROM file.\n",fileNameRom); exit(EXIT_FAILURE); } //Page [137]F if (!writePage(/*romFile,*/ fileDump1, numPages - 1)) { //perror(fileNameDump2); fprintf(stderr,"%s: unable to write %s to ROM file.\n",fileNameRom, fileNameDump1); exit(EXIT_FAILURE); } //Page [26]F if (calcModel == 2 || calcModel == 3) { if (!writePage(/*romFile,*/ fileDump2, numPages - 1 - 0x10)) { fprintf(stderr,"%s: unable to write %s to ROM file.\n",fileNameRom, fileNameDump2); exit(EXIT_FAILURE); } } if (f8xu) { if (!write8xu(/*romFile,*/ file8xu, calcModel)) { fprintf(stderr,"%s: unable to write %s to ROM file.\n",fileNameRom, fileName8xu); exit(EXIT_FAILURE); } //validate the OS fseek(romFile,0x0056l,SEEK_SET); fwrite("\x5A\xA5",1,2,romFile); fseek(romFile,(((long)(numPages - 2)) * 0x4000) + 0x1FE0, SEEK_SET); fwrite("\0",1,1,romFile); } romCreated = TRUE; //Success! //WE ARE DONE! Close all files //the following code is supposed to be in a function that is hooked and called whenever it exit()s, but.... fclose(fileDump1); if (fD2) fclose(fileDump2); if (f8xu) fclose(file8xu); //fclose(romFile); // if (!romCreated) // { // remove(fileNameRom); // fprintf(stderr,"\n%s was not created.\n",fileNameRom); // return EXIT_FAILURE; // } // //else // fprintf(stderr,"\n%s was successfully created.\n",fileNameRom); return (romCreated ? EXIT_SUCCESS : EXIT_FAILURE); }