#ifdef __ALPHA #include #endif #include #include #include #include #include #include #include "dr_include:stru_acc.h" struct BOB { long bob_p_area[2]; long bob_l_va; long bob_l_buf; fandle bob_l_fan; long bob_l_handle[2]; } BOB; #define MAXBUF 1024 #define DISKBLOCKSIZE 512 int main (void) { long status; iosa *iostat; int chan; struct FAB fab; static char *filename = "gblsec.bck"; int i,ii; struct str_acc_num *acc_buf; lib$init_timer(); /* ** */ fab = cc$rms_fab; fab.fab$l_fna = filename; fab.fab$b_fns = strlen(fab.fab$l_fna); fab.fab$b_fac = FAB$M_GET; fab.fab$b_shr = FAB$M_NIL; fab.fab$l_fop = FAB$M_UFO; status = sys$open(&fab); if ( !(status & 1) ) sys$exit (status); chan = fab.fab$l_stv; status = lib$get_vm(&((MAXBUF+1) * DISKBLOCKSIZE),&BOB.bob_l_va); if (!(status&1)) sys$exit (status); /* ** Align buffer pool to 512 byte boundary for $IO_PERFORM */ BOB.bob_p_area[0] = BOB.bob_l_va + DISKBLOCKSIZE; BOB.bob_p_area[0] = BOB.bob_p_area[0] & (0xFFFFFFFF ^ (DISKBLOCKSIZE-1)); BOB.bob_p_area[1] = BOB.bob_p_area[0] + MAXBUF * DISKBLOCKSIZE; iostat = (iosa *)BOB.bob_p_area[0]; status = sys$create_bufobj(BOB.bob_p_area,BOB.bob_p_area, 0, 0,BOB.bob_l_handle); if ( !(status & 1) ) sys$exit (status); status = sys$io_setup(IO$_READVBLK, BOB.bob_l_handle, BOB.bob_l_handle, 0, 0, &BOB.bob_l_fan); if ( !(status & 1) ) sys$exit (status); /* ** The data buffer resides in second 512 byte chunk of buffer object */ BOB.bob_l_buf = BOB.bob_p_area[0] + DISKBLOCKSIZE; iostat->iosa$l_status = 1; for(i=1; (iostat->iosa$l_status & 1);) { status = sys$io_performw(BOB.bob_l_fan, chan, iostat, BOB.bob_l_buf, MAXBUF*DISKBLOCKSIZE, i); if (!(status&1)) sys$exit (status); acc_buf = (struct str_acc_num *) BOB.bob_l_buf; for (ii = 0; ii < (iostat->iosa$ih_count/DISKBLOCKSIZE); ii++,acc_buf++) { if ( (acc_buf->dfaxsend == 'Y') || (acc_buf->dfaxsend == 'F') ) { printf("\ndacc_num = %lu,doperat = %8.8s", acc_buf->dacc_num, acc_buf->doperat); } } i += MAXBUF; } status = sys$io_cleanup(BOB.bob_l_fan); if (!(status&1)) sys$exit (status); status = sys$delete_bufobj(BOB.bob_l_handle); if (!(status&1)) sys$exit (status); status = sys$dassgn(chan); if (!(status&1)) sys$exit (status); lib$show_timer(); }