 /*
 * Copyright(C) 2000 Проект ИОК
 *
 * Этот файл содержит информацию, являющуюся
 * собственностью компании Крипто Про.
 *
 * Любая часть этого файла не может быть скопирована,
 * исправлена, переведена на другие языки,
 * локализована или модифицирована любым способом,
 * откомпилирована, передана по сети с или на
 * любую компьютерную систему без предварительного
 * заключения соглашения с компанией Крипто Про.
 */

#include "ric_prj.h"
#include "limits.h" 

    // TODO: отличается от ric_file_open только одной строкой
DWORD trust_file_open(
    TSupSysContext *context,
    TSupSysInfo *info) {
    TReaderInfoOpen *inf = (TReaderInfoOpen*)info;
    DWORD code;
    TRICContext *ctx = (TRICContext*)context;

    SUPSYS_PRE_CONTEXT(context, TRICContext);
    SUPSYS_PRE_INFO(info, TReaderInfoOpen);
    SUPSYS_PRE(inf->mode_bits >= READER_MODEFLAG_BITS);

    if (inf->num < 7 && !ctx->application)
	return (DWORD)CPR_ERR_RDR_NEED_OPEN_FOLDER;

    code = trust_select_file(ctx, (unsigned char)inf->num,	// TODO: отличается от ric_file_open только одной строкой
			     &(ctx->file_length));
    if (code == (DWORD)ERROR_FILE_NOT_FOUND) {
	code = trust_select_application(ctx);
	if (code)
	    return code;
	code = trust_select_file(ctx, (unsigned char)inf->num, &(ctx->file_length));
    }
    if (code) {
	ctx->file_length = 0;
	return code;
    }
    ctx->file = (unsigned char)inf->num;
    ctx->status |= RIC_STATUS_FILE_SELECTED;
    return ERROR_SUCCESS;
}
