Flags benennen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Kekskiller
Beiträge: 752
Registriert: 14.09.2004 21:39
Kontaktdaten:

Flags benennen

Beitrag 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, " - ")