func names(mask, suffix string, n uint, l, c uint, f, b col.Colour) (string, string) { // t, t1 := uint(len(mask)), uint(0) if t > 0 { t1 = 1 + t } scr.Save(l, c, t1+n, 1) if t > 0 { mbx.Wd(t) mbx.ColoursScreen() mbx.Write(mask, l, c) } bx.Wd(n) bx.Colours(f, b) ptSuffix = "." + suffix errh.Hint("falls Dateien vorhanden, auswählen F2-, dann Pfeil-/Eingabetaste, ggf. Esc") name := env.Par(1) if name == "" { name = str.Clr(n) // Wörkeraunt um Fehler in box/imp.go } var p uint if str.Contains(name, '.', &p) { name = str.Part(name, 0, p) } bx.Edit(&name, l, c+t1) str.RemSpaces(&name) if str.Contains(name, '.', &p) { name = str.Part(name, 0, p) } filename := name + ptSuffix a := files.NumPred(hasSuffix) if a > 0 { var d uint switch kbd.LastCommand(&d) { case kbd.Esc: return "", "" // str.Clr (n), "" case kbd.Enter: // entered case kbd.LookFor: i := uint(0) select_(aus, a, a, n, &i, l, c+t1, b, f) if i == a { return "", "" // str.Clr (n), "" } else { str.Set(&filename, files.NamePred(hasSuffix, i)) } } } errh.DelHint() str.RemSpaces(&filename) if str.Contains(filename, '.', &p) { name = str.Part(filename, 0, p) } scr.Restore(l, c, t1+n, 1) return name, filename }
func (x *Imp) Defined(s string) bool { // x.Clr() n := uint(len(s)) if n < 7 { return false } if s[0] != '(' || s[n-1] != ')' { return false } t := str.Part(s, 1, n-2) + "," var p uint for d := D0; d < NDirs; d++ { if !str.Contains(t, ',', &p) { return false } r, err := strconv.ParseFloat(t[:p], 64) if err == nil { x.x[d] = r } else { return false } str.Rem(&t, 0, p+1) } return true }
func edit(x *float64, l, c uint) { // s := String(*x) p := uint(0) for { bx.Edit(&s, l, c) if !str.Contains(s, 'e', &p) && !str.Contains(s, 'E', &p) { *x = number(s) if !math.IsNaN(*x) { break } } else { } errh.ErrorPos("keine Zahl", 0, l+1, c) } Write(*x, l, c) }
func (x *Imp) Defined(s string) bool { // n, i, p := uint(len(s)), uint(0), uint(0) if str.Contains(s, separator, &i) && i < n && nat.Defined(&p, str.Part(s, i+1, n-(i+1))) { return x.Defined2(str.Part(s, 0, i), p) } return false }
func (x *Imp) Defined(s string) bool { // var p uint if str.Contains(s, separator, &p) { return x.day.Defined(s[:p]) && x.time.Defined(s[p+1:]) } x.Clr() return false }
func (x *Imp) SetReal(r float64) { // i, _ := math.Modf(r + 0.5) s := strconv.FormatFloat(i, 'f', -1, 64) p := uint(0) if str.Contains(s, '.', &p) { s = str.Part(s, 0, p) } if _, ok := x.n.SetString(s, 10); !ok { x.n.SetInt64(0) } }
func (x *Imp) Defined(s string) bool { // if str.Empty(s) { x.Clr() return true } i := uint(0) str.Move(&s, true) l := str.ProperLen(s) if str.Contains(s, ' ', &i) && s[0] == '0' { n := uint(0) if nat.Defined(&n, s[1:i]) { // i <= l x.prefix = uint16(n) if l == i { return false } s = s[i:l] } else { return false } } else { x.prefix = 0 } str.Move(&s, true) str.RemAllSpaces(&s) if s == "" { x.number = uint(x.prefix) x.prefix = 0 return true } if nat.Defined(&x.number, s) { return true } else { x.prefix = 0 x.number = 0 } return false }
func (x *Imp) Defined(s string) bool { // x.Clr() if str.Empty(s) { return true } str.Move(&s, true) x.geq0 = s[0] != '-' switch s[0] { case '+', '-': str.Rem(&s, 0, 1) } n := str.ProperLen(s) var p uint if str.Contains(s, '/', &p) { s1 := str.Part(s, p+1, n-p-1) if nat.Defined(&x.denom, s1) { if x.denom >= max { return false } } else { return false } } else { p = n x.denom = 1 } s1 := str.Part(s, 0, p) if nat.Defined(&x.num, s1) { if x.num >= max { return false } } else { return false } return true }
func (x *Imp) Defined(s string) bool { // if str.Empty(s) { x.cent = undefined return true } a, t, P, L := nat.DigitSequences(s) var k uint hatKomma := str.Contains(s, ',', &k) if !hatKomma { hatKomma = str.Contains(s, '.', &k) } var n uint if !nat.Defined(&n, t[0]) { return false } switch a { case 1: if hatKomma && k < P[0] { // Komma vor der Ziffernfolge switch L[0] { case 1: x.cent = 10 * n case 2: x.cent = n default: return false } return true } if hatKomma && k >= P[0]+L[0] || !hatKomma { if L[0] <= nDigits { x.cent = hundred * n return true } } case 2: if !hatKomma { return false } if k < P[0]+L[0] || P[1] <= k { return false } if L[0] > nDigits { return false } else { x.cent = hundred * n } if !nat.Defined(&n, t[1]) { return false } switch L[1] { case 1: x.cent += 10 * n case 2: x.cent += n default: return false } return true } return false }
func (x *Imp) Defined(s string) bool { // if str.Empty(s) { x.Clr() return true } var d Imp d.day, d.month, d.year = x.day, x.month, x.year var T string var l, p uint n, ss, P, L := nat.DigitSequences(s) switch x.fmt { case Dd, // e.g. " 8" Dd_mm_, // e.g. " 8.10." Dd_mm_yy, // e.g. " 8.10.07" Dd_mm_yyyy: // e.g. " 8.10.2007" *): switch n { case 1: l = 2 case 2, 3: l = L[0] default: return false } // see below case Dd_M, // e.g. "8. Oktober" Dd_M_yyyy: // e.g. "8. Oktober 2007" if x.fmt == Dd_M { if n != 1 { return false } } else { if n != 2 { return false } } if !str.Contains(s, '.', &p) { return false } if x.fmt == Dd_M_yyyy { // l = str.ProperLen (s) // T = str.Part (s, p, l - p) T = ss[1] if !nat.Defined(&d.year, T) { return false } } T = ss[0] str.Move(&T, true) if !nat.Defined(&d.day, T) { return false } T = str.Part(s, p+1, P[1]-p-1) str.Move(&T, true) if !isMonth(&d.month, T) { return false } return x.defined(d.day, d.month, d.year) case Yymmdd: // e.g. "090418" if !nat.Defined(&d.year, str.Part(s, 0, 2)) { return false } if !nat.Defined(&d.month, str.Part(s, 2, 2)) { return false } if !nat.Defined(&d.day, str.Part(s, 4, 2)) { return false } return x.defined(d.day, d.month, d.year) case Yyyymmdd: // e.g. "20090418" if !nat.Defined(&d.year, str.Part(s, 0, 4)) { return false } if !nat.Defined(&d.month, str.Part(s, 4, 2)) { return false } if !nat.Defined(&d.day, str.Part(s, 6, 2)) { return false } return x.defined(d.day, d.month, d.year) case Yy, // e.g. "08" Yyyy: // e.g. "2007" if n != 1 { return false } if nat.Defined(&d.year, ss[0]) { return x.defined(d.day, d.month, d.year) } else { return false } case Wd, // e.g. "Mo" WD: // e.g. "Monday" return false // Fall noch nicht erledigt case Mmm, // e.g. "Mon" M: // e.g. "Oktober" if !isMonth(&d.month, s) { return false } return x.defined(d.day, d.month, d.year) case Myyyy: // e.g. "Oktober 2007" if n != 1 { return false } if !nat.Defined(&d.year, ss[0]) { return false } if !str.Contains(s, ' ', &p) { return false } if !isMonth(&d.month, str.Part(s, 0, p)) { return false } return x.defined(d.day, d.month, d.year) case Wn, // e.g. "1" (.Woche) WN: // e.g. "1.Woche" if n != 1 { return false } if nat.Defined(&n, T) { if 0 < n && n <= 3 { d.day, d.month, d.year = 1, 1, x.year c := internalCode(d) w := weekday(d) if w > Thursday { c += 7 } // see Weeknumber if c < uint16(w) { return false } c -= uint16(w) // so c is a Monday d.Decode(Encode(uint(c) + 7*n)) if d.year == x.year { x.day = d.day x.month = d.month return true } } return false } case WNyyyy: // e.g. "1.Woche 2007" return false // not yet implemented case Qu: // e.g. " I/06" if n != 1 { return false } if !str.Contains(s, '/', &p) { return false } if !nat.Defined(&d.year, ss[0]) { return false } T = str.Part(s, 0, p) str.Move(&T, true) n = str.ProperLen(T) if T[0] != 'I' { return false } switch n { case 1: d.month = 1 case 2: switch T[1] { case 'I': d.month = 4 case 'V': d.month = 10 default: return false } case 3: if T[1] == 'I' && T[2] == 'I' { d.month = 7 } default: return false } return x.defined(d.day, d.month, d.year) } if !nat.Defined(&d.day, str.Part(s, P[0], l)) { return false } if n == 1 { if L[0] > 8 { return false } // maximal "Dd_mm_yyyy" if L[0] > 2 { if !nat.Defined(&d.month, str.Part(s, P[0]+2, 2)) { return false } } if L[0] > 4 { if !nat.Defined(&d.year, str.Part(s, P[0]+4, L[0]-4)) { return false } } } else { // n == 2, 3 if !nat.Defined(&d.month, ss[1]) { return false } if n == 2 && x.Empty() { d.year = today.(*Imp).year } if n == 3 { if !nat.Defined(&d.year, ss[2]) { return false } } } return x.defined(d.day, d.month, d.year) }