beautypg.com

Criterr.asm (microsoft c & turbo c) – Measurement Computing Personal488 rev.3.0 For DOS & Windows 3.Xi User Manual

Page 77

background image

8E. Microsoft C

II. SOFTWARE GUIDES - 8. Driver488/DRV

II-62

Personal488 User’s Manual, Rev. 3.0

receive buffer,

chars

. This means

chars

must be an array of known size, for example,

char chars[256]

, not

char*chars

.

IEEEPRTF

and

IEEESCNF

are IEEE 488 versions of

PRINTF

and

SCANF

, respectively.

int ieeeprtf(format,...)
char *format
int ieeescnf(format,a,b,c,d,e)
char *format,*a,*b,*c,*d,*e

The

IEEEPRTF

accepts a format string and a list of arguments. It formats its arguments according

to the specified format and sends the formatted string to Driver488/DRV. The

IEEESCNF

accepts

a format string and up to 5 pointers (to the types specified in the format string). It reads a string of
up to 256 bytes from Driver488/DRV, terminates it with a zero, converts it according to the format
string, and places the converted values into the variables pointed to by the specified pointers.

RAWMODE

sets the file specified by

handle

for “raw mode” I/O.

int rawmode(handle)
int handle

In “raw mode” MS-DOS does not interpret the characters received from the file. In particular,

control-Z

is not taken as end-of-file. “Raw mode” is usually appropriate for IEEE 488

communications because it does not interfere with the transfer of binary data and because it is
much more efficient than “non-raw mode” I/O.

IEEEINIT

establishes communications with Driver488/DRV and configures it for use with C.

int ieeeinit()

It first opens the file

IEEE

for both reading and writing and puts the file descriptor into

IEEE

. It

then puts the file into “raw mode”. Driver488/DRV is then initialized by sending the

IOCTL

“BREAK”

and

RESET

commands. Normal output from C is terminated by a new-line (line feed)

character, and returned strings should be terminated by a null, so

EOL OUT LF

and

EOL IN $0

commands are then issued. Finally a

FILL ERROR

command is issued to enable

SEQUENCE - NO

DATA AVAILABLE

error detection. If an error is detected during any of these commands,

IEEEINIT

returns a

-1

, otherwise it returns a zero (

0

).

CRITERR.ASM (Microsoft C & Turbo C)

Normally, when Driver488/DRV detects an error, perhaps due to a syntax error in a command, it
responds with an I/O error to DOS. When this happens, DOS normally issues an

ABORT

,

RETRY

or

IGNORE

message and waits for a response from the keyboard. There is no way for the user’s program

to detect such an error, determine the cause, and take appropriate action. However, DOS does provide
a method of redefining the action to be taken on such a “critical error”.

CRITERR.ASM

contains a

critical error handler that, when invoked, makes it appear to the calling program that some less-critical
error has occurred. The critical error handler is installed by

CRIT_ON()

and removed by

CRIT_OFF()

.The critical error handler is also automatically removed by DOS when the program exits.

The following program fragment demonstrates the use of the critical error handler:

#include “criterr.h”
crit_on(ieee);
if (ieeewt(“output 16;F0X”) == -1) {
printf(“Error writing F0X to device 16, \n”);
crit_off();
ioctl_wt(ieee,"break",5);
ieeewt(“eol out lf\r\n”);
ieeewt(“status\n”);
ieeerd(response);
printf(“status = %s\n”,response);
crit_on(ieee);
}

We must first

#include

the header file with the definitions of the critical error routines. We then

enable critical error trapping with

CRIT_ON

which takes as a parameter the handle of the file for which