//======================================================== //显示汉字 //======================================================== void putstring(char a,char b,char *n) //汉字 { idata char i,*p; printu(n); while(*n!=0) { p=q+12*(*n-32); setpage(a+1); setaddr(b); for(i=0;i<6;i++) {x(*p); p++;} setpage(a); setaddr(b); for(i=6;i<12;i++) {x(*p); p++;} b = b+7; if((b + 7) > 127) { b = 0; if(a < 2 ) break; else a -= 2; } n++; } }
int do_delete(off_t n, PTR start) { if(n + start > maxpos) { beep(); return 1; } if((undo_count = alloc_buf(n, &undo_buf)) == 0L) { return 1; } yanked = alloc_buf(n, &yank_buf); edits = U_DELETE; undo_start = start; memcpy(undo_buf, start, undo_count); memcpy(yank_buf, start, undo_count); memmove(start, start + undo_count, maxpos - (start + undo_count)); filesize -= undo_count; maxpos -= undo_count; if(start == maxpos && start > mem) { start--; cur_back(); } setpage(start); repaint(); return 0; }
int addfile(char *fname) { int fd; off_t oldsize; if(stat(fname, &buf)) { sysemsg(fname); return 1; } if((fd = open(fname, O_RDONLY)) == -1) { sysemsg(fname); return 1; } oldsize = filesize; if(enlarge(buf.st_size)) { return 1; } if(read(fd, mem + filesize, buf.st_size) == -1) { sysemsg(fname); return 1; } filesize += buf.st_size; maxpos = mem + filesize; close(fd); setpage(mem + oldsize); return 0; }
void fillpage(unsigned page) { register unsigned *x=(void*)0xa000; unsigned i; setpage(page); for(i=0;i<4096;i++) x[i]=i*i+0x4221+i; }
int dlgscr_cmd(int msg, MENUID id, long param) { switch(msg) { case DLGMSG_CREATE: dlginit(); break; case DLGMSG_COMMAND: switch(id) { case DID_OK: dlgupdate(); menubase_close(); break; case DID_CANCEL: menubase_close(); break; case DID_TAB: setpage(menudlg_getval(DID_TAB)); break; case DID_LCD: menudlg_setenable(DID_LCDX, menudlg_getval(DID_LCD)); break; case DID_SKIPLIGHT: setintstr(DID_LIGHTSTR, menudlg_getval(DID_SKIPLIGHT)); break; case DID_TRAMWAIT: setintstr(DID_TRAMSTR, menudlg_getval(DID_TRAMWAIT)); break; case DID_VRAMWAIT: setintstr(DID_VRAMSTR, menudlg_getval(DID_VRAMWAIT)); break; case DID_GRCGWAIT: setintstr(DID_GRCGSTR, menudlg_getval(DID_GRCGWAIT)); break; case DID_REALPAL: setintstr(DID_REALPALSTR, menudlg_getval(DID_REALPAL) - 32); break; } break; case DLGMSG_CLOSE: menubase_close(); break; } (void)param; return(0); }
void checkpage(byte line,unsigned page) { register unsigned *x=(void*)0xa000; unsigned i; setpage(page); for(i=0;i<4096;i++) { if(x[i]!=i*i+0x4221+i) { ozputs(0,line,"Error in readback!"); return; } } ozputs(0,line,"OK!"); }
//======================================================== //清屏子函数 fill ROM with 0 or 1 //======================================================== void ClearScreen( int a) { idata int z1,z2; if(a!=0) a=0xff; for(z1=0;z1<8;z1++) { setpage(z1); setaddr(0); for(z2=0;z2<128;z2++) { LCD_IO_DATA =a; senddata(); } } }
void do_back(off_t n, PTR start) { if(start - n < mem) { beep(); return; } if((undo_count = alloc_buf(n, &undo_buf)) == 0L) { return; } yanked = alloc_buf(n, &yank_buf); edits = U_BACK; undo_start = start - n; memcpy(undo_buf, start - undo_count, undo_count); memcpy(yank_buf, start - undo_count, undo_count); memmove(start - undo_count, start, maxpos - start); filesize -= undo_count; maxpos -= undo_count; setpage(start - undo_count); repaint(); }
static void dlginit(void) { UINT i; const TABLISTS *tl; menudlg_appends(res_scr0, NELEMENTS(res_scr0)); tl = tablist; for (i=0; i<NELEMENTS(tablist); i++, tl++) { menudlg_setpage((MENUID)(i + 1)); menudlg_itemappend(DID_TAB, (OEMCHAR *)tl->tab); menudlg_appends(tl->prm, tl->count); } menudlg_setval(DID_LCD, np2cfg.LCD_MODE & 1); menudlg_setenable(DID_LCDX, np2cfg.LCD_MODE & 1); menudlg_setval(DID_LCDX, np2cfg.LCD_MODE & 2); menudlg_setval(DID_SKIPLINE, np2cfg.skipline); menudlg_setval(DID_SKIPLIGHT, np2cfg.skiplight); setintstr(DID_LIGHTSTR, np2cfg.skiplight); if (!np2cfg.uPD72020) { menudlg_setval(DID_GDC7220, TRUE); } else { menudlg_setval(DID_GDC72020, TRUE); } menudlg_setval(gdcchip[np2cfg.grcg & 3], TRUE); menudlg_setval(DID_PC980124, np2cfg.color16); menudlg_setval(DID_TRAMWAIT, np2cfg.wait[0]); setintstr(DID_TRAMSTR, np2cfg.wait[0]); menudlg_setval(DID_VRAMWAIT, np2cfg.wait[2]); setintstr(DID_VRAMSTR, np2cfg.wait[2]); menudlg_setval(DID_GRCGWAIT, np2cfg.wait[4]); setintstr(DID_GRCGSTR, np2cfg.wait[4]); menudlg_setval(DID_REALPAL, np2cfg.realpal); setintstr(DID_REALPALSTR, np2cfg.realpal - 32); menudlg_setval(DID_TAB, 0); setpage(0); }
int main(void) { USART_Init(103); DDRD=0xff; DDRE=0xff; GLCD_Init128(); picture(&sportronix[0]); _delay_ms(2500); clrlcd(); sei(); while(ext==0) { lcdputs2(16,3,ar7); setcolumn(40); setpage(4); for(int k=0;((k<10));k++) { if(teama[k]!='0') { lcdsim_chardata((40+(k*8)),4,teama[k]); } else {lcd_bs(6);} } } clrlcd(); _delay_ms(10); while(ext==1) { lcdputs2(16,3,ar8); setcolumn(40); setpage(4); for(int k=0;((k<10));k++) //&(teamb[k]!='0') { if(teamb[k]!='0') {lcdsim_chardata((40+(k*8)),4,teamb[k]);} else {lcd_bs(6);} } } clrlcd(); setcolumn(40); setpage(4); for(int k=0;((k<10));k++) { if(teama[k]!='0') { lcdsim_chardata((40+(k*8)),4,teama[k]); } else {lcd_bs(6);} } { clrlcd(); //lcdputs2(33,0,ar0); since score mate is not needed, setcolumn(16); setpage(1); for(int k=0;((k<10));k++) { if(teama[k]!='0') { lcdsim_chardata((40+(k*8)),4,teama[k]); USART_Transmit(teama[k]); } else {lcd_bs(6);} } USART_Transmit(0x38); setcolumn(80); setpage(1); for(int k=0;((k<10));k++) { if(teamb[k]!='0') { lcdsim_chardata((40+(k*8)),4,teamb[k]); } else {lcd_bs(6);} } lcdputs2(46,2,ar3); //score lcdputs2(5,6,ar4); lcdputs2(110,6,ar4); //FOUL lcdputs2(58,6,ar6); } while(1) { lcdnumdata(25,3,AS); lcdnumdata(85,3,BS); lcdnumdata(55,7,QT); lcdnumdata(5,7,AF); lcdnumdata(110,7,BF); _a = key_press(); if( _a = 0) {} if( _a = 1) {} if( _a = 2) {} } }
/* mode: ('A') append * ('R') replace one or more different characters * ('r') replace 1 character * ('i') insert characters * ('a') insert after cursor * a precount can be used * * for insert and append we misuse the undo buffer for the inserted * characters (for "." command) */ off_t edit(int mode) { int ch, ch1; size_t len; off_t count = 0L; off_t buffer = BUFFER; off_t psize; if(!filesize && mode == 'i') { mode = 'A'; } if(mode != 'A' && mode != 'a') { if(current - mem >= filesize) { beep(); return 0L; } } if(precount < 1) { precount = 1; } len = strlen(rep_buf); if(mode == 'r' && current + precount > maxpos) { beep(); rep_buf[len] = '\0'; return 0L; } if(alloc_buf(buffer, &undo_buf) == 0L) { rep_buf[len] = '\0'; return 0L; } switch(mode) { case 'A': edits = U_APPEND; break; case 'R': edits = U_EDIT; smsg("REPLACE MODE"); break; case 'r': edits = U_EDIT; smsg("REPLACE 1 CHAR"); break; case 'a': case 'i': edits = U_INSERT; smsg("INSERT MODE"); break; } undo_start = current; while((ch = vgetc()) != ESC) { ch &= 0xff; rep_buf[len++] = ch; if(ch == '\t') { toggle(); setcur(); continue; } if(ch == KEY_BACKSPACE || ch == ASCII_DEL || ch == BVICTRL('H')) { if(count > 0) { len--; count--; if(mode == 'A' || mode == 'a' || mode == 'i') { filesize--; maxpos--; } current--; cur_back(); setcur(); } else { beep(); } continue; } if(loc == HEX) { if(isxdigit(ch)) { mvaddch(y, x + 1, ' '); mvaddch(y, x, ch); do { ch1 = vgetc() & 0xff; if(ch1 == ESC) { mvaddch(y, x, ' '); current--; cur_back(); goto escape; } if(!isxdigit(ch1)) { beep(); ch1 = -1; } } while(ch1 == -1); rep_buf[len++] = ch1; mvaddch(y, x + 1, ch1); sprintf(tmpbuf, "%c%c", ch, ch1); sscanf(tmpbuf, "%2x", &ch); } else { beep(); len--; goto wrong; } } else { /*** ASCII - Bereich ***/ if(isprint(ch)) { mvaddch(y, x, ch); } else { beep(); goto wrong; } } curpos = current++; if(mode == 'i' || mode == 'a') { memmove(current, curpos, maxpos - curpos); } if(mode == 'A' || mode == 'i' || mode == 'a') { maxpos++; filesize++; /* NEU undo_buf[count++] = ch; */ count++; } else { undo_buf[count++] = *curpos; } if(count == buffer) { buffer += BUFFER; if(alloc_buf(buffer, &undo_buf) == 0L) { rep_buf[len] = '\0'; return count; } } *curpos = (char)ch; cur_forw(0); statpos(); if(mode == 'i' || mode == 'a') { repaint(); } else { lineout(); } setcur(); if(filesize > memsize - 2L) { if(enlarge(100L)) { break; } } if((mode != 'A' && mode != 'a') && curpos == maxpos - 1) { break; } if(mode == 'r') { break; } wrong: continue; } rep_buf[len++] = ESC; rep_buf[len] = '\0'; if(!count) { goto escape; } if(precount > 1) { switch(mode) { case 'i': case 'a': case 'A': psize = count * (precount - 1); if(filesize + psize > memsize - 2L) { if(enlarge(psize + 100L)) { return count; } } if(psize + count > buffer) { if(alloc_buf(psize + count, &undo_buf) == 0L) { return count; } } if(mode == 'i' || mode == 'a') { memmove(current + psize, current, maxpos - curpos); } /* NEU undo_pos = undo_buf + count - 1L; */ while(--precount) { /* NEU memcpy(undo_pos + 1L, undo_pos - count + 1L, count); undo_pos += count; */ memcpy(curpos + 1L, curpos - count + 1L, count); curpos += count; } filesize += psize; count += psize; maxpos += psize; undo_count += psize; current = curpos + 1L; setpage(current); repaint(); break; case 'R': if(current + count * (precount - 1) > maxpos) { break; } psize = count; while(--precount) { memcpy(undo_buf + psize, curpos + 1L, count); psize += count; memcpy(curpos + 1L, curpos - count + 1L, count); curpos += count; } count = psize; setpage(++curpos); repaint(); break; case 'r': while(--precount) { undo_buf[count++] = *(++curpos); *curpos = (char)ch; cur_forw(0); statpos(); lineout(); } break; } } cur_back(); escape: setcur(); smsg(""); return(count); }
/* Do the f, F, t or T command * If flag == 1 save the character in rep_buf * else setpage() */ PTR do_ft(int ch, int flag) { static int chi; static int chp = 1; int dir; size_t n; PTR ptr; switch(ch) { // case 1: // beep(); // return NULL; // case -1: // if (chp == 'f' || chp == 't') { // dir = BACKWARD; // } else { // dir = FORWARD; // } // break; // case 0: // if (chp == 'f' || chp == 't') { // dir = FORWARD; // } else { // dir = BACKWARD; // } // break; case -1: if(chp == 1) { beep(); return NULL; } if(chp == 'f' || chp == 't') { dir = BACKWARD; } else { dir = FORWARD; } break; case 0: if(chp == 1) { beep(); return NULL; } if(chp == 'f' || chp == 't') { dir = FORWARD; } else { dir = BACKWARD; } break; default: chp = ch; if(chp == 'f' || chp == 't') { dir = FORWARD; } else { dir = BACKWARD; } chi = vgetc(); if(flag) { n = strlen(rep_buf); rep_buf[n++] = chi; rep_buf[n] = '\0'; } } ptr = current; do { if(dir == FORWARD) { do { ptr++; if(ptr > maxpos) { break; } } while(*ptr != chi); if(ptr > maxpos) { break; } } else { do { ptr--; if(ptr < mem) { break; } } while(*ptr != chi); if(ptr < mem) { break; } } } while(--precount > 0); /* if (*ptr == chi) { */ if(ptr >= mem && ptr <= maxpos) { if(loc == HEX) { toggle(); } if(chp == 't') { ptr--; } if(chp == 'T') { ptr++; } if(!flag) { setpage(ptr); } return(ptr); } beep(); return NULL; }
int main(void) { USART_Init(103); TIMSK=(1<<TOIE1); // enabled global and timer overflow interrupt; TCNT1=0xBDB; // set initial value to remove time error (16bit counter register) TCCR1B = (1<<CS12)|(0<<CS11)|(0<<CS10); // start timer/ set clock DDRA=0x0F; PORTA=0X0F; DDRC=0xFF; PORTC=0xFF; DDRB=0x00; DDRD=0xFF; GLCD_Init128(); picture(&sportronix[0]); sei(); while(1) { _av=keypad_4keys(); // get into this loop only when the home button is pressed, also clear the existing team names since there s no option for backspace if(menu == 3) { USART_RxIntEN(); lcdputs2(46,2,ar3); //score lcdputs2(5,6,ar4); lcdputs2(110,6,ar4); //FOUL lcdputs2(58,6,ar6); lcdnumdata(25,3,AS); lcdnumdata(85,3,BS); lcdnumdata(55,7,QT); lcdnumdata(5,7,AF); lcdnumdata(110,7,BF); menu++; } else if(menu == 1) { // for displaying teama name lcdputs2(16,3,ar7); setcolumn(40); setpage(4); for(int k=0;((k<6));k++) { if(teama[k]!=0x01) { lcdsim_chardata((40+(k*8)),4,teama[k]); } else { lcd_bs(6); } } } else if(menu == 2) // for displaying teamb name { lcdputs2(16,3,ar8); setcolumn(40); setpage(4); for(int k=0;((k<6));k++) //&(teamb[k]!=0x01) { if(teamb[k]!=0x01) { lcdsim_chardata((40+(k*8)),4,teamb[k]); } else { lcd_bs(6); } } } // now analyze the team names and put them into a PROPER array format. if(_av==2) // home button { //_ch=0; menu++; sendNB(); // Send the data to main board if(menu!=0) { clrlcd(); _delay_ms(5); } if(menu>3) { menu=1; // exit out of the menu and capture the team names _ch=0; USART_RxIntDE(); } //USART_Transmit(2); } else if((_av == 0)&(menu == 1)) // buzzer USART_Transmit(0); { if(indexA>=0) { indexA--; if(indexA<0) { indexA=0; } teama[indexA]=0x01; } } else if((_av == 0)&(menu == 2)) // buzzer USART_Transmit(0); { if(indexB>=0) { indexB--; if(indexB<0) { indexB=0; } teamb[indexB]=0x01; } } else if((_av==1) & (menu == 1)) // A-Z { if(o_sec==1) { _ch=0; } if(_ch<0) { _ch=37; } if(_ch>37) { _ch=0; } km = keymap[_ch]; _ch++; if(o_sec==0) { if(indexA>0) { indexA--; if(indexA<0) { indexA=0; } } } teama[indexA]=(km); indexA++; if(indexA>=6) { indexA=6; } //USART_Transmit(1); t1_rst(); } else if((_av == 1) & (menu == 2)) // A-Z { if(o_sec==1) { _ch=0; } if(_ch<0) { _ch=37; } if(_ch>37) { _ch=0; } km = keymap[_ch]; _ch++; if(o_sec==0) { if(indexB>0) { indexB--; if(indexB<0) { indexB=0; } } } teamb[indexB]=(km); indexB++; if(indexB>=6) { indexB=6; } //USART_Transmit(1); t1_rst(); } else if((_av == 3) & (menu == 1)) // Z-A { //USART_Transmit(3); if(o_sec==1) { _ch=0; } _ch--; if(_ch<0) { _ch=37; } if(_ch<0) { _ch=37; } if(_ch>37) { _ch=0; } km = keymap[_ch]; if(o_sec==0) { if(indexA>0) { indexA--; if(indexA<0) { indexA=0; } } } teama[indexA]=(km); indexA++; if(indexA>=6) { indexA=6; } //USART_Transmit(1); t1_rst(); } else if((_av == 3) & (menu == 2)) // Z-A { //USART_Transmit(3); if(o_sec==1) { _ch=0; } _ch--; if(_ch<0) { _ch=37; } if(_ch<0) { _ch=37; } if(_ch>37) { _ch=0; } km = keymap[_ch]; if(o_sec==0) { if(indexB>0) { indexB--; if(indexB<0) { indexB=0; } } } teamb[indexB]=(km); indexB++; if(indexB>=6) { indexB=6; } //USART_Transmit(1); t1_rst(); } } }