Локальные сети персональных компьютеров. Работа с сервером Novell NetWare



Программа MSGRCV


Программа MSGRCV (листинг 29) изменяет текущий режим приема сообщений, блокируя автоматическую выдачу сетевой оболочкой приходящих сообщений в нижней строке экрана. Программа сама принимает эти сообщения и сама выводит их в стандартный поток вывода.

Перед завершением работы восстанавливается старый режим приема сообщений.

// =================================================== // Листинг 29. Прием сообщений // Файл msgrcv\msgrcv.cpp // // (C) A. Frolov, 1993 // ===================================================

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

#define WORD unsigned int #define BYTE unsigned char

extern "C" int GetNetWareShellVersion(char *,char *, char *); extern "C" int GetBroadcastMessage(char*); extern "C" BYTE GetBroadcastMode(void); extern "C" void SetBroadcastMode(BYTE);

void main(void) {

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

BYTE OldBroadcastMode; char MessageBuffer[56]; int ccode;

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

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

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

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

// Сохраняем старый режим приема сообщений

OldBroadcastMode = GetBroadcastMode();

// Устанавливаем режим, при котором сообщения от файл-сервера и поль- // зователей записываются в буфер, но автоматически не отображаются

SetBroadcastMode(3);

// Ожидаем прихода сообщения

for(;;) {

// Извлекаем сообщение из буфера

ccode = GetBroadcastMessage(MessageBuffer); if(ccode) break;

// Если сообщение есть в буфере, выводим его

if(MessageBuffer[0] != '\0') { printf(">>> %s\n", MessageBuffer); }

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

if(kbhit()) break; } // Восстанавливаем старый режим приема сообщений

SetBroadcastMode(OldBroadcastMode); }




Содержание  Назад