2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these librararies and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: esclib.c /main/3 1995/10/31 12:00:21 rswiston $ */
28 extern char *READTEST();
30 #define ESC_STR_LEN 20
39 char Str[ESC_STR_LEN];
40 sprintf(Str, "%s%s", HOME_UP, CLEAR_DISP);
44 void CursorUp(HowMuch)
48 if (HowMuch == 0) return;
49 sprintf(Str, CURSOR_N_UP, HowMuch);
53 void CursorDown(HowMuch)
57 if (HowMuch == 0) return;
58 sprintf(Str, CURSOR_N_DOWN, HowMuch);
62 void CursorForward(HowMuch)
66 if (HowMuch == 0) return;
67 sprintf(Str, CURSOR_N_FORW, HowMuch);
71 void CursorBack(HowMuch)
75 if (HowMuch == 0) return;
76 sprintf(Str, CURSOR_N_BACK, HowMuch);
80 void CursorPrevLine(HowMuch)
84 if (HowMuch == 0) return;
85 sprintf(Str, CURSOR_N_PREV_LINE, HowMuch);
89 void CursorColumn(HowMuch)
93 if (HowMuch == 0) return;
94 sprintf(Str, CURSOR_N_COLUMN, HowMuch);
98 void GetCursorPosn(X, Y)
100 /* expected ESC sequence is of the form Esc[n1;n2R */
102 char *Ptr, Line[5], Col[5];
104 WRITETEST(CUR_POSN_STAT);
107 while (Ptr[i] != ';') {Line[j] = Ptr[i]; i++; j++;}
108 Line[j++] = NULLCHAR;
110 while (Ptr[i] != 'R') {Col[j] = Ptr[i]; i++; j++;}
112 *Y = atoi(Line); *X = atoi(Col);
115 int CheckTermStatus()
116 /* return 1 if term is in proper status else 0 */
119 WRITETEST(TERMINAL_STAT);
121 if (strcmp(Ptr, TERMINAL_GOOD) == 0) return(0);
125 void AbsoluteGoToXY(X, Y)
128 char Str[ESC_STR_LEN];
129 sprintf(Str, GOTO_X_Y, Y, X);
133 void AbsoluteGoToXY_HVP(X, Y)
136 char Str[ESC_STR_LEN];
137 sprintf(Str, GOTO_X_Y_HVP, Y, X);
141 void RelativeGoToXY(CurrX, CurrY, X, Y)
142 int CurrX, CurrY, X, Y;
144 if (X < CurrX) CursorBack((CurrX - X));
145 else CursorForward((X - CurrX));
146 if (Y < CurrY) CursorUp((CurrY - Y));
147 else CursorDown((Y - CurrY));
158 WRITETEST(REVERSEINDEX);
167 void InsertLines(Howmany)
171 if (Howmany == 0) return;
172 sprintf(Str, INSERT_N_LINE, Howmany);
176 void InsertBlanks(Howmany)
180 if (Howmany == 0) return;
181 sprintf(Str, INSERT_N_BLANK, Howmany);
185 void DeleteLines(Howmany)
189 if (Howmany == 0) return;
190 sprintf(Str, DELETE_N_LINE, Howmany);
195 void DeleteChars(Howmany)
199 if (Howmany == 0) return;
200 sprintf(Str, DELETE_N_CHAR, Howmany);
206 WRITETEST(INSERT_MODE);
210 void SetReplaceMode()
212 WRITETEST(REPLACE_MODE);
215 void GetWinSize(Lines, Cols)
218 AbsoluteGoToXY(999, 999);
219 GetCursorPosn(Cols, Lines);
222 /*** TabFunctions ***/
226 WRITETEST(CLEAR_ALL_TABS);
231 WRITETEST(CLEAR_CUR_TAB);
240 void EraseLnFromCur()
242 WRITETEST(ERASE_LN_FROM_CUR);
248 WRITETEST(ERASE_LN_TO_CUR);
253 WRITETEST(ERASE_LN_ALL);
257 void EraseScrFromCur()
259 WRITETEST(ERASE_FROM_CUR);
265 WRITETEST(ERASE_TO_CUR);
270 WRITETEST(ERASE_ALL);
273 void EraseChars(Howmany)
277 if (Howmany == 0) return;
278 sprintf(Str, ERASE_N_CHAR, Howmany);
283 void SetApplnKeyPad()
285 WRITETEST(APPLN_KEYPAD);
288 void SetNormalKeyPad()
290 WRITETEST(NORMAL_KEYPAD);
303 void SetDispUnderscore()
305 WRITETEST(UNDERSCORE);
313 void SetDispInverse()
320 WRITETEST(SAVE_CURSOR);
326 WRITETEST(RESTORE_CURSOR);
329 void SetScrollRegn(Top, Bottom)
332 char Str[ESC_STR_LEN];
333 sprintf(Str, SET_SCROLL_REGN, Top, Bottom);
338 void SetCursorKeys(DECMode)
343 WRITETEST(APPL_CUR_KEYS); break;
345 WRITETEST(NORMAL_CUR_KEYS); break;
347 WRITETEST(SAVE_CUR_KEYS); break;
349 WRITETEST(REST_CUR_KEYS); break;
353 void SetColumnWidth(DECMode)
358 WRITETEST(COLUMN_80); break;
360 WRITETEST(COLUMN_132); break;
362 WRITETEST(SAVE_COLUMN_TYPE); break;
364 WRITETEST(REST_COLUMN_TYPE); break;
368 void SetScrollType(DECMode)
373 WRITETEST(SMOOTH_SCROLL); break;
375 WRITETEST(JUMP_SCROLL); break;
377 WRITETEST(SAVE_SCROLL_TYPE); break;
379 WRITETEST(REST_SCROLL_TYPE); break;
383 void SetVideoType(DECMode)
388 WRITETEST(REVERSE_VIDEO); break;
390 WRITETEST(NORMAL_VIDEO); break;
392 WRITETEST(SAVE_VIDEO_TYPE); break;
394 WRITETEST(REST_VIDEO_TYPE); break;
398 void SetOriginMode(DECMode)
403 WRITETEST(ORIGIN_MODE); break;
405 WRITETEST(CURSOR_MODE); break;
407 WRITETEST(SAVE_SCREEN_MODE); break;
409 WRITETEST(REST_SCREEN_MODE); break;
413 void SetWrapMode(DECMode)
418 WRITETEST(WRAP_MODE); break;
420 WRITETEST(NO_WRAP_MODE); break;
422 WRITETEST(SAVE_WRAP_MODE); break;
424 WRITETEST(REST_WRAP_MODE); break;
428 void SetMarginBell(DECMode)
433 WRITETEST(MARGIN_BELL); break;
435 WRITETEST(NO_MARGIN_BELL); break;
437 WRITETEST(SAVE_MARGIN_BELL_TYPE); break;
439 WRITETEST(REST_MARGIN_BELL_TYPE); break;
443 void SetReverseWrap(DECMode)
448 WRITETEST(REVERSE_WRAP); break;
450 WRITETEST(NO_REVERSE_WRAP); break;
452 WRITETEST(SAVE_REVERSE_WRAP_TYPE); break;
454 WRITETEST(REST_REVERSE_WRAP_TYPE); break;
458 void SetLoggingMode(DECMode)
463 WRITETEST(START_LOGGING); break;
465 WRITETEST(STOP_LOGGING); break;
467 WRITETEST(SAVE_LOGGING_TYPE); break;
469 WRITETEST(REST_LOGGING_TYPE); break;
473 #define BACKSPACE 010
475 void BackSpace(HowMany)
479 for (i=0; i < HowMany-1; i++)
480 {sprintf(Str, "%c", BACKSPACE); WRITETEST(Str);}