Seite 1 von 1

Flags benennen

Verfasst: 01.12.2006 18:45
von Kekskiller
Kann sich mit 100%iger Sicherheit jeder selber machen, aber da ich schon dabei bin, stelle ich das mal in die Gunst der generellen Faulheit:

Mit dem kleinen Code lassen sind Flags/Werten Strings zuweisen, die dann z.b. kombiniert als String mit allen enthaltenen Stringbezeichnungen ausgegeben werden kann. Macht sich ganz praktisch, wenn man z.b. bei *.ini-Dateien Tastenbelegungen anhand von Strings erkennen will, o.ä.

Code: Alles auswählen

Structure __UF_userflag
  name$
  flag.l
EndStructure

Global NewList __UF_userflags.__UF_userflag()

Procedure UFRegister(userflag.l, flagname$)
  AddElement(__UF_userflags())
  __UF_userflags()\flag = userflag
  __UF_userflags()\name$ = flagname$
  ProcedureReturn ListIndex(__UF_userflags())
EndProcedure

Procedure UFUnregisterFlagByFlag(userflag.l)
  ForEach __UF_userflags()
    If __UF_userflags()\flag = userflag
      DeleteElement(__UF_userflags())
      ProcedureReturn #True
    EndIf
  Next
  ProcedureReturn #False
EndProcedure

Procedure UFIsFlag(userflag.l)
  ForEach __UF_userflags()
    If __UF_userflags()\flag = userflag
      ProcedureReturn ListIndex(__UF_userflags())
    EndIf
  Next
  ProcedureReturn -1
EndProcedure

Procedure UFIsName(flagname$)
  ForEach __UF_userflags()
    If __UF_userflags()\name$ = flagname$
      ProcedureReturn ListIndex(__UF_userflags())
    EndIf
  Next
  ProcedureReturn -1
EndProcedure

Procedure.s UFGetFlagString(userflag.l)
  ForEach __UF_userflags()
    If __UF_userflags()\flag = userflag
      ProcedureReturn __UF_userflags()\name$
    EndIf
  Next
EndProcedure

Procedure.s UFGetFlagStrings(userflag.l, seperator$)
  Protected flagstrings$, nonfirstflag.b
  ForEach __UF_userflags()
    If __UF_userflags()\flag & userflag
      If nonfirstflag = #True
        flagstrings$ + (seperator$ + __UF_userflags()\name$)
      Else
        flagstrings$ + __UF_userflags()\name$
        nonfirstflag = #True
      EndIf
    EndIf
  Next
  ProcedureReturn flagstrings$
EndProcedure

Procedure UFGetFlagByName(flagname$)
  ForEach __UF_userflags()
    If __UF_userflags()\name$ = flagname$
      ProcedureReturn __UF_userflags()\flag
    EndIf
  Next
EndProcedure

Procedure.s UFGetNameByFlag(userflag)
  ForEach __UF_userflags()
    If __UF_userflags()\flag = userflag
      ProcedureReturn __UF_userflags()\name$
    EndIf
  Next
EndProcedure

#FLAG_k = 1
#FLAG_t = 2
#FLAG_x = 4
#FLAG_b = 8
#FLAG_h = 16

UFRegister(#FLAG_k, "kabeljau")
UFRegister(#FLAG_t, "thunfisch")
UFRegister(#FLAG_x, "xanadu")
UFRegister(#FLAG_b, "bär")
UFRegister(#FLAG_h, "hengst")

UFUnregisterFlagByFlag(#FLAG_t)

Debug "buby ist auf platz " + Str(UFIsName("bär"))
Debug "buby hat die nummer " + Str(UFGetFlagByName("bär"))
Debug "nummer " + Str(#FLAG_b) + " ist ein " + UFGetNameByFlag(#FLAG_b)
Debug UFGetFlagStrings(#FLAG_x|#FLAG_h|#FLAG_t|#FLAG_k, " - ")