// package pos -- позиция в коде package pos import ( "fmt" "log" ) // IPos -- низменяемая позиция курсора type IPos interface { String() string } // IPosMut -- низменяемая позиция курсора type IPosMut interface { IPos // GetX -- получить X GetX() int // IncX -- инкремент X IncX() // SetX -- установить X SetX(x int) // GetY -- получить Y GetY() int // IncY -- увеличить Y IncY() // NextLine -- перейти на новую строку NextLine() } // Позиция в коде type pos struct { x int // Строка y int // Столбец } // NewPos -- возвращает новую позицию в коде func NewPos(x, y int) *pos { return &pos{x, y} } var ( PosCur = NewPos(1, 1) // Позиция курсора в изоляте ) // GetX -- получить X func (sf *pos) GetX() int { return sf.x } // IncX -- инкремент X func (sf *pos) IncX() { sf.x++ } // SetX -- установить X func (sf *pos) SetX(x int) { if x < 1 { log.Panicf("pos,SetX(): x(%v)<1", x) } sf.x = x } // GetY -- получить Y func (sf *pos) GetY() int { return sf.y } // IncY -- увеличить Y на 1 func (sf *pos) IncY() { sf.y++ } // NextLine -- переход на следующую строку func (sf *pos) NextLine() { sf.y++ sf.x = 1 } // String -- возвращает строковое представление координаты в коде func (sf *pos) String() string { return fmt.Sprintf("%d:%d", sf.y, sf.x) }