LABEL_START:
InputFileName$ = OpenFileRequester("Выберите файл для кодирования.", "","|*.*|", 0)
If FileSize(InputFileName$) < 1
MessageRequester("Кодер.", "Файл '" + GetFilePart(InputFileName$) + "' не найден или нулевого размера.")
End
EndIf
LABEL_SAVEFILE:
OutputFileName$ = SaveFileRequester("Выберите результирующее имя файла.", "", "|*.*|", 0)
If FileSize(OutputFileName$) > -1
If MessageRequester("Кодер.", "Файл назначения '" + GetFilePart(OutputFileName$) + " 'уже существует. Перезаписать?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_No
Goto LABEL_SAVEFILE
EndIf
EndIf
If OutputFileName$ = ""
End
EndIf
InputFile = ReadFile(#PB_Any, InputFileName$)
If InputFile = 0
MessageRequester("Кодер.", "Невозможно открыть файл '" + GetFilePart(InputFileName$) + "' для чтения.")
End
EndIf
OutputFile = CreateFile(#PB_Any, OutputFileName$)
If OutputFile = 0
MessageRequester("Кодер.", "Невозможно создать файл '" + GetFilePart(OutputFileName$) + "' для записи.")
End
EndIf
InputFileSize = Lof(InputFile)
*InputBuffer = AllocateMemory(InputFileSize)
If *InputBuffer = 0
MessageRequester("Кодер.", "Невозможно выделить память для чтения входного файла.")
End
EndIf
ReadData(InputFile, *InputBuffer, InputFileSize)
OutputFileSize = InputFileSize + SizeOf(Byte)
*OutputBuffer.Ascii = AllocateMemory(OutputFileSize)
If *OutputBuffer = 0
MessageRequester("Кодер.", "Невозможно выделить память для записи результата.")
End
EndIf
*FirstPointer.Ascii = *InputBuffer
*SecondPointer.Ascii = *InputBuffer + InputFileSize - SizeOf(Byte)
*ResultPointer.Ascii = *OutputBuffer + SizeOf(Byte)
Repeat
Select State
Case 0
*ResultPointer\a = *FirstPointer\a
*FirstPointer + SizeOf(Byte)
Case 1
*ResultPointer\a = *SecondPointer\a
*SecondPointer - SizeOf(Byte)
EndSelect
If *FirstPointer = *SecondPointer
*ResultPointer\a = *FirstPointer\a
*OutputBuffer\a = State
Break
EndIf
State = ~State
ForEver
WriteData(OutputFile, *OutputBuffer, OutputFileSize)
FreeMemory(*InputBuffer)
FreeMemory(*OutputBuffer)
CloseFile(InputFile)
CloseFile(OutputFile)
If MessageRequester("Кодер.", "Ещё?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
Goto LABEL_START
EndIf
End 0По указателям не пашет - забивает нулями и всё.