// ===================================================
// Листинг 21. Блокирование файлов
//
// Файл flock\flock.cpp
//
// (C) A. Frolov, 1993
// ===================================================

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>

#define BYTE unsigned char
#define WORD unsigned int

extern "C" int GetNetWareShellVersion(char *,char *, char *);
extern "C" int LogFile(char *, BYTE, WORD);
extern "C" int LockFileSet(WORD);
extern "C" void ReleaseFileSet(void);
extern "C" void ClearFileSet(void);


void main(void) {

	char MajorVersion=0;
	char MinorVersion=0;
	char Revision=0;

	char FilePath[255];

	int ccode;

	printf("\n*FLOCK* (C) Frolov A., 1993\n");

// Проверяем наличие сетевой оболочки

	asm push si
	GetNetWareShellVersion(&MajorVersion,
			&MinorVersion, &Revision);
	asm pop si

	if(MajorVersion == 0) {
		printf("\nОболочка NetWare не загружена\n");
		return;
	}

// Создаем набор файлов, которые будут заблокированы

	for(;;) {
		printf("\nВведите путь к файлу или '-':");
		gets(FilePath);

		strupr(FilePath);
		if(FilePath[0] == '-') break;

// Добавляем файл в набор

		ccode = LogFile(FilePath, 0, 0);

		if(!ccode)
			printf("Файл %s добавлен к списку\n", FilePath);
		else
			printf("Ошибка при добавлении %02.2X\n", ccode);
	}

// Блокируем набор файлов

	ccode = LockFileSet(0);

	if(!ccode)
		printf("Файлы заблокированы\n");
	else
		printf("Ошибка при блокировании "
			  "файлов %02.2X\n", ccode);

	printf("Для разблокирования файлов нажмите любую клавишу\n");
	getch();

// Разблокируем набор файлов

	ReleaseFileSet();

// Удаляем набор файлов

	ClearFileSet();
}

