xref: /reactos/base/shell/cmd/screen.c (revision c2c66aff)
1*c2c66affSColin Finck /*
2*c2c66affSColin Finck  * SCREEN.C - screen internal command.
3*c2c66affSColin Finck  *
4*c2c66affSColin Finck  * clone from 4nt msgbox command
5*c2c66affSColin Finck  *
6*c2c66affSColin Finck  * 30 Aug 1999
7*c2c66affSColin Finck  *     started - Paolo Pantaleo <paolopan@freemail.it>
8*c2c66affSColin Finck  *
9*c2c66affSColin Finck  *    30-Apr-2005 (Magnus Olsen <magnus@greatlord.com>)
10*c2c66affSColin Finck  *        Remove all hardcoded strings in En.rc
11*c2c66affSColin Finck  *
12*c2c66affSColin Finck  */
13*c2c66affSColin Finck 
14*c2c66affSColin Finck #include "precomp.h"
15*c2c66affSColin Finck 
16*c2c66affSColin Finck #ifdef INCLUDE_CMD_SCREEN
17*c2c66affSColin Finck 
CommandScreen(LPTSTR param)18*c2c66affSColin Finck INT CommandScreen(LPTSTR param)
19*c2c66affSColin Finck {
20*c2c66affSColin Finck     SHORT x, y;
21*c2c66affSColin Finck     SHORT maxx, maxy;
22*c2c66affSColin Finck     BOOL bSkipText = FALSE;
23*c2c66affSColin Finck 
24*c2c66affSColin Finck     if (_tcsncmp(param, _T("/?"), 2) == 0)
25*c2c66affSColin Finck     {
26*c2c66affSColin Finck         ConOutResPaging(TRUE,STRING_SCREEN_HELP);
27*c2c66affSColin Finck         return 0;
28*c2c66affSColin Finck     }
29*c2c66affSColin Finck 
30*c2c66affSColin Finck     nErrorLevel = 0;
31*c2c66affSColin Finck 
32*c2c66affSColin Finck     /* Retrieve the screen dimensions */
33*c2c66affSColin Finck     GetScreenSize(&maxx, &maxy);
34*c2c66affSColin Finck 
35*c2c66affSColin Finck     /* Get row */
36*c2c66affSColin Finck     while (_istspace(*param))
37*c2c66affSColin Finck         param++;
38*c2c66affSColin Finck 
39*c2c66affSColin Finck     if (!*param)
40*c2c66affSColin Finck     {
41*c2c66affSColin Finck         error_req_param_missing();
42*c2c66affSColin Finck         return 1;
43*c2c66affSColin Finck     }
44*c2c66affSColin Finck 
45*c2c66affSColin Finck     y = _ttoi(param);
46*c2c66affSColin Finck     if (y < 0 || y > (maxy-1))
47*c2c66affSColin Finck     {
48*c2c66affSColin Finck         ConOutResPuts(STRING_SCREEN_ROW);
49*c2c66affSColin Finck         return 1;
50*c2c66affSColin Finck     }
51*c2c66affSColin Finck 
52*c2c66affSColin Finck     /* Get column */
53*c2c66affSColin Finck     if (!(param = _tcschr(param, _T(' '))))
54*c2c66affSColin Finck     {
55*c2c66affSColin Finck         error_req_param_missing();
56*c2c66affSColin Finck         return 1;
57*c2c66affSColin Finck     }
58*c2c66affSColin Finck 
59*c2c66affSColin Finck     while (_istspace(*param))
60*c2c66affSColin Finck         param++;
61*c2c66affSColin Finck 
62*c2c66affSColin Finck     if (!*param)
63*c2c66affSColin Finck     {
64*c2c66affSColin Finck         error_req_param_missing();
65*c2c66affSColin Finck         return 1;
66*c2c66affSColin Finck     }
67*c2c66affSColin Finck 
68*c2c66affSColin Finck     x = _ttoi(param);
69*c2c66affSColin Finck     if (x < 0 || x > (maxx-1))
70*c2c66affSColin Finck     {
71*c2c66affSColin Finck         ConErrResPuts(STRING_SCREEN_COL);
72*c2c66affSColin Finck         return 1;
73*c2c66affSColin Finck     }
74*c2c66affSColin Finck 
75*c2c66affSColin Finck     /* Get text */
76*c2c66affSColin Finck     if (!(param = _tcschr(param, _T(' '))))
77*c2c66affSColin Finck     {
78*c2c66affSColin Finck         bSkipText = TRUE;
79*c2c66affSColin Finck     }
80*c2c66affSColin Finck     else
81*c2c66affSColin Finck     {
82*c2c66affSColin Finck         while (_istspace(*param))
83*c2c66affSColin Finck             param++;
84*c2c66affSColin Finck 
85*c2c66affSColin Finck         if (!*param)
86*c2c66affSColin Finck             bSkipText = TRUE;
87*c2c66affSColin Finck     }
88*c2c66affSColin Finck 
89*c2c66affSColin Finck     bIgnoreEcho = TRUE;
90*c2c66affSColin Finck 
91*c2c66affSColin Finck     if (bSkipText)
92*c2c66affSColin Finck         x = 0;
93*c2c66affSColin Finck 
94*c2c66affSColin Finck     SetCursorXY(x, y);
95*c2c66affSColin Finck 
96*c2c66affSColin Finck     if (!bSkipText)
97*c2c66affSColin Finck         ConOutPuts(param);
98*c2c66affSColin Finck 
99*c2c66affSColin Finck     return 0;
100*c2c66affSColin Finck }
101*c2c66affSColin Finck 
102*c2c66affSColin Finck #endif /* INCLUDE_CMD_SCREEN */
103