// ===================================================
// Листинг 24. Блокирование логических записей
//
// Файл loglock\loglock.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 LogLogicalRecord(char *, BYTE, WORD);
extern "C" int LockLogicalRecordSet(WORD);
extern "C" void ReleaseLogicalRecordSet(void);
extern "C" void ClearLogicalRecordSet(void);

void main(void) {

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

	char LogicalRecordName[100];

	int ccode;

	printf("\n*LOGLOCK* (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(LogicalRecordName);

		if(LogicalRecordName[0] == '-') break;

// Добавляем логическую запись в набор

		ccode = LogLogicalRecord(LogicalRecordName, 0, 0);

		if(!ccode)
			printf("Логическая запись %s добавлена к списку\n",
						 LogicalRecordName);
		else
			printf("Ошибка при добавлении %02.2X\n", ccode);
	}

// Блокируем набор логических записей

	ccode = LockLogicalRecordSet(0);

	if(!ccode)
		printf("Логические записи заблокированы\n");
	else
		printf("Ошибка при блокировании "
			  "логических записей %02.2X\n", ccode);

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

// Разблокируем набор логических записей

	ReleaseLogicalRecordSet();

// Удаляем набор логических записей

	ClearLogicalRecordSet();
}

