int main( ) { SharedMemory * shm = new SharedMemory(PATH, SHM_PLAT, sizeof (struct plate), "shmstat"); shm->get(); struct plate * plate = (struct plate*) shm->attach(); std::stringstream status; Semaphore * mutex = new Semaphore(PATH, SEM_MUTEX, "shmstat"); mutex->get(); mutex->wait(); status << "RobotsA: " << plate->activeRobotsA << std::endl; status << "RobotsB: " << plate->activeRobotsB << std::endl; status << "Dispositivos: " << plate->storedAmount << std::endl; for (int i = 0; i < ROBOT_AMOUNT; i++) { status << "A" << i << ": " << msgRobot( plate->statusA[i] ) << ", " << msgWait( plate->statusE[i] ) << std::endl; status << "B" << i << ": " << msgRobot( plate->statusB[i] ) << std::endl; } for (int i = 0; i < PLAT_SIZE; i++) { status << i << ": " << msgSlot(plate->slots[i].state) << ", " << msgDisp(plate->slots[i].dispositive.status) << std::endl; } mutex->post(); write(fileno(stdout),status.str().c_str(),status.str().size()); shm->dettach(); }
// -------------------------------------------------------------------------- // resizemsgfile(): Resizes message file. void MessageDatC::Resize(long NewSizeInBytes) { Lock(); Message *Msg = new Message; if (Msg) { char MsgFilePath2[128]; FILE *oldmsg; FILE *newmsg; const char *msgTmp = getcfgmsg(219); sprintf(MsgFilePath2, sbs, cfg.msgpath, msgTmp); if (MsgDat) { fclose(MsgDat); MsgDat = NULL; } if (!citOpen(MsgFilePath2, CO_WPB, &MsgDat)) { illegal(getmsg(8), getcfgmsg(192)); } InitializeMessageFile(NewSizeInBytes); catLoc = 0l; fclose(MsgDat); MsgDat = NULL; // open first message file if (!citOpen(MsgFilePath, CO_RPB, &oldmsg)) { msgDisp(getmsg(78), MsgFilePath); doccr(); delete Msg; Unlock(); return; } // open temp message file if (!citOpen(MsgFilePath2, CO_RPB, &newmsg)) { msgDisp(getmsg(78), MsgFilePath2); doccr(); fclose(oldmsg); delete Msg; Unlock(); return; } for (m_index ID = OldestMessageInTable(); ID <= NewestMessage(); ID++) { MsgDat = oldmsg; if (LoadAll(ID, Msg) != RMS_OK) { continue; } const m_index here = atol(Msg->GetLocalID()); if (here != ID) { continue; } msgDisp(getcfgmsg(193), cfg.Lmsg_nym, ltoac(here)); cPrintfDOS(br); MsgDat = newmsg; ResizeStore(Msg); } doccr(); doccr(); fclose(oldmsg); fclose(newmsg); MsgDat = NULL; int result = unlink(MsgFilePath); if (result == -1) { msgDisp(getcfgmsg(187), msgDat); doccr(); } result = rename(MsgFilePath2, MsgFilePath); if (result == -1) { msgDisp(getcfgmsg(188), msgTmp); doccr(); } delete Msg; if (!OpenMessageFile(cfg.msgpath)) { illegal(getmsg(78), MsgFilePath); } } else { crashout(getmsg(188), getcfgmsg(172)); } #ifdef WINCIT msgDisp(NULL); // msgCaption(ns); #endif Unlock(); }
void resizelogfile(void) { #ifdef WINCIT LogEntry *CurrentUser = new LogEntry(cfg.maxrooms, cfg.maxgroups, cfg.maxjumpback); l_slot *LogOrder = new l_slot[cfg.MAXLOGTAB]; if (!LogOrder || !CurrentUser) { illegal("no memory"); } for (l_slot slot = 0; slot < cfg.MAXLOGTAB; slot++) { LogOrder[slot] = slot; } LogTab.Sort(&LogOrder); #endif chdir(cfg.homepath); // get rid of any log?.tmp files unlink(getcfgmsg(156)); unlink(getcfgmsg(157)); unlink(getcfgmsg(158)); unlink(getcfgmsg(159)); unlink(getcfgmsg(160)); unlink(getcfgmsg(161)); // and the LE*.TMP files changedir(cfg.logextdir); ambigUnlink(getcfgmsg(215)); changedir(cfg.homepath); // create new log?.tmp files with new size l_slot i = cfg.MAXLOGTAB; cfg.MAXLOGTAB = newmaxlogtab; zapLogFile(TRUE, TRUE); cfg.MAXLOGTAB = i; for (i = 0; (i < cfg.MAXLOGTAB) && (i < newmaxlogtab); i++) { msgDisp(getcfgmsg(183), ltoac(LTab(i).GetLogIndex())); #ifndef WINCIT cPrintf(getcfgmsg(282), br); #endif // Load from old files (the .DAT ones) CurrentUser->LogEntry1::ResetFileName(); CurrentUser->LogEntry2::ResetFileName(); CurrentUser->LogEntry3::ResetFileName(); CurrentUser->LogEntry4::ResetFileName(); CurrentUser->LogEntry5::ResetFileName(); CurrentUser->LogEntry6::ResetFileName(); CurrentUser->LogExtensions::ResetFileExtension(); if (!CurrentUser->Load(LTab(i).GetLogIndex())) { crashout(getcfgmsg(281), getcfgmsg(155)); } // And save to the new files (the .TMP ones) CurrentUser->LogEntry1::SetFileName(getcfgmsg(156)); CurrentUser->LogEntry2::SetFileName(getcfgmsg(157)); CurrentUser->LogEntry3::SetFileName(getcfgmsg(158)); CurrentUser->LogEntry4::SetFileName(getcfgmsg(159)); CurrentUser->LogEntry5::SetFileName(getcfgmsg(160)); CurrentUser->LogEntry6::SetFileName(getcfgmsg(161)); CurrentUser->LogExtensions::SetFileExtension(getcfgmsg(230)); if (!CurrentUser->Save(i, CurrentUser->GetMessageRoom())) { crashout(getcfgmsg(283), getcfgmsg(155)); } } doccr(); doccr(); // Back to using the .DAT files CurrentUser->LogEntry1::ResetFileName(); CurrentUser->LogEntry2::ResetFileName(); CurrentUser->LogEntry3::ResetFileName(); CurrentUser->LogEntry4::ResetFileName(); CurrentUser->LogEntry5::ResetFileName(); CurrentUser->LogEntry6::ResetFileName(); CurrentUser->LogExtensions::ResetFileExtension(); // clear RAM buffer out CurrentUser->Clear(); // Then clean up - .TMP to .DAT unlink(logDat); unlink(log2Dat); unlink(log3Dat); unlink(log4Dat); unlink(log5Dat); unlink(log6Dat); rename(getcfgmsg(156), logDat); rename(getcfgmsg(157), log2Dat); rename(getcfgmsg(158), log3Dat); rename(getcfgmsg(159), log4Dat); rename(getcfgmsg(160), log5Dat); rename(getcfgmsg(161), log6Dat); changedir(cfg.logextdir); ambigUnlink(getcfgmsg(211)); FindFileC FF; if (FF.FindFirst(getcfgmsg(215))) { do { if (FF.IsNormalFile()) { label newname; CopyStringToBuffer(newname, FF.GetShortName()); strcpy(strchr(newname, '.'), getcfgmsg(285)); rename(FF.GetShortName(), newname); } } while (FF.FindNext()); } changedir(cfg.homepath); #ifdef WINCIT msgDisp(NULL); // msgCaption(ns); delete CurrentUser; delete [] LogOrder; #endif }
void resizegrpfile(void) { int i; const char *File2; FILE *oldfile; FILE *newfile; #ifdef WINCIT LogEntry *CurrentUser = new LogEntry(cfg.maxrooms, cfg.maxgroups, cfg.maxjumpback); if (!CurrentUser) { illegal("no memory."); } #endif /////////////////////////////////////// msgDisp(getcfgmsg(191), cfg.Ugroups_nym); doccr(); chdir(cfg.homepath); File2 = getcfgmsg(217); msgDisp(getcfgmsg(185), grpDat); cPrintfDOS(br); unlink(File2); GroupData.Resize(newmaxgroups); zapGrpFile(File2, TRUE); Bool Success = FALSE; if ((oldfile = fopen(grpDat, FO_RB)) != NULL) { if ((newfile = fopen(File2, FO_RPB)) != NULL) { fseek(oldfile, sizeof(long), SEEK_SET); fseek(newfile, sizeof(long), SEEK_SET); for (g_slot GroupSlot = 0; (GroupSlot < cfg.maxgroups) && (GroupSlot < newmaxgroups); GroupSlot++) { GroupEntry TempEntry; if (!TempEntry.Load(oldfile)) { crashout(getcfgmsg(281), getcfgmsg(240)); } if (!TempEntry.Save(newfile)) { crashout(getcfgmsg(283), getcfgmsg(240)); } } Success = TRUE; fclose(newfile); } fclose(oldfile); } if (!Success) { crashout(getcfgmsg(218), grpDat); } // log2.dat Success = FALSE; File2 = getcfgmsg(157); msgDisp(getcfgmsg(185), log2Dat); cPrintfDOS(br); unlink(File2); if ((oldfile = fopen(log2Dat, FO_RB)) != NULL) { if ((newfile = fopen(File2, FO_WB)) != NULL) { for (l_index LogIndex = 0; LogIndex < cfg.MAXLOGTAB; LogIndex++) { char ch; for (i = 0; i < cfg.maxgroups / 8 && i < newmaxgroups / 8; i++) { fread(&ch, sizeof(ch), 1, oldfile); fwrite(&ch, sizeof(ch), 1, newfile); } ch = 0; for (; i < newmaxgroups / 8; i++) { fwrite(&ch, sizeof(ch), 1, newfile); } for (; i < cfg.maxgroups / 8; i++) { fread(&ch, sizeof(ch), 1, oldfile); } } Success = TRUE; fclose(newfile); } fclose(oldfile); } if (!Success) { crashout(getcfgmsg(218), log2Dat); } unlink(grpDat); rename(getcfgmsg(217), grpDat); unlink(log2Dat); rename(File2, log2Dat); cfg.maxgroups = newmaxgroups; CurrentUser->LogEntry2::Resize(cfg.maxgroups); if (!GroupData.IsValid() || !CurrentUser->IsValid()) { crashout(getcfgmsg(107)); } doccr(); msgDisp(getcfgmsg(190)); doccr(); doccr(); #ifdef WINCIT msgDisp(NULL); // msgCaption(ns); delete CurrentUser; #endif }
void resizehallfile(void) { long l; const char *File2; char ch; FILE *oldfile; FILE *newfile; HallEntry1 tmpHall; msgDisp(getcfgmsg(184), cfg.Lhalls_nym); doccr(); chdir(cfg.homepath); // do hall.dat File2 = getcfgmsg(216); msgDisp(getcfgmsg(185), hallDat); cPrintfDOS(br); if ((newfile = fopen(File2, FO_WB)) == NULL) { illegal(getmsg(8), File2); } if ((oldfile = fopen(hallDat, FO_RB)) == NULL) { illegal(getmsg(83), hallDat); } fread(&l, sizeof(l), 1, oldfile); fwrite(&l, sizeof(l), 1, newfile); h_slot i; for (i = 0; i < cfg.maxhalls && i < newmaxhalls; i++) { if (!tmpHall.Load(i, oldfile)) { crashout(getcfgmsg(281), getcfgmsg(236)); } if (!tmpHall.Save(i, newfile)) { crashout(getcfgmsg(283), getcfgmsg(236)); } } tmpHall.Clear(); for (; i < newmaxhalls; i++) { if (!tmpHall.Save(i, newfile)) { crashout(getcfgmsg(283), getcfgmsg(236)); } } fclose(newfile); fclose(oldfile); int result = unlink(hallDat); if (result == -1) { msgDisp(getcfgmsg(187), hallDat); doccr(); } result = rename(File2, hallDat); if (result == -1) { msgDisp(getcfgmsg(188), File2); doccr(); } // hall2.dat File2 = getcfgmsg(210); msgDisp(getcfgmsg(185), hall2Dat); cPrintfDOS(br); if ((newfile = fopen(File2, FO_WB)) == NULL) { illegal(getmsg(8), File2); } if ((oldfile = fopen(hall2Dat, FO_RB)) == NULL) { illegal(getmsg(83), hall2Dat); } // inhall h_slot q; for (q = 0; q < cfg.maxhalls && q < newmaxhalls; q++) { for (i = 0; i < cfg.maxrooms / 8; i++) { fread(&ch, sizeof(ch), 1, oldfile); fwrite(&ch, sizeof(ch), 1, newfile); } } ch = 0; for (; q < newmaxhalls; q++) { for (i = 0; i < cfg.maxrooms / 8; i++) { fwrite(&ch, sizeof(ch), 1, newfile); } } for (; q < cfg.maxhalls; q++) { for (i = 0; i < cfg.maxrooms / 8; i++) { fread(&ch, sizeof(ch), 1, oldfile); } } // window for (q = 0; q < cfg.maxhalls && q < newmaxhalls; q++) { for (i = 0; i < cfg.maxrooms / 8; i++) { fread(&ch, sizeof(ch), 1, oldfile); fwrite(&ch, sizeof(ch), 1, newfile); } } ch = 0; for (; q < newmaxhalls; q++) { for (i = 0; i < cfg.maxrooms / 8; i++) { fwrite(&ch, sizeof(ch), 1, newfile); } } for (; q < cfg.maxhalls; q++) { for (i = 0; i < cfg.maxrooms / 8; i++) { fread(&ch, sizeof(ch), 1, oldfile); } } fclose(newfile); fclose(oldfile); result = unlink(hall2Dat); if (result == -1) { msgDisp(getcfgmsg(187), hall2Dat); doccr(); } result = rename(File2, hall2Dat); if (result == -1) { msgDisp(getcfgmsg(188), File2); doccr(); } cfg.maxhalls = newmaxhalls; HallData.Resize(cfg.maxhalls, cfg.maxrooms); if (!HallData.IsValid()) { crashout(getcfgmsg(107)); } doccr(); msgDisp(getcfgmsg(190)); doccr(); doccr(); #ifdef WINCIT msgDisp(NULL); // msgCaption(ns); #endif }