CASE state OF
0: (*Открытие файла - этап 1*)
res:=OwenFileOpenAsync(Queue[0],'r',ADR(handle));(*возвращает дескриптор файла, либо 0 (в некоторых случаях 4 294 967 295 или -1) в случае ошибки*)
IF res=ASYNC_WORKING THEN
state:=1;(*нет ошибок, переход на открытие файла этап 2*)
ELSE
state:=0;
END_IF
1: (*Открытие файла - этап 2*)
res:=OwenFileOpenAsync(Queue[0],'r',ADR(handle));
IF res=ASYNC_DONE THEN (*если "готов", и нет ошибок, то переход в состояние 2*)
IF handle<>0 THEN
state:=11;(*нет ошибок, переход на чтение длины файла 1*)
ELSE
state:=0;(*иначе можно перейти на 1 этап открытия файла, либо предусмотреть собственное действие самостоятельно *)
END_IF
ELSIF res<0 THEN
state:=0;
END_IF
11: (*Чтение размера, этап 1*)
res:=OwenFileGetSizeAsync(Queue[0],ADR(sizeRead));(*возвращает дескриптор файла, либо 0 (в некоторых случаях 4 294 967 295 или -1) в случае ошибки*)
IF res=ASYNC_WORKING THEN
state:=12;(*нет ошибок, переход на открытие файла этап 2*)
ELSE
state:=4;
END_IF
12: (*Чтение размера, этап 2*)
res:=OwenFileGetSizeAsync(Queue[0],ADR(sizeRead));(*возвращает дескриптор файла, либо 0 (в некоторых случаях 4 294 967 295 или -1) в случае ошибки*)
IF res=ASYNC_DONE THEN
(*нет ошибок, переход на открытие файла этап 2*)
По условию либо state:=13; либо state:=2;
ELSE
state:=4;
END_IF
13: (*Установим начальную позиция для чтения этап 1*)
res:=OwenFileSetPosAsync(handle,posQueue,ADR(resul t));(*возвращает дескриптор файла, либо 0 (в некоторых случаях 4 294 967 295 или -1) в случае ошибки*)
IF res=ASYNC_WORKING THEN
state:=14;(*нет ошибок, переход на открытие файла этап 2*)
ELSE
state:=4;
END_IF
14: (*Установим начальную позиция для чтения этап 1*)
res:=OwenFileSetPosAsync(handle,posQueue,ADR(resul t));(*возвращает дескриптор файла, либо 0 (в некоторых случаях 4 294 967 295 или -1) в случае ошибки*)
IF res=ASYNC_DONE THEN
state:=2;(*нет ошибок, переход на открытие файла этап 2*)
ELSE
state:=4;
END_IF
2: (*Чтение из файл - этап 1*)
(*Читаем кусок из файла*)
res:=OwenFileReadAsync(handle,ADR(arrPostData), sizeRead, ADR(result));(*пишем данные *)
IF res=ASYNC_WORKING THEN
state:=3;(*нет ошибок, переход на запись файла этап 2, либо по усмотрению пользователя*)
ELSE
state:=4;(*иначе можно перейти на этап закрытия файла, либо предусмотреть собственное действие самостоятельно *)
END_IF
3: (*Запись в файл - этап 2*)
res:=OwenFileReadAsync(handle,ADR(arrPostData), sizeRead, ADR(result));(*пишем данные *)
IF res=ASYNC_DONE THEN
SysMemCpy(ADR(strAll),ADR(arrPostData),2048);
state:=4;
bGoGet:=TRUE;
ELSIF res<0 THEN
state:=0;
END_IF
4: (*Закрываем файл - этап 1*)
res:=OwenFileCloseAsync(handle, ADR(result));
IF res=ASYNC_WORKING THEN
state:=5;(*нет ошибок, переход на закрытие файла этап 2*, либо по усмотрению пользователя*)
ELSE
state:=0;(*иначе можно перейти на этап открытия файла, либо предусмотреть собственное действие самостоятельно *)
END_IF
5: (*Закрываем файл - этап 2*)
res:=OwenFileCloseAsync(handle, ADR(result));
IF res=ASYNC_DONE THEN
bDataRead:=FALSE;
handle:=0;
IF result=0 THEN
state:=0;(*если файл закрыт успешно, то выходим из условного оператора CASE *)
ELSE
state:=0;(*иначе всё равно выходим, либо предусмореть собственное действие*)
END_IF
ELSIF res<0 THEN (*выход, либо собственное действие*)
state:=0;
END_IF
ELSE state:=0;
END_CASE