Code: Alles auswählen
;===============================================================================================
; NFO VIEWER RAW VERSION for ASCII / ANSI SCENE ART NFO FILES
; PUREBASIC v5.3 Windows 7 x86 & x64 tested
;
; UDG in MAY 2015
; feel free to use
;
; REMEMBER: SET IN COMPILER As FOLLOW: CHECK Box - Create unicode executable !!!!!
;
; Thats it.
;
; see Pic.
;===============================================================================================
EnableExplicit
Global Btn_Nfo, load, paste, save
Enumeration
#Window_0
EndEnumeration
Enumeration
#Frame3D_big
#Text_Nfo
#Editor_Nfo
#Font_Editor_Nfo_NFO
#Text_Info
#Editor_Info
#Font_Editor_Info
#Text_Releasedatum
#Date
#btnPaste
#btnPaste2
#btnRemove
#btnLoad
#btnSave
EndEnumeration
;}
Structure CharField
c.c[0]
EndStructure
Procedure.s ReadNFO(File$, *CodePage)
; Liest eine NFO-Datei ein.
; File$ = Dateiname der NFO-Datei
; *CodePage = Zeiger auf die Ersatz-Zeichen für die ASCII-Werte 128-255
Protected Text$
Protected *c.character
Protected a.a
Protected *t.CharField = *CodePage
Protected fmt
If ReadFile(1, File$)
fmt = ReadStringFormat(1) ; Dateiformat ermitteln
If fmt = #PB_Ascii ; ASCII?
Text$ = Space(Lof(1)) ; Stringspeicher für Text
*c = @Text$ ; Zeiger auf erstes Zeichen im String
While Not Eof(1) ; solange Dateiende nicht erreicht ist
a = ReadAsciiCharacter(1) ; ASCII-Zeichen lesen
If a < 128 ;
*c\c = a ; kleine Zeichen übernehmen
Else
*c\c = *t\c[a-128] ; größere Zeichen ersetzen
EndIf
*c + SizeOf(character)
Wend
Else ; Unicode oder UTF8?
Text$ = ReadString(1, fmt | #PB_File_IgnoreEOL) ; Text einfach laden
EndIf
CloseFile(1)
EndIf
ProcedureReturn Text$
EndProcedure
Procedure WriteNFO(File$, Text$, *CodePage)
; Speichert eine NFO-Datei
; File$ = Dateiname der NFO-Datei
; Text$ = zu speichernder Inhalt
; *CodePage = Zeiger auf die Ersatz-Zeichen für die ASCII-Werte 128-255
If Text$ = "" : ProcedureReturn : EndIf ; Abbrechen, wenn kein Text da ist
; zuerst Rückwärts-Ersetztabelle aufbauen
Dim Rep.a($ffff)
Protected *t.charField = *CodePage
Protected i
For i = 128 To 255
Rep(*t\c[i-128]) = i
Next i
; Datei schreiben
If CreateFile(1, File$)
Protected *c.character = @Text$ ; Zeiger auf erstes Zeichen
While *c\c ; solange Zeichen da sind
If *c\c < 128 ; kleine Zeichen
WriteAsciiCharacter(1, *c\c) ; speichern
ElseIf Rep(*c\c) ; große Zeichen mit CP850-Ersatz
WriteAsciiCharacter(1, Rep(*c\c)) ; Ersatz speichern
Else ; große Zeichen ohne CP850-Ersatz
WriteAsciiCharacter(1, '.') ; Punkt speichern
Debug "Zeichen nicht in CodePage 850"
EndIf
*c + SizeOf(character)
Wend
CloseFile(1)
EndIf
EndProcedure
DataSection
TableCP850:
Data.s "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ "
EndDataSection
Define.l Event, EventWindow, EventGadget, EventType, EventMenu, hWnd, cur1, Eingabetext1$, Eingabetext2$, Eingabetext3$, File$, cursorpos.POINT, fmt, Text$, *c.character
hWnd = OpenWindow(#Window_0, 398, 8, 710, 766, "NFO MAKER-VIEWER", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
; Eigener Cursor
SetClassLong_(load, #GCL_HCURSOR, 0)
SetClassLong_(paste, #GCL_HCURSOR, 0)
SetClassLong_(Btn_Nfo, #GCL_HCURSOR, 0)
SetClassLong_(save, #GCL_HCURSOR, 0)
; Cursor laden
cur1 = LoadCursor_(0, #IDC_HAND)
;===============================================================================================
;- NFO FIELD
;===============================================================================================
TextGadget(#Text_Nfo, 47, 30, 80, 15, "ASCII NFO:") ;x;y;länge;höhe
EditorGadget(#Editor_Nfo, 45, 45, 620, 380,#PB_Editor_WordWrap) ;x;y;länge;höhe;Zeilenumbruch am Ende
SetGadgetFont(#Editor_Nfo, LoadFont(#Font_Editor_Nfo_NFO, "Consolas", 10, #PB_Font_HighQuality)) ; Button Font
TextGadget(#Text_Info, 47, 435, 90, 15, "Information TEXT:") ;x;y;länge;höhe
EditorGadget(#Editor_Info, 45, 450, 620, 180,#PB_Editor_WordWrap) ;x;y;länge;höhe;Zeilenumbruch am Ende
SetGadgetFont(#Editor_Info, LoadFont(#Font_Editor_Info, "Consolas", 10, #PB_Font_HighQuality)) ; Button Font
TextGadget(#Text_Releasedatum, 45, 640, 120, 13, "NFO Releasedatum") ;x;y;länge;höhe
DateGadget(#Date, 45, 655, 155, 20, "%dd/%mm/%yyyy", Date()); get current Date
Btn_Nfo = ButtonGadget(#btnRemove,45,690,70,50,"Clear All") ; Button: Lösche Inhalt in NFO Feld / BTN del Content in EditorGadget
paste = ButtonGadget(#btnPaste, 125, 690, 140, 50, "paste ASCII from clipboard")
paste = ButtonGadget(#btnPaste2, 276, 690, 140, 50, "paste Text from clipboard")
load = ButtonGadget(#btnLoad, 485, 690, 85, 50, "lade NFO")
save = ButtonGadget(#btnSave, 580, 690, 85, 50, "speicher NFO")
;===============================================================================================
FrameGadget(#Frame3D_big, 10, 10, 690, 740, "Info Viewer")
;===============================================================================================
;
;- HAUPTSCHLEIFE / MAIN
;
;===============================================================================================
Repeat
Event = WaitWindowEvent()
Gosub changecursor
;===============================================================================================
;- LESE VARIABELN AUS DEN EINGABEFELDERN / READ VARs FROM EditorGadget FIELD
;===============================================================================================
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #btnSave ; Speichern
Eingabetext1$= GetGadgetText(#Editor_Nfo); Eingabe auslesen , read input by EditorGadget Field
Eingabetext2$= GetGadgetText(#Date) ; Eingabe auslesen , read input by EditorGadget Field
Eingabetext3$= GetGadgetText(#Editor_Info); Eingabe auslesen , read input by EditorGadget Field
;===============================================================================================
;- DATEI SPEICHERN AUFRUFEN / call save dialog
;===============================================================================================
File$=SaveFileRequester("SAVE NFO FILE", "C:\bbcode.nfo ", "NFO FILE(*.nfo)|*.nfo", 0)
;===============================================================================================
;- SPEICHERE VARIABELN AUS DEN EINGABEFELD IN EINE *.NFO DATEI / Save VARs from input Field to *.NFO
;===============================================================================================
; als ASCII in CP850 speichern
WriteNFO(File$, Eingabetext1$ + #CRLF$ + Eingabetext2$ + #CRLF$ + Eingabetext3$, ?TableCP850)
Case #btnLoad ; NFO laden
File$ = OpenFileRequester("Load NFO File", "", "NFO File (*.nfo)|*.nfo", 0)
Text$ = ReadNFO(File$, ?TableCP850)
If Text$ > ""
SetGadgetText(#Editor_Nfo, Text$)
EndIf
Case #btnRemove ; Anzeige löschen
ClearGadgetItems(#Editor_Nfo)
ClearGadgetItems(#Editor_Info)
Case #btnPaste
SendMessage_(GadgetID(#Editor_Nfo),#WM_PASTE,0,0)
Case #btnPaste2
SendMessage_(GadgetID(#Editor_Info),#WM_PASTE,0,0)
EndSelect
Case #PB_Event_CloseWindow
;===============================================================================================
;- PROGRAMM BEENDEN / End
;===============================================================================================
EventWindow = EventWindow()
If EventWindow = #Window_0
DestroyCursor_(cur1)
CloseWindow(#Window_0)
Break
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
;
; Ende
;
DestroyCursor_(cur1)
End
;
; SUBROUTINE zum wechseln des MouseCursors / SUB to change Cursor behavior
;
changecursor:
GetCursorPos_(cursorpos.POINT)
MapWindowPoints_(0, hWnd, cursorpos, 1)
Select ChildWindowFromPoint_(hWnd, cursorpos\x | cursorpos\y << 32)
Case load : SetCursor_(cur1) ; Cursor ueber/ over btn_load
Case paste : SetCursor_(cur1) ; Cursor ueber/ over btn_paste
Case Btn_Nfo : SetCursor_(cur1) ; Cursor ueber/ over btn_NFO
Case save : SetCursor_(cur1) ; Cursor ueber/ over save
EndSelect
Return
Wenn Text von z.B. einer Internet Seite kopiert und in das Info Feld eingefügt wird, ist nach Abspeichern der Text, 1 Zeichen nach rechts eingerückt.
Die Textformatierung des eingefügten Textes müsste entfernt werden per Code. Denn wenn ich etwas von hand eintippe funktioniert es
Ich hoffe es kann jemand helfen.
VG.