void nlp::Plsa::save_args(std::string &path) { std::string term_path = path + "/term_probs"; std::string doc_path = path + "/doc_probs"; std::ofstream term_out(term_path.c_str()); std::ofstream doc_out(doc_path.c_str()); for (int i = 0; i < _terms_nums; i++) { term_out<<i<<" "; for (int k = 0; k < _topics_nums; k++) { term_out<<_term_probs[i][k]<<" "; } term_out<<std::endl; } for (int i = 0; i < _docs_nums; i++) { doc_out<<i<<" "; for (int k = 0; k < _topics_nums; k++) { doc_out<<_doc_probs[i][k]<<" "; } doc_out<<std::endl; } term_out.close(); doc_out.close(); }
void term_room(int n) { char cmd[16]; if (n < 0) sprintf(cmd, "\33[%dM", -n); if (n > 0) sprintf(cmd, "\33[%dL", n); if (n) term_out(cmd); }
void DIFF_OUT(std::ostringstream & buf, trmclr::Style color) { if (term_out()) { std::cout << color << buf.str() << '\n' << trmclr::normal; } else { std::cout << buf.str() << '\n'; } }
void DIFF_OUT(const char * buf, trmclr::Style color) { if (term_out()) { std::cout << color << buf << '\n' << trmclr::normal; } else { std::cout << buf << '\n'; } }
void term_pos(int r, int c) { char buf[32] = "\r"; if (c < 0) c = 0; if (c >= xcols) c = cols - 1; if (r < 0) sprintf(buf, "\r\33[%d%c", abs(c), c > 0 ? 'C' : 'D'); else sprintf(buf, "\33[%d;%dH", r + 1, c + 1); term_out(buf); }
void jump(unsigned short addr) { if (swtpc) { pc = addr; return; } else { switch (addr) { /* Too many programs access ACIA directly */ #if 0 case 0xF9CF: case 0xF9DC: /* Output a character */ { term_out(acca); /* putchar(acca); fflush(stdout); */ c_flag = 0; /* Carry is error status */ break; } #endif case 0xFA8B: /* Input a character */ { acca = term_in(); if (!mem[0xFF53]) { /* Echo */ term_out(acca); /* putchar(c); fflush(stdout); */ } else { mem[0xFF53] = 0; } c_flag = 0; /* No error */ break; } case 0xE800: /* OSLOAD (no modified parms) */ { printf("\nOSLOAD...\n"); getsect(0, 0x0020, 23, 128); getsect(0, 0x0020 + 0x0080, 24, 128); pc = 0x0020; sp = 0x00FF; return; } case 0xE822: /* FDINIT (no modified parms) */ { c_flag = 0; break; } #if 0 case 0xF853: /* CHKERR */ { break; } case 0xE85A: /* PRNTER */ { break; } #endif case 0xE869: /* READSC (read full sectors) */ { mem[LSCTLN] = 128; } case 0xE86D: /* READPS (read partial sectors) (FDSTAT, carry, sides) */ { int x; int n = mem[CURDRV]; int first = (mem[STRSCT] << 8) + mem[STRSCT + 1]; int num = (mem[NUMSCT] << 8) + mem[NUMSCT + 1]; int addr = (mem[CURADR] << 8) + mem[CURADR + 1]; int last = mem[LSCTLN]; if (trace_disk) printf("Read sectors: drive=%d, first=%d, number=%d, addr=%x, size of last=%d\n", n, first, num, addr, last); if (check_drive(n)) break; for (x = 0; x != num; ++x) { if (check_sect(n, first + x)) goto oops; getsect(n, addr + 128 * x, first + x, ((x + 1 == num) ? mem[LSCTLN] : 128)); } mem[FDSTAT] = ER_NON; if (drive[n].tracks == 77) mem[SIDES] = 0x80; else mem[SIDES] = 0; c_flag = 0; oops: break; } case 0xE86F: /* RDCRC */ { if (trace_disk) printf("RDCRC\n"); int x; int n = mem[CURDRV]; int first = (mem[STRSCT] << 8) + mem[STRSCT + 1]; int num = (mem[NUMSCT] << 8) + mem[NUMSCT + 1]; int addr = (mem[CURADR] << 8) + mem[CURADR + 1]; int last = mem[LSCTLN]; if (trace_disk) printf("RDCRC: drive=%d, first=%d, number=%d, addr=%x, size of last=%d\n", n, first, num, addr, last); if (check_drive(n)) break; for (x = 0; x != num; ++x) { if (check_sect(n, first + x)) goto oops; } mem[FDSTAT] = ER_NON; if (drive[n].tracks == 77) mem[SIDES] = 0x80; else mem[SIDES] = 0; c_flag = 0; break; } case 0xE875: /* RESTOR */ { int n = mem[CURDRV]; if (trace_disk) printf("RESTOR\n"); if (check_drive(n)) break; mem[FDSTAT] = ER_NON; if (drive[n].tracks == 77) mem[SIDES] = 0x80; else mem[SIDES] = 0; c_flag = 0; break; } case 0xE878: /* SEEK */ { int n = mem[CURDRV]; int first = (mem[STRSCT] << 8) + mem[STRSCT + 1]; if (trace_disk) printf("SEEK\n"); if (check_drive(n)) break; if (check_sect(n, first)) break; if (drive[n].tracks == 77) mem[SIDES] = 0x80; else mem[SIDES] = 0; c_flag = 0; break; } case 0xE872: /* RWTEST */ { if (trace_disk) printf("RWTEST\n"); } case 0xE87B: /* WRTEST */ { unsigned char buf[128]; int x; int n = mem[CURDRV]; int first = (mem[STRSCT] << 8) + mem[STRSCT + 1]; int num = (mem[NUMSCT] << 8) + mem[NUMSCT + 1]; int addr = (mem[CURADR] << 8) + mem[CURADR + 1]; int last = mem[LSCTLN]; if (trace_disk) printf("WRTEST\n"); if (check_drive(n)) break; for (x = 0; x != 128; x += 2) { buf[x] = mem[addr]; buf[x + 1] = mem[addr + 1]; } for(x=0; x != num; ++x) { if (check_sect(n, first + x)) goto oops; if (trace_disk) printf("Wrtest sector %d drive %d\n", first + x, n); fseek(drive[n].f, (first + x) * 128, SEEK_SET); fwrite(buf, 128, 1, drive[n].f); fflush(drive[n].f); } c_flag = 0; if (drive[n].tracks == 77) mem[SIDES] = 0x80; else mem[SIDES] = 0; mem[FDSTAT] = ER_NON; break; } case 0xE87E: /* WRDDAM */ { int n = mem[CURDRV]; printf("\r\nFloppy error: we do not support WRDDAM\n"); c_flag = 1; if (drive[n].tracks == 77) mem[SIDES] = 0x80; else mem[SIDES] = 0; mem[FDSTAT] = ER_WRT; break; } case 0xE884: /* WRITSC */ { if (trace_disk) printf("WRITSC\n"); } case 0xE881: /* WRVERF */ { int x; int n = mem[CURDRV]; int first = (mem[STRSCT] << 8) + mem[STRSCT + 1]; int num = (mem[NUMSCT] << 8) + mem[NUMSCT + 1]; int addr = (mem[CURADR] << 8) + mem[CURADR + 1]; int last = mem[LSCTLN]; if (trace_disk) printf("WRVERF: drive=%d, first=%d, number=%d, addr=%x, size of last=%d\n", n, first, num, addr, last); if (check_drive(n)) break; for(x=0; x != num; ++x) { if (check_sect(n, first + x)) goto oops; putsect(n, addr + 128 * x, first + x, 128); } if (drive[n].tracks == 77) mem[SIDES] = 0x80; else mem[SIDES] = 0; mem[FDSTAT] = ER_NON; c_flag = 0; break; } case 0xE887: /* CLOCK */ { printf("Floppy: Someone called CLOCK?\n"); c_flag = 0; break; } case 0xEBC0: /* LPINIT */ { if (trace_disk) printf("LPINIT\n"); c_flag = 0; break; } case 0xEBCC: /* LIST */ { if (trace_disk) printf("LIST\n"); term_out(acca); /* putchar(acca); fflush(stdout); */ c_flag = 0; break; } case 0xEBE4: /* LDATA */ { if (trace_disk)printf("LDATA\n"); while (mem[ix] != 4) { term_out(mem[ix]); /* putchar(mem[ix]); */ ++ix; } term_out('\r'); term_out('\n'); /* printf("\n"); */ c_flag = 0; break; } case 0xEBF2: /* LDATA1 */ { if (trace_disk) printf("LDATA1\n"); while (mem[ix] != 4) { /* putchar(mem[ix]); */ term_out(mem[ix]); ++ix; } /* fflush(stdout); */ c_flag = 0; break; } default: { pc = addr; return; } } simulated(addr); addr = pull2(); jump(addr); } }
void mwrite(unsigned short addr, unsigned char data) { if (swtpc) { /* Do not write to ROM */ if (addr >= 0xe000 && addr < 0xe400) return; mem[addr] = data; switch (addr) { case 0x8018: { /* Command */ switch (data & 0xF0) { case 0x00: { /* Restore */ /* printf("FD1771 restore!\n"); */ cur_track = 0; cur_sect = 1; cur_dir = 1; if (drive[cur_drive].f) cur_status = 0x00; else cur_status = 0xD0; break; } case 0x10: { /* Seek */ /* printf("FD1771 seek to track %d\n", cur_data); */ cur_track = cur_data; if (drive[cur_drive].f) cur_status = 0x00; else cur_status = 0xD0; break; } case 0x30: { /* Step */ printf("FD1771 tried to step\n"); if ((int)cur_track + cur_dir != -1) cur_track += cur_dir; cur_state = 0x00; if (drive[cur_drive].f) cur_status = 0x00; else cur_status = 0xD0; break; } case 0x50: { /* Step in */ printf("FD1771 tried to step in\n"); ++cur_track; cur_dir = 1; if (drive[cur_drive].f) cur_status = 0x00; else cur_status = 0xD0; break; } case 0x70: { /* Step out */ printf("FD1771 tried to step out\n"); if (cur_track) --cur_track; cur_dir = -1; if (drive[cur_drive].f) cur_status = 0x00; else cur_status = 0xD0; break; } case 0x80: { /* Read single */ /* printf("FD1771 read single\n"); */ if (drive[cur_drive].f) { getsect1(cur_drive, cur_buf, (cur_track * drive[cur_drive].sects + (cur_sect - 1)) * drive[cur_drive].bytes, drive[cur_drive].bytes); cur_state = 1; cur_count = 0; cur_status = 0x03; /* DRQ + BUSY */ count1 = 100; } else { cur_status = 0x90; } break; } case 0x90: { /* Read multiple */ /* printf("FD1771 read multiple\n"); */ if (drive[cur_drive].f) { getsect1(cur_drive, cur_buf, (cur_track * drive[cur_drive].sects + (cur_sect - 1)) * drive[cur_drive].bytes, drive[cur_drive].bytes); cur_state = 2; cur_count = 0; cur_status = 0x03; /* DRQ + BUSY */ } else { cur_status = 0x90; } break; } case 0xA0: { /* Write single */ if (drive[cur_drive].f) { cur_state = 3; cur_count = 0; cur_status = 0x03; /* DQA + BUSY */ } else { cur_status = 0x90; } /* printf("FD1771 write single\n"); */ break; } case 0xB0: { /* Write multiple */ printf("FD1771 tried to write multiple\n"); break; } case 0xC0: { /* Read track */ printf("FD1771 tried to read track\n"); break; } case 0xF0: { /* Write track */ printf("FD1771 tried to write track\n"); break; } case 0xD0: { /* Force interrupt */ break; } default: { printf("Unknown FD1771 command %x\n", data); exit(-1); } } break; } case 0x8014: { /* Set drive */ cur_drive = (data & 3); /* printf("Set drive to %x\n", data); */ break; } case 0x8019: { /* Track */ /* printf("Set track = %d\n", data); */ cur_track = data; break; } case 0x801a: { /* Sector */ /* printf("Set sector = %d\n", data); */ if (!data) data = 1; cur_sect = data; break; } case 0x801b: { /* Data */ cur_data = data; if (cur_state == 3) { /* printf("Write data %d\n", cur_count); */ cur_buf[cur_count++] = data; if (cur_count == drive[cur_drive].bytes) { printf("Write done.\n"); cur_state = 0; cur_status = 0; putsect1(cur_drive, cur_buf, (cur_track * drive[cur_drive].sects + (cur_sect - 1)) * drive[cur_drive].bytes, drive[cur_drive].bytes); } } break; } case 0x8005: { /* Write to serial port */ putchar(data); fflush(stdout); break; } } } else { /* Do not write to ROM */ if (addr >= 0xE800 && addr < 0xEC00 || addr >= 0xF000 && addr < 0xFC00 || addr >= 0xFCFC && addr < 0xFD00) return; mem[addr] = data; switch (addr) { case 0xFCF5: { /* Write to serial port */ term_out(data); /* putchar(data); fflush(stdout); */ } } } }
void term_kill(void) { term_out("\33[K"); }
void term_chr(int ch) { char s[4] = {ch}; term_out(s); }
void term_str(char *s) { term_out(s); }