; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=1397&highlight=
; Author: Thorsten (updated for PB4.00 by blbltheworm)
; Date: 18. June 2003
; OS: Windows
; Demo: No


; Procedures & Callbacks for loading + saving data in EditorGadget (Richedit)
; ----------------------------------------------------------------------------

; Hinweis: 
; Die Idee und das Grundgerüst zum laden stammt von El_Choni 
; aus dem englischen Forum - ich habe es etwas vereinfacht und 
; die schreibe - Procedure erstellt.


;- Load *******
Procedure StreamFileIn_Callback(hFile, pbBuff, cb, pcb) 
  ProcedureReturn ReadFile_(hFile, pbBuff, cb, pcb, 0)!1 
EndProcedure 

; Hier eine Procedure + Callback zum laden einer Datei: 

; FileID freie ID für Dateioperationen 
; File Die Datei ggf. mit Pfad 
; Gadget Gadget ID vom EditorGadget() 

Procedure FileSTREAMIN(FileID.l, File.s, Gadget.l) 
  
  ;Procedure zum streamen einer Datei in das RichEdit 
  ;Control 

  Protected StreamData.EDITSTREAM 
  
  ;Wenn die Datei geöffnet werden kann, fortfahren.  
  If ReadFile(FileID, File)    
        
    ;Das Handle der Datei speichern 
    StreamData\dwCookie = FileID(FileID) 
    StreamData\dwError = #Null 
    
    ;Die Adresse der Callback Procedure speichern 
    StreamData\pfnCallback = @StreamFileIn_Callback() 
    
    ;Das RichEdit Control anweisen, den Stream zu aktivieren 
    SendMessage_(GadgetID(Gadget), #EM_STREAMIN, #SF_TEXT, @StreamData) 
    
    ;Datei schliessen 
    CloseFile(FileID) 
    
  EndIf 

EndProcedure 
 

;- Save *******
Procedure StreamFileOut_Callback(hFile, pbBuff, cb, pcb) 
  ProcedureReturn WriteFile_(hFile, pbBuff, cb, pcb, 0)!1 
EndProcedure 
 

; Hier eine Procedure + Callback zum speichern einer Datei: 

; FileID freie ID für Dateioperationen 
; File Die Datei ggf. mit Pfad 
; Gadget Gadget ID vom EditorGadget() 

Procedure FileStreamOut(FileID.l, File.s, Gadget.l) 

  Protected StreamData.EDITSTREAM 
  
  ;Wenn die Datei erzeugt werden kann, fortfahren.  
  If CreateFile(FileID, File) 
        
    ;Das Handle der Datei speichern 
    StreamData\dwCookie = FileID(FileID) 
    StreamData\dwError = #Null 
    
    ;Die Adresse der Callback Procedure speichern 
    StreamData\pfnCallback = @StreamFileOut_Callback() 
    
    ;Das RichEdit Control anweisen, den Stream zu aktivieren 
    SendMessage_(GadgetID(Gadget), #EM_STREAMOUT, #SF_TEXT, @StreamData) 
    
    ;Datei schliessen 
    CloseFile(FileID) 
    
  EndIf 

EndProcedure 
 

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -
; EnableXP