// ===================================================
// Листинг 9. Отображение локальных дисков на
//            сетевые каталоги
//
// Файл dirmap\dirmap.cpp
//
// (C) A. Frolov, 1993
// ===================================================

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

#define BYTE unsigned char
#define WORD unsigned int

extern "C" int GetNetWareShellVersion(char *,char *, char *);
extern "C" int AllocPermanentDirectoryHandle(BYTE, char *,
						 char, BYTE*, BYTE*);

void main(int argc, char *argv[]) {

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

	BYTE NewDirectoryHandle;
	BYTE RightsMask;

	int ccode;

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

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

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

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

// Необходимо задать букву, обозначающую имя
// локального диска и путь к сетевому каталогу

	if(argc < 3) {
		printf("Укажите локальный диск и путь "
			"к каталогу, \nнапример: dirmap f sys:users\n");
		return;
	}

// Параметры должны быть заданы заглавными буквами

	strupr(argv[1]);
	strupr(argv[2]);

// Создаем новый индекс каталога и отображаем диск

	ccode = AllocPermanentDirectoryHandle(0,
		argv[2], argv[1][0],
		&NewDirectoryHandle, &RightsMask);

// Если ошибок не было, выводим индекс каталога
// и маску прав для каталога

	if(!ccode)
		printf("Индекс каталога: %d, маска прав: %02.2X\n",
			NewDirectoryHandle, RightsMask);
	else
		printf("Ошибка %02.2X\n", ccode);
}

