int main(int argc, char **argv) { double link_len; u_int data_width; double Pdynamic, Pleakage, Ptotal; double freq; double load; double link_area; #if ( PARM(TECH_POINT) <= 90 ) if (argc < 3) { fprintf(stderr, "orion_link: [length] [load]\n"); exit(1); } /* read arguments */ /* link length is also the core size*/ link_len = atof(argv[1]); //unit micro-meter link_len = link_len * 1e-6; //unit meter load = atof(argv[2]); freq = PARM(Freq); data_width = PARM(flit_width); Pdynamic = 0.5 * load * LinkDynamicEnergyPerBitPerMeter(link_len, Vdd) * freq * link_len * (double)data_width; Pleakage = LinkLeakagePowerPerMeter(link_len, Vdd) * link_len * data_width; Ptotal = (Pdynamic + Pleakage) * PARM(in_port); link_area = LinkArea(link_len, data_width) * PARM(in_port); fprintf(stdout, "Link power is %g\n", Ptotal); fprintf(stdout, "Link area is %g\n", link_area); #else fprintf(stderr, "Link power and area are only supported for 90nm, 65nm, 45nm and 32nm\n"); #endif return 0; }
void DoMsgBase() { FILE *pAreas; char *sAreas, *Name; int arearec; int Del = 0; sAreas = calloc(PATH_MAX, sizeof(char)); Name = calloc(PATH_MAX, sizeof(char )); IsDoing("Msg Maintenance"); if (do_area) Syslog('+', "Processing message area %ld", do_area); else Syslog('+', "Processing all message areas"); if (do_kill) { Syslog('-', " Total Max. Days/Killed Max. Nr/Killed Area name"); Syslog('-', "------ ------ ------ ------ ------ ----------------------------------"); } snprintf(sAreas, PATH_MAX, "%s/etc/mareas.data", getenv("MBSE_ROOT")); if(( pAreas = fopen (sAreas, "r")) == NULL) { WriteError("$Can't open %s", sAreas); die(MBERR_GENERAL); } fread(&msgshdr, sizeof(msgshdr), 1, pAreas); if (do_area) { if (fseek(pAreas, (msgshdr.recsize + msgshdr.syssize) * (do_area - 1), SEEK_CUR) == 0) { fread(&msgs, msgshdr.recsize, 1, pAreas); if (msgs.Active) { if (enoughspace(CFG.freespace) == 0) die(MBERR_DISK_FULL); if (!do_quiet) { mbse_colour(CYAN, BLACK); printf("\r%5d .. %-40s", do_area, msgs.Name); fflush(stdout); } are_tot++; mkdirs(msgs.Base, 0770); if (do_kill) KillArea(msgs.Base, msgs.Name, msgs.DaysOld, msgs.MaxMsgs, do_area); if (do_pack || msg_del) PackArea(msgs.Base, do_area); if (do_link) LinkArea(msgs.Base, do_area); if (processed) are_proc++; } } } else { arearec = 0; while (fread(&msgs, msgshdr.recsize, 1, pAreas) == 1) { fseek(pAreas, msgshdr.syssize, SEEK_CUR); arearec++; if (msgs.Active) { if (enoughspace(CFG.freespace) == 0) die(MBERR_DISK_FULL); Nopper(); if (!do_quiet) { mbse_colour(CYAN, BLACK); printf("\r%5d .. %-40s", arearec, msgs.Name); fflush(stdout); } are_tot++; mkdirs(msgs.Base, 0770); processed = FALSE; if (do_kill) KillArea(msgs.Base, msgs.Name, msgs.DaysOld, msgs.MaxMsgs, arearec); if (do_pack || (Del != msg_del)) { PackArea(msgs.Base, arearec); } Del = msg_del; if (do_link) LinkArea(msgs.Base, arearec); if (processed) are_proc++; } } } fclose(pAreas); if (!do_area) { snprintf(sAreas, PATH_MAX, "%s/etc/users.data", getenv("MBSE_ROOT")); if ((pAreas = fopen (sAreas, "r")) == NULL) { WriteError("$Can't open %s", sAreas); die(MBERR_GENERAL); } fread(&usrconfighdr, sizeof(usrconfighdr), 1, pAreas); while (fread(&usrconfig, usrconfighdr.recsize, 1, pAreas) == 1) { if (usrconfig.Email && strlen(usrconfig.Name)) { Nopper(); snprintf(Name, PATH_MAX, "User %s email area: mailbox", usrconfig.Name); if (!do_quiet) { mbse_colour(CYAN, BLACK); printf("\r .. %-40s", Name); fflush(stdout); } snprintf(sAreas, PATH_MAX, "%s/%s/mailbox", CFG.bbs_usersdir, usrconfig.Name); are_tot++; processed = FALSE; if (do_kill) KillArea(sAreas, Name, 0, CFG.defmsgs, 0); if (do_pack || (Del != msg_del)) { PackArea(sAreas, 0); } Del = msg_del; if (do_link) LinkArea(sAreas, 0); if (processed) are_proc++; snprintf(sAreas, PATH_MAX, "%s/%s/archive", CFG.bbs_usersdir, usrconfig.Name); snprintf(Name, 80, "User %s email area: archive", usrconfig.Name); are_tot++; processed = FALSE; if (do_kill) KillArea(sAreas, Name, 0, CFG.defmsgs, 0); if (do_pack || (Del != msg_del)) PackArea(sAreas, 0); Del = msg_del; if (do_link) LinkArea(sAreas, 0); if (processed) are_proc++; snprintf(sAreas, PATH_MAX, "%s/%s/trash", CFG.bbs_usersdir, usrconfig.Name); snprintf(Name, 80, "User %s email area: trash", usrconfig.Name); are_tot++; processed = FALSE; if (do_kill) KillArea(sAreas, Name, CFG.defdays, CFG.defmsgs, 0); if (do_pack || (Del != msg_del)) PackArea(sAreas, 0); Del = msg_del; if (do_link) LinkArea(sAreas, 0); if (processed) are_proc++; } } fclose(pAreas); } if (do_link) RemoveSema((char *)"msglink"); free(sAreas); free(Name); die(MBERR_OK); }