void movecursor(int row, int col) { xorcursor(); currow=row; curcol=col; xorcursor(); }
void termputch(byte c) { switch(c) { case 7: beep(); return; case 8: xorcursor(); if(curcol>0) curcol--; else curcol=0; xorcursor(); return; case 11: case 12: case '\n': newline(); return; case '\r': if(LNM) crlf(); else { xorcursor(); curcol=0; xorcursor(); } return; default: ttyprint(c); return; } }
static void newline(void) { xorcursor(); currow++; if(currow>HEIGHT) { currow--; ttyscroll(); } xorcursor(); }
void crlf(void) { xorcursor(); curcol=0; currow++; if(currow>HEIGHT) { currow--; ttyscroll(); } xorcursor(); }
void reset_term(void) { static byte i; ozcls(); curcol=currow=0; LNM=0; xorcursor(); }
static void setxorcursor(void) { static byte c; register char *p; p=s+pos; c=*p; *p=0; x=x0+measurestring(s); *p=c; xorcursor(); }
//extern int __LIB__ ozeditline(byte _x0,byte y0,char *s0,byte slen,byte xlen) //int ozeditline(byte _x0,byte y0,char *s0,byte slen,byte xlen) int ozeditline(int _x0, int y0, char* s0, int slen, int xlen) { static char c; static byte l1, l2; static unsigned k; static byte i; register char* p; switch (ozgetfont()) { case FONT_PC_NORMAL: case FONT_OZ_NORMAL: height = 8; break; default: height = 13; break; } x = x0 = _x0; y = y0; if ((int)x0 + (int)xlen > 239 || (int)y + (int)height > 79) return OZEDITLINE_ERROR; xlen--; s = s0; pos = strlen(s0); if (pos >= slen) return OZEDITLINE_ERROR; ozputs(x0, y, s); setcursor(); xorcursor(); while (1) { switch (k = getch()) { case KEY_MAIN: case KEY_SCHEDULE: case KEY_MEMO: case KEY_TELEPHONE: case KEY_POWER: case KEY_MYPROGRAMS: ozexitto(k); case KEY_BACKLIGHT: oztogglelight(); break; case KEY_LEFT: if (pos > 0) { pos--; movecursor(); } break; case KEY_RIGHT: if (s[pos]) { pos++; movecursor(); } break; case KEY_LOWER_ESC: case KEY_UPPER_ESC: case 27: xorcursor(); return OZEDITLINE_CANCEL; case KEY_LOWER_ENTER: case KEY_UPPER_ENTER: case '\r': case '\n': xorcursor(); return strlen(s); case KEY_BACKSPACE: case KEY_BACKSPACE_16K: if (pos > 0) { pos--; p = s + pos; c = *p; while (*p) { *p = p[1]; p++; } xorcursor(); l1 = ozputs(x0, y, s); l2 = ozputch(l1, -1, c); for (i = l1; i < l2; i++) { _ozvline(i, y, height, WHITE); } ozputs(x0, y, s); setcursor(); xorcursor(); } break; default: if (k < 127 && ozputch(0, -1, k) + ozputs(0, -1, s) < xlen && (l1 = 1 + strlen(s)) < slen) { xorcursor(); for (i = l1; i > pos; i--) s[i] = s[i - 1]; if (s[pos] == 0) s[pos + 1] = 0; s[pos] = k; pos++; ozputs(x0, y, s); setcursor(); xorcursor(); } break; } } return OZEDITLINE_ERROR; }
static void movecursor(void) { xorcursor(); setcursor(); xorcursor(); }
int ozeditline1(byte _x0,byte y0,char *s0,byte slen,byte _xlen) { static char c; static byte l1; static unsigned k; static byte i; register char *p; xlen=_xlen; /* switch(ozgetfont()) { case FONT_PC_NORMAL: case FONT_OZ_NORMAL: height=8; break; default: height=13; break; } */ height=ozgetfontheight(ozgetfont()); x=x0=_x0; y1=y0; if((int)x0+(int)xlen>239 || (int)y1+(int)height>79) return OZEDITLINE_ERROR; xlen--; s=s0; pos=strlen(s0); if(pos>=slen) return OZEDITLINE_ERROR; putit(); setxorcursor(); for(;;) switch(k=getch()) { case KEY_BACKLIGHT: oztogglelight(); break; case KEY_LEFT: if(pos>0) { pos--; movecursor(); } break; case KEY_RIGHT: if(s[pos]) { pos++; movecursor(); } break; case KEY_MAIN: case KEY_SCHEDULE: case KEY_MEMO: case KEY_TELEPHONE: case KEY_MYPROGRAMS: case KEY_UPPER_ESC: case 27: xorcursor(); return OZEDITLINE_CANCEL; case KEY_LOWER_ENTER: case KEY_UPPER_ENTER: /* case '\r': */ case '\n': xorcursor(); return strlen(s); case KEY_BACKSPACE: if(pos>0) { pos--; p=s+pos; c=*p; while(*p) { *p=p[1]; p++; } xorcursor(); _ozfilledbox(putit(),y1,measurechar(c),height,WHITE); /* putit(); */ setxorcursor(); } break; default: if(k<127 && (byte)measurechar(k)+(byte)measurestring(s) < xlen && (l1=strlen(s)+1) < slen) { xorcursor(); for(i=l1;i>pos;i--) s[i]=s[i-1]; /* if(s[pos]==0) s[pos+1]=0; */ s[pos]=k; pos++; putit(); setxorcursor(); } break; } }