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
По указателям не пашет - забивает нулями и всё.