| 041 03.03.2007, 15:14 Uhr
 spakko
 
 
 
 
 | Wer Interesse hat, kann folgendes Projekt "zu Ende" bzw. fortführen. Es ist in Purebasic (Demo gibts unter http://www.purebasic.de) geschrieben. Hier ist der Quellkode des Programm's "Bitmuster.pb" : 
 
 
 | Quellcode: |  | Structure DatenRomTyp.l
 Bitmuster.s
 Beschreibung.s
 EndStructure
 
 Global Dim Bitmuster.Daten(499)
 
 
 Procedure.s App_Path()
 Protected Tmp.s
 tmp=GetPathPart(ProgramFilename())
 If Right(tmp,1)<>"" : tmp=tmp+"" : EndIf
 ProcedureReturn tmp
 EndProcedure
 
 Procedure Romtypen_Lesen()
 Protected FN.l, tmp.s, schalter.l,text.s, Idx.l
 
 FN = ReadFile(#PB_Any, App_Path()+"Bitmuster.dat")
 ;Debug app_path()
 schalter=0
 
 ClearGadgetItemList(0)
 
 Repeat
 tmp=Trim(ReadString(FN))
 If tmp<>""
 If Left(tmp,1)="[" And schalter=1 : schalter=0 : EndIf
 ;Debug tmp
 If schalter=1
 Idx=Val(StringField(tmp,1,";"))
 text=StringField(tmp,2,";")
 AddGadgetItem(0, -1, text)
 SetGadgetItemData(0, CountGadgetItems(0)-1,Idx)
 EndIf
 If tmp="[Typen]" : schalter=1 : EndIf
 EndIf
 Until Eof(FN)
 CloseFile(FN)
 EndProcedure
 
 Procedure Bitmuster_Lesen(romtyp.l)
 Protected FN.l, tmp.s, schalter.l,Idx.l,rtyp.l,text.s
 
 FN = ReadFile(#PB_Any, App_Path()+"Bitmuster.dat")
 ;Debug app_path()
 schalter=0
 
 ClearGadgetItemList(1)
 
 Repeat
 tmp=Trim(ReadString(FN))
 If tmp<>""
 If Left(tmp,1)="[" And schalter=1 : schalter=0 : EndIf
 ;Debug tmp
 If schalter=1
 Idx=Val(StringField(tmp,1,";"))
 rtyp=Val(StringField(tmp,2,";"))
 If rtyp=romtyp
 text=StringField(tmp,3,";")+" ; "+StringField(tmp,4,";")
 AddGadgetItem(1, -1, text)
 SetGadgetItemData(1, CountGadgetItems(1)-1,Idx)
 EndIf
 EndIf
 If tmp="[Bitmuster]" : schalter=1 : EndIf
 EndIf
 Until Eof(FN)
 CloseFile(FN)
 EndProcedure
 
 Procedure Bitmuster_Aendern(Eintrag.l,Bitmuster.s,Beschreibung.s,Romtyp.l)
 Protected FN1.l,FN2.l, tmp.s, schalter.l,Idx.l,rtyp.l,text.s
 
 DeleteFile(App_Path()+"~bimutmp.dat")
 
 FN1 = ReadFile(#PB_Any, App_Path()+"Bitmuster.dat")
 FN2 = OpenFile(#PB_Any, App_Path()+"~bimutmp.dat")
 ;Debug app_path()
 schalter=0
 
 Repeat
 tmp=Trim(ReadString(FN1))
 If tmp<>""
 If Left(tmp,1)="[" And schalter=1 : schalter=0 : EndIf
 ;Debug tmp
 If schalter=1
 Idx=Val(StringField(tmp,1,";"))
 If Idx=Eintrag
 text=Str(Eintrag)+";"+Str(Romtyp)+";"+Bitmuster+";"+Beschreibung
 WriteStringN(FN2,text)
 Else
 WriteStringN(FN2,tmp)
 EndIf
 Else
 WriteStringN(FN2,tmp)
 EndIf
 If tmp="[Bitmuster]" : schalter=1 : EndIf
 EndIf
 Until Eof(FN1)
 FlushFileBuffers(FN1)
 FlushFileBuffers(FN2)
 CloseFile(FN1)
 CloseFile(FN2)
 DeleteFile(App_Path()+"Bitmuster.dat")
 RenameFile(App_Path()+"~bimutmp.dat",App_Path()+"Bitmuster.dat")
 EndProcedure
 
 Procedure.l Bitmuster_Neu(Bitmuster.s,Beschreibung.s,Romtyp.l)
 Protected FN1.l,FN2.l, tmp.s, schalter.l,Idx.l,rtyp.l,text.s, merker.l
 
 DeleteFile(App_Path()+"~bimutmp.dat")
 
 ;--- neuen Index suchen
 FN1 = ReadFile(#PB_Any, App_Path()+"Bitmuster.dat")
 ;Debug app_path()
 schalter=0
 muster=0
 Repeat
 tmp=Trim(ReadString(FN1))
 If tmp<>""
 If Left(tmp,1)="[" And schalter=1 : schalter=0 : EndIf
 ;Debug tmp
 If schalter=1
 Idx=Val(StringField(tmp,1,";"))
 If Idx>muster : muster=Idx : EndIf
 EndIf
 If tmp="[Bitmuster]" : schalter=1 : EndIf
 EndIf
 Until Eof(FN1)
 CloseFile(FN1)
 muster=muster+1
 
 ;---
 FN1 = ReadFile(#PB_Any, App_Path()+"Bitmuster.dat")
 FN2 = OpenFile(#PB_Any, App_Path()+"~bimutmp.dat")
 ;Debug app_path()
 schalter=0
 Repeat
 tmp=Trim(ReadString(FN1))
 If tmp<>""
 If Left(tmp,1)="[" And schalter=1
 schalter=0
 text=Str(muster)+";"+Str(Romtyp)+";"+Bitmuster+";"+Beschreibung
 WriteStringN(FN2,text)
 EndIf
 WriteStringN(FN2,tmp)
 If tmp="[Bitmuster]" : schalter=1 : EndIf
 EndIf
 Until Eof(FN1)
 FlushFileBuffers(FN1)
 FlushFileBuffers(FN2)
 CloseFile(FN1)
 CloseFile(FN2)
 DeleteFile(App_Path()+"Bitmuster.dat")
 RenameFile(App_Path()+"~bimutmp.dat",App_Path()+"Bitmuster.dat")
 ProcedureReturn muster
 EndProcedure
 
 Procedure Bitmuster_Sortieren()
 Protected FN.l, tmp.s, schalter.l,zae.l
 
 FN = ReadFile(#PB_Any, App_Path()+"Bitmuster.dat")
 ;Debug app_path()
 schalter=0
 zae=0
 
 Repeat
 tmp=Trim(ReadString(FN))
 If tmp<>""
 If Left(tmp,1)="[" And schalter=1 : schalter=0 : EndIf
 ;Debug tmp
 If schalter=1
 Bitmuster(zae)\RomTyp      =Val(StringField(tmp,2,";"))
 Bitmuster(zae)\Bitmuster   =StringField(tmp,3,";")
 Bitmuster(zae)\Beschreibung=StringField(tmp,4,";")
 zae=zae+1
 EndIf
 If tmp="[Bitmuster]" : schalter=1 : EndIf
 EndIf
 Until Eof(FN) Or zae=500
 CloseFile(FN)
 zae=zae-1
 ;--- Sortieren
 SortStructuredArray(Bitmuster(), 2, OffsetOf(Daten\Bitmuster), #PB_Sort_String, 0, zae)
 
 
 EndProcedure
 
 
 
 
 If OpenWindow(0, 200, 200, 510, 400, " Bitmuster Datenbank", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
 
 If OpenWindow(1, 200, 200, 290, 140, " Eintrag", #PB_Window_WindowCentered | #PB_Window_SystemMenu |#PB_Window_Invisible , WindowID(0) )
 If CreateGadgetList(WindowID(1))
 TextGadget  (100,  5,  5,100, 20, "Bitmuster :")
 StringGadget(101,  5, 25, 50, 20, "")
 TextGadget  (102,  5, 50,100, 20, "Beschreibung :")
 StringGadget(103,  5, 70,280, 20, "")
 ButtonGadget(104,  5,110, 90, 20, "Speichern")
 ButtonGadget(105,195,110, 90, 20, "Abbrechen")
 EndIf
 EndIf
 
 
 If CreateGadgetList(WindowID(0))
 ComboBoxGadget(0, 5, 5, 100, 390)
 Romtypen_Lesen()
 ;SetGadgetItemState(0, 0, 1)
 SetGadgetState(0, 0)
 ListViewGadget(1, 110, 5, 300, 390)
 Bitmuster_Lesen(0)
 SetGadgetItemState(1, CountGadgetItems(1)-1, 1)
 SetGadgetState(1, CountGadgetItems(1)-1)
 ButtonGadget(2,415,5,90,20,"Neu")
 ButtonGadget(3,415,30,90,20,"Bearbeiten")
 ButtonGadget(4,415,55,90,20,"Löschen")
 DisableGadget(4, 1)
 
 EndIf
 
 Repeat
 EventID = WaitWindowEvent()
 
 Select EventID
 Case #PB_Event_CloseWindow
 If GetActiveWindow() = 1
 HideWindow(1,1)
 DisableWindow(0,0)
 Else
 Quit = 1
 EndIf
 Case #PB_Event_Gadget
 Select EventGadget()
 Case 0
 If EventType()=1
 Bitmuster_Lesen(GetGadgetItemData(0,GetGadgetState(0)))
 If CountGadgetItems(1)=0
 AddGadgetItem(1,-1,"keine Einträge")
 DisableGadget(3,1)
 Else
 DisableGadget(3,0)
 EndIf
 SetGadgetItemState(1,CountGadgetItems(1)-1 , 1)
 SetGadgetState(1, CountGadgetItems(1)-1)
 EndIf
 Case 2
 HideWindow(1,0)
 SetActiveWindow(1)
 SetWindowTitle(1," neuer Eintrag")
 SetGadgetData(100,-1)                   ;Neu
 SetGadgetData(102,GetGadgetState(0))    ;Romtyp
 SetGadgetText(101,"")
 SetGadgetText(103,"")
 DisableWindow(0,1)
 SetActiveGadget(101)
 Case 3
 les.s=GetGadgetItemText(1,GetGadgetState(1),0)
 If les<>"keine Einträge" And les<>""
 tmp1.l=GetGadgetItemData(1,GetGadgetState(1))
 HideWindow(1,0)
 SetWindowTitle(1," Eintrag ändern ("+Str(tmp1)+")")
 SetGadgetData(100,tmp1)               ;Index Eintrag
 SetGadgetData(102,GetGadgetState(0)) ;Romtyp
 SetGadgetText(101,Trim(StringField(les,1,";")))
 SetGadgetText(103,Trim(StringField(les,2,";")))
 SetActiveWindow(1)
 DisableWindow(0,1)
 SetActiveGadget(101)
 EndIf
 Case 104
 tmp2.s=Trim(GetGadgetText(101))
 If tmp2<>""
 tmp3.s=Trim(GetGadgetText(103))
 If tmp3<>""
 tmp2=ReplaceString(tmp2,";",",",1,1)
 tmp3=ReplaceString(tmp3,";",",",1,1)
 If GetGadgetData(100)=-1
 ;--- Neu
 If CountGadgetItems(1)=1 And GetGadgetItemText(1,0,0)="keine Einträge"
 ClearGadgetItemList(1)
 EndIf
 Idx=Bitmuster_Neu(tmp2,tmp3,GetGadgetData(102))
 AddGadgetItem(1, -1, tmp2+" ; "+tmp3)
 tmp1=CountGadgetItems(1)-1
 SetGadgetItemData(1, tmp1,Idx)
 SetGadgetItemState(1,tmp1, 1)
 SetGadgetState(1,tmp1)
 Else
 ;--- Ändern
 Bitmuster_Aendern(GetGadgetData(100),tmp2,tmp3,GetGadgetData(102))
 tmp1=GetGadgetState(1)
 SetGadgetItemText(1,tmp1,tmp2+" ; "+tmp3,1)
 SetGadgetItemState(1,tmp1, 1)
 SetGadgetState(1,tmp1)
 EndIf
 HideWindow(1,1)
 DisableWindow(0,0)
 Else
 MessageRequester("Warnung !","Feld 'Beschreibung' darf nicht leer sein !"+Space(5),48)
 EndIf
 Else
 MessageRequester("Warnung !","Feld 'Bitmuster' darf nicht leer sein !"+Space(5),48)
 EndIf
 Case 105
 HideWindow(1,1)
 DisableWindow(0,0)
 EndSelect
 EndSelect
 
 Until Quit = 1
 CloseWindow(1)
 
 EndIf
 
 End
 ; IDE Options = PureBasic v4.02 (Windows - x86)
 ; CursorPosition = 188
 ; FirstLine = 19
 ; Folding = g-
 ; Watchlist = Bitmuster_Lesen()>FN;Bitmuster_Lesen()>tmp
 | 
 Hier ist die Konfigurationsdatei "Bitmuster.dat" :
 
 
 
 | Quellcode: |  | [Typen]0;EMR U881
 1;ROM U401
 2;ROM U505
 3;ROM U2616
 4;ROM U2364
 5;ROM U2365
 [Bitmuster]
 0;0;004;noch unbekannt
 1;1;005;Zeichengenerator ?
 2;2;068;PC1715 Floppycontroller ROM1
 3;2;069;PC1715 Floppycontroller ROM2
 4;2;075;LC80 ROM1
 5;2;076;LC80 ROM2
 6;3;100;Z1013 Zeichensatz
 7;3;111;Zeichensatz KC87.1
 8;3;115;Zeichensatz KC87.2
 9;3;204;Z1013 Betriebssystem 2.02
 
 | 
 Viel Spass !
 |