Basic Univers


; code by Dobro
Declare SetStringManipulationBufferSize(Bytes)

SetStringManipulationBufferSize(1048576)



If OpenWindow(1, 0, 0, 200, 50, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget , "")
 
  NomFichier$ = OpenFileRequester("dobro_datagenerator", "c:\", "Fichiers image|*.bmp", 0 )
 
  If LoadImage(0, NomFichier$)
    Hauteur = ImageHeight()
    Largeur = ImageWidth()
  num = CreateFile(#PB_Any, "data.pb") : ; ceci ecrit le fichier pb (txt) pour etre charge dans l'editeur !!
      WriteStringN("; codé Par Dobro img to data"): ; ecrit la premiere ligne de code
      WriteStringN("Declare WindowCallback(WindowID,message,wParam,lParam)")
      WriteStringN("largeur = " + Str(Largeur)): ; ecrit la variable
      WriteStringN("hauteur = " + Str(Hauteur))
      WriteStringN("CreateImage(1, Largeur, Hauteur)")
     
      WriteStringN("For i = 0 To Largeur -1")
      WriteStringN("  For j = 0 To Hauteur -1 ")
      WriteStringN("    Read a.l ")
      WriteStringN("    If StartDrawing(ImageOutput())")
      WriteStringN("      Plot(i,j,a.l) ")
      WriteStringN("      StopDrawing() ")
      WriteStringN("    EndIf")
      WriteStringN("  Next j")
      WriteStringN("Next i")
     
      WriteStringN(" titre$ = " + Chr($22)+ NomFichier$ + Chr($22))
      ; dessous: genere le code qui permet de relire les datas !!
      ; ouaaa du code qui s'autoecrit !!! :-D
      WriteStringN("If OpenWindow (1, 0, 0, Largeur, Hauteur, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget,titre$)")
      WriteStringN("  SetWindowCallback(@WindowCallback())  ")
      WriteStringN("  If StartDrawing(WindowOutput())")
      WriteStringN("    DrawImage(UseImage(1), 0, 0)  ")
     WriteStringN("  StopDrawing() ")
      WriteStringN("  EndIf")
      WriteStringN("  Repeat")
      WriteStringN("  Until WaitWindowEvent()= #PB_EventCloseWindow")
      WriteStringN("EndIf ")
      WriteStringN("End ")
     
      WriteStringN("Procedure WindowCallback(WindowID,message,wParam,lParam)")
      WriteStringN("  res=#PB_ProcessPureBasicEvents")
      WriteStringN("  Select message ")
      WriteStringN("  Case #WM_PAINT")
      WriteStringN("  StartDrawing(WindowOutput())")
      WriteStringN("    DrawImage(UseImage(1), 0, 0)  ")
      WriteStringN("  StopDrawing() ")
      WriteStringN("  ProcedureReturn #True  ")
      WriteStringN("  EndSelect")
      WriteStringN("  ProcedureReturn res")
      WriteStringN("EndProcedure ")
      ;************************
     
      Resultat = StartDrawing(WindowOutput())
      DrawText("encodage en cours " + Chr(10)+" attendre la fermeture de cette fenetre")
      StopDrawing()
     
      WriteStringN("DataSection") : ; commence la section des data
     
      For i = 0 To  Largeur - 1
        ligne.s = "data.l "  ; insere la fonction data.l avant les valeurs
        For j = 0 To Hauteur - 1
          StartDrawing(ImageOutput() )
          ligne.s = ligne.s + Str(Point(i, j))+",": ; met des virgules entre les datas
          StopDrawing()
        Next j
        ligne.s = Left(ligne.s, Len(ligne.s)- 1) : ; retire la derniere virgule de la ligne
        WriteStringN(ligne.s): ; ecrit une ligne entiere de data
      Next i
      WriteStringN(" "): ; saute une ligne vide
      WriteStringN("EndDataSection") : ; ecrit la fin de section data
      CloseFile(num)
    EndIf
    CloseWindow(0)

EndIf

End


Procedure SetStringManipulationBufferSize(Bytes)
  PBStringBase.l = 0
  PBMemoryBase.l = 0
  !MOV eax, dword [PB_StringBase]
  !MOV [esp + 4], eax
  !MOV eax, dword [PB_MemoryBase]
  !MOV [esp + 8], eax
  HeapReAlloc_(PBMemoryBase, #GMEM_ZEROINIT, PBStringBase, Bytes)
  !MOV dword [_PB_StringBase], eax
EndProcedure