@@ -16,31 +16,37 @@ type Cursor struct {
1616 Out FileWriter
1717}
1818
19- func (c * Cursor ) Up (n int ) {
20- c .cursorMove (0 , n )
19+ func (c * Cursor ) Up (n int ) error {
20+ return c .cursorMove (0 , n )
2121}
2222
23- func (c * Cursor ) Down (n int ) {
24- c .cursorMove (0 , - 1 * n )
23+ func (c * Cursor ) Down (n int ) error {
24+ return c .cursorMove (0 , - 1 * n )
2525}
2626
27- func (c * Cursor ) Forward (n int ) {
28- c .cursorMove (n , 0 )
27+ func (c * Cursor ) Forward (n int ) error {
28+ return c .cursorMove (n , 0 )
2929}
3030
31- func (c * Cursor ) Back (n int ) {
32- c .cursorMove (- 1 * n , 0 )
31+ func (c * Cursor ) Back (n int ) error {
32+ return c .cursorMove (- 1 * n , 0 )
3333}
3434
3535// save the cursor location
36- func (c * Cursor ) Save () {
37- cursorLoc , _ = c .Location (nil )
36+ func (c * Cursor ) Save () error {
37+ loc , err := c .Location (nil )
38+ if err != nil {
39+ return err
40+ }
41+ cursorLoc = * loc
42+ return nil
3843}
3944
40- func (c * Cursor ) Restore () {
45+ func (c * Cursor ) Restore () error {
4146 handle := syscall .Handle (c .Out .Fd ())
4247 // restore it to the original position
43- procSetConsoleCursorPosition .Call (uintptr (handle ), uintptr (* (* int32 )(unsafe .Pointer (& cursorLoc ))))
48+ _ , _ , err := procSetConsoleCursorPosition .Call (uintptr (handle ), uintptr (* (* int32 )(unsafe .Pointer (& cursorLoc ))))
49+ return normalizeError (err )
4450}
4551
4652func (cur Coord ) CursorIsAtLineEnd (size * Coord ) bool {
@@ -51,40 +57,49 @@ func (cur Coord) CursorIsAtLineBegin() bool {
5157 return cur .X == 0
5258}
5359
54- func (c * Cursor ) cursorMove (x int , y int ) {
60+ func (c * Cursor ) cursorMove (x int , y int ) error {
5561 handle := syscall .Handle (c .Out .Fd ())
5662
5763 var csbi consoleScreenBufferInfo
58- procGetConsoleScreenBufferInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& csbi )))
64+ if _ , _ , err := procGetConsoleScreenBufferInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& csbi ))); normalizeError (err ) != nil {
65+ return err
66+ }
5967
6068 var cursor Coord
6169 cursor .X = csbi .cursorPosition .X + Short (x )
6270 cursor .Y = csbi .cursorPosition .Y + Short (y )
6371
64- procSetConsoleCursorPosition .Call (uintptr (handle ), uintptr (* (* int32 )(unsafe .Pointer (& cursor ))))
72+ _ , _ , err := procSetConsoleCursorPosition .Call (uintptr (handle ), uintptr (* (* int32 )(unsafe .Pointer (& cursor ))))
73+ return normalizeError (err )
6574}
6675
67- func (c * Cursor ) NextLine (n int ) {
68- c .Up (n )
69- c .HorizontalAbsolute (0 )
76+ func (c * Cursor ) NextLine (n int ) error {
77+ if err := c .Up (n ); err != nil {
78+ return err
79+ }
80+ return c .HorizontalAbsolute (0 )
7081}
7182
72- func (c * Cursor ) PreviousLine (n int ) {
73- c .Down (n )
74- c .HorizontalAbsolute (0 )
83+ func (c * Cursor ) PreviousLine (n int ) error {
84+ if err := c .Down (n ); err != nil {
85+ return err
86+ }
87+ return c .HorizontalAbsolute (0 )
7588}
7689
7790// for comparability purposes between windows
7891// in windows we don't have to print out a new line
79- func (c * Cursor ) MoveNextLine (cur Coord , terminalSize * Coord ) {
80- c .NextLine (1 )
92+ func (c * Cursor ) MoveNextLine (cur * Coord , terminalSize * Coord ) error {
93+ return c .NextLine (1 )
8194}
8295
83- func (c * Cursor ) HorizontalAbsolute (x int ) {
96+ func (c * Cursor ) HorizontalAbsolute (x int ) error {
8497 handle := syscall .Handle (c .Out .Fd ())
8598
8699 var csbi consoleScreenBufferInfo
87- procGetConsoleScreenBufferInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& csbi )))
100+ if _ , _ , err := procGetConsoleScreenBufferInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& csbi ))); normalizeError (err ) != nil {
101+ return err
102+ }
88103
89104 var cursor Coord
90105 cursor .X = Short (x )
@@ -94,43 +109,54 @@ func (c *Cursor) HorizontalAbsolute(x int) {
94109 cursor .X = csbi .size .X
95110 }
96111
97- procSetConsoleCursorPosition .Call (uintptr (handle ), uintptr (* (* int32 )(unsafe .Pointer (& cursor ))))
112+ _ , _ , err := procSetConsoleCursorPosition .Call (uintptr (handle ), uintptr (* (* int32 )(unsafe .Pointer (& cursor ))))
113+ return normalizeError (err )
98114}
99115
100- func (c * Cursor ) Show () {
116+ func (c * Cursor ) Show () error {
101117 handle := syscall .Handle (c .Out .Fd ())
102118
103119 var cci consoleCursorInfo
104- procGetConsoleCursorInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& cci )))
120+ if _ , _ , err := procGetConsoleCursorInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& cci ))); normalizeError (err ) != nil {
121+ return err
122+ }
105123 cci .visible = 1
106124
107- procSetConsoleCursorInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& cci )))
125+ _ , _ , err := procSetConsoleCursorInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& cci )))
126+ return normalizeError (err )
108127}
109128
110- func (c * Cursor ) Hide () {
129+ func (c * Cursor ) Hide () error {
111130 handle := syscall .Handle (c .Out .Fd ())
112131
113132 var cci consoleCursorInfo
114- procGetConsoleCursorInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& cci )))
133+ if _ , _ , err := procGetConsoleCursorInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& cci ))); normalizeError (err ) != nil {
134+ return err
135+ }
115136 cci .visible = 0
116137
117- procSetConsoleCursorInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& cci )))
138+ _ , _ , err := procSetConsoleCursorInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& cci )))
139+ return normalizeError (err )
118140}
119141
120- func (c * Cursor ) Location (buf * bytes.Buffer ) (Coord , error ) {
142+ func (c * Cursor ) Location (buf * bytes.Buffer ) (* Coord , error ) {
121143 handle := syscall .Handle (c .Out .Fd ())
122144
123145 var csbi consoleScreenBufferInfo
124- procGetConsoleScreenBufferInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& csbi )))
146+ if _ , _ , err := procGetConsoleScreenBufferInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& csbi ))); normalizeError (err ) != nil {
147+ return nil , err
148+ }
125149
126- return csbi .cursorPosition , nil
150+ return & csbi .cursorPosition , nil
127151}
128152
129153func (c * Cursor ) Size (buf * bytes.Buffer ) (* Coord , error ) {
130154 handle := syscall .Handle (c .Out .Fd ())
131155
132156 var csbi consoleScreenBufferInfo
133- procGetConsoleScreenBufferInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& csbi )))
157+ if _ , _ , err := procGetConsoleScreenBufferInfo .Call (uintptr (handle ), uintptr (unsafe .Pointer (& csbi ))); normalizeError (err ) != nil {
158+ return nil , err
159+ }
134160 // windows' coordinate system begins at (0, 0)
135161 csbi .size .X --
136162 csbi .size .Y --
0 commit comments