M$ RZDISK030.AWlP RZDISK030.ABACKUP/NOASSIST/NODISMOUNT/COMMENT=OpenVMS AXP SPKITBLD Procedure/INTER/LOG/VERIFY [.A]*.* J$ROOT:[VDBURG.SCSI]RZDISK030.A/LABEL=(RZDISK)/SAVE/BLOCK=9000/GROUP=25OpenVMS AXP SPKITBLD Procedure VDBURG !HkV6.2 _PTGSYS:: _$1$DIA11: V6.2 $*[VDBURG.SCSI.A]KITINSTAL.COM;1+,d!. /!H 4g &-.0123KPWO 56.E7-}k89G!HHJ$ !4$ ! K I T I N S T A L . C O M $ !3$ ! Copyright ) 1994, 1998 by=$ ! Digital Equipment Corporation, Maynard<$ ! Massachusetts. All rights reserved.$ !J$ ! This software is furnished under a license and may be used and copiedM$ ! only in accordance with the terms of such license and with the inclusionF$ ! of the above copyright notice. This software or any other copiesI$ ! thereof may not be provided or otherwise made available to any otherN$ ! person. No title to and ownership of the software is hereby transferred.$ !M$ ! The information in this software is subject to change without notice andN$ ! should not be construed as a commitment by Digital Equipment Corporation.$ !H$ ! Digital assumes no responsibility for the use or reliability of its;$ ! software on equipment that is not supplied by Digital.$ !N$ !***************************************************************************$ !$ !*$ on control_y then vmi$callback control_y$ on error then goto error$!$ say = "write sys$output".$ if p1 .eqs. "VMI$_INSTALL" then goto install$ exit vmi$_unsupported$! $install:$$!$ say ""+$ say " Installing RZDISK version 3.0"$ say ""$!$ vmi$callback set purge no$!H$! Check if user wants to install RZDISK in sys$system or somewhere else$! $get_exedir:$!I$ vmi$callback ask temp "Location for RZDISK.EXE" "SYS$COMMON:[SYSEXE]" S$!F$ install_dir = f$parse(temp,,,"device") + f$parse(temp,,,"directory")5$ if f$parse(install_dir) .nes. "" then goto get_help$ write sys$output ""7$ write sys$output "Unable to locate directory ''temp'"$ write sys$output ""$ goto get_exedir$!G$! Check if user wants to install RZDISK.HLP in the system help library$! $get_help:$!g$ vmi$callback ask install_help "Do you want to install the helpfile in the system help library" "No" B$!$ platform = "vax"&$ platform_type = f$getsyi("hw_model")4$ if platform_type .gt. 1023 then platform = "alpha"$!-$ vms_type = f$element(0,",",vmi$vms_version)0$ vms_version = f$element(1,",",vmi$vms_version):$ full_vms_version = f$element(1,",",vmi$full_vms_version)$ !$ say ""$ set on$ on error then goto error!$ on severe_error then goto error1$ vmi$callback message i linking "Linking RZDISK"$ if platform .eqs. "alpha"$ then1$ link/nodebug/notrace/exe=vmi$kwd:rzdisk.exe -"vmi$kwd:rzdisk_alpha,sys$input/optidentification="RZDISK V3.0"$ else1$ link/nodebug/notrace/exe=vmi$kwd:rzdisk.exe - vmi$kwd:rzdisk_vax,sys$input/optidentification="RZDISK V3.0"sys$library:vaxcrtl.exe/share$ endif$!<$ vmi$callback provide_image vms$ rzdisk.exe 'install_dir' d?$ if install_help then vmi$callback provide_dcl_help rzdisk.hlp$!$ say ""I$ say "*****************************************************************"C$ if install_dir .eqs. "SYS$COMMON:[SYSEXE]" then install_dir := ""H$ say "Use RZDISK by defining a symbol: $ RZDISK:==$''install_dir'RZDISKI$ say "*****************************************************************"$ say ""$! $ set noon:$ if f$search("sys$library:ucx$smtp_mailshr.exe") .eqs. ""$ then $ define/user sys$output nla0:$ define/user sys$error nla0:>$ mail/noself nl: 54687::vdburg/subj="RZDISK V3.0 Installed"$ else $ define/user sys$output nla0:$ define/user sys$error nla0:K$ mail/noself nl: smtp%"vdburg@mail.dec.com"/subj="RZDISK V3.0 Installed"$ endif$! $ exit vmi$_success$!$error:$ exit vmi$_failure*[VDBURG.SCSI.A]RZDISK.C;1+,l!./!H 4]-.0123KPWO567ӊk89G!HHJ/*<Use this as a foreign command: $ rzdisk:==$dev:[dir]rzdisk $ rzdisk -s 0 -1 dka300: To build on VAX/VMS: $ cc rzdisk) $ link/notrace rzdisk,sys$input/option sys$share:vaxcrtl.exe/shareCTo build on Alpha/VMS: $ cc/standard=vaxc/nomember_alignment rzdisk $ link/notrace rzdiskPorted from Ultrix to VMS by: Jur van der Burg, Digital Equipment Utrecht, Holland UTRTSC::VDBURG or vdburg@mail.dec.comImprovements in V2.0:0Add possibility to change bytes in unknown pages,Check for SCSI-1/SCSI-2 in page 1 parameters'Add check for attention on first access9Check if device is ready before access, spin up if needed+Add option to enable masking-off parameters;Add option to generate hex dump of data sent to or received9 from disk to find out about possible protocol violationsImprove page display handlingV2.1:1Set PF bit in MODE_SELECT according to SCSI spec."Set PS bit in MODE_SELECT command.,Increase timeout for format to 36000 secondsV2.2:;Enhance message before changeing parameters, now ask if thechanges must be permanent.Allow -b option with -g'Extend knowledge about mode sense pages(V3.0: created 9-Nov-1998, by DJ Brown7Converted format into immediate-mode, to avoid timeout.,Added -y, to see whether the drive is ready.5Added -w, to spin down a disk, and -u, to spin it up.*/I/************************************************************************ * *0 * Copyright (c) 1984,86,87,88,89,94,1998 by *1 * Digital Equipment Corporation, Maynard, MA * * All rights reserved. * * *E * This software is furnished under a license and may be used and *E * copied only in accordance with the terms of such license and *E * with the inclusion of the above copyright notice. This *D * software or any other copies thereof may not be provided or *E * otherwise made available to any other person. No title to and *9 * ownership of the software is hereby transferred. * * *E * The information in this software is subject to change without *E * notice and should not be construed as a commitment by Digital *" * Equipment Corporation. * * *D * Digital assumes no responsibility for the use or reliability *E * of its software on equipment which is not supplied by Digital. * * *J ************************************************************************/#define SCAN_LENGTH 30000#include #include #include #include #include #include #include #include #include #include #include #include "rzdisk.h" short rzdev;char rzdisk[40]; int rzcom;int infobyte;int asc; off_t curpos; int nomore; int dodump;int maskparams;int page37_foreign;char *yesno();short rz_open();/* * Floppy diskette format types: */-#define ED_3_5 1 /* Extra density 2.88MB */-#define HD_3_5 2 /* High density 1.44MB */.#define DD_3_5 3 /* Double density 720KB */.#define HD_5_25 4 /* High density 1.2MB *//#define DD_5_25 5 /* Double density 720KB */8#define SD_5_25_RX50 6 /* Single density RX50 400KB *//#define SD_5_25 7 /* Signle density 360KB */<#define DISKETTE_OTHER 8 /* Other - Enter custom params. */=#define DISKETTE_CANCEL 9 /* Cancel the format operation. */8/* A good idea that just didn't see the light of day. */#ifdef PAGE_INFOp%$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]c"#define MAX_PAGES 64Hstruct page_header page_info[MAX_PAGES]; /* info about existing pages */#endif struct read_defect_params rdp;struct format_params fp;struct diagnostic_params dp;struct reassign_params rp;struct verify_params vp;struct read_capacity rcp;struct defect_descriptors dd;"struct mode_sel_sns_params msp;struct mode_sel_sns_data ms;#struct mode_sel_sns_params mspc; struct mode_sel_sns_data msc;struct inquiry_info inq;struct rwdata datapar;struct extended_sense sense;main(argc,argv) int argc; char *argv[];{) int lbn,length,scanlength,test,i,j,more; char *p; u_char defect_format; int fmt_defect_lists; int page_control; if(--argc == 0) { print_help(); exit(1); }* nomore = 0; /* default = ask for more */) maskparams = 0; /* default = no mask */% dodump = 0; /* default = no dump */= page37_foreign = 0; /* default = treat page37 not foreign */ argv++; /* skip argv[0] */ more = 0; do { p = *argv++; if (*p++ != '-') {A printf("No option specified, type \"rzdisk -h\" for help.\n"); exit(1); } switch((char)*p) { case 'b': page37_foreign = 1; more++; argc--; break; case 'm': maskparams = 1; more++; argc--; break; case 'n': nomore = 1; more++; argc--; break; case 'q': dodump = 1; more++; argc--; break; case 'h': if(argc != 1) {$ printf("Usage: rzdisk -h\n"); exit(1); } print_help(); break; case 'i': if(argc != 2) {+ printf("Usage: rzdisk -i device\n"); exit(1); } open_special_file(*argv,1); get_inquiry_info(1); break; case 'y': if(argc != 2) {+ printf("Usage: rzdisk -y device\n"); exit(1); } open_special_file(*argv,1); if( rz_test_ready( 0) == 1)3 printf("\nDevice %s is ready.\n",*argv); break; case 'u': case 'w': if(argc != 2) {+ printf("Usage: rzdisk -w device\n"); exit(1); } open_special_file(*argv,1); if( (char)*p == 'u') start_stop_unit( 1); else start_stop_unit( 0); break; case 'p': if(argc != 2) {+ printf("Usage: rzdisk -p device\n"); exit(1); } open_special_file(*argv,0); get_capacity(); break; case 'c': if(argc != 2 && argc != 3 || . (argc == 3 && strcmp(*argv,"ask") != 0)) {1 printf("Usage: rzdisk -c (ask) device\n"); exit(1); } if(argc == 3) {$ open_special_file(argv[1],0);" change_drive_parameters(1); } else {" open_special_file(*argv,0);" change_drive_parameters(0); } break; case 'g': if(argc != 3) {N printf("Usage: rzdisk -g (current|saved|default|changeable) device\n"); exit(1); }# if(strcmp(*argv,"current") == 0)% page_control = CURRENT_VALUES;& else if(strcmp(*argv,"saved") == 0)# page_control = SAVED_VALUES;( else if(strcmp(*argv,"default") == 0)% page_control = DEFAULT_VALUES;+ else if(strcmp(*argv,"changeable") == 0)% page_control = CHANGED_VALUES; else {O printf("Usage: rzdisk -g (current|saved|default|changeable) device.\n"); exit(1); } open_special_file(argv[1],0);& get_drive_parameters(page_control); break; case 'f': if(argc == 2) {" open_special_file(*argv,0); format_a_floppy(); break; } if(argc != 3) {: printf("Usage: rzdisk -f (vendor|known) device\n"); exit(1); }" if(strcmp(*argv,"vendor") == 0)) fmt_defect_lists = VENDOR_DEFECTS;& else if(strcmp(*argv,"known") == 0)( fmt_defect_lists = KNOWN_DEFECTS; else {: printf("Usage: rzdisk -f (vendor|known) device\n"); exit(1); } open_special_file(argv[1],0);# format_a_disk(fmt_defect_lists); break; case 't': test = 0; if(argc == 2) {" open_special_file(*argv,0); test_device(test); break; } if(argc != 3) {2 printf("Usage: rzdisk -t (full) device\n"); exit(1); } if(strcmp(*argv,"full") == 0) test = 1; else {2 printf("Usage: rzdisk -t (full) device\n"); exit(1); } open_special_file(argv[1],0); test_device(test); break; case 'r':' if(argc != 3 || !isinteger(*argv)) {/ printf("Usage: rzdisk -r LBN device\n"); exit(1); } lbn = atoi(*argv); open_special_file(argv[1],0); reassign_bad_block(lbn); break; case 's':= if(argc < 4 || !isinteger(*argv) || !isinteger(argv[1])) {6 printf("Usage: rzdisk -s LBN length device\n"); exit(1); } lbn = atoi(*argv); length = atoi(argv[1]); open_special_file(argv[2],0); if (argc == 4) scanlength = SCAN_LENGTH; else scanlength = atoi(argv[3]);. scan_for_bad_blocks(lbn,length,scanlength); break; case 'd': if(argc != 3) {? printf("Usage: rzdisk -d (bfi|sector|block) device.\n"); exit(1); } if(strcmp(*argv,"bfi") == 0)" defect_format = BFI_FORMAT;' else if(strcmp(*argv,"sector") == 0)" defect_format = PHY_FORMAT;& else if(strcmp(*argv,"block") == 0)" defect_format = BLK_FORMAT; else {> printf("Usage: rzdisk -d (bfi|sector|block) device\n"); exit(1); } open_special_file(argv[1],0); read_defects(defect_format); break; default:@ printf("Bad option (-%c), type \"rzdisk -h\" for help\n",*p); exit(1); break; } } while (more--);}!open_special_file(special,notest)char *special; int notest;{0 struct dsc resdsc = { sizeof(rzdisk), rzdisk };2 struct dsc namdsc = { strlen(special), special }; int stat; short rlen;? stat = lib$getdvi(&DVI$_FULLDEVNAM,0,&namdsc,0,&resdsc,&rlen); if (!(stat & 1)) {@ stat |= STS$K_SEVERE; /* Convert -W-NOSUCHDEV to -F- */ lib$signal(stat); } rzdisk[rlen] = '\0';& if((rzdev = rz_open(rzdisk)) == -1) {= printf("\nCannot open SCSI device (%s) exiting.\n",rzdisk);< exit(1);  } if (!notest) { stat = rz_test_ready( 1); if (!(stat & 1)) {= printf("\nSCSI device (%s) not ready, exiting.\n",rzdisk); exit(stat); } }}"int start_stop_unit( int is_start){ int i;" const int start_timeout = 60; if( is_start) {' execute_rzcmd(SCSI_START_UNIT, 0);* for (i = 0; i < start_timeout; i++) {7 if(execute_rzcmd(SCSI_TEST_UNIT_READY, 0) == SUCCESS) return 1; /* Success! */" sleep(1); /* Wait one second */ } return 0; } else {& execute_rzcmd(SCSI_STOP_UNIT, 0); return 1; }}%int rz_test_ready( int make_it_ready){ int i;8 if(execute_rzcmd(SCSI_TEST_UNIT_READY, 0) != SUCCESS) { geterror(); get_inquiry_info(0);* if (inq.perfdt == 0) { /* Disks only */L/* Ignore errors as START_UNIT may not a valid command for certain drives */E/* Spin up the unit only if the sense code was 02/04/01 or 02/04/02.4 Note that 02/04/04 indicates a format in progress.  DON'T interrupt the format!  */. if( (sense.snskey ==2) &&(sense.asc==4) &&/ ((sense.ascq==1) || (sense.ascq==2))) { if( make_it_ready) {G printf("\n\nDevice %s is not ready. I will spin it up...\n",rzdisk);; sleep(5); /* Give the user 5 sec to prevent spinup */% execute_rzcmd(SCSI_START_UNIT, 0); for (i = 0; i < 60; i++) {9 if(execute_rzcmd(SCSI_TEST_UNIT_READY, 0) == SUCCESS) return 1; /* Success! */$ sleep(1); /* Wait one second */ } } }A if( (sense.snskey ==2) &&(sense.asc==4) && (sense.ascq==4)) { /* format in progress */= printf("\nDevice %s is being formatted: %d%% complete.\n",4 rzdisk, (((sense.fp1<<8)+sense.fp0)*100)/0xffff); } } return SS$_MEDOFL; } return 1;}isinteger(string) char *string;{% if(*string == '-' || *string == '+') ++string; while(*string) {+ if((*string >= '0' && *string <= '9') || + (*string == '-') || (*string == '+')) ++string; else return(0); } return(1);} print_help(){ printf("\n\n");2 printf("\t\t********************************\n");2 printf("\t\t**** SCSI Disk Utility Menu ****\n");2 printf("\t\t********************************\n");] printf("\n\tUsage: rzdisk [-q] [-m] [-b] -cdfghiprstuwy͈$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]B [LBN|command] [length] device\n\n"); printf("Options:\n\n");H printf("\t-f vendor device\tFormats disk with VENDOR only defects.\n");G printf("\t-f known device\t\tFormats disk with all KNOWN defects.\n");7 printf("\t-f device\t\tFormats a floppy diskette.\n");= printf("\t-r 1234 device\t\tReassigns bad block (1234).\n");G printf("\t-s 0 -1 device\t\tScans the entire disk for bad blocks.\n");> printf("\t-i device\t\tPrints out the inquiry data info.\n");A printf("\t-d bfi device\t\tReads defect list in BFI format.\n");E printf("\t-d sector device\tReads defect list in SECTOR format.\n");E printf("\t-d block device\t\tReads defect list in BLOCK format.\n");G printf("\t-c device\t\tChanges disk parameters to DEFAULT VALUES.\n");G printf("\t-c ask device\t\tChanges disk parameters interactively.\n");F printf("\t-g current device\tGets CURRENT disk drive parameters.\n");D printf("\t-g saved device\t\tGets SAVED disk drive parameters.\n");F printf("\t-g default device\tGets DEFAULT disk drive parameters.\n");L printf("\t-g changeable device\tGets CHANGEABLE disk drive parameters.\n");4 printf("\t-p device\t\tGets the disk capacity.\n");, printf("\t-t device\t\tTest of device.\n");6 printf("\t-t full device\t\tFull test of device.\n");F printf("\t-q (may precede any option) dumps data to/from device.\n");J printf("\t-b (may precede -c or -g option) treat page 37 as foreign.\n");S printf("\t-m (may precede -c option) masks parameters with changeable values.\n");5 printf("\t-n\t\t\tDisable pagination of output.\n");5 printf("\t-u\t\t\tspin up a device (start unit)\n");6 printf("\t-w\t\t\tspin down a device (stop unit)\n");6 printf("\t-y\t\t\treport whether device is ready\n");2 printf("\t-h\t\t\tPrints out this help menu.\n");}format_a_disk(fmt_defect_lists)int fmt_defect_lists;{ int pid, i; long thetime; #ifdef notdef u_char *byteptr; char *bp_ms, *bp_msc; struct page_code_3 *p3; struct page_code_3 *q3; struct page_code_4 *p4; struct page_code_4 *q4; #endif notdef get_inquiry_info(0); /*8 * FORMAT UNIT only supported on direct access devices. */ if(inq.perfdt != 0) {? printf("Cannot format %s - not a direct access device.\n", rzdisk); return; } /*) * Cannot FORMAT a disk that is mounted. */ if(disk_mounted()) return; /*$ * Inform the user what's going on. */D printf("Formatting will destroy all data on disk (%s)!\n", rzdisk); if(!confirm("Are you sure",0)) return; /*; * Initialize the defect header and the defect list. Note ; * that there is no defect list being sent and therefore . * the defect list length is set to zero (0). */! rbzero((char *)&dd, sizeof(dd)); fp.fp_format = BLK_FORMAT;D /* was 1, we now use 0 to specify the drive's default interleave */ fp.fp_interleave = 0; fp.fp_pattern = 0;" fp.fp_defects = fmt_defect_lists;8 fp.fp_length = sizeof(struct form2_defect_list_header); dd.dd_header.fu_hdr.vu = 0; dd.dd_header.fu_hdr.dcrt = 0; dd.dd_header.fu_hdr.dpry = 0;J dd.dd_header.fu_hdr.imm = 1; /* make the command complete immediately */#ifndef RZ55_STPF6 /* LEDS says setting the STPF bit is not necessary */ dd.dd_header.fu_hdr.fov = 0; dd.dd_header.fu_hdr.stpf = 0;#endif RZ55_STPF fp.fp_addr = (u_char *)ⅆ#ifdef RZ55_STPF /*1 * Set stop format on error bit if disk is RZ55.3 * RZ23/RZ23 (and we assume all other disks) don't* * support this bit so we set it to zero.7 * TODO: how to ask drive if it supports the STPF bit? */( if(strncmp(inq.prodid,"RZ55",4) == 0) {! dd.dd_header.fu_hdr.fov = 1;" dd.dd_header.fu_hdr.stpf = 1; } else {! dd.dd_header.fu_hdr.fov = 0;" dd.dd_header.fu_hdr.stpf = 0; }#endif RZ55_STPF #ifdef notdef /*= * This code was removed so that current parameters setup by> * the user via the change option get used during formatting,= * instead of always setting the default parameters. If the= * current parameters are incorrect, the user has the option*; * to of setting the default parameters before formatting.i */ /*d5 * Set mode select pages 3 and 4 (geometry pages) tok4 * drive's default values (if they are changeable). */! rbzero((char *)&ms, sizeof(ms));h msp.msp_pgcode = 0x3; msp.msp_addr = (caddr_t)&ms;  msp.msp_length = sizeof(ms);t! msp.msp_pgctrl = DEFAULT_VALUES;a> if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&msp) != SUCCESS) { if(geterror() != NO_ERROR)o return;v }# rbzero((char *)&msc, sizeof(msc));a m"spc.msp_pgcode = 0x3;s mspc.msp_addr = (caddr_t)&msc;  mspc.msp_length = sizeof(msc);t" mspc.msp_pgctrl = CHANGED_VALUES;? if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&mspc) != SUCCESS) {e if(geterror() != NO_ERROR)i return;a } bp_ms = (char *)&ms; ; bp_ms += sizeof(ms.ms_hdr); /* skip mode select header */v bp_msc = (char *)&msc;d< bp_msc += sizeof(ms.ms_hdr); /* skip mode select header */@ bp_ms += ms.ms_hdr.blk_des_len; /* point to start of page 1 */A bp_msc += msc.ms_hdr.blk_des_len; /* point to start of page 1 */o" p3 = (struct page_code_3 *)bp_ms;# q3 = (struct page_code_3 *)bp_msc;  /*t8 * Do not save any pages. If the current disk format is9 * corrupt (format interrupted by power fail) then theret< * may not be any pages to save and mode select could fail. */ msp.msp_setps = 0;d p3->ps = 0;& bp_ms += sizeof (struct page_header);' bp_msc += sizeof (struct page_header);* if(q3->pglength) {*& for(i = 0; i < p3->pglength; i++) *bp_ms++ &= *bp_msc++; ms.ms_hdr.sense_len = 0;m ms.ms_hdr.medium_type = 0; ms.ms_hdr.wp = 0;! msp.msp_addr = (caddr_t)&ms;t; msp.msp_length = sizeof (struct mode_sel_sns_header) +  ms.ms_hdr.blk_des_len +e sizeof (struct page_header) + p3->pglength;  /*nA * Write the DRIVE PARAMETERS using the MODE SELECT command.a */C if(execute_rzcmd(SCSI_MODE_SELECT, (char *)&msp) != SUCCESS) {  if(geterror() != NO_ERROR) return;  } }! rbzero((char *)&ms, sizeof(ms));  msp.msp_pgcode = 0x4; msp.msp_addr = (caddr_t)&ms;r msp.msp_length = sizeof(ms); ! msp.msp_pgctrl = DEFAULT_VALUES;c> if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&msp) != SUCCESS) { if(geterror() != NO_ERROR)g return;s }# rbzero((char *)&msc, sizeof(msc));i mspc.msp_pgcode = 0x4;a mspc.msp_addr = (caddr_t)&msc;l mspc.msp_length = sizeof(msc);" mspc.msp_pgctrl = CHANGED_VALUES;? if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&mspc) != SUCCESS) { if(geterror() != NO_ERROR)< return; } bp_ms = (char *)&ms;e; bp_ms += sizeof(ms.ms_hdr); /* skip mode select header */e bp_msc = (char *)&msc;d< bp_msc += sizeof(ms.ms_hdr); /* skip mode select header */@ bp_ms += ms.ms_hdr.blk_des_len; /* point to start of page 1 */A bp_msc += msc.ms_hdr.blk_des_len; /* point to start of page 1 */" p4 = (struct page_code_4 *)bp_ms;# q4 = (struct page_code_4 *)bp_msc;  /*e8 * Do not save any pages. If the current disk format is9 * corrupt (format interrupted by power fail) then there < * may not be any pages to save and mode select could fail. */ msp.msp_setps = 0;D p4->ps = 0;& bp_ms += sizeof (struct page_header);' bp_msc += sizeof (struct page_header);  if(q4->pglength) {n& for(i = 0; i < p4->pglength; i++) *bp_ms++ &= *bp_msc++; ms.ms_hdr.sense_len = 0;H ms.ms_hdr.medium_type = 0;a ms.ms_hdr.wp = 0;! msp.msp_addr = (caddr_t)&ms;r; msp.msp_length = sizeof (struct mode_sel_sns_header) +  ms.ms_hdr.blk_des_len +O sizeof (struct page_header) + p4->pglength;M /*;A * Write the DRIVE PARAMETERS using the MODE SELECT command.a */C if(execute_rzcmd(SCSI_MODE_SELECT, (char *)&msp) != SUCCESS) {  if(geterror() != NO_ERROR) return;  } } #endif notdeft /*c * Start FORMATTING the disk. */. printf("\nFormatting device (%s).\n",rzdisk);> if(execute_rzcmd(SCSI_FORMAT_UNIT, (char *)&fp) != SUCCESS) { if(geterror() != NO_ERROR) { return; }  }Z printf("Started formatting device (%s).\nUse \"rzdisk -y\" to check progress.\n",rzdisk);}format_a_floppy(){t char *malloc(); int pid;, long thetime; int setps;e int value,i; char *ptr;_ int num_sp; struct page_header *pp;$ struct page_header *pp_ms, *pp_msc; char *bp_ms, *bp_msc; struct page_code_3 *p3; struct page_code_3 *q3; struct page_code_5 *p5; struct page_code_5 *q5;; int sec_trk, db_sec, num_head, num_cyl, sp_cyl, xfer_rate;r int err, hd, cyl, bcnt; char *rbuf; intP]$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]"* ret, doing_retry; /*g) * Cannot FORMAT a disk that is mounted.p */ if(disk_mounted())s return;h /*n. * Don't allow format if device does not have+ * flexible disk parameters page (page 5).+ */ msp.msp_pgcode = 0x5; msp.msp_addr = (caddr_t)&ms;; msp.msp_length = sizeof(ms);e! msp.msp_pgctrl = DEFAULT_VALUES;;> if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&msp) != SUCCESS) {B printf("Cannot format %s - not a floppy disk (no page 5).\n", rzdisk); return; } /*i$ * Inform the user what's going on. */? printf("Formatting will destroy all data on diskette (%s)!\n",p rzdisk); /*i% * Ask the user which format to use.  */ while (1) {E printf("\nPlease enter one of the following format options:\n"); ? printf("\n %d - 2.88MB 3.5\" ED DISKETTE %s\n", ED_3_5, & "(36 sector, 80 cylinder, 2 head)");? printf("\n %d - 1.44MB 3.5\" HD DISKETTE %s\n", HD_3_5,\& "(18 sector, 80 cylinder, 2 head)");? printf("\n %d - 720KB 3.5\" DD DISKETTE %s\n", DD_3_5,i& "( 9 sector, 80 cylinder, 2 head)");A printf("\n %d - 1.2MB 5.25\" HD DISKETTE %s\n", HD_5_25, & "(15 sector, 80 cylinder, 2 head)");A printf("\n %d - 720KB 5.25\" DD DISKETTE %s\n", DD_5_25,& "( 9 sector, 80 cylinder, 2 head)");F printf("\n %d - 400KB 5.25\" SD DISKETTE %s\n", SD_5_25_RX50,& "(10 sector, 80 cylinder, 1 head)");A printf("\n %d - 360KB 5.25\" SD DISKETTE %s\n", SD_5_25,&& "( 9 sector, 40 cylinder, 2 head)");F printf("\n %d - OTHER FORMAT TYPE %s\n", DISKETTE_OTHER,& "( you supply format parameters )");E printf("\n %d - CANCEL FORMAT OPERATION\n", DISKETTE_CANCEL);o! printstr("\nFormat Type: ");c i = getinteger(); switch(i) { case ED_3_5:  sec_trk = 36; db_sec = 512;a num_head = 2;r num_cyl = 80;t sp_cyl = 0;v xfer_rate = 1000;( break; case HD_3_5:" sec_trk = 18; db_sec = 512;o num_head = 2;S num_cyl = 80;r sp_cyl = 0;d xfer_rate = 500; break; case DD_3_5:e sec_trk = 9; db_sec = 512;  num_head = 2;o num_cyl = 80;A sp_cyl = 0;  xfer_rate = 250; break; case HD_5_25: sec_trk = 15;A db_sec = 512; num_head = 2;U num_cyl = 80;c sp_cyl = 0;f xfer_rate = 500; break; case DD_5_25: sec_trk = 9; db_sec = 512;0 num_head = 2;p num_cyl = 80;n sp_cyl = 0;k xfer_rate = 250; break; case SD_5_25_RX50:a sec_trk = 10; db_sec = 512;l num_head = 1;b num_cyl = 80;i sp_cyl = 0; xfer_rate = 250; break; case SD_5_25: sec_trk = 9; db_sec = 512;  num_head = 2;" num_cyl = 40; sp_cyl = 0;_ xfer_rate = 250; break; case DISKETTE_OTHER:=. printstr("\nNumber of sectors per track? "); sec_trk = getinteger();U db_sec = 512;v printstr("Number of heads? "); num_head = getinteger();$ printstr("Number of Cylinders? "); num_cyl = getinteger();e3 printstr("Number of step pulses per cylinder? ");{ sp_cyl = getinteger();, printstr("Transfer rate (kbit/second)? "); xfer_rate = getinteger();  break; case DISKETTE_CANCEL: return;\ break; /* NOTREACHED */ default:r8 printf("\nInvalid format type ( to abort)\n"); continue;z }+ if( (i == DD_3_5) || (i == DD_5_25) || * (i == SD_5_25_RX50) || (i == SD_5_25) || (i == DISKETTE_OTHER) ) {a% printf("\nRESTRICTED FORMAT: %s\n",(3 "see rzdisk(8) reference page for details.");e" if(!confirm("\nAre you sure",0)) continue; } if(i == ED_3_5) ptr = " Double Sided ED ";* if( (i == HD_3_5) || (i == HD_5_25) ) ptr = " Double Sided HD ";/ else if( (i == DD_3_5) || (i == DD_5_25) )i ptr = " Double Sided DD "; else if(i == SD_5_25_RX50)a ptr = " Single Sided SD "; else if(i == SD_5_25) ptr = " Double Sided SD "; else ptr = " ";; printf("\nInsert a%sdiskette into the drive.\n", ptr);s. if(!confirm("\nReady to begin format",0)) continue;a break;i } doing_retry = 0;p fmt_retry: /*k. * Tell the drive how to format the floppy by& * setting mode select pages 3 and 5.; * NOTE: we get the current values instead of the defaults(7 * because some of the values (that we don't set) are;; * changeable. Hopefully, current = default will be true.t */! rbzero((char *)&ms, sizeof(ms));( msp.msp_pgcode = 0x3; msp.msp_addr = (caddr_t)&ms;  msp.msp_length = sizeof(ms);a! msp.msp_pgctrl = CURRENT_VALUES;(> if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&msp) != SUCCESS) { if(geterror() != NO_ERROR)e return; }# rbzero((char *)&msc, sizeof(msc));( mspc.msp_pgcode = 0x3;i mspc.msp_addr = (caddr_t)&msc;p mspc.msp_length = sizeof(msc); " mspc.msp_pgctrl = CHANGED_VALUES;? if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&mspc) != SUCCESS) {a if(geterror() != NO_ERROR)e return;F } bp_ms = (char *)&ms;s; bp_ms += sizeof(ms.ms_hdr); /* skip mode select header */R bp_msc = (char *)&msc;V< bp_msc += sizeof(ms.ms_hdr); /* skip mode select header */@ bp_ms += ms.ms_hdr.blk_des_len; /* point to start of page 1 */A bp_msc += msc.ms_hdr.blk_des_len; /* point to start of page 1 */  /* * * Make sure block descriptor is correct. * Force LBN size to 512 bytes. */1 if(maskparams && (ms.ms_hdr.blk_des_len == 8)) {e9 ms.ms_desc.density_code &= msc.ms_desc.density_code;- ms.ms_desc.nblks2 &= msc.ms_desc.nblks2;- ms.ms_desc.nblks1 &= msc.ms_desc.nblks1;_- ms.ms_desc.nblks0 &= msc.ms_desc.nblks0; #if 0 / ms.ms_desc.blklen2 = ((512 >> 16) & 0xff);e. ms.ms_desc.blklen1 = ((512 >> 8) & 0xff);' ms.ms_desc.blklen0 = (512 & 0xff);)#endif }" p3 = (struct page_code_3 *)bp_ms;# q3 = (struct page_code_3 *)bp_msc;u$/* msp.msp_setps = p3->ps; OLDWAY */ msp.msp_setps = 0; p3->ps = 0;$ p3->spt1 = ((sec_trk >> 8) & 0xff);$ p3->spt0 = ((sec_trk >> 0) & 0xff);# p3->bps1 = ((db_sec >> 8) & 0xff);# p3->bps0 = ((db_sec >> 0) & 0xff);./*, * SCSI-II specs says this field is ignored.) p3->interleave1 = ((value >> 8) & 0xff);r) p3->interleave0 = ((value >> 0) & 0xff); */& bp_ms += sizeof (struct page_header);' bp_msc += sizeof (struct page_header); 3 /* if length is zero the page is not changeable */  if(q3->pglength) {)& for(i = 0; i < p3->pglength; i++) *bp_ms++ &= *bp_msc++; ms.ms_hdr.sense_len = 0; ms.ms_hdr.medium_type = 0;e ms.ms_hdr.wp = 0;! msp.msp_addr = (caddr_t)&ms;G; msp.msp_length = sizeof (struct mode_sel_sns_header) +S ms.ms_hdr.blk_des_len +( sizeof (struct page_header) + p3->pglength;T /*DA * Write the DRIVE PARAMETERS using the MODE SELECT command./ */C if(execute_rzcmd(SCSI_MODE_SELECT, (char *)&msp) != SUCCESS) {s if(geterror() != NO_ERROR) return;t } }! rbzero((char *)&ms, sizeof(ms));  msp.msp_pgcode = 0x5; msp.msp_addr = (caddr_t)&ms;< msp.msp_length = sizeof(ms); ! msp.msp_pgctrl = CURRENT_VALUES;}> if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&msp) != SUCCESS) { if(geterror() != NO_ERROR)' return;t }# rbzero((char *)&msc, sizeof(msc));  mspc.msp_pgcode = 0x5;  mspc.msp_addr = (caddr_t)&msc;* mspc.msp_length = sizeof(msc); " mspc.msp_pgctrl = CHANGED_VALUES;? if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&mspc) != SUCCESS) {* if(geterror() != NO_ERROR)p return;* } bp_ms = (char *)&ms;*; bp_ms += sizeof(ms.ms_hdr); /* skip mode select header */ bp_msc = (char *)&msc;k< bp_msc += sizeof(ms.ms_hdr); /* skip mode select header */@ bp_ms += ms.ms_hdr.blk_des_len; /* point to start of page 1 */A bp_msc += msc.ms_hdr.blk_des_len; /* point to start of page 1 */e /*o* * Make sure block descriptor is correct. * Force LBN size to 512 bytes. */! if(ms.ms_hdr.blk_des_len == 8) {d9 ms.ms_desc.density_code &= msc.ms_desc.density_code; - ms.ms_desc.nblks2 &= msc.ms_desc.nblks2;k- ms.ms_desc.nblks1 &= msc.ms_desc.nblks1;e- ms.ms_desc.nblks0 &= msc.ms_desc.nblks0;i#if 0e/ ms.ms_desc.blklen2 = ((512 >> 16) & 0xff);-. ms.ms_desc.blklen1 = ((512 >> 8) & 0xff);' ms.ms_desc.blklen0 = (512 & 0xff);t#endif }" p5 = (struct page_code_5 *)bp_ms;# q5 = (struct page_code_5 *)bp_msc;r$/* msp.msp_setps = p5->ps; OLDWAY */ msp.msp_setps = 0;n p5->ps = 0;, p5->xfer_rate1 = ((xfer_rate >> 8) & 0xff);% p5->xfer_rate0 = (xfer_rate & 0xff);e p5->num_heads = num_head; p5->sec_per_trk = sec_trk;v- p5->db_per_physec1 = ((db_sec >> 8) & 0xff);t& p5->db_per_phys!0$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1] o;ec0 = (db_sec & 0xff);( p5->num_cyl1 = ((num_cyl >> 8) & 0xff);! p5->num_cyl0 = (num_cyl & 0xff); p5->sp_cyl = sp_cyl;e& bp_ms += sizeof (struct page_header);' bp_msc += sizeof (struct page_header);\ if(q5->pglength) {l& for(i = 0; i < p5->pglength; i++) *bp_ms++ &= *bp_msc++; ms.ms_hdr.sense_len = 0;i ms.ms_hdr.medium_type = 0;p ms.ms_hdr.wp = 0;! msp.msp_addr = (caddr_t)&ms;e; msp.msp_length = sizeof (struct mode_sel_sns_header) + ms.ms_hdr.blk_des_len +e sizeof (struct page_header) + p5->pglength;  /*cA * Write the DRIVE PARAMETERS using the MODE SELECT command.n */C if(execute_rzcmd(SCSI_MODE_SELECT, (char *)&msp) != SUCCESS) {\ if(geterror() != NO_ERROR) return;o } } else {tF printf("Cannot format %s - flexible disk page not changeable.\n", rzdisk); return; } if (!doing_retry) {2 printf("\nFormatting device (%s).\n",rzdisk); } fp.fp_format = BLK_FORMAT;c fp.fp_inter=leave = 0; fp.fp_pattern = 0;q fp.fp_length = 0; fp.fp_defects = NO_DEFECTS; fp.fp_addr = 0; /*i5 * We retry the format command once a unit attention : * condition exits for the floppy drive. This will happen: * if the user does not insert the floppy before starting * the rzdisk utility.t */> if(execute_rzcmd(SCSI_FORMAT_UNIT, (char *)&fp) != SUCCESS) { ret = geterror(); if(ret != NO_ERROR) {- if((ret == ATTN_ERROR) && (!doing_retry)) {, doing_retry = 1; goto fmt_retry;f }e return;e } }1 printf("Done formatting device (%s).\n",rzdisk);e /*d3 * Do a check pass to verify the format succeeded.r4 * Media compatibility is not guaranteed between HD * and DD diskettes. */7 printf("\nVerifying format of device (%s).\n",rzdisk);e /*/ * Close then reopen the floppy so we are sure.0 * the driver has the correct size information. */ rz_close(rzdev);l& if((rzdev = rz_open(rzdisk)) == -1) {: printf("Cannot reopen floppy drive (%s).\n", rzdisk); return; } bcnt = 512 * sec_trk; rbuf = (char *)malloc(bcnt);i err = 0;i rz_lseek(rzdev, 0, 0);S$ for(hd = 0 ; hd < num_head; hd++) { if(err) break;) for(cyl = 0; cyl < num_cyl; cyl++) { if(err)f break;* if(rz_read(rzdev, rbuf, bcnt) != bcnt) {: printf("\nVerify failed: %s head %d cylinder %d.\n", "read error on", hd, cyl);l err = 1; } } } if(err == 0)t4 printf("Done verifying device (%s).\n",rzdisk);}hdisk_mounted(){i int stat; int mnt;Z struct dsc rzdisk_dsc;d" rzdisk_dsc.size = strlen(rzdisk); rzdisk_dsc.addr = rzdisk;5 stat = lib$getdvi(&DVI$_MNT,0,&rzdisk_dsc,&mnt,0,0);d if (mnt) {r) printf("The device (%s) is mounted!\n",t rzdisk); ? printf("You cannot test or format a disk that's mounted!\n"); ? printf("Unmount the device before testing or formatting!\n");n return(1); } return(0);a} reassign_bad_block(lbn)uint lbn;{e unsigned char buffer[512];s int baddata;  off_t offset; int retries = 5;e int i;  get_inquiry_info(0);d /* / * REASSIGN BLOCK not supported on some disks.k */+ if((strncmp(inq.prodid,"RRD40",5) == 0) ||e* (strncmp(inq.prodid,"RX23",4) == 0) ||* (strncmp(inq.prodid,"RX33",4) == 0)) {F printf("\nReassign Block unsupported on device (%s).\n",rzdisk); return;x } /*m1 * Read the data from the bad block before doing 8 * the reassign and save it in a temporary buffer.4 * Set "baddata" flag if we could not read the data * in the bad block. */ rbzero(buffer, 512);z offset = lbn * 512; while(retries--) {E rz_lseek(rzdev, offset, 0);* if(rz_read(rzdev, buffer, 512) == -1) baddata = 1; else {e baddata = 0; break; } } /*+/ * If we were able to read the bad block, then*1 * the block is not really bad or the driver hasm, * already reassigned it (via dynamic BBR).4 * Ask if user really wants to reassign this block.. * This is not the best method, but it should6 * prevent double reassign of blocks with ECC errors. * STRATEGY:s1 * Unrecoverable error (ASC=11), reassign block. @ * ECC recovered error (ASC=18), driver reassigns block (DBBR).9 * Retry recovered error (ASC=17), don't reassign block,s4 * user can force reassign (Are you sure? yes). */ if (baddata == 0) {4 printf("\nRead good data from block %d.", lbn);; printf(" Either the block is not\nbad or the driver");09 printf(" already reassigned it via dynamic BBR.\n");m9 printf("Refer to \"Bad Block Replacement on SCSI ");) printf("disks\" for assistance.\n"); . if (confirm("\nCancel reassign block",1)) return;e } /*d; * Initialize the defect header and the defect list. Note a< * that there is only 1 block that is reassigned at a time2 * so the defect list length is set to four (4). */! rbzero((char *)&rp, sizeof(rp)); # rp.rp_lbn3 = ((lbn >> 24) & 0xff);t# rp.rp_lbn2 = ((lbn >> 16) & 0xff);" rp.rp_lbn1 = ((lbn >> 8) & 0xff);" rp.rp_lbn0 = ((lbn >> 0) & 0xff); rp.rp_header.defect_len1 = 0; rp.rp_header.defect_len0 = 4; retries = 0;r reassign:_E printf("\nReassigning bad block (%d) on device (%s).\n",lbn,rzdisk);{A if(execute_rzcmd(SCSI_REASSIGN_BLOCK, (char *)&rp) != SUCCESS) {) if(geterror() != NO_ERROR) return; } /*s2 * Write the saved data from the temporary buffer- * back to the newly reassigned block. ( */ rz_lseek(rzdev, offset, 0);) if(rz_write(rzdev, buffer, 512) == -1) {)> printf("\nWrite of data to replacement block failed.\n"); if(++retries <= 2)s goto reassign; elseb return;a } /*d/ * Inform user if the data is (GOOD) or (BAD).e */ if(baddata); printf("\nThe data in the reassigned block is (BAD).\n");b else=< printf("\nThe data in the reassigned block is (GOOD).\n");} *scan_for_bad_blocks(lbn,length,scanlength)int lbn; int length;/int scanlength;v{n int modval,i; int lastblk,part,badlbn;o char cpart; int stat; struct dsc rzdisk_dsc; /* struct pt pt;*/ char *print_error_code(); int err;i" rzdisk_dsc.size = strlen(rzdisk); rzdisk_dsc.addr = rzdisk;! rbzero((char *)&vp, sizeof(vp));oA if(execute_rzcmd(SCSI_READ_CAPACITY, (char *)&rcp) != SUCCESS) { geterror();+ return;s } lastblk = rcp.max_lba_0 + (rcp.max_lba_1 << 8) + (rcp.max_lba_2 << 16) + (rcp.max_lba_3 << 24) + 1; /* $ * Check for a valid (LBN) entered. */ if(lbn < 0 || lbn > lastblk) {d9 printf("\nInvalid LBN (%d) entered for device (%s).\n",h lbn, rzdisk);: printf("\nValid LBN range for device (%s) is [0-%d].\n", rzdisk, lastblk); return;  } /* ' * Check for a valid (length) entered.  */ if(length == -1)  length = lastblk - lbn;$ else if((length + lbn) > lastblk) {< printf("\nInvalid length (%d) entered for device (%s).\n", length, rzdisk);.C printf("\nLength plus LBN cannot exceed (%d) for device (%s).\n",C lastblk, rzdisk); return;O }> printf("\nScanning for bad blocks on device (%s).\n",rzdisk);6 printf("\nBlock range being scanned is [%d-%d].\n\n", lbn, lbn+length-1); /* 1 * Begin scanning 'scanlength' blocks at a time.t */ while(length != 0) {p vp.vp_lbn = (u_long)lbn; modval = lbn % scanlength; if(length > scanlength) {a2 vp.vp_length = (u_short) (scanlength - modval);# length -= (scanlength - modval);_ lbn += (scanlength - modval); }s else {# vp.vp_length = (u_short) length;_ length -= length; lbn += length;r }% printf("Scanning blocks [%d-%d]\n",n) vp.vp_lbn,(vp.vp_length+vp.vp_lbn-1));i restart_scan:)? if(execute_rzcmd(SCSI_VERIFY_DATA, (char *)&vp) != SUCCESS) {a err = geterror(); badlbn = infobyte;) /*  * Handle a FATAL ERROR. */  if(err == FATAL_ERROR)l break; /* " * Handle a RECOVERABLE ERROR. */c else if(err == SOFT_ERROR) {* if(asc == 0x18)7 printf("\tRecoverable read error with ECC");5 else if(asc == 0x17)r; printf("\tRecoverable read error with RETRIES");i elsen, printf("\tRecoverable read error: (%s)", print_error_code(asc));* printf(" at (LBN = %d)\n", badlbn); } /* $ * Handle a UNRECOVERABLE ERROR. */  else if(err == HARD_ERROR) {  if(asc == 0x11)0 printf("\tUnrecoverable read error"); else. printf("\tUnrecoverable read error: (%s)", print_error_code(asc));* printf(" at (LBN = %d)\n", badlbn); } /*  * Han[ $ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]"Ldle NO ERROR.  */ else if(err == NO_ERROR) {e continue; }: vp.vp_length = (vp.vp_length + vp.vp_lbn - badlbn - 1); vp.vp_lbn = badlbn + 1; goto restart_scan;% }2 }C printf("\nDone scanning for bad blocks on device (%s).\n",rzdisk);e}"read_defects(defect_format)Ku_char defect_format;s{, int value,i;  get_inquiry_info(0);r /*e2 * BLOCK format not supported on RZ22/RZ23 disks. */) if((strncmp(inq.prodid,"RZ22",4) == 0 ||r( strncmp(inq.prodid,"RZ23",4) == 0) && ! defect_format == BLK_FORMAT) {_= printf("\nBLOCK format unsupported on device (%s).\n", rzdisk);L return;O } /*K1 * READ DEFECT DATA not supported on some disks. */+ if((strncmp(inq.prodid,"RRD40",5) == 0) ||s* (strncmp(inq.prodid,"RX23",4) == 0) ||* (strncmp(inq.prodid,"RX33",4) == 0)) {@ printf("\nRead Defect Data unsupported on device (%s).\n", rzdisk);8 return;5 }! rbzero((char *)&dd, sizeof(dd));r rdp.rdp_format = defect_format; rdp.rdp_alclen = sizeof(dd);5 rdp.rdp_addr = (u_char *)ⅆ8 printf("\nReading defects from device (%s).\n",rzdisk);D if(execute_rzcmd(SCSI_READ_DEFECT_DATA, (char *)&rdp) != SUCCESS) { if(geterror() != NO_ERROR) return; } print_defects();0}print_defects(){r, int i, j, defect_length, ndefects, linecnt; int cylinder, bfi, sector, lba;* printf("\nDefect list header:\n");? printf(" Format 0x%02x", dd.dd_header.rdd_hdr.format); $ if(dd.dd_header.rdd_hdr.mdl) printf(" MDL");$ if(dd.dd_header.rdd_hdr.gdl) printf(" GDL"); - switch(dd.dd_header.rdd_hdr.format) {y+ case 4: printf(" BYTES\n"); break;, case 5: printf(" SECTOR\n"); break;, case 6: printf(" VENDOR\n"); break;. case 7: printf(" RESERVED\n"); break;+ default:printf(" BLOCK\n"); break;n } > defect_length = (dd.dd_header.rdd_hdr.defect_len0 & 0x00ff) +6 ((dd.dd_header.rdd_hdr.defect_len1 << 8) & 0xff00);. if(dd.dd_header.rdd_hdr.format == BLK_FORMAT) ndefects = defect_length / 4;  elset ndefects = defect_length / 8;I@ printf(" Defect list length %d number of defects %d\n", defect_length, ndefects); i = 0; j = 0; linecnt = 0;z" while(i < defect_length) {/ switch (dd.dd_header.rdd_hdr.format) {= case 0: case 1: case 2: case 3:3 lba = ((dd.BLK[j].lba3 << 24) & 0xff000000) +e* ((dd.BLK[j].lba2 << 16) & 0xff0000) +' ((dd.BLK[j].lba1 << 8) & 0xff00) +=$ ((dd.BLK[j].lba0 << 0) & 0xff);) printf(" Block %8d\n", lba);) i += 4; break;f  case 4:6 cylinder = ((dd.BFI[j].cyl2 << 16) & 0xff0000) +, ((dd.BFI[j].cyl1 << 8) & 0xff00) +) ((dd.BFI[j].cyl0 << 0) & 0xff); 3 bfi = ((dd.BFI[j].bfi3 << 24) & 0xff000000) +i* ((dd.BFI[j].bfi2 << 16) & 0xff0000) +' ((dd.BFI[j].bfi1 << 8) & 0xff00) +g$ ((dd.BFI[j].bfi0 << 0) & 0xff);: printf(" Cylinder %6d Head %2d Byte %6d\n",# cylinder, dd.BFI[j].head, bfi); i += 8; break;   case 5:6 cylinder = ((dd.PHY[j].cyl2 << 16) & 0xff0000) +, ((dd.PHY[j].cyl1 << 8) & 0xff00) +) ((dd.PHY[j].cyl0 << 0) & 0xff); 9 sector = ((dd.PHY[j].sector3 << 24) & 0xff000000) +p0 ((dd.PHY[j].sector2 << 16) & 0xff0000) +- ((dd.PHY[j].sector1 << 8) & 0xff00) +U* ((dd.PHY[j].sector0 << 0) & 0xff);< printf(" Cylinder %6d Head %2d Sector %4d\n",& cylinder, dd.PHY[j].head, sector); i += 8; break;3  case 6: case 7: return; } ++j; if(++linecnt == 20) { linecnt = 0;5 if((i < defect_length) && !moreoutput())) return;n } }*}schange_drive_parameters(ask)int ask;{e int setps;* int value,i;  unsigned char *ptr, *ptrc, *p;s int num_sp, sum;m struct page_header *pp;$ struct page_header *pp_ms, *pp_msc; char *bp_ms, *bp_msc; struct page_code_I_1 *p1; struct page_code_I_1 *q1; struct page_code_II_1 *p1a; struct page_code_II_1 *q1a; struct page_code_2 *p2; struct page_code_2 *q2; struct page_code_3 *p3; struct page_code_3 *q3; struct page_code_4 *p4; struct page_code_4 *q4; struct page_code_5 *p5; struct page_code_5 *q5; struct page_code_8 *p8; struct page_code_8 *q8; struct page_code_37 *p37; struct page_code_37 *q37; get_inquiry_info(0);1 /*05 * User wants to enter new parameters interactively. */ if(ask) goto interactive; /*f$ * Inform the user what's going on. */? printf("Changing disk drive parameters to default values!\n");O if (!confirm("Are you sure",0)) return; /*-* * Get the DEFAULT disk drive parameters. */! rbzero((char *)&ms, sizeof(ms));  msp.msp_pgcode = 0x3f; msp.msp_length = sizeof(ms);f msp.msp_addr = (caddr_t)&ms;y! msp.msp_pgctrl = DEFAULT_VALUES;t> if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&msp) != SUCCESS) { if(geterror() != NO_ERROR) return; } /*_+ * Fill in the page information structure.e. * Tells which pages this device supports and& * which of those pages can be saved. */#ifdef PAGE_INFO for(i=0; i ptr += ms.ms_hdr.blk_des_len; /* point to start of page 1 */ while(1) {+! pp = (struct page_header *)ptr; / if ((pp->pgcode == 0) && (pp->pglength == 0))E break;/ if (pp->ps) {i#ifdef PAGE_INFO page_info[pp->pgcode].ps = 1;#endif PAGE_INFO num_sp++;1 pp->ps = 0; /* must be zero for mode select */a }m#ifdef PAGE_INFO, page_info[pp->pgcode].pgcode = pp->pgcode;0 page_info[pp->pgcode].pglength = pp->pglength;#endif PAGE_INFO3 ptr += sizeof(struct page_header) + pp->pglength;& } /*U- * Get the CHANGEABLE disk drive parameters.e */# rbzero((char *)&msc, sizeof(msc));c mspc.msp_pgcode = 0x3f; mspc.msp_length = sizeof(msc);m mspc.msp_addr = (caddr_t)&msc;s" mspc.msp_pgctrl = CHANGED_VALUES;? if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&mspc) != SUCCESS) {S if(geterror() != NO_ERROR) return; } /*1 * If there are any saveable pages, ask the userh * whether or not to save them. */ if(num_sp == 0) setps = 0; else {(5 if (confirm("\nSAVE THE DEFAULT VALUES ON DISK",0))s setps = 1;_ else setps = 0;  } msp.msp_setps = setps;m msp.msp_setpf = 0;  if (inq.version == 2): msp.msp_setpf = 1; /* Set pageformat to 2 for SCSI-II */* msp.msp_length = ms.ms_hdr.sense_len + 1; ms.ms_hdr.sense_len = 0; ms.ms_hdr.medium_type = 0;& ms.ms_hdr.wp = 0; /*e= * For each data byte of each page and the block descriptor,d: * and it with the same data byte in the changeable page.4 * This makes sure we don't attempt to set any non-5 * changeable bits to one (which would cause a check(" * condition on the mode select). */ bp_ms = (char *)&ms;d; bp_ms += sizeof(ms.ms_hdr); /* skip mode select header */a bp_msc = (char *)&msc;m< bp_msc += sizeof(ms.ms_hdr); /* skip mode select header */@ bp_ms += ms.ms_hdr.blk_des_len; /* point to start of page 1 */A bp_msc += msc.ms_hdr.blk_des_len; /* point to start of page 1 */s /*r* * Make sure block descriptor is correct. */1 if(maskparams && (ms.ms_hdr.blk_des_len == 8)) {x9 ms.ms_desc.density_code &= msc.ms_desc.density_code;c- ms.ms_desc.nblks2 &= msc.ms_desc.nblks2;l- ms.ms_desc.nblks1 &= msc.ms_desc.nblks1;b- ms.ms_desc.nblks0 &= msc.ms_desc.nblks0;> } while(1) { & pp_ms = (struct page_header *)bp_ms;( pp_msc = (struct page_header *)bp_msc;5 if ((pp_ms->pgcode == 0) && (pp_ms->pglength == 0)). break; ( if (pp_ms->pgcode != pp_msc->pgcode) {- printf("change_drive_parameters: %s\n",_+ "ms.pgcode does not match msc.pgcode!");z return;e }e' bp_ms += sizeof (struct page_header); ( bp_msc += sizeof (struct page_header); /*0 * If the page has zero length or all the data5 * bytes are zero, then the page is not changeable.o6 * So don't send it (RRD40 fails if we send page 2).5 * The RRD40 says page 3 is changeable but its not,c3 * so we zap the bytes per physical sector field.o */r sum=0; if(pp_msc->pglength) { ptr = (char *)bp_msc;- if((strncmp(inq.prodid,"RRD40",5) == 0)7O]$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]0"] &&v (pp_msc->pgcode == 3)) {( q3 = (struct page_code_3 *)(bp_msc -! sizeof(struct page_header));e q3->bps1 = 0;o q3->bps0 = 0;t }( for(i = 0; i < pp_msc->pglength; i++) sum += *ptr++; }  if(pp_msc->pglength && sum) {l if (maskparams) {( for(i = 0; i < pp_ms->pglength; i++) *bp_ms++ &= *bp_msc++;a } else {U bp_ms += pp_ms->pglength;; bp_msc += pp_msc->pglength;f } } else {2 bp_msc += pp_msc->pglength; /* could be zero */' bp_ms -= sizeof(struct page_header); 0 msp.msp_length -= sizeof(struct page_header);% msp.msp_length -= pp_ms->pglength;o p = bp_ms;m- ptr = bp_ms + sizeof(struct page_header) +g pp_ms->pglength;* while(ptr < ((char *)&ms + sizeof(ms))) *p++ = *ptr++;( while(p < ((char *)&ms + sizeof(ms))) *p++ = 0;  }y } /*e= * Change the disk drive parameters to their DEFAULT values. */> printf("\nChanging disk drive parameters for device (%s).\n", rzdisk);? if(execute_rzcmd(SCSI_MODE_SELECT, (char *)&msp) != SUCCESS) {1 if(geterror() != NO_ERROR) return; } return; interactive: /*0$ * Inform the user what's going on. */; printf("Changing disk drive parameters interactively!\n");l if (!confirm("Are you sure",0)) return;d /*v* * Get the CURRENT disk drive parameters. */! rbzero((char *)&ms, sizeof(ms)); msp.msp_pgcode = 0x3f;y msp.msp_length = sizeof(ms);  msp.msp_addr = (caddr_t)&ms;p! msp.msp_pgctrl = CURRENT_VALUES;n> if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&msp) != SUCCESS) { if(geterror() != NO_ERROR) return; }# rbzero((char *)&msc, sizeof(msc));d mspc.msp_pgcode = 0x3f; mspc.msp_length = sizeof(msc);d mspc.msp_addr = (caddr_t)&msc;i" mspc.msp_pgctrl = CHANGED_VALUES;? if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&mspc) != SUCCESS) {) if(geterror() != NO_ERROR) return; } /*f= * This section asks the user which parameters they want ton< * change. The utility displays one page at a time and asks: * asks the user if they want to change any parameters in; * that given page. This goes on until all pages have beeno * displayed to the user.i */! printf("\nBlock descriptor:\n");e? printf(" Density code\t\t\t\t%d\n", ms.ms_desc.density_code);o( printf(" Number of blocks\t\t\t%d\n",  ((ms.ms_desc.nblks2<<16) + 1 (ms.ms_desc.nblks1<<8) + ms.ms_desc.nblks0)); & printf(" Block length\t\t\t\t%d\n",  ((ms.ms_desc.blklen2<<16) + 3 (ms.ms_desc.blklen1<<8) + ms.ms_desc.blklen0));g= if (confirm("\nDo you want to change the block length",0)) {z+ printstr("Enter the new block length? ");i value = getinteger();_. ms.ms_desc.blklen2 = ((value >> 16) & 0xff);- ms.ms_desc.blklen1 = ((value >> 8) & 0xff); - ms.ms_desc.blklen0 = ((value >> 0) & 0xff); } bp_ms = (char *)&ms; ; bp_ms += sizeof(ms.ms_hdr); /* skip mode select header */d bp_msc = (char *)&msc;e< bp_msc += sizeof(ms.ms_hdr); /* skip mode select header */@ bp_ms += ms.ms_hdr.blk_des_len; /* point to start of page 1 */A bp_msc += msc.ms_hdr.blk_des_len; /* point to start of page 1 */T num_sp = 0; while(1) { ) pp_ms = (struct page_header *)bp_ms;e+ pp_msc = (struct page_header *)bp_msc;k8 if ((pp_ms->pgcode == 0) && (pp_ms->pglength == 0)) break; /* 3 * If the page has zero length or all the datai8 * bytes are zero, then the page is not changeable.9 * So don't send it (RRD40 fails if we send page 2).o8 * The RRD40 says page 3 is changeable but its not,6 * so we zap the bytes per physical sector field. */! if (pp_msc->pglength == 0) {f8 bp_ms += sizeof(struct page_header) + pp_ms->pglength;' bp_msc += sizeof(struct page_header);t continue;f } sum=0;f if(pp_msc->pglength) {h4 ptr = (char *)bp_msc + sizeof(struct page_header);, if((strncmp(inq.prodid,"RRD40",5) == 0) && (pp_msc->pgcode == 3)) {z% q3 = (struct page_code_3 *)bp_msc;& q3->bps1 = 0; q3->bps0 = 0; }f' for(i = 0; i < pp_msc->pglength; i++) sum += *ptr++;  }) if(pp_msc->pglength && (sum == 0)) {.8 bp_ms += sizeof(struct page_header) + pp_ms->pglength;: bp_msc += sizeof(struct page_header) + pp_msc->pglength; continue;( }+ if (pp_ms->pgcode != pp_msc->pgcode) {C) printf("change_drive_parameters: %s\n",. "ms.pgcode does not match msc.pgcode!"); return;p } if(pp_ms->ps)3 num_sp++; /* remember number of saveable pages */e6 pp_ms->ps = 0; /* must be zero for mode select */ switch(pp_ms->pgcode) { case 1: /* Page 1 */\% p1 = (struct page_code_I_1 *)bp_ms;r& q1 = (struct page_code_I_1 *)bp_msc;' p1a = (struct page_code_II_1 *)bp_ms; ( q1a = (struct page_code_II_1 *)bp_msc;4 printf("\nPage 1 - error recovery parameters:\n");' printf(" PS\t\t\t\t\t%d\n", p1->ps);n0 printf(" Page code\t\t\t\t%d\n", p1->pgcode);4 printf(" Page length\t\t\t\t%d\n", p1->pglength);#if 00001 printf(" Flags\t\t\t\t\t0x%02x\n", p1->flags);o#endif/*F Add check for length. There are drives which say that they're SCSI-2+ but return page 1 with a length of 6 ?!?!i*/@ if ((inq.version == 1) || (p1->pglength == 6)) { /* SCSI-1 */8 printf(" Retry count\t\t\t\t%d\n", p1->retry_count);; printf(" Correction span\t\t\t%d\n", p1->correct_span);s< printf(" Head offset count\t\t\t%d\n", p1->head_offset);A printf(" Data strobe offset count\t\t%d\n", p1->data_strobe); @ printf(" Recovery time limit\t\t\t%d\n", p1->recovery_time); } else {A printf(" Read retry count\t\t\t%d\n", p1a->read_retry_count);nC printf(" Write retry count\t\t\t%d\n", p1a->write_retry_count);b< printf(" Correction span\t\t\t%d\n", p1a->correct_span);= printf(" Head offset count\t\t\t%d\n", p1a->head_offset);eB printf(" Data strobe offset count\t\t%d\n", p1a->data_strobe);A printf(" Recovery time limit\t\t\t%d\n", p1a->recovery_time);g }uD if (!confirm("\nDo you want to change any fields in this page",0)) break;#if 0000 if(q1->flags) { 1 printstr("Enter the new flags in (HEX)? ");k value = gethexnum();d p1->flags = value; };#endif@ if ((inq.version == 1) || (p1->pglength == 6)) { /* SCSI-1 */ if(q1->retry_count) {/ printstr("Enter the new retry count? ");  value = getinteger(); p1->retry_count = value;n } if(q1->correct_span) {n3 printstr("Enter the new correction span? "); value = getinteger(); p1->correct_span = value; } if(q1->head_offset) {5 printstr("Enter the new head offset count? ");l value = getinteger(); p1->head_offset = value;r } if(q1->data_strobe) {< printstr("Enter the new data strobe offset count? "); value = getinteger(); p1->data_strobe = value;= } if(q1->recovery_time) {7 printstr("Enter the new recovery time limit? ");f value = getinteger();! p1->recovery_time = value;( } } else { /* SCSI-2 */ if(q1a->read_retry_count) {4 printstr("Enter the new read retry count? "); value = getinteger();% p1a->read_retry_count = value;) } if(q1a->write_retry_count) { 5 printstr("Enter the new write retry count? ");  value = getinteger();& p1a->write_retry_count = value; } if(q1a->correct_span) {3 printstr("Enter the new correction span? ");  value = getinteger();! p1a->correct_span = value;t } if(q1a->head_offset) {(5 printstr("Enter the new head offset count? ");l value = getinteger(); p1a->head_offset = value; } if(q1a->data_strobe) { < printstr("Enter the new data strobe offset count? "); value = getinteger(); p1a->data_strobe = value; } if(q1a->recovery_time) {"7 printstr("Enter the new recovery time limit? ");f value = getinteger();" p1a->recovery_time = value; } }o break; case 2: /* Page 2 *//# p2 = (struct page_code_2 *)bp_ms;=$ q2 = (struct page_code_2 *)bp_msc;: printf("\nPage 2 - disconnect/reconnect parameters:\n");' printf(" PS\t\t\t\t\t%d\n", p2->ps);s0 printf(" Page code\t\t\t\t%d\n", p2->pgcode);4 printf(" Page length\t\t\t\t%d\n", p2->pglength);: printf(" Buffer full ratio\t\t\t%d\n", p2->bus_fratio);; printf(" Buffer empty ratio\t\t\t%d\n", p2->bus_eratio);3- printf(" Bus inactivity limit\t\t\t%d\n", a ((p2->bus_inactive1<<8) +, p2->bus_inactive0));n- printf(" Disconnect time limit\t\t\t%d\n",p ((p2->disconn_ti4$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]"nme1<<8) +r p2->disconn_time0));5+ printf(" Connect time limit\t\t\t%d\n", R ((p2->conn_time1<<8) +( p2->conn_time0));xD if (!confirm("\nDo you want to change any fields in this page",0)) break; if(q2->bus_fratio) {1 printstr("Enter the new bus full ratio? ");i value = getinteger();c p2->bus_fratio = value;i }t if(q2->bus_eratio) {2 printstr("Enter the new bus empty ratio? "); value = getinteger();d p2->bus_eratio = value;d }e. if(q2->bus_inactive1 || q2->bus_inactive0) {7 printstr("Enter the new bus inactivity limit? ");) value = getinteger();e0 p2->bus_inactive1 = ((value >> 8) & 0xff);0 p2->bus_inactive0 = ((value >> 0) & 0xff); } . if(q2->disconn_time1 || q2->disconn_time0) {8 printstr("Enter the new disconnect time limit? "); value = getinteger();"0 p2->disconn_time1 = ((value >> 8) & 0xff);0 p2->disconn_time0 = ((value >> 0) & 0xff); }.( if(q2->conn_time1 || q2->conn_time0) {5 printstr("Enter the new connect time limit? ");= value = getinteger();- p2->conn_time1 = ((value >> 8) & 0xff);f- p2->conn_time0 = ((value >> 0) & 0xff);n }  break; case 3: /* Page 3 */# p3 = (struct page_code_3 *)bp_ms; $ q3 = (struct page_code_3 *)bp_msc;A printf("\nPage 3 - direct-access device format parameters:\n"); ' printf(" PS\t\t\t\t\t%d\n", p3->ps); 0 printf(" Page code\t\t\t\t%d\n", p3->pgcode);4 printf(" Page length\t\t\t\t%d\n", p3->pglength);( printf(" Tracks per zone\t\t\t%d\n", ((p3->tpz1<<8) + p3->tpz0));1 printf(" Alternate sectors per zone\t\t%d\n", " ((p3->aspz1<<8) + p3->aspz0));0 printf(" Alternate tracks per zone\t\t%d\n", " ((p3->atpz1<<8) + p3->atpz0));2 printf(" Alternate tracks per volume\t\t%d\n", " ((p3->atpv1<<8) + p3->atpv0));* printf(" Sectors per track\t\t\t%d\n", ((p3->spt1<<8) + p3->spt0));0 printf(" Data bytes per phy sector\t\t%d\n", ((p3->bps1<<8) + p3->bps0));% printf(" Interleave\t\t\t\t%d\n", i ((p3->interleave1<<8) +  p3->interleave0));j% printf(" Track skew\t\t\t\t%d\n",  ((p3->track_skew1<<8) +  p3->track_skew0));d( printf(" Cylinder skew\t\t\t\t%d\n",  ((p3->cylinder_skew1<<8) + ) p3->cylinder_skew0));#if 0000/ printf(" Flags\t\t\t\t\t0x%x\n", p3->flags);c#endifD if (!confirm("\nDo you want to change any fields in this page",0)) break; if(q3->tpz1 || q3->tpz0) {2 printstr("Enter the new tracks per zone? "); value = getinteger();%' p3->tpz1 = ((value >> 8) & 0xff);r' p3->tpz0 = ((value >> 0) & 0xff);i }; if(q3->aspz1 || q3->aspz0) {= printstr("Enter the new alternate sectors per zone? ");  value = getinteger();e( p3->aspz1 = ((value >> 8) & 0xff);( p3->aspz0 = ((value >> 0) & 0xff); } if(q3->atpz1 || q3->atpz0) {< printstr("Enter the new alternate tracks per zone? "); value = getinteger();e( p3->atpz1 = ((value >> 8) & 0xff);( p3->atpz0 = ((value >> 0) & 0xff); }r if(q3->atpv1 || q3->atpv0) {> printstr("Enter the new alternate tracks per volume? "); value = getinteger();e( p3->atpv1 = ((value >> 8) & 0xff);( p3->atpv0 = ((value >> 0) & 0xff); }d if(q3->spt1 || q3->spt0) {4 printstr("Enter the new sectors per track? "); value = getinteger();' p3->spt1 = ((value >> 8) & 0xff);d' p3->spt0 = ((value >> 0) & 0xff);c }e if(q3->bps1 || q3->bps0) {3 printstr("Enter the new bytes per sector? ");y value = getinteger();n' p3->bps1 = ((value >> 8) & 0xff);' p3->bps0 = ((value >> 0) & 0xff); }f* if(q3->interleave1 || q3->interleave0) {4 printstr("Enter the new interleave factor? "); value = getinteger();A. p3->interleave1 = ((value >> 8) & 0xff);. p3->interleave0 = ((value >> 0) & 0xff); })* if(q3->track_skew1 || q3->track_skew0) {- printstr("Enter the new track skew? ");  value = getinteger();c. p3->track_skew1 = ((value >> 8) & 0xff);. p3->track_skew0 = ((value >> 0) & 0xff); }(0 if(q3->cylinder_skew1 || q3->cylinder_skew0) {0 printstr("Enter the new cylinder skew? "); value = getinteger();d1 p3->cylinder_skew1 = ((value >> 8) & 0xff);d1 p3->cylinder_skew0 = ((value >> 0) & 0xff);e }[#if 0000 if(q3->flags) {]1 printstr("Enter the new flags in (HEX)? "); value = gethexnum(); p3->flags = value; }o#endif break; case 4: /* Page 4 */;# p4 = (struct page_code_4 *)bp_ms;i$ q4 = (struct page_code_4 *)bp_msc;? printf("\nPage 4 - rigid disk drive geometry parameters:\n");k' printf(" PS\t\t\t\t\t%d\n", p4->ps); 0 printf(" Page code\t\t\t\t%d\n", p4->pgcode);4 printf(" Page length\t\t\t\t%d\n", p4->pglength);2 printf(" Maximum number of cylinders\t\t%d\n",  ((p4->ncyl2<<16) + (p4->ncyl1<<8) +g p4->ncyl0));: printf(" Maximum number of heads\t\t%d\n", p4->nheads);2 printf(" Write precompensation start\t\t%d\n",  ((p4->wprecomp2<<16) + (p4->wprecomp1<<8) +c p4->wprecomp0));2 printf(" Reduced write current start\t\t%d\n",  ((p4->rwc2<<16) +d (p4->rwc1<<8) + p4->rwc0));L( printf(" Drive step rate\t\t\t%d\n", ((p4->dsr1<<8) + p4->dsr0));. printf(" Landing zone cylinder\t\t\t%d\n",  ((p4->lzc2<<16) +v (p4->lzc1<<8) + p4->lzc0));rD if (!confirm("\nDo you want to change any fields in this page",0)) break; if(q4->ncyl2 ||  q4->ncyl1 || q4->ncyl0) {2 printstr("Enter the number of cylinders? "); value = getinteger();) p4->ncyl2 = ((value >> 16) & 0xff);;( p4->ncyl1 = ((value >> 8) & 0xff);( p4->ncyl0 = ((value >> 0) & 0xff); }s if(q4->nheads) {. printstr("Enter the number of heads? "); value = getinteger();y p4->nheads = value;c }c if(q4->wprecomp2 || $ q4->wprecomp1 || q4->wprecomp0) {: printstr("Enter the write precompensation start? "); value = getinteger();(- p4->wprecomp2 = ((value >> 16) & 0xff);e, p4->wprecomp1 = ((value >> 8) & 0xff);, p4->wprecomp0 = ((value >> 0) & 0xff); }e if(q4->rwc2 ||  q4->rwc1 || q4->rwc0) {: printstr("Enter the reduced write current start? "); value = getinteger();i( p4->rwc2 = ((value >> 16) & 0xff);' p4->rwc1 = ((value >> 8) & 0xff);a' p4->rwc0 = ((value >> 0) & 0xff);i }i if(q4->dsr1 || q4->dsr0) {. printstr("Enter the drive step rate? "); value = getinteger();s' p4->dsr1 = ((value >> 8) & 0xff);k' p4->dsr0 = ((value >> 0) & 0xff);s }k if(q4->lzc1 || q4->lzc0) {4 printstr("Enter the landing zone cylinder? "); value = getinteger();a' p4->lzc1 = ((value >> 8) & 0xff);g' p4->lzc0 = ((value >> 0) & 0xff);= }& break; case 5: /* Page 5 */f# p5 = (struct page_code_5 *)bp_ms;$ q5 = (struct page_code_5 *)bp_msc;9 printf("\nPage 5 - flexible disk drive parameters:\n"); + printf(" PS\t\t\t\t\t%d\n", p5->ps);a0 printf(" Page code\t\t\t\t%d\n", p5->pgcode);4 printf(" Page length\t\t\t\t%d\n", p5->pglength);' printf(" Transfer rate\t\t\t\t%d\n",e ((p5->xfer_rate1<<8) +S p5->xfer_rate0));f8 printf(" Number of heads\t\t\t%d\n", p5->num_heads);; printf(" Sectors per track\t\t\t%d\n", p5->sec_per_trk); 2 printf(" Data bytes per physical sector\t%d\n", ((p5->db_per_physec1<<8) +; p5->db_per_physec0));,+ printf(" Number of Cylinders\t\t\t%d\n",= ((p5->num_cyl1<<8) +p p5->num_cyl0));-6 printf(" Starting write precompensation cyl\t%d\n", ((p5->swpc1<<8) + p5->swpc0));6 printf(" Starting reduced write current cyl\t%d\n", ((p5->srwcc1<<8) +& p5->srwcc0));s' printf(" Drive step rate\t\t\t%d\n",e ((p5->drv_stp_rate1<<8) + p5->drv_stp_rate0));? printf(" Drive step pulse width\t\t%d\n", p5->drv_sp_width);) printf(" Head settle delay\t\t\t%d\n",n ((p5->hd_stl_del1<<8) + p5->hd_stl_del0));7 printf(" Motor on delay\t\t\t%d\n", p5->mtr_on_del);e9 printf(" Motor off delay\t\t\t%d\n", p5->mtr_off_del);s if(!moreoutput())s return; printf("\n");0 printf(" Motor on (MO)\t\t\t\t%d\n", p5->mo);9 printf(" Start sector number (SSN)\t\t%d\n", p5->ssn);m4 printf(" True ready (TRDY)\t\t\t%d\n", p5->trdy);? printf(" Step pulses per cylinder (SPC)\t%d\n", p5->sp_cyl);? printf(" Write precompensation level\t\t%d\n", p5->wpc_lvl); 4 printf(" Head load   Yr$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]"delay\t\t\t%d\n", p5->hl_del);7 printf(" Head unload delay\t\t\t%d\n", p5->hul_del);t5 printf(" Pin 2 definition\t\t\t%d\n", p5->p2_def);u7 printf(" Pin 34 definition\t\t\t%d\n", p5->p34_def);p5 printf(" Pin 1 definition\t\t\t%d\n", p5->p1_def);s5 printf(" Pin 4 definition\t\t\t%d\n", p5->p4_def);i, printf(" Medium rotation rate\t\t\t%d\n", ((p5->med_rr1<<8) + p5->med_rr0));D if (!confirm("\nDo you want to change any fields in this page",0)) break;( if(q5->xfer_rate0 || q5->xfer_rate1) {, printstr("Enter the transfer rate? "); value = getinteger();}- p5->xfer_rate1 = ((value >> 8) & 0xff);s& p5->xfer_rate0 = (value & 0xff); }s if(q5->num_heads) {(. printstr("Enter the number of heads? ");* p5->num_heads = getinteger() & 0xff; }s if(q5->sec_per_trk) {g1 printstr("Enter the sectors per track? ");T- p5->sec_per_trk = getinteger() & 0xff;  }t0 if(q5->db_per_physec0 || q5->db_per_physec1) {= printstr("Enter the data bytes per physical sector? ");r value = getinteger();g1 p5->db_per_physec1 = ((value >> 8) & 0xff);s* p5->db_per_physec0 = (value & 0xff); }r$ if(q5->num_cyl0 || q5->num_cyl1) {2 printstr("Enter the number of cylinders? "); value = getinteger(); + p5->num_cyl1 = ((value >> 8) & 0xff);d$ p5->num_cyl0 = (value & 0xff); }i if(q5->swpc0 || q5->swpc1) {> printstr("Enter the write precompensation start cyl? "); value = getinteger();( p5->swpc1 = ((value >> 8) & 0xff);! p5->swpc0 = (value & 0xff);n }h if(q5->srwcc0 || q5->srwcc1) {> printstr("Enter the reduced write current start cyl? "); value = getinteger();l) p5->srwcc1 = ((value >> 8) & 0xff);(" p5->srwcc0 = (value & 0xff); }r. if(q5->drv_stp_rate0 || q5->drv_stp_rate1) {. printstr("Enter the drive step rate? "); value = getinteger();)0 p5->drv_stp_rate1 = ((value >> 8) & 0xff);) p5->drv_stp_rate0 = (value & 0xff);  } if(q5->drv_sp_width) {5 printstr("Enter the drive step pulse width? ");- p5->drv_sp_width = getinteger() & 0xff;* }s* if(q5->hd_stl_del0 || q5->hd_stl_del1) {0 printstr("Enter the head settle delay? "); value = getinteger();/. p5->hd_stl_del1 = ((value >> 8) & 0xff);' p5->hd_stl_del0 = (value & 0xff);e }  if(q5->mtr_on_del) {- printstr("Enter the motor on delay? ");g+ p5->mtr_on_del = getinteger() & 0xff;g }  if(q5->mtr_off_del) {w. printstr("Enter the motor off delay? ");, p5->mtr_off_del = getinteger() & 0xff; }= if(q5->mo) {0 printstr("Enter the motor on (MO) bit? ");" p5->mo = getinteger() & 0x1; }  if(q5->ssn) {< printstr("Enter the start sector number (SSN) bit? ");# p5->ssn = getinteger() & 0x1;n }d if(q5->trdy) {4 printstr("Enter the true ready (TRDY) bit? ");$ p5->trdy = getinteger() & 0x1; }  if(q5->sp_cyl) {= printstr("Enter the step pulses per cylinder (SPC)? ");& p5->sp_cyl = getinteger() & 0xf; }) if(q5->wpc_lvl) {o: printstr("Enter the write precompensation level? ");( p5->wpc_lvl = getinteger() & 0xff; }t if(q5->hl_del) {. printstr("Enter the head load delay? ");' p5->hl_del = getinteger() & 0xff;  }. if(q5->hul_del) { 0 printstr("Enter the head unload delay? ");( p5->hul_del = getinteger() & 0xff; }e if(q5->p2_def) {/ printstr("Enter the pin 2 definition? "); & p5->p2_def = getinteger() & 0xf; }/ if(q5->p34_def) {(0 printstr("Enter the pin 34 definition? ");' p5->p34_def = getinteger() & 0xf;e }_ if(q5->p1_def) {/ printstr("Enter the pin 1 definition? ");n& p5->p1_def = getinteger() & 0xf; }r if(q5->p4_def) {/ printstr("Enter the pin 4 definition? ");\& p5->p4_def = getinteger() & 0xf; }\" if(q5->med_rr0 || q5->med_rr1) {3 printstr("Enter the medium rotation rate? ");e value = getinteger();g* p5->med_rr1 = ((value >> 8) & 0xff);# p5->med_rr0 = (value & 0xff);n }f break; case 8: /* Page 8 */p# p8 = (struct page_code_8 *)bp_ms; $ q8 = (struct page_code_8 *)bp_msc;1 printf("\nPage 8 - caching parameters:\n");t+ printf(" PS\t\t\t\t\t%d\n", p8->ps); 4 printf(" Page code\t\t\t\t%d\n", p8->pgcode);8 printf(" Page length\t\t\t\t%d\n", p8->pglength);. printf(" Read cache disable bit\t\t0x%x\n", p8->rc);;. printf(" Multiple selection bit\t\t0x%x\n", p8->ms);a. printf(" Write cache enable bit\t\t0x%x\n", p8->wce);. printf(" Write retention priority\t\t%d\n", p8->wrp);2 printf(" Demand read retention priority\t%d\n", p8->drrp);>4 printf(" Disable prefetch transfer length\t%d\n",$ ((p8->dpftl1<<8) + p8->dpftl0));( printf(" Minimum prefetch\t\t\t%d\n",$ ((p8->minpf1<<8) + p8->minpf0));( printf(" Maximum prefetch\t\t\t%d\n",$ ((p8->maxpf1<<8) + p8->maxpf0));. printf(" Maximum prefetch ceiling\t\t%d\n",& ((p8->maxpfc1<<8) + p8->maxpfc0));D if (!confirm("\nDo you want to change any fields in this page",0)) break; if(q8->rc) {6 if(confirm("Set read cache disable (RC) bit",0)) p8->rc = 1; else p8->rc = 0; }l if(q8->ms) {6 if (confirm("Set mutiple selection (MS) bit",0)) p8->ms = 1; else p8->ms = 0; }r if(q8->wce) {8 if (confirm("Set write cache enable (WCE) bit",0)) p8->wce = 1;i else p8->wce = 0;p }t if(q8->wrp) {h7 printstr("Enter the write retention priority? ");  value = getinteger(); p8->wrp = value; }{ if(q8->drrp) {= printstr("Enter the demand read retention priority? ");t value = getinteger();t p8->drrp = value;i }> if(q8->dpftl1 || q8->dpftl0) {< printstr("Enter disable pre-fetch transfer length? "); value = getinteger();_) p8->dpftl1 = ((value >> 8) & 0xff); ) p8->dpftl0 = ((value >> 0) & 0xff);p }t if(q8->minpf1 || q8->minpf0) {2 printstr("Enter minimum pre-fetch value? "); value = getinteger();) p8->minpf1 = ((value >> 8) & 0xff);i) p8->minpf0 = ((value >> 0) & 0xff);  } if(q8->maxpf1 || q8->maxpf0) {2 printstr("Enter maximum pre-fetch value? "); value = getinteger();() p8->maxpf1 = ((value >> 8) & 0xff); ) p8->maxpf0 = ((value >> 0) & 0xff);_ }=" if(q8->maxpfc1 || q8->maxpfc0) {: printstr("Enter maximum pre-fetch ceiling value? "); value = getinteger();(* p8->maxpfc1 = ((value >> 8) & 0xff);* p8->maxpfc0 = ((value >> 0) & 0xff); }r break; case 37: /* Page 37 */  if (!page37_foreign) {& p37 = (struct page_code_37 *)bp_ms;' q37 = (struct page_code_37 *)bp_msc;t2 printf("\nPage 37 - DEC unique parameters:\n");) printf(" PS\t\t\t\t\t%d\n", p37->ps);t2 printf(" Page code\t\t\t\t%d\n", p37->pgcode);6 printf(" Page length\t\t\t\t%d\n", p37->pglength);A printf(" Spinup on power up\t\t\t%s\n", yesno(!p37->spinup));cE if (!confirm("\nDo you want to change any fields in this page",0)) break;e2 if (confirm("Have drive spinup on power on",0)) p37->spinup = 0;g else p37->spinup = 1;a break;\# } /* fall into default section */f default:t6 printf("\nPage %d - unknown or unsupported page:\n", pp_ms->pgcode);* printf(" PS\t\t\t\t\t%d\n", pp_ms->ps);3 printf(" Page code\t\t\t\t%d\n", pp_ms->pgcode);\7 printf(" Page length\t\t\t\t%d\n", pp_ms->pglength);n, ptr = bp_ms + sizeof (struct page_header);( for(i = 0; i < pp_ms->pglength; i++) { if(i && ((i % 16) == 0)) { if(!moreoutput()) break;s printf("\n"); }r3 printf(" Byte %d\t\t\t\t0x%x\n", i, *ptr++);h } D if (!confirm("\nDo you want to change any fields in this page",0)) break;, ptr = bp_ms + sizeof (struct page_header);. ptrc = bp_msc + sizeof (struct page_header);( for(i = 0; i < pp_ms->pglength; i++) {& if (*ptrc) { /* Changeable? */: printf("Enter the new value for byte %d in (HEX)? ",i); value = gethexnum();  *ptr = value; } ptr++; ptrc++;  }  break; } /* switch */ < bp_ms += sizeof (struct page_header) + pp_ms->pglength;> bp_msc += sizeof (struct page_header) + pp_msc->pglength; } /* while */ /* - * Ask user which pages to save if there areu' * any saveable pages for this device.  */ if(num_sp == 0) setps = 0; else {i0 if (confir  $ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]8m("\nMake the changes permanent",0)) setps = 1;i else setps = 0;a } msp.msp_setps = setps;> msp.msp_setpf = 0;> if (inq.version == 2): msp.msp_setpf = 1; /* Set pageformat to 2 for SCSI-II */* msp.msp_length = ms.ms_hdr.sense_len + 1; ms.ms_hdr.sense_len = 0;3 ms.ms_hdr.medium_type = 0;s ms.ms_hdr.wp = 0; /*d= * For each data byte of each page and the block descriptor,t: * and it with the same data byte in the changeable page.4 * This makes sure we don't attempt to set any non-5 * changeable bits to one (which would cause a check" * condition on the mode select). */ bp_ms = (char *)&ms;e; bp_ms += sizeof(ms.ms_hdr); /* skip mode select header */n bp_msc = (char *)&msc;r< bp_msc += sizeof(ms.ms_hdr); /* skip mode select header */@ bp_ms += ms.ms_hdr.blk_des_len; /* point to start of page 1 */A bp_msc += msc.ms_hdr.blk_des_len; /* point to start of page 1 */> /*<* * Make sure block descriptor is correct. */1 if(maskparams && (ms.ms_hdr.blk_des_len == 8)) {9 ms.ms_desc.density_code &= msc.ms_desc.density_code;e- ms.ms_desc.nblks2 &= msc.ms_desc.nblks2; - ms.ms_desc.nblks1 &= msc.ms_desc.nblks1;w- ms.ms_desc.nblks0 &= msc.ms_desc.nblks0;  } while(1) {\& pp_ms = (struct page_header *)bp_ms;( pp_msc = (struct page_header *)bp_msc;5 if ((pp_ms->pgcode == 0) && (pp_ms->pglength == 0))d break;c8 if (maskparams && (pp_ms->pgcode != pp_msc->pgcode)) {- printf("change_drive_parameters: %s\n",+ "ms.pgcode does not match msc.pgcode!");? return;u }e' bp_ms += sizeof (struct page_header); ( bp_msc += sizeof (struct page_header); /*0 * If the page has zero length or all the data5 * bytes are zero, then the page is not changeable.)6 * So don't send it (RRD40 fails if we send page 2).5 * The RRD40 says page 3 is changeable but its not,x3 * so we zap the bytes per physical sector field.n */n sum=0; if(pp_msc->pglength) { ptr = (char *)bp_msc;- if((strncmp(inq.prodid,"RRD40",5) == 0) &&x (pp_msc->pgcode == 3)) {( q3 = (struct page_code_3 *)(bp_msc -! sizeof(struct page_header));h q3->bps1 = 0;c q3->bps0 = 0; }( for(i = 0; i < pp_msc->pglength; i++) sum += *ptr++; }  if(pp_msc->pglength && sum) {x if (maskparams) {( for(i = 0; i < pp_ms->pglength; i++) *bp_ms++ &= *bp_msc++;; } else {  bp_ms += pp_ms->pglength;1 bp_msc += pp_msc->pglength;  } }( else {2 bp_msc += pp_msc->pglength; /* could be zero */' bp_ms -= sizeof(struct page_header);t0 msp.msp_length -= sizeof(struct page_header);% msp.msp_length -= pp_ms->pglength;3 p = bp_ms;e- ptr = bp_ms + sizeof(struct page_header) +  pp_ms->pglength;* while(ptr < ((char *)&ms + sizeof(ms))) *p++ = *ptr++;( while(p < ((char *)&ms + sizeof(ms))) *p++ = 0;  }; } /*3= * Change the disk drive parameters to their CHANGED values.e */> printf("\nChanging disk drive parameters for device (%s).\n", rzdisk);? if(execute_rzcmd(SCSI_MODE_SELECT, (char *)&msp) != SUCCESS) {f if(geterror() != NO_ERROR) return; }};char *devicetypes[] = {k "Direct access", /* 0x00 */ ! "Sequential access", /* 0x01 */r "Printer", /* 0x02 */ "Processor", /* 0x03 */ "Worm", /* 0x04 */ "CDrom", /* 0x05 */ "Scanner", /* 0x06 */ "Optical memory", /* 0x07 */ "Medium changer", /* 0x08 */ "Communications" /* 0x09 */E};get_inquiry_info(doprint)( int doprint;{g char hold[20]; int i; char *p; if (doprint) D printf("\nGetting inquiry data info from device (%s).\n", rzdisk);# rbzero((char *)&inq, sizeof(inq));- msp.msp_addr = (caddr_t)&inq; msp.msp_length = sizeof(inq);D if(execute_rzcmd(SCSI_GET_INQUIRY_DATA, (char *)&msp) != SUCCESS) { if(geterror() != NO_ERROR) exit(1);4 } if (doprint) {f, printf("\nDump of Inquiry Data:\n\n"); if (inq.perfdt > 9)  p = "Unknown";g else p = devicetypes[inq.perfdt]; 7 printf(" Device Type Qualifier\t\t\t%s device\n",p); 8 printf(" Removable Medium\t\t\t%s\n",yesno(inq.rmb));. printf(" Version\t\t\t\t%d\n",inq.version);@ printf(" Terminate I/O process\t\t\t%s\n",yesno(inq.trmiop));? printf(" Async event notification\t\t%s\n",yesno(inq.aenc));n6 printf(" Soft reset\t\t\t\t%s\n",yesno(inq.sftre));; printf(" Command queueing\t\t\t%s\n",yesno(inq.cmdque));: printf(" Linked commands\t\t\t%s\n",yesno(inq.linked));@ printf(" Synchronous communication\t\t%s\n",yesno(inq.sync));? printf(" 16 bit wide transfer\t\t\t%s\n",yesno(inq.wbus16));c? printf(" 32 bit wide transfer\t\t\t%s\n",yesno(inq.wbus32)); > printf(" Relative addressing\t\t\t%s\n",yesno(inq.reladr)); for(i=0; i<8; i++) hold[i] = inq.vndrid[i];  hold[i] = '\0'; 3 printf(" Vendor Identificaton\t\t\t%s\n", hold);s for(i=0; i<16; i++)  hold[i] = inq.prodid[i];i hold[i] = '\0';43 printf(" Product Identification\t\t%s\n", hold);q for(i=0; i<4; i++) hold[i] = inq.revlvl[i];  hold[i] = '\0';s- printf(" Revision Level\t\t\t%s\n", hold); }}4test_device(how)int how;{f u_char *p;4 char *mode = "";u char buf[32]; int i;4! rbzero((char *)&dp, sizeof(dp));# rbzero((char *)&buf, sizeof(buf));  dp.dp_length = sizeof(buf); dp.dp_buffer = (caddr_t)&buf; dp.dp_control = DP_SELF_TEST; if (how) {  if(disk_mounted()) return;K printf("A full test may destroy all data on the device (%s)!\n", rzdisk);)! if (!confirm("Are you sure",0))q return; dp.dp_control |= DP_UNIT_OFL;t mode = "(full) ";a }I printf("\nSending diagnostic command %sto device (%s).\n",mode, rzdisk);=B if(execute_rzcmd(SCSI_SEND_DIAGNOSTIC, (char *)&dp) != SUCCESS) { geterror(); return;  }E if(execute_rzcmd(SCSI_RECEIVE_DIAGNOSTIC, (char *)&dp) != SUCCESS) {> geterror(); return;z }) printf("\nDiagnostic data received:\n"); p = (u_char *)&buf;# for(i = 0; i < sizeof(buf); i++) {* if (!(i % 16)) printf("\n%3.3x: ", i); printf("%02.2x ", *p++); } printf("\n");}rget_capacity(){f  int lastblk, blocksize;: printf("\nGetting capacity from device (%s).\n", rzdisk);A if(execute_rzcmd(SCSI_READ_CAPACITY, (char *)&rcp) != SUCCESS) {t geterror();e return;x } lastblk = rcp.max_lba_0 + (rcp.max_lba_1 << 8) + (rcp.max_lba_2 << 16) +- (rcp.max_lba_3 << 24) + 1; blocksize = rcp.block_len_0 + (rcp.block_len_1 << 8) + (rcp.block_len_2 << 16) +t (rcp.block_len_3 << 24);- printf("\nCapacity: %d blocks.\n", lastblk);"/ printf("Blocksize: %d bytes.\n\n", blocksize);c}<"get_drive_parameters(page_control){  char strtype[20]; int i;c char *ptr;  struct page_header *pp_ms;w char *bp_ms;f struct page_code_I_1 *p1; struct page_code_II_1 *p1a; struct page_code_2 *p2; struct page_code_3 *p3; struct page_code_4 *p4; struct page_code_5 *p5; struct page_code_7 *p7; struct page_code_8 *p8; struct page_code_9 *p9; struct page_code_10 *p10; struct page_code_11 *p11; struct page_code_12 *p12; struct page_code_37 *p37; get_inquiry_info(0);y! rbzero((char *)&ms, sizeof(ms));r msp.msp_pgcode = 0x3f;\ msp.msp_length = sizeof(ms);  msp.msp_pgctrl = page_control;  msp.msp_addr = (caddr_t)&ms;o /*(= * Get the CURRENT, DEFAULT, SAVED, or CHANGEABLE disk driveN/ * parameters based on the page control value.R */# if(page_control == CURRENT_VALUES)p strcpy(strtype,"CURRENT");,( else if(page_control == DEFAULT_VALUES) strcpy(strtype,"DEFAULT");v& else if(page_control == SAVED_VALUES) strcpy(strtype,"SAVED"); ( else if(page_control == CHANGED_VALUES)" strcpy(strtype,"CHANGEABLE");A printf("\nGetting %s disk drive parameters from device (%s).\n",5 strtype,rzdisk);f> if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&msp) != SUCCESS) { if(geterror() != NO_ERROR) return; } /* : * Display the parameters to the user. All parameters are; * displayed in (Decimal), all flags in (Hex). If the page = * code is CHANGEABLE then all fields are displayed in (Hex)q@ * to show the bit pattern of all the bits that can be changed. */" printf("\nMode sense header:\n");> printf(" Sense data length\t\t\t%d\n", ms.ms_hdr.sense_len);< printf(" Medium type\t\t\t\t%d\n", ms.ms_hdr.medium_type);. printf(" WP\t\t\t\t\t0x%x\n", ms.ms_hdr.wp);D printf(" Block descriptor length\t\t%d\n", ms.ms_hdr.blk_des_len);! printf("\nBlock descriptor:\n"); ? printf(" Density code\t\t\t\t%d\n", ms.ms_desc.density_code);e( printf(" Number of blocks\t\t\t%d\n",  ((ms.ms 7b$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]v"_desc.nblks2<<16) + 1 (ms.ms_desc.nblks1<<8) + ms.ms_desc.nblks0));)C if(page_control == CHANGED_VALUES && ms.ms_desc.blklen2 == 0xff &&p= ms.ms_desc.blklen1 == 0xff && ms.ms_desc.blklen0 == 0xff) {m) printf(" Block length\t\t\t\t0x%x\n", o ((ms.ms_desc.blklen2<<16) + e3 (ms.ms_desc.blklen1<<8) + ms.ms_desc.blklen0));f } else {5' printf(" Block length\t\t\t\t%d\n", q ((ms.ms_desc.blklen2<<16) + r3 (ms.ms_desc.blklen1<<8) + ms.ms_desc.blklen0));; } bp_ms = (char *)&ms;); bp_ms += sizeof(ms.ms_hdr); /* skip mode select header */ @ bp_ms += ms.ms_hdr.blk_des_len; /* point to start of page 1 */ while(1) {e) pp_ms = (struct page_header *)bp_ms;8 if ((pp_ms->pgcode == 0) && (pp_ms->pglength == 0)) break;A if (pp_ms->pglength == 0) { /* no data bytes in this page */t& bp_ms += sizeof(struct page_header); continue;  } switch(pp_ms->pgcode) { case 1: /* Page 1 */_% p1 = (struct page_code_I_1 *)bp_ms;5' p1a = (struct page_code_II_1 *)bp_ms; if(!moreoutput()){ return;8 printf("\nPage 1 - error recovery parameters:\n");+ printf(" PS\t\t\t\t\t%d\n", p1->ps);f4 printf(" Page code\t\t\t\t%d\n", p1->pgcode);8 printf(" Page length\t\t\t\t%d\n", p1->pglength);& if(page_control == CHANGED_VALUES) {7 printf(" Disable correction\t\t\t0x%x\n", p1->dcr);< printf(" Disable transfer on error\t\t0x%x\n", p1->dte);1 printf(" Post error\t\t\t\t0x%x\n", p1->per); : printf(" Enable early recovery\t\t\t0x%x\n", p1->eer);3 printf(" Read continuous\t\t\t0x%x\n", p1->rc); 2 printf(" Transfer block\t\t\t0x%x\n", p1->tb);: printf(" Auto realloc on read\t\t\t0x%x\n", p1->arre);; printf(" Auto realloc on write\t\t\t0x%x\n", p1->awre);eA if ((inq.version == 1) || (p1->pglength == 6)) { /* SCSI-1 */r. printf(" Retry count\t\t\t\t0x%x\n",  p1->retry_count);0 printf(" Correction span\t\t\t0x%x\n",  p1->correct_span);y2 printf(" Head offset count\t\t\t0x%x\n",  p1->head_offset);7 printf(" Data strobe offset count\t\t0x%x\n",  p1->data_strobe);4 printf(" Recovery time limit\t\t\t0x%x\n",  p1->recovery_time); } else { /* SCSI-2 */1 printf(" Read retry count\t\t\t0x%x\n",  p1a->read_retry_count);2 printf(" Write retry count\t\t\t0x%x\n",  p1a->write_retry_count);;0 printf(" Correction span\t\t\t0x%x\n",  p1a->correct_span);2 printf(" Head offset count\t\t\t0x%x\n",  p1a->head_offset); 7 printf(" Data strobe offset count\t\t0x%x\n", h p1a->data_strobe);4 printf(" Recovery time limit\t\t\t0x%x\n",  p1a->recovery_time);r } } else {5 printf(" Disable correction\t\t\t%x\n", p1->dcr);;: printf(" Disable transfer on error\t\t%x\n", p1->dte);/ printf(" Post error\t\t\t\t%x\n", p1->per); 8 printf(" Enable early recovery\t\t\t%x\n", p1->eer);1 printf(" Read continuous\t\t\t%x\n", p1->rc); 0 printf(" Transfer block\t\t\t%x\n", p1->tb);8 printf(" Auto realloc on read\t\t\t%x\n", p1->arre);9 printf(" Auto realloc on write\t\t\t%x\n", p1->awre);uA if ((inq.version == 1) || (p1->pglength == 6)) { /* SCSI-1 */ , printf(" Retry count\t\t\t\t%d\n",  p1->retry_count);. printf(" Correction span\t\t\t%d\n",  p1->correct_span);e0 printf(" Head offset count\t\t\t%d\n",  p1->head_offset);5 printf(" Data strobe offset count\t\t%d\n", r p1->data_strobe);2 printf(" Recovery time limit\t\t\t%d\n",  p1->recovery_time); } else { /* SCSI-2 *// printf(" Read retry count\t\t\t%d\n", - p1a->read_retry_count);0 printf(" Write retry count\t\t\t%d\n",  p1a->write_retry_count);s. printf(" Correction span\t\t\t%d\n",  p1a->correct_span);0 printf(" Head offset count\t\t\t%d\n",  p1a->head_offset); 5 printf(" Data strobe offset count\t\t%d\n", - p1a->data_strobe);a2 printf(" Recovery time limit\t\t\t%d\n",  p1a->recovery_time);( } }n break; o case 2: /* Page 2 */"# p2 = (struct page_code_2 *)bp_ms;  if(!moreoutput())d return;: printf("\nPage 2 - disconnect/reconnect parameters:\n");' printf(" PS\t\t\t\t\t%d\n", p2->ps);(0 printf(" Page code\t\t\t\t%d\n", p2->pgcode);4 printf(" Page length\t\t\t\t%d\n", p2->pglength);& if(page_control == CHANGED_VALUES) {- printf(" Buffer full ratio\t\t\t0x%x\n", e p2->bus_fratio);. printf(" Buffer empty ratio\t\t\t0x%x\n",  p2->bus_eratio);0 printf(" Bus inactivity limit\t\t\t0x%x\n",  ((p2->bus_inactive1<<8) +r p2->bus_inactive0)); 0 printf(" Disconnect time limit\t\t\t0x%x\n", ((p2->disconn_time1<<8) +> p2->disconn_time0));q. printf(" Connect time limit\t\t\t0x%x\n",  ((p2->conn_time1<<8) + p2->conn_time0)); }e else {+ printf(" Buffer full ratio\t\t\t%d\n",  p2->bus_fratio);, printf(" Buffer empty ratio\t\t\t%d\n",  p2->bus_eratio);. printf(" Bus inactivity limit\t\t\t%d\n",  ((p2->bus_inactive1<<8) +  p2->bus_inactive0)); . printf(" Disconnect time limit\t\t\t%d\n", ((p2->disconn_time1<<8) +  p2->disconn_time0));n, printf(" Connect time limit\t\t\t%d\n",  ((p2->conn_time1<<8) + p2->conn_time0)); }) break; case 3: /* Page 3 */)# p3 = (struct page_code_3 *)bp_ms;  if(!moreoutput())r return;A printf("\nPage 3 - direct-access device format parameters:\n");(' printf(" PS\t\t\t\t\t%d\n", p3->ps);f0 printf(" Page code\t\t\t\t%d\n", p3->pgcode);4 printf(" Page length\t\t\t\t%d\n", p3->pglength);& if(page_control == CHANGED_VALUES) {+ printf(" Tracks per zone\t\t\t0x%x\n", o ((p3->tpz1<<8) + p3->tpz0));4 printf(" Alternate sectors per zone\t\t0x%x\n", " ((p3->aspz1<<8) + p3->aspz0));3 printf(" Alternate tracks per zone\t\t0x%x\n", " ((p3->atpz1<<8) + p3->atpz0));5 printf(" Alternate tracks per volume\t\t0x%x\n", n" ((p3->atpv1<<8) + p3->atpv0));- printf(" Sectors per track\t\t\t0x%x\n", e ((p3->spt1<<8) + p3->spt0));3 printf(" Data bytes per phy sector\t\t0x%x\n", > ((p3->bps1<<8) + p3->bps0));( printf(" Interleave\t\t\t\t0x%x\n",  ((p3->interleave1<<8) +  p3->interleave0));a( printf(" Track skew\t\t\t\t0x%x\n",  ((p3->track_skew1<<8) +  p3->track_skew0));s+ printf(" Cylinder skew\t\t\t\t0x%x\n", p ((p3->cylinder_skew1<<8) + l p3->cylinder_skew0));/ printf(" Surface\t\t\t\t0x%x\n", p3->surf);e0 printf(" Removable\t\t\t\t0x%x\n", p3->rmb);4 printf(" Hard sectors\t\t\t\t0x%x\n", p3->hsec);4 printf(" Soft sectors\t\t\t\t0x%x\n", p3->ssec); }" else {) printf(" Tracks per zone\t\t\t%d\n", c ((p3->tpz1<<8) + p3->tpz0));2 printf(" Alternate sectors per zone\t\t%d\n", " ((p3->aspz1<<8) + p3->aspz0));1 printf(" Alternate tracks per zone\t\t%d\n", o" ((p3->atpz1<<8) + p3->atpz0));3 printf(" Alternate tracks per volume\t\t%d\n", E" ((p3->atpv1<<8) + p3->atpv0));+ printf(" Sectors per track\t\t\t%d\n", ((p3->spt1<<8) + p3->spt0));1 printf(" Data bytes per phy sector\t\t%d\n", * ((p3->bps1<<8) + p3->bps0));& printf(" Interleave\t\t\t\t%d\n",  ((p3->interleave1<<8) +  p3->interleave0));;& printf(" Track skew\t\t\t\t%d\n",  ((p3->track_skew1<<8) +  p3->track_skew0));s) printf(" Cylinder skew\t\t\t\t%d\n",  ((p3->cylinder_skew1<<8) + f p3->cylinder_skew0));- printf(" Surface\t\t\t\t%x\n", p3->surf);0. printf(" Removable\t\t\t\t%x\n", p3->rmb);2 printf(" Hard sectors\t\t\t\t%x\n", p3->hsec);2 printf(" Soft sectors\t\t\t\t%x\n", p3->ssec); }  break; e case 4: /* Page 4 */l# p4 = (struct page_code_4 *)bp_ms;s if(!moreoutput())/ return;? printf("\nPage 4 - rigid disk drive geometry parameters:\n");t' printf(" PS\t\t\t\t\t%d\n", p4->ps);e0 printf(" Page code\t\t\t\t%d\n", p4->pgcode);4 printf(" Page length\t\t\t\t%d\n", p4->pglength);& if(page_control == CHANGED_VALUES) {5 printf(" Maximum number of cylinders\t\t0x%x\n", f ((p4->ncyl2<<16) + (p4->ncyl1<<8) +b p4->ncyl0));1 printf(" Maximum number of heads\t\t0x%x\n", e p4->nheads);5 printf(" Write precompensation start\t\t0x%x\n",  ((p4->wprecomp2<<16) + (p4->wprecomp1<<8) +a p4->wprecomp0));5 printf(" Reduced write current start\t\t0x%x\n", a ((p4->rwc2<<16) +b (p4 Σy$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]sz"->rwc1<<8) + p4->rwc0));s+ printf(" Drive step rate\t\t\t0x%x\n", m ((p4->dsr1<<8) + p4->dsr0));1 printf(" Landing zone cylinder\t\t\t0x%x\n", 1 ((p4->lzc2<<16) +k (p4->lzc1<<8) + p4->lzc0));  }  else {3 printf(" Maximum number of cylinders\t\t%d\n", e ((p4->ncyl2<<16) + (p4->ncyl1<<8) +p p4->ncyl0));/ printf(" Maximum number of heads\t\t%d\n", e p4->nheads);3 printf(" Write precompensation start\t\t%d\n",  ((p4->wprecomp2<<16) + (p4->wprecomp1<<8) +u p4->wprecomp0));3 printf(" Reduced write current start\t\t%d\n", u ((p4->rwc2<<16) + (p4->rwc1<<8) + p4->rwc0));h) printf(" Drive step rate\t\t\t%d\n", i ((p4->dsr1<<8) + p4->dsr0));/ printf(" Landing zone cylinder\t\t\t%d\n", e ((p4->lzc2<<16) +h (p4->lzc1<<8) + p4->lzc0));e }s break;  case 5: /* Page 5 */;# p5 = (struct page_code_5 *)bp_ms;( if(!moreoutput())s return;9 printf("\nPage 5 - flexible disk drive parameters:\n");+ printf(" PS\t\t\t\t\t%d\n", p5->ps); 0 printf(" Page code\t\t\t\t%d\n", p5->pgcode);4 printf(" Page length\t\t\t\t%d\n", p5->pglength);& if(page_control == CHANGED_VALUES) {* printf(" Transfer rate\t\t\t\t0x%x\n", ((p5->xfer_rate1<<8) + p5->xfer_rate0));+ printf(" Number of heads\t\t\t0x%x\n",  p5->num_heads);>, printf(" Sectors per track\t\t\t0x%x\n", p5->sec_per_trk); 5 printf(" Data bytes per physical sector\t0x%x\n",_ ((p5->db_per_physec1<<8) + p5->db_per_physec0));. printf(" Number of Cylinders\t\t\t0x%x\n", ((p5->num_cyl1<<8) + p5->num_cyl0));9 printf(" Starting write precompensation cyl\t0x%x\n",w ((p5->swpc1<<8) +  p5->swpc0)); 9 printf(" Starting reduced write current cyl\t0x%x\n",  ((p5->srwcc1<<8) + p5->srwcc0));* printf(" Drive step rate\t\t\t0x%x\n", ((p5->drv_stp_rate1<<8) +  p5->drv_stp_rate0));e/ printf(" Drive step pulse width\t\t0x%x\n",I p5->drv_sp_width);, printf(" Head settle delay\t\t\t0x%x\n", ((p5->hd_stl_del1<<8) +r p5->hd_stl_del0));i) printf(" Motor on delay\t\t\t0x%x\n",c p5->mtr_on_del);* printf(" Motor off delay\t\t\t0x%x\n", p5->mtr_off_del);0 if(!moreoutput()) return;c printf("\n");* printf(" Motor on (MO)\t\t\t\t0x%x\n", p5->mo);2 printf(" Start sector number (SSN)\t\t0x%x\n", p5->ssn);p, printf(" True ready (TRDY)\t\t\t0x%x\n", p5->trdy);5 printf(" Step pulses per cylinder (SPC)\t0x%x\n",i p5->sp_cyl);4 printf(" Write precompensation level\t\t0x%x\n", p5->wpc_lvl);c* printf(" Head load delay\t\t\t0x%x\n", p5->hl_del);, printf(" Head unload delay\t\t\t0x%x\n", p5->hul_del);o+ printf(" Pin 2 definition\t\t\t0x%x\n",i p5->p2_def);, printf(" Pin 34 definition\t\t\t0x%x\n", p5->p34_def);=+ printf(" Pin 1 definition\t\t\t0x%x\n",p p5->p1_def);+ printf(" Pin 4 definition\t\t\t0x%x\n",) p5->p4_def);/ printf(" Medium rotation rate\t\t\t0x%x\n",n ((p5->med_rr1<<8) +" p5->med_rr0));n }  else {( printf(" Transfer rate\t\t\t\t%d\n", ((p5->xfer_rate1<<8) + p5->xfer_rate0));) printf(" Number of heads\t\t\t%d\n", t p5->num_heads);r* printf(" Sectors per track\t\t\t%d\n", p5->sec_per_trk);3 printf(" Data bytes per physical sector\t%d\n",e ((p5->db_per_physec1<<8) + p5->db_per_physec0));, printf(" Number of Cylinders\t\t\t%d\n", ((p5->num_cyl1<<8) + p5->num_cyl0));7 printf(" Starting write precompensation cyl\t%d\n",f ((p5->swpc1<<8) +\ p5->swpc0));q7 printf(" Starting reduced write current cyl\t%d\n",[ ((p5->srwcc1<<8) + p5->srwcc0));( printf(" Drive step rate\t\t\t%d\n", ((p5->drv_stp_rate1<<8) +i p5->drv_stp_rate0)); - printf(" Drive step pulse width\t\t%d\n",s p5->drv_sp_width);* printf(" Head settle delay\t\t\t%d\n", ((p5->hd_stl_del1<<8) +f p5->hd_stl_del0));s' printf(" Motor on delay\t\t\t%d\n", p5->mtr_on_del);( printf(" Motor off delay\t\t\t%d\n", p5->mtr_off_del);a if(!moreoutput()) return;a printf("\n");( printf(" Motor on (MO)\t\t\t\t%d\n", p5->mo);0 printf(" Start sector number (SSN)\t\t%d\n", p5->ssn);d* printf(" True ready (TRDY)\t\t\t%d\n", p5->trdy);3 printf(" Step pulses per cylinder (SPC)\t%d\n",c p5->sp_cyl);2 printf(" Write precompensation level\t\t%d\n", p5->wpc_lvl);)( printf(" Head load delay\t\t\t%d\n", p5->hl_del);* printf(" Head unload delay\t\t\t%d\n", p5->hul_del);C) printf(" Pin 2 definition\t\t\t%d\n",  p5->p2_def);* printf(" Pin 34 definition\t\t\t%d\n", p5->p34_def);E) printf(" Pin 1 definition\t\t\t%d\n",i p5->p1_def);) printf(" Pin 4 definition\t\t\t%d\n", p5->p4_def);- printf(" Medium rotation rate\t\t\t%d\n",( ((p5->med_rr1<<8) +f p5->med_rr0));} }i break; r case 7: /* Page 7 */i# p7 = (struct page_code_7 *)bp_ms;G if(!moreoutput())v return;9 printf("\nPage 7 - verify error recovery page:\n");r+ printf(" PS\t\t\t\t\t%d\n", p7->ps);x4 printf(" Page code\t\t\t\t%d\n", p7->pgcode);8 printf(" Page length\t\t\t\t%d\n", p7->pglength);& if(page_control == CHANGED_VALUES) {7 printf(" Disable correction\t\t\t0x%x\n", p7->dcr); < printf(" Disable transfer on error\t\t0x%x\n", p7->dte);1 printf(" Post error\t\t\t\t0x%x\n", p7->per);l: printf(" Enable early recovery\t\t\t0x%x\n", p7->eer);- printf(" Verify retry count\t\t\t0x%x\n",r p7->retry_count);/ printf(" Verify correction span\t\t0x%x\n",c p7->correct_span);3 printf(" Verify recovery time limit\t\t0x%x\n",r3 (p7->recovery_time1<<8) + p7->recovery_time0);c }e else {5 printf(" Disable correction\t\t\t%x\n", p7->dcr);: printf(" Disable transfer on error\t\t%x\n", p7->dte);/ printf(" Post error\t\t\t\t%x\n", p7->per);;8 printf(" Enable early recovery\t\t\t%x\n", p7->eer);+ printf(" Verify retry count\t\t\t%d\n",t p7->retry_count);p- printf(" Verify correction span\t\t%d\n",r p7->correct_span);1 printf(" Verify recovery time limit\t\t%d\n",N3 (p7->recovery_time1<<8) + p7->recovery_time0);  }i break; case 8: /* Page 8 */r# p8 = (struct page_code_8 *)bp_ms;g if(!moreoutput())L return;1 printf("\nPage 8 - caching parameters:\n");=+ printf(" PS\t\t\t\t\t%d\n", p8->ps); 4 printf(" Page code\t\t\t\t%d\n", p8->pgcode);8 printf(" Page length\t\t\t\t%d\n", p8->pglength);& if(page_control == CHANGED_VALUES) {/ printf(" Read cache disable bit\t\t0x%x\n",S p8->rc);/ printf(" Multiple selection bit\t\t0x%x\n",r p8->ms);/ printf(" Write cache enable bit\t\t0x%x\n",a p8->wce);i1 printf(" Write retention priority\t\t0x%x\n",g p8->wrp);H5 printf(" Demand read retention priority\t0x%x\n",o p8->drrp);7 printf(" Disable prefetch transfer length\t0x%x\n",\$ ((p8->dpftl1<<8) + p8->dpftl0));+ printf(" Minimum prefetch\t\t\t0x%x\n",l$ ((p8->minpf1<<8) + p8->minpf0));+ printf(" Maximum prefetch\t\t\t0x%x\n",\$ ((p8->maxpf1<<8) + p8->maxpf0));1 printf(" Maximum prefetch ceiling\t\t0x%x\n",k& ((p8->maxpfc1<<8) + p8->maxpfc0)); } else {- printf(" Read cache disable bit\t\t%x\n",d p8->rc);- printf(" Multiple selection bit\t\t%x\n",m p8->ms);- printf(" Write cache enable bit\t\t%x\n",s p8->wce);(/ printf(" Write retention priority\t\t%d\n",e p8->wrp); 3 printf(" Demand read retention priority\t%d\n",x p8->drrp);5 printf(" Disable prefetch transfer length\t%d\n",n$ ((p8->dpftl1<<8) + p8->dpftl0));) printf(" Minimum prefetch\t\t\t%d\n", $ ((p8->minpf1<<8) + p8->minpf0));) printf(" Maximum prefetch\t\t\t%d\n",.$ ((p8->maxpf1<<8) + p8->maxpf0));/ printf(" Maximum prefetch ceiling\t\t%d\n",e& ((p8->maxpfc1<<8) + p8->maxpfc0)); }  break; case 9: /* Page 9 */t# p9 = (struct page_code_9 *)bp_ms; if(!moreoutput())g return;5 printf("\nPage 9 - peripheral device page:\n");t+ printf(" PS\t\t\t\t\t%d\n", p9->ps);=4 printf(" Page code\t\t\t\t%d\n", p9->pgcode);8 printf(" Page length\t\t\t\t%d\n", p9->pglength);$ if(page_control == CHANGED_VALUES)C printf(" Interface identifier\t\t\t0x%02.2x\n", p9->interface);c elseA   g$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]" printf(" Interface identifier\t\t\t%02.2x\n", p9->interface);f break; case 10: /* Page 10 */% p10 = (struct page_code_10 *)bp_ms;p if(!moreoutput())a return;1 printf("\nPage 10 - control mode page:\n");\, printf(" PS\t\t\t\t\t%d\n", p10->ps);5 printf(" Page code\t\t\t\t%d\n", p10->pgcode);\9 printf(" Page length\t\t\t\t%d\n", p10->pglength);e& if(page_control == CHANGED_VALUES) {A printf(" Report log exception condition\t0x%x\n", p10->rlec);e7 printf(" Disable queueing\t\t\t0x%x\n", p10->dque);o; printf(" Queue error management\t\t0x%x\n", p10->qerr);06 printf(" Queue algorithm\t\t\t0x%x\n", p10->algo);< printf(" Error AEN permission\t\t\t0x%x\n", p10->eaenp);D printf(" Unit attention AEN permission\t\t0x%x\n", p10->uaaenp);< printf(" Ready AEN permission\t\t\t0x%x\n", p10->raenp);H printf(" Enable extended contingent allegiance\t0x%x\n", p10->eeca);0 printf(" Read AEN holdoff period\t\t0x%x\n",3 ((p10->aen_holdoff1<<8) + p10->aen_holdoff0));t } else {? printf(" Report log exception condition\t%x\n", p10->rlec);t5 printf(" Disable queueing\t\t\t%x\n", p10->dque);\9 printf(" Queue error management\t\t%x\n", p10->qerr);4 printf(" Queue algorithm\t\t\t%x\n", p10->algo);: printf(" Error AEN permission\t\t\t%x\n", p10->eaenp);B printf(" Unit attention AEN permission\t\t%x\n", p10->uaaenp);: printf(" Ready AEN permission\t\t\t%x\n", p10->raenp);F printf(" Enable extended contingent allegiance\t%x\n", p10->eeca);. printf(" Read AEN holdoff period\t\t%d\n",3 ((p10->aen_holdoff1<<8) + p10->aen_holdoff0));n }  break; case 11: /* Page 11 */>% p11 = (struct page_code_11 *)bp_ms;p if(!moreoutput())t return;; printf("\nPage 11 - medium types supported page:\n");n, printf(" PS\t\t\t\t\t%d\n", p11->ps);5 printf(" Page code\t\t\t\t%d\n", p11->pgcode);t9 printf(" Page length\t\t\t\t%d\n", p11->pglength);,& if(page_control == CHANGED_VALUES) {> printf(" Medium type 1 supported\t\t0x%d\n", p11->mtype1);> printf(" Medium type 2 supported\t\t0x%d\n", p11->mtype2);> printf(" Medium type 3 supported\t\t0x%d\n", p11->mtype3);> printf(" Medium type 4 supported\t\t0x%d\n", p11->mtype4); } else {< printf(" Medium type 1 supported\t\t%d\n", p11->mtype1);< printf(" Medium type 2 supported\t\t%d\n", p11->mtype2);< printf(" Medium type 3 supported\t\t%d\n", p11->mtype3);< printf(" Medium type 4 supported\t\t%d\n", p11->mtype4); }" break; case 12: /* Page 12 */r% p12 = (struct page_code_12 *)bp_ms;  if(!moreoutput())e return;8 printf("\nPage 12 - notch and partition page:\n");, printf(" PS\t\t\t\t\t%d\n", p12->ps);5 printf(" Page code\t\t\t\t%d\n", p12->pgcode);s9 printf(" Page length\t\t\t\t%d\n", p12->pglength);"& if(page_control == CHANGED_VALUES) {4 printf(" Notched drive\t\t\t\t0x%x\n", p12->nd);: printf(" Logical/Physical notch\t\t0x%x\n", p12->lpn);2 printf(" Maximum number of notches\t\t0x%x\n",, (p12->maxnotch1<<8) + p12->maxnotch0);) printf(" Active notch\t\t\t\t0x%x\n",p, (p12->actnotch1<<8) + p12->actnotch0);, printf(" Starting boundary\t\t\t0x%x\n",3 (p12->startbnd3<<24) + (p12->startbnd2<<16) +n, (p12->startbnd1<<8) + p12->startbnd0);* printf(" Ending boundary\t\t\t0x%x\n",/ (p12->endbnd3<<24) + (p12->endbnd2<<16) +C( (p12->endbnd1<<8) + p12->endbnd0);0 printf(" Pages notched [1]\t\t\t0x%08.8x\n",/ (p12->notch13<<24) + (p12->notch12<<16) +2( (p12->notch11<<8) + p12->notch10);0 printf(" Pages notched [2]\t\t\t0x%08.8x\n",/ (p12->notch23<<24) + (p12->notch22<<16) +s( (p12->notch21<<8) + p12->notch20); } else {2 printf(" Notched drive\t\t\t\t%x\n", p12->nd);8 printf(" Logical/Physical notch\t\t%x\n", p12->lpn);0 printf(" Maximum number of notches\t\t%d\n",, (p12->maxnotch1<<8) + p12->maxnotch0);' printf(" Active notch\t\t\t\t%d\n",t, (p12->actnotch1<<8) + p12->actnotch0);* printf(" Starting boundary\t\t\t%d\n",3 (p12->startbnd3<<24) + (p12->startbnd2<<16) +v, (p12->startbnd1<<8) + p12->startbnd0);( printf(" Ending boundary\t\t\t%d\n",/ (p12->endbnd3<<24) + (p12->endbnd2<<16) +t( (p12->endbnd1<<8) + p12->endbnd0);. printf(" Pages notched [1]\t\t\t%08.8x\n",/ (p12->notch13<<24) + (p12->notch12<<16) +t( (p12->notch11<<8) + p12->notch10);. printf(" Pages notched [2]\t\t\t%08.8x\n",/ (p12->notch23<<24) + (p12->notch22<<16) + ( (p12->notch21<<8) + p12->notch20); }c break; case 37: /* Page 37 */a% p37 = (struct page_code_37 *)bp_ms; if (!page37_foreign) { if(!moreoutput()) return; 2 printf("\nPage 37 - DEC unique parameters:\n");) printf(" PS\t\t\t\t\t%d\n", p37->ps);\2 printf(" Page code\t\t\t\t%d\n", p37->pgcode);6 printf(" Page length\t\t\t\t%d\n", p37->pglength);' if(page_control == CHANGED_VALUES) {(/ printf(" Spinup on power up\t\t\t0x%x\n",  p37->spinup);1 printf(" Enable staggered spinup\t\t0x%x\n",x p37->sta);>0 printf(" Staggered spinup delay\t\t0x%x\n", p37->stagdelay);, } else {>- printf(" Spinup on power up\t\t\t%s\n", \ yesno(!p37->spinup));/ printf(" Enable staggered spinup\t\t%s\n",p yesno(p37->sta));1 printf(" Staggered spinup delay\t\t%4.1f\n",-$ (float) p37->stagdelay / 10.0); } break;x# } /* fall into default section */+ default:n if(!moreoutput())t return;6 printf("\nPage %d - unknown or unsupported page:\n", pp_ms->pgcode);* printf(" PS\t\t\t\t\t%d\n", pp_ms->ps);3 printf(" Page code\t\t\t\t%d\n", pp_ms->pgcode);"7 printf(" Page length\t\t\t\t%d\n", pp_ms->pglength);e, ptr = bp_ms + sizeof (struct page_header);( for(i = 0; i < pp_ms->pglength; i++) { if(i && ((i % 16) == 0)) { if(!moreoutput()) break;e printf("\n"); }o: printf(" Byte %d\t\t\t\t0x%x\n", i, *ptr++ & 0xff); }k break; } /* switch */3< bp_ms += sizeof (struct page_header) + pp_ms->pglength; } /* while */}p#define OPCODE 0#define FLAGS 1t#define COMMAND_ADDRESS 2d#define COMMAND_LENGTH 3#define DATA_ADDRESS 4#define DATA_LENGTH 5%#define PAD_LENGTH 6#define PHASE_TIMEOUT 7i#define DISCONNECT_TIMEOUT 8#define FLAGS_WRITE 0#define FLAGS_READ 1#define FLAGS_DISCONNECT 2#define FLAGS_SYNC 4#define SCSI_STATUS_MASK 0X3E(execute_rzcmd(command, data) int command; char *data;p{t int i, flags; short transfer_length;p int status, iosb[2], desc[15];b unsigned char scsi_status,\ cmnd[12];  for (i = 0; i < 12; i++)  cmnd[i] = 0; rzcom = command;  desc[OPCODE] = 1;" desc[COMMAND_ADDRESS] = &cmnd[0]; desc[PAD_LENGTH] = 0; desc[PHASE_TIMEOUT] = 5;) desc[DISCONNECT_TIMEOUT] = 10;4> for (i=9; i<15; i++) desc[i] = 0; /* Clear reserved fields */ switch(command) { case SCSI_TEST_UNIT_READY: flags = FLAGS_READ; cmnd[0] = 0x00; desc[COMMAND_LENGTH] = 6; desc[DATA_ADDRESS] = 0; desc[DATA_LENGTH] = 0;( break;n case SCSI_FORMAT_UNIT: flags = FLAGS_WRITE;1 cmnd[0] = 0x04;8 cmnd[1] = ((struct format_params *) data)->fp_format;G if ((((struct format_params *) data)->fp_defects) == VENDOR_DEFECTS)i cmnd[1] |= 0x18;K else if ((((struct format_params *) data)->fp_defects) == KNOWN_DEFECTS)) cmnd[1] |= 0x10; cmnd[3] = 0;sE cmnd[4] = (((struct format_params *) data)->fp_interleave) & 0xff;  desc[COMMAND_LENGTH] = 6;A desc[DATA_ADDRESS] = ((struct format_params *) data)->fp_addr;pB desc[DATA_LENGTH] = ((struct format_params *) data)->fp_length;A desc[DISCONNECT_TIMEOUT] = 3600; /* long timeout for format */i break;m case SCSI_REASSIGN_BLOCK:n flags = FLAGS_WRITE;) cmnd[0] = 0x07; desc[COMMAND_LENGTH] = 6;8 desc[DATA_ADDRESS] = (struct reassign_params *) data;" desc[DATA_LENGTH] = sizeof(rp);A desc[DISCONNECT_TIMEOUT] = 60; /* long timeout for reassign */e break;u case SCSI_READ_DEFECT_DATA:i flags = FLAGS_READ; cmnd[0] = 0x37;E cmnd[2] = ((struct read_defect_params *) data)->rdp_format | 0x18; E cmnd[7] = (((struct read_defect_params *) data)->rdp_alclen) >> 8;)G cmnd[8] = (((struct read_defect_params *) data)->rdp_alclen) & 0xff;  desc[COMMAND_LENGTH] = 10; G desc[DATA_ADDRESS] = ((struct read_defect_params *) data)->rdp_addr;(H desc[DATA_LENGTH] = ((struct read_defect_params *) data)->rdp_alclen; U&$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]J " break;- case SCSI_VERIFY_DATA: flags = FLAGS_READ; cmnd[0] = 0x2f;= cmnd[2] = (((struct verify_params *) data)->vp_lbn) >> 24;;= cmnd[3] = (((struct verify_params *) data)->vp_lbn) >> 16;g< cmnd[4] = (((struct verify_params *) data)->vp_lbn) >> 8;> cmnd[5] = (((struct verify_params *) data)->vp_lbn) & 0xff;? cmnd[7] = (((struct verify_params *) data)->vp_length) >> 8;)A cmnd[8] = (((struct verify_params *) data)->vp_length) & 0xff;r desc[COMMAND_LENGTH] = 10;e desc[DATA_ADDRESS] = 0; desc[DATA_LENGTH] = 0;<@ desc[DISCONNECT_TIMEOUT] = 180; /* long timeout for verify */ desc[PHASE_TIMEOUT] = 180;y break;  case SCSI_MODE_SELECT: flags = FLAGS_WRITE;c cmnd[0] = 0x15;? cmnd[1] = ((struct mode_sel_sns_params *) data)->msp_setps |S> (((struct mode_sel_sns_params *) data)->msp_setpf << 4);? cmnd[4] = ((struct mode_sel_sns_params *) data)->msp_length;n desc[COMMAND_LENGTH] = 6;H desc[DATA_ADDRESS] = ((struct mode_sel_sns_params *) data)->msp_addr;I desc[DATA_LENGTH] = ((struct mode_sel_sns_params *) data)->msp_length;n break;5 case SCSI_MODE_SENSE:  flags = FLAGS_READ; cmnd[0] = 0x1a;B cmnd[2] = (((struct mode_sel_sns_params *) data)->msp_pgcode) |: ((((struct mode_sel_sns_params *) data)->msp_pgctrl) << 6);? cmnd[4] = ((struct mode_sel_sns_params *) data)->msp_length;, desc[COMMAND_LENGTH] = 6;H desc[DATA_ADDRESS] = ((struct mode_sel_sns_params *) data)->msp_addr;I desc[DATA_LENGTH] = ((struct mode_sel_sns_params *) data)->msp_length;n break;0 case SCSI_REQUEST_SENSE: flags = FLAGS_READ; cmnd[0] = 0x03;+ cmnd[4] = sizeof(struct extended_sense);a desc[COMMAND_LENGTH] = 6;7 desc[DATA_ADDRESS] = (struct extended_sense *) data;n5 desc[DATA_LENGTH] = sizeof(struct extended_sense);\ break;i case SCSI_GET_INQUIRY_DATA:  flags = FLAGS_READ; cmnd[0] = 0x12;? cmnd[4] = ((struct mode_sel_sns_params *) data)->msp_length;1 desc[COMMAND_LENGTH] = 6;H desc[DATA_ADDRESS] = ((struct mode_sel_sns_params *) data)->msp_addr;I desc[DATA_LENGTH] = ((struct mode_sel_sns_params *) data)->msp_length;l break;i case SCSI_READ_CAPACITY: flags = FLAGS_READ; cmnd[0] = 0x25; desc[COMMAND_LENGTH] = 10;m6 desc[DATA_ADDRESS] = (struct read_capacity *) data;4 desc[DATA_LENGTH] = sizeof(struct read_capacity); break;p case SCSI_READ:  flags = FLAGS_READ; cmnd[0] = 0x8;p= cmnd[1] = (((struct rwdata *) data)->address >> 16) & 255;e< cmnd[2] = (((struct rwdata *) data)->address >> 8) & 255;5 cmnd[3] = ((struct rwdata *) data)->address & 255;o4 cmnd[4] = ((struct rwdata *) data)->length / 512; desc[COMMAND_LENGTH] = 6;9 desc[DATA_ADDRESS] = ((struct rwdata *) data)->buffer; 8 desc[DATA_LENGTH] = ((struct rwdata *) data)->length; break;> case SCSI_WRITE: flags = FLAGS_WRITE;) cmnd[0] = 0xa;i= cmnd[1] = (((struct rwdata *) data)->address >> 16) & 255;t< cmnd[2] = (((struct rwdata *) data)->address >> 8) & 255;5 cmnd[3] = ((struct rwdata *) data)->address & 255;a4 cmnd[4] = ((struct rwdata *) data)->length / 512; desc[COMMAND_LENGTH] = 6;9 desc[DATA_ADDRESS] = ((struct rwdata *) data)->buffer;p8 desc[DATA_LENGTH] = ((struct rwdata *) data)->length; break; case SCSI_SEND_DIAGNOSTIC: flags = FLAGS_READ; cmnd[0] = 0x1d;= cmnd[1] = ((struct diagnostic_params *) data)->dp_control;  desc[COMMAND_LENGTH] = 6; desc[DATA_ADDRESS] = 0; desc[DATA_LENGTH] = 0;p? desc[DISCONNECT_TIMEOUT] = 120; /* long timeout for diags */o break;t case SCSI_RECEIVE_DIAGNOSTIC:i flags = FLAGS_READ; cmnd[0] = 0x1c; desc[COMMAND_LENGTH] = 6;G desc[DATA_ADDRESS] = ((struct diagnostic_params *) data)->dp_buffer;iF desc[DATA_LENGTH] = ((struct diagnostic_params *) data)->dp_length; break;  case SCSI_START_UNIT:  flags = FLAGS_WRITE;\ cmnd[0] = 0x1b; cmnd[4] = 0x1;d desc[COMMAND_LENGTH] = 6; desc[DATA_ADDRESS] = 0; desc[DATA_LENGTH] = 0;! desc[DISCONNECT_TIMEOUT] = 60;a break;  case SCSI_STOP_UNIT: flags = FLAGS_WRITE;u cmnd[0] = 0x1b; cmnd[4] = 0x0;a desc[COMMAND_LENGTH] = 6; desc[DATA_ADDRESS] = 0; desc[DATA_LENGTH] = 0;x! desc[DISCONNECT_TIMEOUT] = 60;% break;g default: return(ERROR);n break;% }5 desc[FLAGS] = flags | FLAGS_DISCONNECT | FLAGS_SYNC;8 status = sys$qiow (1, rzdev, IO$_DIAGNOSE, iosb, 0, 0, " &desc[0], 15*4, 0, 0, 0, 0);9 dump_data(command,desc[DATA_ADDRESS],desc[DATA_LENGTH]);\ if (!(status & 1))i sys$exit(status);e if (!(iosb[0] & 1)) sys$exit(iosb[0] & 0xffff);e2 scsi_status = (iosb[1] >> 24) & SCSI_STATUS_MASK; if (scsi_status)  return(ERROR);% else return(SUCCESS);;} dump_data(command,adr,len) int command;unsigned char *adr;oint len;{) int i, j, k, done;) unsigned char *p, *q; char comstr[40];r char outb[256]; char tmpbuf[10];i if (dodump && (len > 0)) {r p = adr; format_cmnd(command,comstr);* printf("\nDump of %s data:\n\n",comstr);. for (j = 0, done = 0; done == 0 ; j += 16) { sprintf(outb,"%03.3x: ",j); q = p; 2 for (i = 0; i < ((len > 16) ? 16 : len); i++) {# sprintf(tmpbuf,"%02.2x ",*p++);p strcat(outb,tmpbuf); } strcat(outb," ");! for (i = 0; i < (16-len); i++)- strcat(outb," ");2 for (i = 0; i < ((len > 16) ? 16 : len); i++) {0 sprintf(tmpbuf,"%c",isprint(*q) ? *q : '.'); q++; strcat(outb,tmpbuf); } printf("%s\n",outb); if (len >= 16) {t len -= 16; if (len == 0)f done++; } else" done++;; }  printf("\n");l }}\char *rz_sense_key_str[] = { "no sense", /* 0x00 */L "recovered error", /* 0x01 */i "not ready", /* 0x02 */ "medium error", /* 0x03 */l "hardware error", /* 0x04 */ "illegal request", /* 0x05 */c "unit attention", /* 0x06 */ "data protect", /* 0x07 */i "blank check", /* 0x08 */ "vendor specific", /* 0x09 */( "copy aborted", /* 0x0a */t "aborted command", /* 0x0b */  "equal", /* 0x0c */ "volume overflow", /* 0x0d */  "miscompare", /* 0x0e */l "reserved", /* 0x0f */p 0};#define MAX_SENSE_KEY_STR \17 (sizeof(rz_sense_key_str)/sizeof(rz_sense_key_str[0]))0char *rz_error_code_str[] = {p0 "no additional sense information", /* 0x00 */( "no index/sector signal", /* 0x01 */# "no seek complete", /* 0x02 */ . "peripheral device write fault", /* 0x03 */< "logical unit not ready, cause not reportable", /* 0x04 */: "logical unit does not respond to selection", /* 0x05 */- "no reference position found", /* 0x06 */t5 "multiple peripheral devices selected", /* 0x07 */d3 "logical unit communication failure", /* 0x08 */i' "track following error", /* 0x09 */%% "error log overflow", /* 0x0a */l "", /* 0x0b */m "write error", /* 0x0c */8 "", /* 0x0d */f "", /* 0x0e */m "", /* 0x0f */.& "ID CRC or ECC error", /* 0x10 */( "unrecovered read error", /* 0x11 */3 "address mark not found in id field", /* 0x12 */5 "address mark not found in data field", /* 0x13 */u* "recorded entry not found", /* 0x14 */* "random positioning error", /* 0x15 */0 "data synchronization mark error", /* 0x16 */- "recovered data with retries", /* 0x17 */c< "recovered data with error correction applied", /* 0x18 */$ "defect list error", /* 0x19 */- "parameter list length error", /* 0x1a */a0 "synchronous data transfer error", /* 0x1b */' "defect list not found", /* 0x1c */\3 "miscompare during verify operation", /* 0x1d */s1 "recovered id with ecc correction", /* 0x1e */_ "", /* 0x1f */o/ "invalid command operation mode", /* 0x20 */ 3 "logical block address out of range", /* 0x21 */t1 "illegal function for device type", /* 0x22 */\ "", /* 0x23 */' "invalid field in cdb", /* 0x24 */ , "logical unit not supported", /* 0x25 */0 "invalid field in parameter list", /* 0x26 */" "write protected", /* 0x27 */. "not ready to ready transition", /* 0x28 */< "power on, reset, or bus device reset occurred", /* 0x29 */% "parameters changed", /* 0x2a */x? "copy cannot execute since host cannot disconnect", /* 0x2b */"( "command sequence error", /* 0x2c */3 "overwrite error on update in place", /* 0x2d */( "", /* 0x2e */\< "tagged commands cleared by another initiator", /* 0x2f */. "incompatible medium installed", /* 0x30 */) "medium format corrupted", /* 0x31 */ 3 "no defect sparh$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]א e location available", /* 0x32 */ $ "tape length error", /* 0x33 */ "", /* 0x34 */  "", /* 0x35 */(* "ribbon/ink/toner failure", /* 0x36 */$ "rounded parameter", /* 0x37 */. "sequential positioning error", /* 0x38 */0 "saving parameters not supported", /* 0x39 */% "medium not present", /* 0x3a */ "", /* 0x3b */t "", /* 0x3c */x1 "invalid bits in identify message", /* 0x3d */o8 "logical unit has not self-configured yet", /* 0x3e */8 "target operating conditions have changed", /* 0x3f */ "ram failure", /* 0x40 */ $ "data path failure", /* 0x41 */. "power-on or self-test failure", /* 0x42 */ "message error", /* 0x43 */) "internal target failure", /* 0x44 */)) "select/reselect failure", /* 0x45 */e) "unsuccessful soft reset", /* 0x46 */n$ "scsi parity error", /* 0x47 */9 "initiator detected error message received", /* 0x48 */ ' "invalid message error", /* 0x49 */p& "command phase error", /* 0x4a */# "data phase error", /* 0x4b */16 "logical unit failed self-configuration", /* 0x4c */ "", /* 0x4d */x. "overlapped commands attemtped", /* 0x4e */ "", /* 0x4f */p% "write append error", /* 0x50 */4 "erase failure", /* 0x51 */" "cartridge fault", /* 0x52 */) "media load/eject failed", /* 0x53 */ 5 "scsi to host system interface failure", /* 0x54 */2) "system resource failure", /* 0x55 */t "", /* 0x56 */ 4 "unable to recover table-of-contents", /* 0x57 */+ "generation does not exist", /* 0x58 */P% "updated block read", /* 0x59 */2> "operator request or state change input (unspec)", /* 0x5a */ "log exception", /* 0x5b */$ "rpl status change", /* 0x5c */ "", /* 0x5d */r "", /* 0x5e */\ "", /* 0x5f */ "lamp failure", /* 0x60 */) "video acquisition error", /* 0x61 */ - "scan head positioning error", /* 0x62 */e: "end of user area encountered on this track", /* 0x63 */- "illegal mode for this track", /* 0x64 */m 0};#define MAX_ERROR_CODE_STR \9 (sizeof(rz_error_code_str)/sizeof(rz_error_code_str[0]))ochar *rz_notready_str[] = {2< "logical unit not ready, cause not reportable", /* 0x00 */6 "logical unit not ready, becoming ready", /* 0x01 */C "logical unit not ready, initializing command required",/* 0x02 */iC "logical unit not ready, manual intervention required", /* 0x03 */-: "logical unit not ready, format in progress", /* 0x04 */ 0};#define MAX_NOTREADY_STR \5 (sizeof(rz_notready_str)/sizeof(rz_notready_str[0]))6"char *unknown_key = "unknown key";$char *unknown_code = "unknown code"; geterror(){, char *print_sense_key();+ char *print_error_code(); u_char *p;2 int i, sum, save_rzcom; char rzcomstr[40]; @ format_cmnd(rzcom,rzcomstr); /* Format command string */ save_rzcom = rzcom;C if(execute_rzcmd(SCSI_REQUEST_SENSE, (char *)&sense) != SUCCESS) {>? printf("\n*** Error occurred during command (%s) ***\n\n",\ rzcomstr) ; B printf("\nCannot get sense info from device (%s).\n",rzdisk); return(FATAL_ERROR);> } rzcom = save_rzcom; /*<5 * So we don't get fooled by ne sense data returned.  */ p = (u_char *)&sense; sum = 0;  for(i=0; i return(NO_ERROR);n /*<( * We need to know about unit attention * when formatting a floppy.c */B if((rzcom == SCSI_FORMAT_UNIT) && (sense.snskey == SC_UNITATTEN)) return(ATTN_ERROR); , /* If we saw a UNIT ATTENTION, try again */H if((rzcom == SCSI_TEST_UNIT_READY) && (sense.snskey == SC_UNITATTEN)) {4 /* Power on/off or bus reset? If so, try again */7 if(execute_rzcmd(SCSI_TEST_UNIT_READY, 0) == SUCCESS)g return 1;e }4 infobyte = ((sense.infobyte3 << 24) & 0xff000000);2 infobyte += ((sense.infobyte2 << 16) & 0xff0000);/ infobyte += ((sense.infobyte1 << 8) & 0xff00);7- infobyte += ((sense.infobyte0 << 0) & 0xff);t if(rzcom == SCSI_VERIFY_DATA) {' if(sense.snskey == SC_RECOVERR) {o asc = sense.asc; return(SOFT_ERROR);  }n- else if(sense.snskey == SC_MEDIUMERR) {y asc = sense.asc; return(HARD_ERROR);l }t }A printf("\n*** Error occurred on %s during command (%s) ***\n\n",* rzdisk, rzcomstr);n" printf("Sense Key (0x%x): %s.\n",/ sense.snskey, print_sense_key(sense.snskey));w. printf("Additional Sense Code (0x%x): %s.\n",* sense.asc, print_error_code(sense.asc)); printf("Sense Data: "); p = (u_char *)&sense; for(i=0; i MAX_SENSE_KEY_STR -1) || rz_sense_key_str[key] == NULL) return(unknown_key); elseT return(rz_sense_key_str[key]);}cchar *print_error_code(code) int code;t{rF if((code > MAX_ERROR_CODE_STR -1) || rz_error_code_str[code] == NULL) return(unknown_code); elsed@ /* if sense code is 02/04, return a more detailed reason */; if(( code == 4) && !(sense.ascq >MAX_NOTREADY_STR -1))0& return(rz_notready_str[sense.ascq]); elsef" return(rz_error_code_str[code]);}_ moreoutput(){s if (!nomore) {  if(confirm("\nMore",1))a return(1); else A return(0);s }}oconfirm(str,flag)> char *str;&int flag; /* default, 1 = y, 0 = no */{  char answer[20];* int nread;m char tmp[256];S/ sprintf(tmp,"%s [%c]? ",str,flag ? 'y' : 'n');= doconfirm: printstr(tmp);  nread = read(0, answer, 20);s if (answer[nread-1] != '\n') while(getchar() != '\n');( answer[0] = tolower(answer[0]); if (answer[0] == 'y') return(1); else if (answer[0] == 'n')D return(0); else if (answer[0] == '\n') return(flag);  else {=5 printstr("\n***** Bad input please enter (y/n)? ");8 goto doconfirm;( }}r printstr(s)mchar *s;{d write(1, s, strlen(s));}( getinteger(){t int value;)getint:n if(scanf("%d", &value) <= 0) {H while(getchar() != '\n');S@ printstr("\n***** Bad input please enter (INTEGER NUMBER)? "); goto getint; } while(getchar() != '\n'); return(value);b}k gethexnum()_{I int value;agethex:R if(scanf("%x", &value) <= 0) {[ while(getchar() != '\n');*< printstr("\n***** Bad input please enter (HEX NUMBER)? "); goto gethex; } while(getchar() != '\n'); return(value);*}arbzero(buf,len) char *buf;int len;{r int i;s for (i = 0; i < len; i++) buf[i] = '\0';}vshort rz_open(dev) char *dev;{8 short chan;* struct dsc devdsc = { strlen(dev), dev }; int stat;( stat = sys$assign(&devdsc,&chan,0,0,0); if (!(stat & 1)) return -1; rz_lseek(chan, 0, 0); return chan; }8int rz_close(chan) short chan; {s int stat; stat = sys$dassgn(chan);a if (!(stat & 1)): return -1; elseI return 0;[}=rz_lseek(chan,offset,flag) short chan;p off_t offset;> int flag;S{  curpos = offset / 512;s}rint rz_read(chan,buf,len); short chan;= char *buf;int len;{r+ rbzero((char *)&datapar, sizeof(datapar));E datapar.buffer = buf; datapar.length = len; datapar.address = cur1X$ RZDISK030.Al!.[VDBURG.SCSI.A]RZDISK.C;1]+Ipos;< if(execute_rzcmd(SCSI_READ, (char *)&datapar) != SUCCESS) {! if(geterror() != NO_ERROR) { % if((sense.snskey == SC_RECOVERR) &&S8 ((sense.asc == 0x17) || /* Retry recovered error */4 (sense.asc == 0x18))) /* recovered with ecc */ return 0; }s return -1; } return(len);6}int rz_write(chan,buf,len) short chan;) char *buf;int len;{d+ rbzero((char *)&datapar, sizeof(datapar));S datapar.buffer = buf; datapar.length = len; datapar.address = curpos;= if(execute_rzcmd(SCSI_WRITE, (char *)&datapar) != SUCCESS) { if(geterror() != NO_ERROR)a return -1; } return(len);0}char *yesno(what)t int what;e{e return (what ? "Yes" : "No");};*[VDBURG.SCSI.A]RZDISK.H;1+,` .'/!H 4L''-.0123KPWO(56„7k89G!HHJI/************************************************************************ * *1 * Copyright (c) 1984,86,87,88,89,94, 1998 by *1 * Digital Equipment Corporation, Maynard, MA * * All rights reserved. * * *E * This software is furnished under a license and may be used and *E * copied only in accordance with the terms of such license and *E * with the inclusion of the above copyright notice. This *D * software or any other copies thereof may not be provided or *E * otherwise made available to any other person. No title to and *9 * ownership of the software is hereby transferred. * * *E * The information in this software is subject to change without *E * notice and should not be construed as a commitment by Digital *" * Equipment Corporation. * * *D * Digital assumes no responsibility for the use or reliability *E * of its software on equipment which is not supplied by Digital. * * *J ************************************************************************/#define u_char unsigned char#define u_short unsigned short#define u_int unsigned int#define u_long unsigned long/* typedef char *caddr_t;typedef int off_t; */#define NULL 0 struct dsc { int size; char *addr; }; struct iosb { short status; short size; int lw; };/*4 Macro to check return status from various routines*/,#define check(a) if (!((a)&1)) lib$signal(a)-/* Special function numbers for SCSI DISKS */#define SCSI_TEST_UNIT_READY 0#define SCSI_FORMAT_UNIT 1#define SCSI_REASSIGN_BLOCK 2 #define SCSI_READ_DEFECT_DATA 3#define SCSI_VERIFY_DATA 4#define SCSI_MODE_SELECT 5#define SCSI_MODE_SENSE 6#define SCSI_REQUEST_SENSE 7 #define SCSI_GET_INQUIRY_DATA 8#define SCSI_READ_LONG 9#define SCSI_WRITE_LONG 10#define SCSI_READ_CAPACITY 11#define SCSI_STOP_UNIT 12#define SCSI_START_UNIT 13#define SCSI_ALLOW_REMOVAL 14#define SCSI_PREVENT_REMOVAL 15#define SCSI_SEEK_POSITION 16#define SCSI_LOAD_UNIT 17#define SCSI_UNLOAD_UNIT 18#define SCSI_SEND_DIAGNOSTIC 19"#define SCSI_RECEIVE_DIAGNOSTIC 20#define SCSI_READ_BUFFER 21#define SCSI_WRITE_BUFFER 22#define SCSI_READ 23#define SCSI_WRITE 24E/* Maximum defects to handle and return value for subroutine calls */#define MAXDEFECTS 256#define SUCCESS 0#define ERROR -1=/* Possible ways to return the defect list for READ DEFECT */#define BLK_FORMAT 0x0#define BFI_FORMAT 0x4#define PHY_FORMAT 0x54/* Possible ways to format a disk for FORMAT UNIT */#define VENDOR_DEFECTS 0#define KNOWN_DEFECTS 1#define NO_DEFECTS 29/* Possible page values for MODE SELECT and MODE SENSE */#define CURRENT_VALUES 0#define CHANGED_VALUES 1#define DEFAULT_VALUES 2#define SAVED_VALUES 3;/* Possible error conditions returned on failed commands */#define NO_ERROR 0#define SOFT_ERROR 1#define HARD_ERROR 2#define FATAL_ERROR 3#define ATTN_ERROR 4/* INQUIRY DATA Information */struct inquiry_info {7 u_char perfdt:5, /* Peripheral Device Type */, devtq:3; /* Device Type Qualifier */6 u_char devtpm:7, /* Device Type Modifier */* rmb:1; /* Removable Media Bit */) u_char version; /* Version */4 u_char rdf:4, /* Response data format */ :2, /* Reserved */4 trmiop:1, /* Supports: Terminate I/O process */3 aenc:1; /* Async event notification */2 u_char addlen; /* Additional Length */* u_char rsvd[2]; /* Reserved */< u_char sftre:1, /* Flags, device supports: Soft reset */4 cmdque:1, /* Tagged command queueing */3 rsvd1:1, /* Reserved */4 linked:1, /* Linked command */3 sync:1, /* Synchronous communication */4 wbus16:1, /* 16 bit wide transfer */4 wbus32:1, /* 32 bit wide transfer */: reladr:1; /* Relative addressing */4 u_char vndrid[8]; /* Vendor ID (ASCII) */6 u_char prodid[16]; /* Product ID (ASCII) */8 u_char revlvl[4]; /* Revision level (ASCII) */8 u_char revdata[8]; /* Revision data (ASCII) */};)/* REQUEST SENSE Extended Sense Format */struct extended_sense {/ u_char errcode:4; /* Error Code */1 u_char errclass:3; /* Error Class */( u_char valid:1; /* Valid */0 u_char segnum; /* Segment Number */- u_char snskey:4; /* Sense Key */' u_char :1; /* Reserved */8 u_char ili:1; /* Illegal Length Indicator */. u_char eom:1; /* End of Medium */, u_char filmrk:1; /* Filemark */9 u_char infobyte3; /* Information Byte (MSB) */5 u_char infobyte2; /* Information Byte */5 u_char infobyte1; /* Information Byte */9 u_char infobyte0; /* Information Byte (LSB) */5 u_char asl; /* Additional Sense Length */, u_char rb1[4]; /* Reserved bytes *// u_char asc; /* Additional Sense Code */7 u_char ascq; /* Additional Sense Code Qualifier */6 u_char fur; /* Field Replaceable Unit (FRU) */* u_char bp; /* Bit Pointer info */( u_char fp1; /* Field Pointer */( u_char fp0; /* Field Pointer */};)/* READ DEFECT DATA defect list header */!struct form1_defect_list_header {* u_char reserved; /* reserved field */0 u_char format : 3; /* defect list format */- u_char gdl : 1; /* grown defect list *// u_char mdl : 1; /* manufacturers defect list*/& u_char : 3; /* reserved field */1 u_char defect_len1; /* defect list length */1 u_char defect_len0; /* defect list length */};$/* FORMAT UNIT defect list header */!struct form2_defect_list_header {* u_char reserved; /* reserved field */+ u_char vu : 1; /* vender unique bit */0 u_char imm : 1; /* return status immediately */0 u_char dsp : 1; /* disable saving mode pages */. u_char ip : 1; /* init pattern */0 u_char stpf : 1; /* stop format on error bit */0 u_char dcrt : 1; /* disable certification bit*// u_char dpry : 1; /* disable primary bit *// u_char fov : 1; /* format options valid bit */1 u_char defect_len1; /* defect list length */1 u_char defect_len0; /* defect list length */};'/* REASSIGN BLOCK defect list header */!struct form3_defect_list_header {+ u_char reserved1; /* reserved field */+ u_char reserved2; /* reserved field */; u_char defect_len1; /* Length of bad blocks to reassign */; u_char defect_len0; /* Length of bad blocks to reassign */};3/* FORMAT UNIT and READ DEFECT DATA defect modes */ struct bytes_from_index_format {/ u_char cyl2; /* cylinder number of defect *// u_char cyl1; /* cylinder number of defect *// u_char cyl0; /* cylinder number of defect *// u_char head; /* head number of defect *// u_char bfi$ RZDISK030.A` .[VDBURG.SCSI.A]RZDISK.H;1L'q"3; /* defect bytes from index *// u_char bfi2; /* defect bytes from index *// u_char bfi1; /* defect bytes from index *// u_char bfi0; /* defect bytes from index */};struct block_format {1 u_char lba3; /* defect logical block address */1 u_char lba2; /* defect logical block address */1 u_char lba1; /* defect logical block address */1 u_char lba0; /* defect logical block address */};struct physical_sector_format {/ u_char cyl2; /* cylinder number of defect *// u_char cyl1; /* cylinder number of defect *// u_char cyl0; /* cylinder number of defect *// u_char head; /* head number of defect */1 u_char sector3; /* defect sector number */1 u_char sector2; /* defect sector number */1 u_char sector1; /* defect sector number */1 u_char sector0; /* defect sector number */};6/* MODE SENSE and MODE SELECT parameter list header */struct mode_sel_sns_header {2 u_char sense_len; /* mode sense data length */. u_char medium_type; /* the media type */' u_char : 7; /* reserved field *// u_char wp : 1; /* the write protect bit */4 u_char blk_des_len; /* block descriptor length */};L/* MODE SENSE and MODE SELECT page header (pseudo header for rzdisk only) */struct page_header { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength;};@/* MODE SENSE and MODE SELECT parameter list block descriptor */struct block_descriptor {7 u_char density_code; /* the density code of media */1 u_char nblks2; /* total number of blocks */1 u_char nblks1; /* total number of blocks */1 u_char nblks0; /* total number of blocks */, u_char reserved; /* reserved field */2 u_char blklen2; /* the logical block length */2 u_char blklen1; /* the logical block length */2 u_char blklen0; /* the logical block length */};+/* MODE SENSE and MODE SELECT page codes */struct page_code_I_1 { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength; u_char dcr : 1; u_char dte : 1; u_char per : 1; u_char eer : 1; u_char rc : 1; u_char tb : 1; u_char arre : 1; u_char awre : 1; u_char retry_count; u_char correct_span;" u_char head_offset;  u_char data_strobe; u_char recovery_time;};struct page_code_II_1 { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength; u_char dcr : 1; u_char dte : 1; u_char per : 1; u_char eer : 1; u_char rc : 1; u_char tb : 1; u_char arre : 1; u_char awre : 1; u_char read_retry_count; u_char correct_span;" u_char head_offset;  u_char data_strobe; u_char rsvd1; u_char write_retry_count; u_char rsvd2; u_short recovery_time;};struct page_code_2 { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength; u_char bus_fratio; u_char bus_eratio; u_char bus_inactive1; u_char bus_inactive0; u_char disconn_time1; u_char disconn_time0; u_char conn_time1; u_char conn_time0; u_char reserved1; u_char reserved2;};struct page_code_3 { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength; u_char tpz1; u_char tpz0; u_char aspz1; u_char aspz0; u_char atpz1; u_char atpz0; u_char atpv1; u_char atpv0; u_char spt1; u_char spt0; u_char bps1; u_char bps0; u_char interleave1; u_char interleave0; u_char track_skew1; u_char track_skew0; u_char cylinder_skew1; u_char cylinder_skew0; u_char rsrv1 : 4; u_char surf : 1; u_char rmb : 1; u_char hsec : 1; u_char ssec : 1; u_char reserved1; u_char reserved2; u_char reserved3;};struct page_code_4 { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength; u_char ncyl2; u_char ncyl1; u_char ncyl0; u_char nheads; u_char wprecomp2; u_char wprecomp1; u_char wprecomp0; u_char rwc2; u_char rwc1; u_char rwc0; u_char dsr1; u_char dsr0; u_char lzc2; u_char lzc1; u_char lzc0; u_char reserved1; u_char reserved2; u_char reserved3;};struct page_code_5 { u_char pgcode : 6; u_char rsrv1 : 1; u_char ps : 1; u_char pglength; u_char xfer_rate1; u_char xfer_rate0; u_char num_heads; u_char sec_per_trk; u_char db_per_physec1; u_char db_per_physec0; u_char num_cyl1; u_char num_cyl0; u_char swpc1; u_char swpc0; u_char srwcc1; u_char srwcc0; u_char drv_stp_rate1; u_char drv_stp_rate0; u_char drv_sp_width; u_char hd_stl_del1; u_char hd_stl_del0; u_char mtr_on_del; u_char mtr_off_del; u_char rsrv3 : 5; u_char mo : 1; u_char ssn : 1; u_char trdy : 1; u_char sp_cyl : 5; u_char rsrv4 : 3; u_char wpc_lvl; u_char hl_del; u_char hul_del; u_char p2_def : 4; u_char p34_def : 4; u_char p1_def : 4; u_char p4_def : 4; u_char med_rr1; u_char med_rr0; u_char reserved1; u_char reserved2;};struct page_code_7 { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength; u_char dcr : 1; u_char dte : 1; u_char per : 1; u_char eer : 1; u_char : 4; u_char retry_count; u_char correct_span; u_char reserved[5]; u_char recovery_time1; u_char recovery_time0;};struct page_code_8 { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength; u_char rc : 1; u_char ms : 1; u_char wce : 1; u_char : 5; u_char wrp : 4; u_char drrp : 4; u_char dpftl1; u_char dpftl0; u_char minpf1; u_char minpf0; u_char maxpf1; u_char maxpf0; u_char maxpfc1; u_char maxpfc0;};struct page_code_9 { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength; u_short interface;};struct page_code_10 { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength; u_char rlec : 1; u_char : 7; u_char dque : 1; u_char qerr : 1; u_char : 2; u_char algo : 4; u_char eaenp : 1; u_char uaaenp : 1; u_char raenp : 1; u_char : 4; u_char eeca : 1; u_char reserved; u_char aen_holdoff1; u_char aen_holdoff0;};struct page_code_11 { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength; u_char reserved[2]; u_char mtype1; u_char mtype2; u_char mtype3; u_char mtype4;};struct page_code_12 { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength; u_char reserved : 6; u_char lpn : 1; u_char nd : 1; u_char reserved1; u_char maxnotch1; u_char maxnotch0; u_char actnotch1; u_char actnotch0; u_char startbnd3; u_char startbnd2; u_char startbnd1; u_char startbnd0; u_char endbnd3; u_char endbnd2; u_char endbnd1; u_char endbnd0; u_char notch13; u_char notch12; u_char notch11; u_char notch10; u_char notch23; u_char notch22; u_char notch21; u_char notch20;};struct page_code_37 { u_char pgcode : 6; u_char rsrv : 1; u_char ps : 1; u_char pglength; u_char spinup : 1; u_char : 5; u_char sta : 1; u_char : 1; u_char reserved[11]; u_char maxxfer; u_short stagdelay; u_char datetime[8];};+/* MODE SELECT and MODE SENSE parameters */struct mode_sel_sns_params {5 caddr_t msp_addr; /* Address of data (pages) */7 u_char msp_pgcode; /* The pages to send/get */7 u_char msp_pgctrl; /* The values to send/get */8 u_char msp_length; /* The length to send/get */8 u_char msp_setps:1, /* Flag to set/unset PS bit*/ msp_rsvd:3,6 msp_setpf:1; /* Flag set specify page format */};%/* MODE SELECT and MODE SENSE data */K/* NOTE: structure size must not exceed 255 bytes (msp_length is a byte) */struct mode_sel_sns_data {A struct mode_sel_sns_header ms_hdr; /* Mode sense/select header*/B struct block_descriptor ms_desc; /* Block descriptor info */7 u_char ms_pages[243]; /* Space for all pages */};/* REASSIGN BLOCK parameters */struct reassign_params {, struct form3_defect_list_header rp_header;0 u_char rp_lbn3; /* The LBN of the bad block */0 u_char rp_lbn2; /* The LBN of the bad block */0 u_char rp_lbn1; /* The LBN of the bad block */0 u_char rp_lbn0; /* The LBN of the bad block */};/* READ and WRITE parameters */struct rwdata {1 u_long buffer; /* Read/Write buffer address */0 u_long length; /* Read/Write buffer length */0 u_long address; /* Read/Write buffer offset */;$ RZDISK030.A` .[VDBURG.SCSI.A]RZDISK.H;1L' };/* FORMAT UNIT parameters */struct format_params {1 u_char fp_format; /* The format mode */2 u_char fp_pattern; /* The format pattern */5 u_char fp_interleave; /* The interleave factor */1 u_char fp_length; /* The defect list length */2 u_char fp_defects; /* VENDOR or KNOWN defects */0 u_char *fp_addr; /* The defect list address */};!/* READ DEFECT DATA parameters */struct read_defect_params {2 u_char rdp_format; /* The format mode */3 u_short rdp_alclen; /* The allocation length */*1 u_char *rdp_addr; /* The defect list address */};1/* User I/O transfer requests for ioctl calls. */istruct io_uxfer {p3 int io_cnt; /* byte count to transfer to user */ & u_char *io_addr; /* users address */) u_char io_cdb[12]; /* for a SCSI CDB */n};9/* FORMAT UNIT and READ DEFECT DATA defect descriptors */estruct defect_descriptors {c union {* struct form1_defect_list_header rdd_hdr;) struct form2_defect_list_header fu_hdr; } dd_header;i union {1 struct bytes_from_index_format bfi[MAXDEFECTS]; ' struct block_format blk[MAXDEFECTS]; 0 struct physical_sector_format phy[MAXDEFECTS]; } dd_defects;#define BFI dd_defects.bfi#define BLK dd_defects.blk#define PHY dd_defects.phy};/* VERIFY DATA Parameters */struct verify_params {3 u_long vp_lbn; /* The beginning LBN to verify */m6 u_short vp_length; /* The # of blocks to verify */};/*! * LOAD/UNLOAD I/O Control Flags.p */ =#define IO_IMMEDIATE 0x01 /* Complete command immediatly. */*9#define IO_LOAD_UNIT 0x02 /* Logically load the unit. */u5#define IO_RETENTION 0x04 /* Retention the tape. */_@#define IO_POSITION_EOT 0x08 /* Position to EOT load/unload. *//* * READ CAPACITY Structure.d */ struct read_capacity {6 u_char max_lba_3; /* Logical block Address (MSB). */0 u_char max_lba_2; /* Logical block Address. */0 u_char max_lba_1; /* Logical block Address. */6 u_char max_lba_0; /* Logical block Address (LSB). */0 u_char block_len_3; /* Block Length (MSB). */* u_char block_len_2; /* Block Length. */* u_char block_len_1; /* Block Length. */0 u_char block_len_0; /* Block Length (LSB). */};/* * Diagnostic Test Flags.M */E.#define DP_UNIT_OFL 0x01 /* Unit offline */:#define DP_SELF_TEST 0x04 /* Do self-test diagnostics. */3#define DP_PF_VALID 0x10 /* Page format valid. *//*- * Diagnostic Parameters Structure (Generic).T */struct diagnostic_params {7 u_char dp_control : 5, /* Diagnostic control flags. */M : 3; /* Reserved. */. u_char dp_test; /* Diagnostic test flags. */. u_char dp_mode; /* Diagnostic mode value. */, u_char dp_id; /* Diagnostic buffer ID. */. u_long dp_lba; /* Logical block address. */3 u_long dp_offset; /* Read/Write buffer offset. */E2 u_long dp_length; /* The I/O transfer length. */2 caddr_t dp_buffer; /* The I/O buffer address. */};/*7 * Tells the SCSI driver how much space to allocate fore$ * the various parameter structures. */dunion rzdisk_params {d" struct mode_sel_sns_params rp_ms; struct reassign_params rp_rb;t struct format_params rp_fp; ! struct read_defect_params rp_rd;f struct verify_params rp_vp;O struct diagnostic_params rp_dp;};/*! * Request Sense Sense Key Codes.f */U#define SC_NOSENSE 0x00 #define SC_RECOVERR 0x01 #define SC_NOTREADY 0x02 #define SC_MEDIUMERR 0x03 #define SC_HARDWARE 0x04 e#define SC_ILLEGALREQ 0x05 f#define SC_UNITATTEN 0x06 #define SC_DATAPROTECT 0x07 #define SC_BLANKCHK 0x08 #define SC_VNDRUNIQUE 0x09#define SC_COPYABORTD 0x0a#define SC_ABORTEDCMD 0x0b #define SC_EQUAL 0x0c #define SC_VOLUMEOVFL 0x0d *#define SC_MISCOMPARE 0x0e #define SC_RESERVED 0x0f*[VDBURG.SCSI.A]RZDISK.HLP;1+,b.$/!H 4L$"F-.0123KPWO%56;O+7k89G!HHJ1 RZDISK? RZDISK is a SCSI disk maintenance utility which can be used to= manipulate things like disk parameters, reassign bad blocks, format disks, etc.( Before use, a symbol has to be defined: $ RZDISK:==$DEVICE:[DIR]RZDISK Syntax: > rzdisk [-bmnq] -cdfghiprstuwy [LBN|command] [length] device 2 DescriptionD The rzdisk utility, a SCSI disk maintenance program, formats a SCSIF disk, scans a SCSI disk for bad blocks, and reassigns bad blocks on a SCSI disk.G The device argument is the VMS name of a disk. The disk may be mounted- except for the format and full test options. 2 Examples$ rzdisk -i dka3008Getting inquiry data info from device (_THEBUG$DKA300:).Dump of Inquiry Data:< Device Type Qualifier Direct access device* Removable Medium No) Version 1* Terminate I/O process No* Async event notification No* Soft reset No* Command queueing No+ Linked commands Yes+ Synchronous communication Yes* 16 bit wide transfer No* 32 bit wide transfer No* Relative addressing No+ Vendor Identificaton DEC8 Product Identification RZ24 (C) DEC, Revision Level 1D18$ rzdisk -n -g current dkb400DGetting CURRENT disk drive parameters from device (_THEBUG$DKB400:).Mode sense header:+ Sense data length 100) Medium type 0+ WP 0x0) Block descriptor length 8Block descriptor:) Density code 0. Number of blocks 204864+ Block length 512#Page 1 - error recovery parameters:) PS 1) Page code 1) Page length 6, Flags 0x24) Retry count 1) Correction span 8) Head offset count 0) Data strobe offset count 0) Recovery time limit 0)Page 2 - disconnect/reconnect parameters:) PS 0) Page code 2* Page length 10) Buffer full ratio 0) Buffer empty ratio 0) Bus inactivity limit 0) Disconnect time limit 0) Connect time limit 00Page 3 - direct-access device format parameters:) PS 0) Page code 3* Page length 22) Tracks per zone 1) Alternate sectors per zone 1) Alternate tracks per zone 0) Alternate tracks per volume 0* Sectors per track 33+ Data bytes per phy sector 512) Interleave 1) Track skew 4) Cylinder skew 6+ Flags 0x4.Page 4 - rigid disk drive geometry parameters:) PS 0) Page code 4* Page length 18+ Maximum number of cylinders 776) Maximum number of heads 8+ Write precompensation start 512+ Reduced write current start 640) Drive step rate 0) Landing zone cylinder 0 Page 37 - DEC unique parameters:) PS 1* Page code 37* Page length 23* Spinup on power up No$ rzdisk -q -c dkb400Dump of Inquiry data:T<{ $ RZDISK030.Ab.DBURG.SCSI.A]RZDISK.HLP;1L$lx" C000: 00 00 01 01 1f 00 00 00 44 45 43 20 20 20 20 20 ........DECH010: 52 5a 32 33 20 20 20 20 20 28 43 29 20 44 45 43 RZ23 (C) DECD020: 30 41 31 38 00 00 00 00 00 00 00 00 0A18........1Changing disk drive parameters to default values!Are you sure [n]? yDump of Mode Sense data:H000: 64 00 00 08 00 03 20 40 00 00 02 00 81 06 24 01 d..... @......$.H010: 08 00 00 00 02 0a 00 00 00 00 00 00 00 00 00 00 ................H020: 03 16 00 01 00 01 00 00 00 00 00 21 02 00 00 01 ...........!....H030: 00 04 00 06 40 00 00 00 04 12 00 03 08 08 00 02 ....@...........H040: 00 00 02 80 00 00 00 00 00 00 00 00 a5 17 01 00 ...............H050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H0a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H0b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H0c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H0d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H0e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................G0f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...............Dump of Mode Sense data:H000: 32 00 00 08 00 03 20 40 00 00 02 00 81 06 25 ff 2..... @......%.H010: ff 00 00 00 02 00 03 00 04 00 a5 17 01 ff ff ff ...............H020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................H030: ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H0a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H0b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H0c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H0d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H0e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................G0f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...............&SAVE THE DEFAULT VALUES ON DISK [n]? y<Changing disk drive parameters for device (_THEBUG$DKB400:).Dump of Mode Select data:H000: 00 00 00 08 00 03 20 40 00 00 02 00 01 06 24 01 ...... @......$.H010: 08 00 00 00 25 17 01 00 00 00 00 00 00 00 00 00 ....%...........E020: 00 00 00 00 00 00 00 00 00 00 00 00 00 .............$ rzdisk -q -t full dkb400AA full test may destroy all data on the device (_THEBUG$DKB400:)!Are you sure [n]? y>Sending diagnostic command (full) to device (_THEBUG$DKB400:). Dump of Receive diagnostic data:H000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................H010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................Dump of Request sense data:H000: 70 00 05 00 00 00 00 0c 00 00 00 00 20 00 00 00 p........... ...:010: 00 00 ..L*** Error occurred on _THEBUG$DKB400: during command (Receive diagnostic) **!Sense Key (0x5): illegal request.=Additional Sense Code (0x20): invalid command operation mode.ASense Data: 70 00 05 00 00 00 00 0c 00 00 00 00 20 00 00 00 00 00IThe error is returned because the device in question does not support theK'receive diagnostic result' command. The 'send disagnostic' command however.did not return an error, to the test is valid. 2 Options rzdisk rzdisk -h- rzdisk [-b] [-m] [-n] [-q] -c [ ask ] device4 rzdisk [-n] [-q] -d [ bfi | sector | block ] device) rzdisk [-q] -f [ vendor | known ] deviceF rzdisk [-n] [-q] -g [ current | saved | default | changeable ] device rzdisk [-q] -t [ full ] device rzdisk [-q] -i device rzdisk [-q] -p device rzdisk [-q] -r LBN device! rzdisk [-q] -s LBN length device rzdisk [-q] -u device rzdisk [-q] -w device rzdisk [-q] -y device 2 Problems? In case of problems please include all output from the command< you give, and be sure to include the -q option to get a hex dump of the data. Mail this to the author: Jur van der Burg, Digital Equipment Utrecht, Holland UTRTSC::VDBURG or vdburg@mail.dec.com2 Restrictions? You must have PHY_IO and DIAGNOSE privileges to run the rzdisk program.C This program will only work on systems with a SCSI bus attached to# it, and not on HSJ-xx controllers.B The disk may not be mounted for the format and full test options.0 You should not have to format your system disk.D Use the -f option with caution and only if the SCSI hard disk driveE seems corrupted. Be aware that when you format a disk, all resident data is destroyed.G Digital supports formatting, writing, and reading of High Density (HD)B 3.5 inch diskettes in the RX23 and RX26 disk drives, or 5.25 inch" diskettes in the RX33 disk drive.H Digital supports reading, but not formatting or writing, of Double Den-F sity (DD) 3.5 inch diskettes in the RX23 and RX26 disk drives or 5.25I inch diskettes in the RX33 disk drive. Reliable reading of DD diskettesE requires they be written only on a double density drive and have notF been overwritten by an RX23, RX26, RX33, or other high density drive.B This restriction occurs because of differences in the write headsE between DD and HD drives. Data written by a DD drive cannot be com-# pletely overwritten by a HD drive.I This same restriction applies to the RX33 5.25 inch diskettes when usingI low density (48 TPI - Tracks Per Inch) diskettes. Diskettes overwrittenG on different machines may suffer read failures from reduced signal-to-H noise ratios. So long as a diskette is formatted and written on a sin-) gle machine, there should be no problem.G The -r option is supported only with those SCSI disks that support the reassign block command.2 -c -c Changes disk parameters.D If the ask argument isn't specified, the disk parameters are set toA the default values. When the ask argument is specified, you areB interactively asked about each field marked as changeable in eachA page having changeable parameters. In both cases, you are askedB whether to save the parameters on disk. If you answer 'yes', the@ parameters are saved on the disk which also updates the currentA parameters. Otherwise, only the current parameters are updated.C You must save the parameters if you want them to be preserved whenA the system is power cycled. Also note, the direct-access deviceD format parameters (Page 3) and the rigid disk drive geometry param-B eters (Page 4) only get saved after formatting the drive, regard-9 less of whether you said 'yes' to saving the parameters.2 -d) -d Reads defect lists from the disk.C This option allows you to get defect lists from the disk in either3 bfi (bytes from index), sector, or block, formats.8 Note that some disks may not support all three formats.2 -f4 -f Formats a SCSI hard disk (see Restrictions).C Since Digital ships the SCSI disk already formatted, only use thisC option if you have encountered a serious problem and must reformat@ the disk. You can format a disk with the vendor (manufacturer)C defect list or with the known (vendor and grown) defect list. TheD grown defect list contains any blocks that may have been reassignedA during the life of the SCSI disk drive. When formatting a disk, it may not be mounted.@ The following example reformats the disk DKB100 using the known defect list: rzdisk -f known dkb100:A The -f option with no additional arguments formats a SCSI floppyC diskette (see Restrictions). New floppy diskettes are usually notB formatted. You need to format each diskette before you can store data on it.D The following example shows how to format a floppy diskette in RX23 drive DKA100: rzdisk -f dka100:@ The floppy format operation is interactive. The program rzdisk0 will guide you through formatting the diskette.@d6$ RZDISK030.Ab.DBURG.SCSI.A]RZDISK.HLP;1L$t This command will return immediately to the command prompt, you5 can check with -y how far the format is in progress.2 -g& -g Gets parameters from the disk.A This option allows you to get either current, saved, default, or? changeable parameters from the disk. The program displays the0 parameters of all pages supported by the drive.A The changeable parameters are those fields which can be changed.; Any field displayed with a '1' value in it can be changed.D The default parameters are those parameters supplied by the vendor.D The current parameters are those parameters which you are currentlyD running with. These parameters are setup from the saved parameters when the drive is powered on.C The saved parameters are those parameters which have been saved onD the disk. These parameters get used each time the drive is powered on.2 -h* -h Calls the HELP menu to the screen.2 -i, -i Requests inquiry data from the disk.A This option causes the program to dump all inquiry data returnedD from the disk. The information dumped includes the peripheral dev-A ice type, the device type qualifier, the removable medium field,D the version number, vendor identification, product information, and the firmware revision level.2 -m; -m Masks new disk parameters with 'changeable' values.; This option is used in conjunction with the '-c' option to> mask all new parameters with the 'changeable' values, so that- we don't set any bit which can't be changed.1 This option should normally not need to be used.2 -n% -n Disable pagination of output.= This option suppresses the 'More' prompt when it's asked for parameters.2 -p* -p Requests the capacity of the disk.C This option causes the program to read the capacity from the disk,9 which will be displayed including the current blocksize.2 -qC -q Requests a dump of data sent to- or received from the disk.= This option may be given with any other option to get a dump> of data to/from the device. This may aid in diagnosing errors1 returned by the device which are not understood.2 -r= -r Reassigns a bad block on the disk (see Restrictions).C When reassigning a bad block, you must specify the LBN, which is aC unique number (decimal notation) that represents the disk block as< reported in the errorlog file, and the raw device pathname.> The following example reassigns block 222658 of drive DKA200: rzdisk -r 222658 dka200:D The program rzdisk reads the specified LBN prior to reassigning theB block. If rzdisk reads valid data from the block, then the block> is not actually bad or the SCSI driver already reassigned the@ block. In this case, rzdisk asks if the reassignment should beB canceled. Answer yes to cancel the reassignment. This prevents4 double reassignment and replacement of good blocks.2 -s= -s Scans for bad blocks on a specified area of the disk.C To start scanning from the first block of the disk, use the number 0 to represent the LBN.@ The length is a decimal number that indicates how many 512-byteC blocks to scan. To scan up to and including the last block of the> specified disk, use the number -1 to represent the length. ByC specifying the length, you define the scope of the scan within the identified partition.= The following example scans the first ten blocks of the disk DKA100: rzdisk -s 0 10 dka100:4 The following example scans the entire disk DKA100: rzdisk -s 0 -1 dka100:2 -t- -t Performs a diagnose test on the disk.nC This will ask the disk to do a selftest. If the 'full' argument isk@ specified, the disk will do an extensive test which may destroy all user data.D# Not all disks support this option. 2 -u -u Spins the device up.; This command will send a 'start unit' command to the disk,i causing it to spin up. 2 -w -w Spins the device dowm.: This command will send a 'stop unit' command to the disk, causing it to spin down.a2 -y$ -y Report if the device is ready.B This command will check if the device is ready. If not the reason4 why this is not the case will be displayed as well.= If a 'format unit' is currently active the command will show : at what percentage that command is currently in progress.!*[VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1+,?j&./!H 4<-.0123KPWO56)|7k89G!HHJBBRZDISKV1.011-NOV-1998 13:13DEC C V5.7-004  $ABS$i$CODE$ $LITERAL$P$LINK$h$DATA$$BSS$ $READONLY_ADDR$ $READONLY$( DEVICETYPES DRZ_SENSE_KEY_STR RZ_ERROR_CODE_STR RZ_NOTREADY_STR UNKNOWN_KEY  UNKNOWN_CODE DECC$GA_STDIN DECC$GXPRINTF DECC$GXSCANFDECC$GXSPRINTF DECC$GETCHAR DECC$SLEEP DECC$ISPRINT DECC$TOLOWER DECC$$GA___CTYPET DECC$$GL___CTYPEA DECC$STRCAT DECC$STRCMP DECC$STRNCMP DECC$STRLEN RZDEV(RZDEV (RZDISK(RZDISK RZCOM(RZCOM INFOBYTE0INFOBYTE ASC(ASC CURPOS(CURPOS NOMORE(NOMORE DODUMP(DODUMP  MASKPARAMS0 MASKPARAMS  PAGE37_FOREIGN0PAGE37_FOREIGN(JYESNO(JpRZ_OPEN RDP(RDP FP(FP DP(DP RP(RP VP(VP RCP(RCP DD(DD MSP(MSP MS( MS MSPC(!MSPC MSC("MSC ,INQ(#INQ DATAPAR($DATAPAR SENSE(%SENSE(JMAIN0J@ PRINT_HELP DECC$EXIT8J` OPEN_SPECIAL_FILE8J@qGET_INQUIRY_INFO0J@  RZ_TEST_READY0J START_STOP_UNIT0Jhpy GET_CAPACITY8JH5CHANGE_DRIVE_PARAMETERS8JzGET_DRIVE_PARAMETERS0JpFORMAT_A_FLOPPY0J FORMAT_A_DISK0Jw TEST_DEVICE0JP ISINTEGER DECC$ATOI8J&REASSIGN_BAD_BLOCK8J@*SCAN_FOR_BAD_BLOCKS0J`/ READ_DEFECTS LIB$GETDVI LIB$SIGNAL0J EXECUTE_RZCMD0J`GETERROR0J% DISK_MOUNTED(J@CONFIRM(JRBZERO DECC$MALLOC0J`PRINTSTR0Bdf$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1"Jp GETINTEGER0J@RZ_CLOSE0J`RZ_LSEEK(JRZ_READ0J`RZ_WRITE8J0 PRINT_ERROR_CODE0J1 PRINT_DEFECTS0Jp MOREOUTPUT0J(P GETHEXNUM0  DEVICETYPESSYS$QIOW0J DUMP_DATASYS$EXIT 0J@ FORMAT_CMND8 RZ_SENSE_KEY_STR8 RZ_ERROR_CODE_STR0 RZ_NOTREADY_STR0 UNKNOWN_KEY0 UNKNOWN_CODE0J`PRINT_SENSE_KEY DECC$READ DECC$WRITE SYS$ASSIGN SYS$DASSGN(J__MAIN DECC$MAIN DECC$EXIT DECC$$SHELL_HANDLER OTS$DIV_IOTS$MOVE OTS$REM_I =# ? ~4G0^8^@cG("#G$"G0[ "=8{@Zk$=(b# @BbG4G@ZkcG0]8]@P#kp#^^~> ~(08޴@HP>X^`~hpx޵G#1BG`{#@(B0b4G4G@Zk( ¤X G ' 8B@b4G.!JF("@Zk(B0b4G4G@Zk ,- bQH'J"2JBB@\BCk///4G 0 A#1`@///4G 0 A#1`@///4G 0 AIJ#1`@///4G 0 A#1`@///8B8`D @b`"4G@Zk(B0b4G4G@Zkb#-@à8B X`D @bx"4G@Zk(B0b4G4G@Zk4Gb#@4Gb#@///8B X`D @b"4G@Zk(B0b4G4G@Zk4Gb#@Gxb#\@Ӡ8B5@'@b"TG@Zk//8BX`D @bЛ"4G@Zk(B0b4G4G@Zk4Gb#@ ,b# H@@Ӎ/8B X`D @b"4G@Zk(B0b4G4G@ZkGb#@Ӡb#U@xíU`@u`@E "8Bu`@ @b1"@Zk 8B@b"4G@Zk(B0b4G4G@Zku`@Gb#r@4Gb#7 @VGb#j@Gb#/ @N//¥8B x`D@b0!G4G@Zk(B0b4G4G@Zk8B@b."@Zk G"8B@b."@Zk tG8B@b."@Zk TG8B@b@."@Zk 4G 8B@bP"4G@Zk(B0b4G4G@ZkGb#(@G0b#=@ îU`@Gb#@b#@à8Bx`D! @bG4G@Zk(B0b4G4G@Zk8B@b-"@Zk G/8B@b-"@Zk 4G 8B@b( "4G@Zk(B0b4G4G@ZkGb#@GPb#@//U`@G Gb#@G(b# @/8B x`D@b!G4G@Zk(B0b4G4G@Zk8B@b/"@Zk4G 8B@b "4G@Zk(B0b4G4G@ZkGb#@G(b#@Ӝx`D@ 8B@bP"4G@Zk(B0b4G4G@Zk(B0b4G@ZkGGb#@Gb#@~//`@@@ 8B@b4Gp"@Zk(B0b4G4G@Zk(B0b4G@Zk(B0b G4G@ZkGGb#q@Ӡ`@0u_"GGHb#b@Q/ (B0b4G@ZkGGGHb#V@E/8Bx`D@b!G4G@Zk(B0b4G4G@Zk8B@bH-"@Zk G8B@bP-"@Zk G8B@bX-"@Zk G 8B@b0 "4G@Zk(B0b4G4G@ZkGb#(@C8b#e @ à8B@bTG"@Zk(B0b4G4G/@ZkG)1 AG]] }(08ݤ@HP=X]`}hpxݥ4G#k/#G(^4G0^@G8~GG C{`[~>G~h{$>@Zk 0BG]"G""8bG"@Zk B(bD4G@Zkb# HH`@.PJ>G.@x ,0.rHb0BQ0J8b2FTG0> ("G@Zk B(b4G4G@Zk$4Gpb#G@  "TG0BP"8bG@Zk B (b4G@ZkG(]0]8}@P#k0. HQ 0J2F0>#G~^^~ GGG{#G(@GGb#(@B0`@b4G4G@Zkg@GGG/b#(@4GG]]} 0#k//#G^^~G ~(0GG{#'@e b#3+@Gxb#@Әb ,#."C. Hc"0J#DS !F.SJU Bc ( "J@B$@5BUB (Bb@"x"TG@Zk0B8bG4GG@ZkGGb#'@GGb#'@0B.0@8b4G4G@Zk@..C.Jc c.5J#,"#""J 0HBQJC@tJCc@Cc@ @O AF(U@B @B`B`b@""tGJC@Zk 4GG]] }(0@#k///0,0H%@u%@B0 ,H/!."P0JJB=B!.!J@u@!.! !J4GkGk//#4G~^^~ GGG{X[`{c G@ZkXB`b"4G@ZkXB`b/"4G/@ZkXB`b("4G@ZkXB`bg"4G@Zk =XB`bP"4G@ZkXB`b`"4G@ZkXB`b"4G@ZkXB`b"4G@ZkXB`b"4G@ZkXB`b0"4G@ZkXB`bh"4G@ZkXB`b"4G@ZkXB`b"4G@ZkXB`b"4G@ZkXB`b@"4G@ZkXB`bx"4G@ZkXB`b"4G@ZkXB`b"4G@ZkXB`b "4G@ZkXB`bX "4G@ZkXB`b "4G@ZkXB`b "4G@ZkXB`b "4G@ZkXB`b "4G@ZkXB`bH "4G@ZkXB`bg"4G@ZkXB`b "4G@ZkXB`b "4G@ZkXB`b "4G@ZkXB`b "4G@ZkXB`b( "4G@ZkG]]} 0#k#^^~G ~(GG{#@P ,P" H#D xøb#@PbBxbc h"GTG@Zk0"G(b#+@l?"G,@ "Gy/Y#9 9"[yK"y?{J?G,@HX#<G.PJ>4G]pJy.tQJSqJ8"tF"y>GsqJG.GWJGvJF>"8,G0D"8<TGa7H/q0J@"X.SFX>X"tJG.GF">Gx/aGx?{KGX/QG KX?Gx.BtFx>.G9,W JFh"A6H/;D>9<TGb@Zk "4Gb#&@Hb#c)@\"/Bbh"TG@ZkG]] }(0#k`#^~ ^(~08@޴HPX>`^h~px޵GGG0{#G<@@TG .$ qaHD"PJ"tHF>GwHG Hd.zHSrJtFd>D.VJF>G$/G/Y $K;Ghb#XKG$??%@"/B"TGJ!G`Bhb@Zk`Bhb8 "4G@Zk`Bhbp "J"4GtG@Zk`Bhb "J"TGtG@Zk`Bhb "8J"tGtG@Zk`Bhb` "J"GtG@Zk`Bhb "J"GtG@Zk`Bhb "(J"GtG@Zk`BhbP "xJ"GtG@Zk`Bhb "J"GtG@Zk`Bhb "4GTG@Zk "`b#*@b#+@!1@ G!@"\<@Ck// GTGG ݱ G i/// TGTGG ݱ G ]/// 4GTGG ݱ GTGQ/// GTGG ݱ G E/// 4GTGG ݱ GTG9/// TG4GG ݱ GTG-/// 4GTGG ݱ GTG!///( "`b#*@b#*@H "`b#*@b#*@ ` "`b#y*@b#*@x "`b#s*@b#*@ G "`b#m*@b#*@GA AՀA uAASF @`Bhb "*"TG@Zk8 "Gb#)@%UAA`j!2F ""AF"ՀAuAGAxJ# ,GE G`Bhb "GTG@Zk "Gb#)@ "4G G G tG#{xIGG+@$/ HtHD#Y8K"aH;G$?hb#D,@HD<G$.Q0J$>GDd.D.@"S dJRDJuFTFd>D>$@b#'@ӻ(¥GG*@0// IuI#{xIO#Y8K 4GaH;G/?"rpIhb# G,@HD<G/.Q0J2FG/>GE.o.T JFSoJuF>o>j$@b#'@ӎ ¤(P¦&,H."0Hh"֢SJ  @@0!@. .F/#J&#YK"ZYKwG{yK& [Gh"F?&#,"/H(."K.XKFwJ3JG?JDF/YKZYKqG{yK[GF?Gf.pJSpJFvJvFf> $,4GwJGpJ7D$< "u/} 5 TG0`JpGu? u# .`4KpaJGVJ"t[KF> "R"F .WJF" >"F ,@HD <GF 5/Y6K 5?2,0HV x.wJ`B"`.5/"J0@5KR"Y5KFpJ"0G?FR$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1S"5?8,7H@ r.."0@rJR"JTJFvJF">8/7K@&,f#f"A&HG&< vJ#".@"PJ>G. F J>tJG&/X.. KXJWJ@ aHF>Dd.d/S dJvF[dKtGd>d?hb##@b#&@ G)@d/G$#GzK$ [yKD"qHzGd?hb#D. PJ JF>GwJDd.@"SrJd>D..V JFUJF>>z#@b#&@ӞGGG)@o/wI/#GzK/ [yKO"qHzGo?hb#trI I.PJFG>GEo.SrJtFo>G.G.V JFUJF>>N#@b#&@rf--!!nI(,I@@aA-`F."&"0H"QJ&# =RQJaFsqJ"SF F>!.!F/J.YKZYKtG{yK/J[GF?KD-INIEoIE=Df-mIKmIFp J pEf=$.0`H$ 4GrAJGtJ2F$>E#/`J!!vnHG?% TGG e/[zK`Ge? zKD-OIE= }!-phIMI E= !=DE.t!J%"RAJTFGE>tJ.UJF#E>G#`HD.=VJ>0 K"kI-a-KHI  E=GD.P JF>E.TF@FE>.J-IA"g-%,3#0AgI %H"A%H EmI -D%<.JA,.0AHJ TJ@GzEK F>.JA-!f!GOI =s"wJ$"hb#&, A.H&< JeJ- E=D&/.,&KJ@H@G rH@"D<D.D/V JZDKFEG>D?l"@b#%@Ӑ`BChb"8 "TG@ZkTGhb#-o! NI =/ qHO"-MI=G,EH<G-HI=G.PJFG>4GE.o.T JSrJ>o>:"@ b#%@䠕@ D[ 4Gs/`Bhb"X "TG@Zk`Bhb"x "TG@Zk . J[0Jb#J(@b#(@ W,h H "GHD<2}@BHb#7aH4GC GG@Zk" }GG`&G . J>0JGJGb#(@`BDhb "*"GGG@Zk 4G0@ @?0A A " "`Bhb"TG@ZkG] ](}08@ݤHPX=`]h}pxݥ#k,E HF/, HG HD< -H IF//#^4G`[~ ^(~0GGh{@Zkb0Bc  GG]"}"G8bGG@Zk0B8b"0"TG@Zk0B8bP"4G@Zk0B8b"4G@Zk4GGG] ](}0@#k#^^~ (0޴8@H>P^X~`GG~GGG{#@0B  bGGGtG@ZkBb%"GGtG@ZkBG$7aHCb%"GtG@Zk#D"?"'@Ӡ7K.J0J="J_"b# 4G'@G &1@? GXB `b"GTG@ZkXB`b"4G@ZkXB`b8"4G@ZkXB`bh"4G@ZkXB`b"4G@Zk"4Gb#&@a ¤p`HGP`HG GX'@,0`HF#&"aK"@HF#s1KD< wJx`HF.bRQJSFF>Gf"pSJ.VJF>D&,A H8D&<G&.Q:J&>G&/Y3K0G&?XB`b"GGtG@ZkTGG`b# @b#$@#.J30J="J_"b# 0@A'@XB `b"4G@Zk]@A ("4GX"4G/""TGXB`b@ZkG]]} (0ݤ8@H=P]X}`p#k'/Y 'KF]',A 'H/F//#4G~^^~ @`G(0޴8GH>P^X~GGGGGpۤ [({G@Zk Gb#G&@("tGq @Pb##@/(4G6J ,`." .0H.!!H@""2JtJ!BJ3bJ H3@ @ H@H` AXBbG GGtG@Zk0"GGtG $A@B A XbbGGc tGG@Zk0"GGtGXBbh!GGTG@ZkBd@b0"21@GtG@Zk0B8bGG @@Zk " @. iH.wiHV J)#UJFF>> q Gp GqH$@`@PJFW@B i"q`Fzp`FuH[vKuGWBzG."tG /J),X K .4HFBP JC0Db!B`"21@@ZkGGb#@ӼBPb#$#@ӡu@b x"j5@4GB@" àB"4GH" b#$@GGTGBb@ZkBb"GTG@ZkxU@ 4G5B " H" b#TG$@GGBb@ZkBb@"GTG@Zk~), .)"i.)H.P J.qJ.T JW J0`A J0DxJtFVJI#FFaBq@G>!+@>! p@Gp1H@HDW B(GGb#v@ӛVP"GTGBb@ZkG]]} (0ݤ8@H=P]X}`p#k0HFFf/z0HGuGz^0 HDD0J#^~G ^(~08 /=GG{#j@h0B8b` 0 GGGtG@Zk@0B 8b$"GGtG@Zk@G== ?D"L0B8b$"GGtG@Zk0BB8b$"GGtG@Zk0B:8b $"GGtG@Zkb2?"GS%@ = x/z8K8 [xKzGq Dx?p D0rHQ3J2FW`B0+@."". uHW JbyuHFVJBF>"TG>@Zk "tGb#@`b#%"@ b#@/"Bb"TG@ZkG] ](}08@#k00H?F2F0ð#4G~^^~ (0޴8@HGG{([0{pc G@Zk8(B0b"$. TG J F@Zk$, (B0b H" H4G @Zk$, (B0b H"v H4G @Zk$, H D @ @ @@ @ H""8"(""(B0b4GG@Zk,$ .$"d.HJD" HHBrJBG`FPbGaFGX"@Zk(B0bGGGtGG@ZkG.$ @JF8bBr汕BF B@S@".".#3/JJS#s/5J:Ks"7J(B9!KBsKB0bBTG@Zk@V8@@@ , ."`.0H .!"H`J@"@/2J .1!J3cJ "J "4J`# /J[K1@.6JtB #K:@(B JvB0bxB"G@Zk,8@@@ ," .`.0H .!"H`J@"@/2J .1!J3cJ "J "4J`# /J[K1@.6JtB #K:@(B JvB0bxB"G@ZkôB 0A0@AG @|?b#"@yG]]} (0ݤ8@HP#kp#^^~G ~(08޴@HP>X^`~hpx޵GGp{#@ bBbXc G4G@Zk8"Gb#"@xGG#@ӘGGTGe/%#zK% [yKe"qHzGe?b#uSJ H.yHPJF>GGD.TJF>D..W JVJFF>>t@b# @x¤D"G&,"]0HAB.G"JF.J3/G3KKzSK:G0@3?s"Fs/sK3@! ÀG#@ӈGG4GX/x#`;K"Z[K"r0H@GX?vtJG8.Q0J J2F8>GzJG.UJF>G8/,Y 8K;Gb#@HD8?<%@b#n @0GH"Gb#&"@ӡCE.%"4G0 DsqJ,tJSF"GwJ"HTF#GzXKF>U@%?:G%?f/ "&#.fK{#a`KPJG`HF>f"&."#4#Q&J"&>4"D,GHF..<SJf"JF/ C#@GF?=2@,AB*@t/.4 qKJf#VJFwJF>",D.HT/JPJ@FrXJ.AKF>JD&.;JQ;JaFs{J3F&>D.JWJ4Gy6KF>.G G"JF,H /*"bB K G)!F*, Gb"1H #"> GtG@Zk G . I" " JFuB i.SrJ i> ?E .UJ >."J#GJB$*/:Ky# yC `,,l"L.,.,H.SJ"aA4J2@@"J1@8H! 5@ C@@/,/0@@,K pA!.HJ!J"1@G/`(@&.7J B?.G/ 0 @J)!GK"ZGK5Gy'K YGG?.J @-.0 @IJ)!TJ lEkgI F>F.WJ2@_w/&. *A&J@p.&/" J &K"@&Be#Z#`Hd!PJ *AFKC>G:"B,VC* Z.4/  ZJ"u4J4 Y4K#5GZ#4?4#Z-".@I{HPJFVC>KC-FT.IqIRAJQFT>.FT-J`JJYI @ET= z/-zKZ#qJKCLI" E=_Bd"kBB@4/ "4 Y4K"4?BBF.VJ>Gt/[pKt?G-LI=?T/ZTK"T?BøBb8""TG@Zk"Gb#@Ӫ b#@ӧ p"#" / ¤Bb4GH GG@Zk0"Gb# @xb G GG!@Ә"- qI iHq HI1#xCI EM$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1"*=aqI?F-LI E=Gq/[yKq?b#?F,Q/@ HDGZQKAG<Q?a@b#@l GG!@ӈ"4G- Ii xH)#LI) zYI E=qH `?=t Ii/[yKzGi?b# ?E .PJF >GG ?Ei./I.S iJuFRIJTFi>I>4@b#}@? Bb@"4G@ZkxBb-D!X"TGI@Zkd,D!-$!,jHI$ #bHB)!IbHi@`@p"TG@Zk D- ! $- d ,LI#I $ *BIB#aHbHCA`@"TG@Zk"Gb# @"b#j @(b# @ $-PH0H !aLI "I,I d"rpH !E $=uH $.Q0J2F $>D .TJF >"B. G!xb*/JJ#:K+! 6AA,,GG,",H'D  .JA O. @Jn.!c nJ A!/BGAb"8&"GtG@Zk . C" "JFuB c.SrJ c>G .UJ >".O#GJB$//:Ky# yC `/%,e"E."%.%H.SJ4J@2@@8H"J1@5@ C@@%/0@@%K@ .O"J @..!.Jr@ Ac !...G.JJzNK'FF!B5Fg n/nKKzG An? P\"."J.Jp"b#@(b#@',0Hg!'"pKIA+HsH0D'<GG.RQJSFG>.J . J"b#@(b#@g-0HdGI ' KgIqH dEg=D .PJF >øBb"4G @Zk,.Bb",JTG J@Zk,.Bb",JTG'F@Zkl-Bb "gITGl!@Zk,,  ,BHbH8"'HTG@@Zkl-  ,, gIBHb'HP"@TG @Zkl-,  ,BgIbHx"'HTG@@Zkl- ,BlIbH"+aITG`A@Zk , l! , , HBHb'H"@TG @Zk l- , ,BgIbH"'HTG@@Zkl-  ,, gIBHb'H"@TGG@Zkl- ,BlIbH("+aITG`A@Zk,l! ,, HBHb'H@"@TGc!@ZkX"Gb#@,G"H#,0H "b#@(b#4@$,0H $"pgIA'HsH0D$<GD.RQJSFD>.""J.J"b#d!@(b#@$,0HpH$"A+HsH0D$<DD.RQJSFD>"."J.J"b#@(b#@$,0Hd!$"pHA+HsH0D$<GD.RQJSFD>. "J .J "b#@ 8O=(b#@d-0HaH "KdIrH aEd=D $.Q0J2F $> " e. "tJ` .J8 "b#@(b#@ $,0H d! $"pHA+HsH0D $<G D.RQJSF D> . " "J .J` "b# d!@(b#@ $,0HpH $"A+HsH0D $<D D.RQJSF D>"."J.J "b#z@(b#@$,0Hd!$"pHA+HsH0D$<GD.RQJSFD>."J.J "b#`@(b#z@d-0HaH"KdIrH aEd=D$.Q0J2F$>"e. tJ`.JC "b#F@(b#`@d-0HD!$ eHKjIqH eEd=G.PJF>//Bb "4G @Zk,.Bb( ",JTG J@Zk,.Bb8 ",JTG'F@Zkl-BbP "dITGl!@Zk,,  ,," .HHB$Hb HTGJ@@h " @Zkl-Bb "dITGl!@Zk,,  ,TG .HHB$Hb HG J@@ " @Zk l- , , ," .dIHB$Hb HTGJ@@ " @Zk l- , ,BdIbH "$HTG@@Zkl-  ,,  .dIHB$Hb HTG J@@ "c!@Zk8 "Gb#N@ӯ,G"HC"#,0H #.2J h "b#@(b#@.PH0H% qaIE"PJ"tHF>wHe.SrJtFe>D.VJF>'#/ "b#e!K@(b#@,a HDHD<.'"g"JG.SJ@.J "b#r@(b#@.PH0H% qHE"PJtrIvHF>Ge.SrJtFe>D.UJF> # . G# ' J '/:K g/aK "b#L@(b#f@ .PH0H % qaI E"PJ "tHF >wHD e.SrJtF e>G .VJF > / '# g#K G/[K@ "b# (@(b#B@ %,0HpdI %"A$HsH0D %<D E.RQJSF E>".J.J  "b#e!@(b#(@,0HaHGHqHD<G.PJF>///Bb@ "4GL!@Zk,.Bbp ",JTG J@Zk,.Bb ",JTG'F@Zk,Bb "HTGL!@Zk,,  ,BHbH "%HTG@@ZkL-B bEI "TG@Zk,BL!bH "TG@Zk,L! ,, HBHb%H "@TGG@ZkL- ,BLIbH( "*AITG@A@Zk , L! , , HBHb%HH "@TG @Zk L- , ,BEIbHx "%HTG@@ZkL-  ,, EIBHb%H "@TG @ZkL-Bb "LITGG@ZkL-,  ,BEIbH "%HTG@@ZkL-B bEI"TG@Zk,BL!bH"TG@Zkhb#@ӸBb@"4G@Zk,.L!Bb*J0" JTG0 F@Zk,.L!Bb*JH" JTG0 F@Zk,.L!Bb*Jp" JTGL!@Zk,.Bb"*JTG#F@ZkL-B bEI"TG@Zk,Bb"HTGL!@Zk,Bb"HTG @Zk,.Bb"%JTG!F@Zk,. Bb%J8" JTG @Zk,.BbX"%JTG!F@Zk,. Bb%Jx" JTGL!@Zk,,  ,BHbH"%HTG@@Zk"Gb#z@,C!"H#,0H "b#@(b#@$,0H $"pEIA%HsH0D$<GD.RQJSFD>.""b#J @(b#@D-aHJEI AED='".b# J ("@(b#@D-aHJEI AED=.'"g"JG.SJ@H"b#D!@(b#@$,0HpH$"A*HsH0D$<DD.RQJSFD> " .J.Jx"b#@(b#@D-0H "aHJDIrH AED=G $.Q0J2F $> g. " "tJ` .J"b# D!h@(b#@ $,0HpH $"A*HsH0D $<D D.RQJSF D> " . "J .J"b#N@(b#h@ $,0H D! $"pHA*HsH0D $<G D.RQJSF D>.""J.J"b#D!2@(b#L@$,0HpH$"A*HsH0D$<DD.RQJSFD>".b#J@(b#7@,jHEHD<',"G"0H '.2J @"b#D! @(b#$@$,0HpH$"A*HsH0D$<DD.RQJSFD>".`"b# J@(b# @D-aHJEI AED=.'"b# J "@(b#@D-aHJEI AED="'.b# 0J J" @ _=(b#@D-0D0HGa%HpJ AE PED='"G."b# QJ@J @@(b#@D-0D0HGa%HpJ AE PED='"G."b# QJ@J @@(b#@D-0HpJGa%H AE PED=G.'""b#QJ CF @@(b#@D-Ga%HD AEpH PED=G"'.H"b# 2J @(b#@R$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1J";D-aHJEI AED=.b#J p"z@(b#@,jHEHD<"',b# 0H "k@(b#@D-kHJEI KED=.' b# J GkeIF "Y@(b#s@D-DaH KE AED="'.b# G0J" J keIF@(b#`@D-!Ha%H KE AED='."b# 0J"!F G4@keI(b#M@D-DaH KE AED="'.b# G0J" J keI @(b#:@D-!Ha%H KE AED=.'" JG.GJ 0"b#D! @(b#&@d-0HgH$ KjIqH gEd=D.PJF>øBbX"4G @Zk,.Bbx",JTG J@Zk,.Bb",JTG'F@Zkl-Bb"dITG @Zk,.Bb"$JTG0 F@Zk,. Bb$J"6 JTG0 F@Zk,. Bb$J"V JTG0 F@Zk,. Bb$J"!FTG @Zk,.Bb8"$JTG J@Zk,l! ,, HBHb$H`"@TG @Zkl-,  ,BdIbH"$HTG@@Zkl- ,BlIbH"+aITG`A@Zk , l! , , HBHb$H"@TG @Zk"Gb#@qc-GGdI" `Gb#@l- 4GCa$HpH aE pEl='"G.8"b# QJG6@J @@e-CTGa$H@pJ aE pEe=G.'"X"b#QJGV@J @@e-C0WHGa$HpJ aE pEe='"G."b# QJAF @6@(b#P@e-Ga$HDpJ aE pEe=G.'""b#QJ @J @#@(b#=@e-0HGa$HpJ aE pEe=G"'."2J g.tJ`"b#@(b#(@%,0He!%"pHA+HsH0D%<GE.RQJSFE>.""J.J"b#e!@(b# @%,0HpH%"A+HsH0D%<DE.RQJSFE> ".J .J("b#@(b#@e-0HaHKeI "rH aEe=G %.Q0J2F %> g. " tJ`.JH"b# E!@(b#@ e-0HgH % KjIqH gE e=D .PJF >b$B?@Bsbp"4G9`L!l!@Zk,.Bb",JTG J@Zk,.Bb",JTG'F@Zk,Bb"HTG @Zk,B&"bH"DTG @Zk"Gb#@u("Gb# 4G@,keI@jHDDF>"xBGr..bR!rJ!VJs"wtJbuJF>R#/  2 XK"?"{#_Fr-KjI2/,r=r!:KR#H 9A-A!CE="-'I% .JPJ$Fq!JF>{._F,tJ.HEH SEjZI/JD<K-INIEoIE=G,H@H ElI D</), GG)")H'D  .Jd/dKgG;D ,D!bHB)!! GAb"P&"GtG@ZkG- "I EuA (,A%H (<E (.Q0J (>D.d""GSJ@B$.J" B./ n/-.K.,`K! yAI`AC %H @*K! @ WA_C/..0CC.J qA!. Jm#1G/`(M/[K@C_(/ ,"0A(K! H #@ H,Da)H)!D <M-WIA_.-0AJI!NIPFrIJ)!E=.JAu/.!AJ -An,m/"!HxmKk!+mA)!'#-AayIZ#@H"DA<WC n=G;@!A-NC+ Z..z#ZJ!vSJz!TJ3#F#>!.Z#NCs",J`JWCDHD<:,FS-+Hp9HJYI PES=:.FS.8Jt/JROJTFS> `/,.HZ#kHWCUJs"F>?wB_!AlB -3"""OIs"=lBwBFS.RQJS>G-NI=Gs/[vKs?-MIs"=wBøBb8""TG@Zk"Gb#@ b#G@ P"p&""&"BbTG@ZkG]] }(08ݤ@HP=X]`}hpxݥ#kG0H _E DEGF /#C(^TG0^8~ @HPG~GH[;P{"@Zk bGGG @(X/ xHqxHx#`;KZ[K@GPb#X?G.G8,P JFA8H1D>8<GG@b#@8B@b4G4G@Zk HB.˄ PbG4G@Zk $",HD7@ 0B@@@B HBPb "TG@Zk%, HB Hh$" HpD"Pb2DH"TG@Zk,HB% PbHh"TG@Zk%, HB Hh$" HpD"0 DPb2D"TG@Zk%, HBh$" HpD" HPb2D"TG@Zk%, HBh$" HpD"0 DPb2D"TG@Zk%, HBh$" HpD"6 HPb0 D2D"TG@Zk%, HB Hh$"v HpD"0 DPb2D"TG@Zk%, HBh$" HpD" HPb0 D2D"TG@Zk%, HB Hh$" HpD"0 DPb2D8"TG@Zk%, HBh$" HpD" HPb0 D2DX"TG@Zk%, HB Hh$" HpD"Pb2Dx"TGG@Zk # `."!#Ja#@! F`"F ".=".JuJ/TJA/KF>@yKC[K`#.t[KWJF>TGD`.S{JtF`>.HBGPJ>"Pb@Zk # `."!#Ja#@! F`"F ".=".JuJ/TJA/KF>@yKC[K`#.t[KWJGFTG>G`.S{JtFG`>.HBPJPb>"/@Zk ,!#.!C"HD2JFv1 JC"#5J".F#c =Cc/J!v_K="eQJ cK%D3HHBtq`HFtF "TGGPb@ZkG(]0]8}@HP`#kG #G(^0^8~@HPGG~Gx{@"Gșc @d/GzDKG`HzG`GGd? "D. 0Hs0H" $.R PJ JTFQ0JG3FD> $>b#`JD./.W JFVJF>>s_BNb"3"TG@Zk4"GPb#(@$.CG##$JrDJ#D4 Ds$H2F3F$>BG 4"tGbB@Zk "tGb# @pb#N@*/ "Gb# @pb#E@!BbP4"4GG@Zk /D Bbp4"GTG@Zk,B0@bH"TG @Zk@Bb"4G@ZkG(]0]8}@HP`#k ///#^TG[;^H"~ GG{@Zk"tGb# @b#@8/ ," .@".0H.2J`.!!H@/1"J/J7J"J".tJ3aJB #`#K1@[K :BKCJ7@!$H4G2DJ HzBB2@$H`Bbp"TG@ZkB=b"TG@ZkG]] 0#k#(^0^8~@HP޴X`h>pGG~GG{#_GG@GX/x#8 `;KX"Z[Kq!JtrH@GX? J`J.pBF>Gx.SrJtFx>G..W JVJFF>>`Z]/pU`@ pbu`@@s H3gJD pݢ5`@9J:K:Gݲ="tGpBbB΄ G@Zk"Gb# @hb#Y@ Bb8"4G@ZkBb%,P"TG%H@Zk%,B%"b1Hp"TG@Zk%.% B!Jb J"TG@Zk%,B%"b1H"TG@ZkBb"4G@Zk,B% bH"TG@Zk,.% H%"E.J He"0JBSJ@b@"TG@Zk , % .H %" .J9AJ@ ` "J_B 5`@B6JB"B %,2AJ "0H!"H "2@@BbTG @Zk,"H!  @%.e"E.G%JSJ'F @@ ô$B4 \5A$,ZV>a[$~YW~Q% E>yxn&9{ezz#ҳD-pȩV/RL=ǐs]`b2KMl[RA,L " 6!jwS[|C p,|O. :råSm+"YOIx$M~ޘ%]Խ=հ8G"5O qшf ȶTpJHTwdO~A"ZH. DiMXfR֊u>M3xq7*p&TjM+U2A':,:7tACv+3m 4^$28lVdE8 4Z꾶Agl ٢T1*%p\s|M7ufTQ3H!(o!n|7=OTs~[,+5rWQ 2ctWso-}w N,&80>8e=( $ØN[xD SU/!$1ل6/=L]uoS(& &&I^XkCvG3 hA1yq6U)4d]3>1=GBs<jxo^p 6pMI:|#4 @gLSDz!2W i@ cg 4W%mE3RKGZWscSL:A/VB7@GrOyxg;o\ ԊTex`v]@=FSv=e=qva~2$Bjm{ HS[}xo7{|o{&s&mt,i;:68UQH|=p~}aG u4kf*:\R7cl\\O H{T Qp*ĘTcSxPfW h'ũӏѭҁjdx;-|qLiG<<[PdԁI_X$*1TĞ"ww +ve~[G+$q `}l/TW_)zoУ3N!^v.G&8pbp dzooGd^d32[p3E3WGq&n|3eԞI5B3m1Ft?&4W/,ݫBTu9-T;klc,:[|d\ |ǛKYKn _Y1}EUB9lс" b# $]b~_260SXǭK<"cٶ|2\U|!} p$#1QU-BB!WC䮆|͕x558Bڢ,'Ԓ !IE{r%B;q"X >ҵ }¡ =˲F! 1."tyCi/}կc*㈱DX zo֙sD^KK?]ڗPV@M`H]iG yq!'MakKB@Ѣ#3'XC X i$倆P\^uxdn^y!P|55Io;v^Gyx:zZ7o^)'&A۾dON8+3ln548ֵ$gQ;6xX+@BQd E y0Cq_[C }r<;\_Q41k& vt|J B f\D0AxHb. TdSepy#AItLm{tJE'cY- fZMf<~%u㙒 dYcJs w]To F9)QARiTI Ze#%xɔV}Z1C$+y1d 0rJܨV #f:|0'] ӓ8 Ly}wuC=4~O 3 ]ϱ=;Q@$s^1ء_kuz9f+~u{ё>VqME'8ei9>ġ~lxŋz hoAܘQn#)|MV|}m :?WWl7>b[-֍cdrƼVЌ:j:B:Of7z-f81|f>7T5t9(-ajܔX(.._|/ӯso={ߣyF58 y?^#~ ,#+62HTR7ʔ{.&B^9Id}L$oOٔk?ZUcaKtשW.nt>C8Ӂ 8@ѝĥ]v:_]-ʼdɅ~m=' }lPyǒ̞RuS,:l$Qd#VK:#4^8;/݂lS[[@hb{x*<\>fv %7 .hJG'9j!>5\M4+K\g"Cӌmh@ __gd<$A)&/}-Uɟ4q)`ZYv86,T /pPv:DGՐ 1+[ᗵDJ>tld$1WH6~r,qk H*g=YL:H~$ZQ#j'4RI!n~v[?Z$]qaȰd 3#Ac4K)&G<;a15nwK/dmyoʾ*>/Q,9jf-EhMUE5gD WM xQڷ '[nmV{c,%>5\B3t?F<J@IZ7yU,Saz tdKW%b{k!4$ Nﺴ+>%G7l _3 FRVM?I@E[tFc^ sbRO(< *NMW\;,ErOߍ$3i. j$wˆcʡ,O05uӜ[Ezrl'QhpW 8&"qU`/nFq})5xA}7Lm~L)-!RL}Xa$xҩS\/|/7Fɤ@ܚ1N֚h/`v9)"MlU-/8|)ݒKP[M|Ec!ƥoI{5Ƹ'<8+|N\5Wd/#7+Prf <8.~&y-P0R Rm4+~PKh䀃=jYZ*YZ'( K`RiwlMY=qui{/l ,bGC\Gc)p_?\,uCK>t.v%+!n׾Ix! #vlT}7D<{ch[+w.lImjKY`D ~ց:gM@ꗆ&ReVA/q@Wn9-`,7x8]<_ ]$C> 5н*4>l6CK {h'" G8~n4^(DzVn0%xѝ^o=(/;n|ZZ 1Mb#hjTQgofh;QG_2a]/bD${TɃ& \l\#HItHԿif-l"gg@rW30LG31IC9^Xq"/׶yuaYj'mO{Y*kYJ9Z:_-)qgUe81X7 Qx^T+Z6VK]1X#@bp+ܲK'/o|س`]PKЧ)k DMύ(&Sk:X$U<*|Mɮߙ (,II6QصšjiUwMzB/<óXYC]< `2raՖtR0޲%R^25a.9ppTxD03vA@j7jojbߗEÑ$ B#S+kYFބv$9u"1Naa! xc 㢤hZtPpzn;xr (5 J O5ÉCQ}n/nnDk2RӓҶOzU lCS.rb+o j}BƓB!Ei^P=]jm` o택>5 "}o?ls;=+^ У#MBl ?;}T7"'f> gF=/{2 kkIiT }5e/,aeZXV^RHw2w_?.U&`lҘǦJy%[V5*Œlnxqh.JZe=PV%DR sF gބ h2>—}nzuJ iC:bu4#t3P7ƪ>=dDޔ*C킲V+j9R@[TXrv}##~MpM|E%w*#h(\"b /X4DXEW]%tfʚn&C%1>N ѼI1l W49Dzͬd$o?KFm\%UyjLV\6Zt`)K"9g^1X+FaM-"2/%\OkjnF% Y%~fL2RCL%m¦3 -VRհoNʠQK=6IJ[Gs87cu&:DaJٮ[K6q?2q|Tk!|v~'#BZ 0+"F/Z<\($ֳ8`=jv#cf']ٌ yzd-xt$Ȝ J|q[ %>ڲenW^ae&-.hďIe/3!kQs/FexUXuRU{đ/%674:S$rd? 7.;HL'A.oYd:!lN5qK>i|sZ(?HÉ|zpTpB%[ ;4Vyei]2K$p2%ϴp^ES/q;_?>!!f=liD~_ݲinZS3=Ο6ho*;Yľv:6D,?>`Jbw]llhhzNwc,=:2]qbZj!txE|R>Ww\MVaE+#F^_8)4D}ڪI_y˕W;. L.R2]pcz[*>?sFnnՌ6مLIO g|#;{r.address = cur)M/$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1"]B bH"TG@Zk,Bb"HTG@Zk ,B bH"TG@Zk,B bH0"TG@Zk,B bHP"TG@Zk,Bb!Hp"TG@Zk///b#@Bb"4G@Zk%.Bb"%JTG J@Zk%.Bb"%JTG'F@Zk,B% bH"TG@ZkG5`@%.% B!Jb J"TG@Zk%. Bb J" JTG0 F@Zk,% .%"HBJb HTG@8" @Zk,% .%"HBJb HTG@`"@Zk, " %, %.H0H E" e.2J H "!"HB1!J@tJ@b@x"TG@Zk , . % E.H H %"Je".SJ0J"2AJ@BJ@b@"TG@Zk,"%,E"%.H0He.2J" HB!"Hb1!J@tJ@@"TG@Zk,% .%"E.HJe".SJ HB0Jb2AJ@J@@"TG@Zk>/'. Bb J" JTG@Zk'. B Jb J "0 FTG@Zk,.' H'"BJ Hb@0 "TG@Zk,' .'"HBJb HTG@X "@Zk, " ', '.H0H G" g.2J H "!"HB1!J@tJ@b@p "TG@Zk , . ' G.H H '"Jg".SJ0J"2AJ@BJ@b@ "TG@Zk,"',G"'.H0Hg.2J" HB!"Hb1!J@tJ@@ "TG@Zk- ',"'.I0HG"g.2J H !"HB1!J@gJ@b@ "TG@Zk(b#Gk@Bb "4G@Zk%.Bb!"%JTG J@Zk%.Bb !"%JTG'F@Zk-B bI8!"TG@Zk5`@%. Bb JP!"0 FTG!@Zk%.Bbp!"(JTG J!0 F@Zk,!"%,BHbA (HTGD@Zkp,B!Hh$"p"bD!"TG@Zk,!Bh$"Hp"Hb0DD!"TG!@Zk',?#. "(HBP Jb0D!" =G WqT@ZkF/b#R@I&.Bb&J ""'FTG!@Zk&.BbP""&JTG J@Zk&.Bb`""&JTG'F@Zk,Bbx""HTG!@Zk, GH!@ !E, b# $@Bb`"4G@Zk,Bb""HGtG@Zk, 0 A!H A&, &H@ s/G(]0]8}@HPݤX`h=p#k?! p#Gh^4Gp^x~G~#GG]"r"" @4GR"Fr_F.UJ">Gr.SvJr>!@_F.UJ>8¦"GTG 04]8v<"0BB"?c@b[@\|@dCk///G4G$=F(,///}"GF`B}.2JJt1JFTFt1`JC]1,6H 0_JF3_JFt1J5 @ tF"G1"=! H= H=q. $]tJF6D =q"."Q.JR SJF(]1,81H,=//]G$G_FG@BG(=,=8]///}1 FfB}.2vJJFtQJTFQ.Gq.AJ S aJ0JSFAJ=uqJ"F?D "q.$tJ"F=q./.tJU JuF(}4G1,/Q.0HR PJ2D,=//}"FeB}.4vJQ.JR QJFJuQJFQ.4Jq.QJS qJSFBJuq@JFq.GQ.qJ R QJrFAJF_FFC4G q.2JqJ1"t1 HTF =.4 HQ.JR VJFJwq`JF =G.$JFvF(,4=8=U///q" GFB1,0J3Hq"J H0F6J0 D6Dt1 HFG=Q. $SJDF q.G.qJP J1"pF(.J,=*q"Q"4GFPB1,6vJ.3Hq"J! HFtQ HFG=,$ݲ ]H_FF q./.qJP J1"pF(.J,=// GTGFDpBP@4G$=(=,ݲ /} G4GFPbB}.$ݲ ]J_F4D ./1,JA 1H1"F(=.J,=//G4G$F(=B,=//ݢFBݲ.2J 1,JA 1HFP Hp1 HPFC=.7v?H ,J@ HF0HpQHF".4HJuqJF.GQ.J$R PJ F6JFFF ".4G.JT JF(},G1,HA 6HD,///]_FPAB]q.6_J 1,qJA 1HaFP H`1 HFC.3vH .JT JF0JaQJaFq".0HJuqJF.GQ.J$R SJ F6AJF_FF ".GQ.JR QJF(],G1,HA 6HD,M///}GG4GFcB}Q.0JQJCFt1@JF$=(,87/G$] "D@..JP JF(= Q.Gq.UJS uJ4GSF,= // GGFFpB0BG$(,8=  GGFFpB $ݲG(,8=@0.0J61&J}"HBPb~ԠFG~4G&JGX}"G G(G@Zk(=,]G`b#@`(B0b4G@ZkX}(B0b`0v`H4G@Zk\}cHgD@  Gh]p]x}#k.V J6F@;P#@^@B!TGH^P~X`h޴px>^~G~ GGG>"{#Gn@XB`b="GX G@ZkG/Bb%"@"GtG G@ZkG h@(D G G.Bb%"J"tG@Zk(B 0@A0b@"="TG @Zk KA(B*A0bȨ%"@"TG G@Zk @(B 0A0bШ%"@"TG@Zk A+`8 G,ب!X" I.1IJQQB10F .HBPbJ4G@Zk),)H/GBbC"GtG@Zk(B 0@A0b@"="TG)!@Zk KAXB`b"@="TG@Zkb@ #b@@@0@@XB`b"4G@ZkG@]H]P}X`hݤpx=]}#k/#8^@^>"H~PX`GG~ {#{@#"G0=b#1"_ bBb="c GTG@Zk "0"TG/0=GG#"p.".#.pJ0/JJ3B5BP#:K7B@B"9BAB,0@BYBBH" B bBb="(c GTG@Zk "0"TGG$." 0J!F }ò5 @@ B`Gw B GGb#M_4Gm$,"$.D"d.0H2J".tJ!#H"1"J03aJ1@J3@5@c7#$/ d/`@`8K(!G  `K5 C@4GI D.u C (¦ "TGTJ@/bBb "]"c GtG @Zkd. b#8"`JtGaFGG@ӠBbGGG@Zk,b#Pc"tGHG@ӠBbGGG@ZkBbx"4G@Zk ,B0@bHP"TG@ZkY@ X"4GBb@ZktGG8]@]H}PX`p#kGGGB@;\BCk/]GR"]GG R"///]G4G0R"///]GGHR"///]GGXR"{///]GtGhR"s/// = ]GGxR"k///=q.Q.!SqJ1Ht1HuFRQJTFq>Q>Gk//]GGR"S///]GR"K]GtGR"G///="q.4J!Q.J:#HtJuFQKTFzQK{FZFq>Q>Gk/ݦ"Q.3gJ֦.qJ5JsqJTFJFuJZFFQ>>Gk/]GGR"///]GtGR"///]GTGR"///]GR"G ]@ZkGk;B PBG;k//; B QB;B1,1H(;氽 @A1@k k ;#4G!~"/^{#G @ӠCG] #k#4G(^G0^C8~-D("G@HPGGG~({@[ >H{G/@Zk("b#M@`BhbG="GtG@ZkC  , HXDp PHF`BF @31`Bp7#5W/WK0B8bG@ZkGXD=PBXb0'H4GJ@ZkDD"D5@%D @= @U@b#@Ӿ4GG G(]0]8}@HP`#k#4G^0[^~C GG/8{@Zk B=(bG4GtG@ZkG]/] 0#k#TG^>"^ ~(08GGG~{ [c ({G@Zk%$! A !(F@BqF 21@BAԢ#6/6KBbG@ZkG0e"XDb#_ B(bG="TG@Zk%! A !@B(F21@BqF AԢ#6/6KBbG@ZkG//XaDG]] }(08@#k#TG^>"^ ~(08GGG~@{h[c p{G@Zk%8$! A !(F@BqF 21@BAԢ#6/6KHBPbG@ZkG`e"XDb#R_hBpbG="TG@Zk8%! A !@B(F21@BqF AԢ#6/6KHBPbG@Zk$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1ج"nG//XaDG]] }(08@#k% q BG @@P."" @RPJ"P>P"F.UJ> @F.WJ> 1@F.TJ>P.0 @ 1@GRPJ"P>k/#4G ^[(^0G~GC{@Zk(B "="GGG0bG@Zk =!&H&HG ](]0@#k/0J#^4G [J~/G({@ZkG]0D #k/1 1F7!H0k//;#^G^G~G^ G_9, K,pKA 9HG{@H1DD{y"9<< yKpyK]..b# SJU JvSJFTJF>>?G 9,,A 9H1DG@HD 9<G<_b#Y_Ӹ"!."A,0J! AH!F5 B "@@#@ /G G]] 0#k/ ;#~G^G^G~ GGG2_9, K,0{A 9HY"pK1D@H{9<D<G rHurH. yKy.T JayKFSrJb#uF>y>G ,/.@ HDGWJGF <>_b#_ _DG]]G} 0#k/;G !"! FGGk43HG` DECC$MAIN44Tb# DECC$MAIN43\@` DECC$MAIN4pG DECC$EXIT4tb# DECC$EXIT4@ DECC$EXIT4G DECC$EXIT4b# DECC$EXIT4@ DECC$EXIT4 LGx DECC$GXPRINTF4Pb# DECC$GXPRINTF4 t@x DECC$GXPRINTF4xG DECC$EXIT4|b# DECC$EXIT4@ DECC$EXIT4 TGp DECC$GXPRINTF4`b# DECC$GXPRINTF4 l@p DECC$GXPRINTF4pG DECC$EXIT 4tb# DECC$EXIT4@ DECC$EXIT4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4G DECC$EXIT4b# DECC$EXIT4@ DECC$EXIT4 G DECC$GXPRINTF4b# DECC$GXPRINTF4  @ DECC$GXPRINTF4G$ DECC$EXIT4b# DECC$EXIT4 @$ DECC$EXIT4 DGd DECC$GXPRINTF4Tb# DECC$GXPRINTF4 `@d DECC$GXPRINTF4 tG DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4G DECC$EXIT4b# DECC$EXIT4@ DECC$EXIT4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4G DECC$EXIT4b# DECC$EXIT4@ DECC$EXIT414GP DECC$STRCMP42Db# DECC$STRCMP41L@P DECC$STRCMP4 XGl DECC$GXPRINTF4\b# DECC$GXPRINTF4 h@l DECC$GXPRINTF4lG DECC$EXIT4pb# DECC$EXIT4|@ DECC$EXIT4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4G DECC$EXIT4b# DECC$EXIT4@ DECC$EXIT41 G DECC$STRCMP42b# DECC$STRCMP41@ DECC$STRCMP41,G< DECC$STRCMP420b# DECC$STRCMP418@< DECC$STRCMP41LG\ DECC$STRCMP42Pb# DECC$STRCMP41X@\ DECC$STRCMP41lG| DECC$STRCMP42pb# DECC$STRCMP41x@| DECC$STRCMP4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4G DECC$EXIT4b# DECC$EXIT4@ DECC$EXIT4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4G, DECC$EXIT4b# DECC$EXIT4(@, DECC$EXIT410G@ DECC$STRCMP424b# DECC$STRCMP41<@@ DECC$STRCMP41TGd DECC$STRCMP42Xb# DECC$STRCMP41`@d DECC$STRCMP4 pG DECC$GXPRINTF4tb# DECC$GXPRINTF4 @ DECC$GXPRINTF4G DECC$EXIT 4b# DECC$EXIT4@ DECC$EXIT4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4G( DECC$EXIT4b# DECC$EXIT4$@( DECC$EXIT41,G< DECC$STRCMP420b# DECC$STRCMP418@< DECC$STRCMP4 HG\ DECC$GXPRINTF4Lb# DECC$GXPRINTF4 X@\ DECC$GXPRINTF4\Gp DECC$EXIT4`b# DECC$EXIT4l@p DECC$EXIT4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4G DECC$EXIT4b# DECC$EXIT4@ DECC$EXIT4/G DECC$ATOI40b# DECC$ATOI4/@ DECC$ATOI4 4GH DECC$GXPRINTF48b# DECC$GXPRINTF4 D@H DECC$GXPRINTF4HG\ DECC$EXIT4Lb# DECC$EXIT4X@\ DECC$EXIT4/`Gp DECC$ATOI40db# DECC$ATOI4/l@p DECC$ATOI4/tG DECC$ATOI40xb# DECC$ATOI4/@ DECC$ATOI4/G DECC$ATOI40b# DECC$ATOI4/@ DECC$ATOI4 G DECC$GXPRINTF4b# DECC$GXPRINTF4  @ DECC$GXPRINTF4 G( DECC$EXIT4 b# DECC$EXIT4$ @( DECC$EXIT41, G< DECC$STRCMP420 N$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1E5"b# DECC$STRCMP418 @< DECC$STRCMP41L G\ DECC$STRCMP42P b# DECC$STRCMP41X @\ DECC$STRCMP41l G| DECC$STRCMP42p b# DECC$STRCMP41x @| DECC$STRCMP4  G DECC$GXPRINTF4 b# DECC$GXPRINTF4  @ DECC$GXPRINTF4 G DECC$EXIT4 b# DECC$EXIT4 @ DECC$EXIT4  G DECC$GXPRINTF4 b# DECC$GXPRINTF4  @ DECC$GXPRINTF4 G DECC$EXIT4 b# DECC$EXIT4 @ DECC$EXIT4 G DECC$STRLEN4 b# DECC$STRLEN4 @ DECC$STRLEN4% G LIB$GETDVI4& b# LIB$GETDVI4% @ LIB$GETDVI4# G LIB$SIGNAL4$ b# LIB$SIGNAL4# @ LIB$SIGNAL4 D Gl DECC$GXPRINTF 4L b# DECC$GXPRINTF4 h @l DECC$GXPRINTF4l G DECC$EXIT4p b# DECC$EXIT4| @ DECC$EXIT4  G DECC$GXPRINTF4 b# DECC$GXPRINTF4  @ DECC$GXPRINTF4 G DECC$EXIT4 b# DECC$EXIT4 @ DECC$EXIT4H Gd DECC$SLEEP4 T b# DECC$SLEEP4` @d DECC$SLEEP4 l G DECC$GXPRINTF4t b#@ DECC$GXPRINTF4  @ DECC$GXPRINTF4 G DECC$SLEEP4  b#@ DECC$SLEEP4 @ DECC$SLEEP4 G DECC$SLEEP4  b#@ DECC$SLEEP4 @ DECC$SLEEP4 PGx DECC$GXPRINTF4\b#@ DECC$GXPRINTF4 t@x DECC$GXPRINTF4 lG DECC$GXPRINTF4pb# DECC$GXPRINTF4 |@ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G( DECC$GXPRINTF4b# DECC$GXPRINTF4 $@( DECC$GXPRINTF4 (G< DECC$GXPRINTF4,b# DECC$GXPRINTF4 8@< DECC$GXPRINTF4 <GP DECC$GXPRINTF4@b# DECC$GXPRINTF4 L@P DECC$GXPRINTF4 PGd DECC$GXPRINTF4Tb# DECC$GXPRINTF4 `@d DECC$GXPRINTF4 dGx DECC$GXPRINTF4hb# DECC$GXPRINTF4 t@x DECC$GXPRINTF4 xG DECC$GXPRINTF4|b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF 4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G, DECC$GXPRINTF4b# DECC$GXPRINTF4 (@, DECC$GXPRINTF4 ,G@ DECC$GXPRINTF40b# DECC$GXPRINTF4 <@@ DECC$GXPRINTF4 @GT DECC$GXPRINTF4Db# DECC$GXPRINTF4 P@T DECC$GXPRINTF4 TGh DECC$GXPRINTF4Xb# DECC$GXPRINTF4 d@h DECC$GXPRINTF4 hG| DECC$GXPRINTF4lb# DECC$GXPRINTF4 x@| DECC$GXPRINTF4 |G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 lG DECC$GXPRINTF4tb# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 @GT DECC$GXPRINTF4Db# DECC$GXPRINTF4 P@T DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 GX$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1" DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G$ DECC$GXPRINTF4 b# DECC$GXPRINTF4  @$ DECC$GXPRINTF4 $G@ DECC$GXPRINTF4(b# DECC$GXPRINTF4 <@@ DECC$GXPRINTF4 @G\ DECC$GXPRINTF4Db# DECC$GXPRINTF4 X@\ DECC$GXPRINTF4 \Gx DECC$GXPRINTF 4`b# DECC$GXPRINTF4 t@x DECC$GXPRINTF4 xG DECC$GXPRINTF4|b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 G DECC$GXPRINTF4b# DECC$GXPRINTF4 @ DECC$GXPRINTF4 XGp DECC$GXPRINTF4\b# DECC$GXPRINTF4 l@p DECC$GXPRINTF4 "G# DECC$GXPRINTF4"b# DECC$GXPRINTF4  #@# DECC$GXPRINTF4 #G# DECC$GXPRINTF4#b# DECC$GXPRINTF4 #@# DECC$GXPRINTF4 #G$ DECC$GXPRINTF4#b# DECC$GXPRINTF4 #@$ DECC$GXPRINTF4-X$Gx$ DECC$MALLOC4.\$b# DECC$MALLOC4-t$@x$ DECC$MALLOC4 $G$ DECC$GXPRINTF4$b# DECC$GXPRINTF4 $@$ DECC$GXPRINTF4 %G0% DECC$GXPRINTF4 %b# DECC$GXPRINTF4 ,%@0% DECC$GXPRINTF4%G% DECC$STRLEN4%b# DECC$STRLEN4%@% DECC$STRLEN4%%G0& LIB$GETDVI4& &b# LIB$GETDVI4%,&@0& LIB$GETDVI4 4&GP& DECC$GXPRINTF48&b# DECC$GXPRINTF4 L&@P& DECC$GXPRINTF4 P&Gd& DECC$GXPRINTF4T&b# DECC$GXPRINTF4 `&@d& DECC$GXPRINTF4 d&Gx& DECC$GXPRINTF4h&b# DECC$GXPRINTF4 t&@x& DECC$GXPRINTF4&G ' DECC$STRNCMP4'b# DECC$STRNCMP4'@ ' DECC$STRNCMP4 'G@' DECC$STRNCMP4('b# DECC$STRNCMP4<'@@' DECC$STRNCMP4@'Gh' DECC$STRNCMP4T'b# DECC$STRNCMP4d'@h' DECC$STRNCMP4 'G' DECC$GXPRINTF4'b# DECC$GXPRINTF4 '@' DECC$GXPRINTF4 'G( DECC$GXPRINTF4'b# DECC$GXPRINTF4 (@( DECC$GXPRINTF4 (G( DECC$GXPRINTF4(b# DECC$GXPRINTF4 (@( DECC$GXPRINTF4 (G,( DECC$GXPRINTF4(b# DECC$GXPRINTF4 ((@,( DECC$GXPRINTF4 ,(G@( DECC$GXPRINTF40(b# DECC$GXPRINTF4 <(@@( DECC$GXPRINTF4 )G,) DECC$GXPRINTF4)b# DECC$GXPRINTF4 ()@,) DECC$GXPRINTF4 x)G) DECC$GXPRINTF4)b# DECC$GXPRINTF4 )@) DECC$GXPRINTF4 )G) DECC$GXPRINTF 4)b# DECC$GXPRINTF4 )@) DECC$GXPRINTF4*G* DECC$STRLEN4*b# DECC$STRLEN4*@* DECC$STRLEN4 L+Gl+ DECC$GXPRINTF4P+b# DECC$GXPRINTF4 h+@l+ DECC$GXPRINTF4 +G+ DECC$GXPRINTF4+b# DECC$GXPRINTF4 +@+ DECC$GXPRINTF4 +G+ DECC$GXPRINTF4+b# DECC$GXPRINTF4 +@+ DECC$GXPRINTF4 +G, DECC$GXPRINTF4+b# DECC$GXPRINTF4 ,@, DECC$GXPRINTF4',G0, OTS$REM_I4(,b# OTS$REM_I4',,@0, OTS$REM_I4 ,G- DECC$GXPRINTF4,b# DECC$GXPRINTF4  -@- DECC$GXPRINTF4 -G- DECC$GXPRINTF4-b# DECC$GXPRINTF4 -@- DECC$GXPRINTF4 -G- DECC$GXPRINTF4-b# DECC$GXPRINTF4 -@- DECC$GXPRINTF4 -G- DECC$GXPRINTF4-b# DECC$GXPRINTF4 -@- DECC$GXPRINTF4 -G. DECC$GXPRINTF4.b# DECC$GXPRINTF4 .@. DECC$GXPRINTF4 .G. DECC$GXPRINTF4.b# DECC$GXPRINTF4 .@. DECC$GXPRINTF4/G/ DECC$STRNCMP4/b# DECC$STRNCMP4/@/ DECC$STRNCMP4/G/ DECC$STRNCMP4/b# DECC$STRNCMP4/@/ DECC$STRNCMP40G00 DECC$STRNCMP40b# DECC$STRNCMP4,0@00 DECC$STRNCMP400GP0 DECC$STRNCMP480b# DECC$STRNCMP4L0@P0 DECC$STRNCMP4P0Gp0 DECC$STRNCMP4X0b# DECC$STRNCMP4l0@p0 DECC$STRNCMP40b# DECC$GXPRINTF4 0G1 DECC$GXPRINTF4  1@1 DECC$GXPRINTF4 D1GX1 DECC$GXPRINTF4H1b# DECC$GXPRINTF4 T1@X1 DECC$GXPRINTF4 1G1 DECC$GXPRINTF41b# DECC$GXPRINTF4 1@1 DECC$GXPRINTF4 1G2 DECC$GXPRINTF41b# DECC$GXPRINTF4 2@2 DECC$GXPRINTF4 2G02 DECC$GXPRINTF42b# DECC$GXPRINTF4 ,2@02 DECC$GXPRINTF4 82GX2 DECC$GXPRINTF4<2b# DECC$GXPRINTF4 T2@X2$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1|F" DECC$GXPRINTF4 2G2 DECC$GXPRINTF42b# DECC$GXPRINTF4 2@2 DECC$GXPRINTF42G3 OTS$DIV_I42b# OTS$DIV_I4 3@3 OTS$DIV_I4 3G03 DECC$GXPRINTF 43b# DECC$GXPRINTF4 ,3@03 DECC$GXPRINTF4 3G3 DECC$GXPRINTF43b# DECC$GXPRINTF4 3@3 DECC$GXPRINTF4 P4Gt4 DECC$GXPRINTF4`4b# DECC$GXPRINTF4 p4@t4 DECC$GXPRINTF4 4G5 DECC$GXPRINTF45b# DECC$GXPRINTF4 5@5 DECC$GXPRINTF4 5G6 DECC$GXPRINTF45b#H DECC$GXPRINTF4 6@6 DECC$GXPRINTF4:G`: DECC$STRNCMP4@:b#H DECC$STRNCMP4\:@`: DECC$STRNCMP4 =G> DECC$GXPRINTF4=b#H DECC$GXPRINTF4  >@> DECC$GXPRINTF4 D>G`> DECC$GXPRINTF4H>b#H DECC$GXPRINTF4 \>@`> DECC$GXPRINTF4 ?G? DECC$GXPRINTF4?b#H DECC$GXPRINTF4 ?@? DECC$GXPRINTF4 ?G@ DECC$GXPRINTF4?b#H DECC$GXPRINTF4 @@@ DECC$GXPRINTF4 ,@GP@ DECC$GXPRINTF44@b#H DECC$GXPRINTF4 L@@P@ DECC$GXPRINTF4 t@G@ DECC$GXPRINTF4|@b#H DECC$GXPRINTF4 @@@ DECC$GXPRINTF4AGA DECC$STRNCMP4Ab#H DECC$STRNCMP4A@A DECC$STRNCMP4 PCGhC DECC$GXPRINTF4TCb#H DECC$GXPRINTF4 dC@hC DECC$GXPRINTF4 lCGC DECC$GXPRINTF4pCb#H DECC$GXPRINTF4 C@C DECC$GXPRINTF4 CGC DECC$GXPRINTF4Cb#H DECC$GXPRINTF4 C@C DECC$GXPRINTF4 CGC DECC$GXPRINTF4Cb#H DECC$GXPRINTF4 C@C DECC$GXPRINTF4 CG D DECC$GXPRINTF4Cb#H DECC$GXPRINTF4 D@ D DECC$GXPRINTF4 $DG to abort) `=PB RESTRICTED FORMAT: %s see rzdisk(8) reference page for details.= Are you sure =  Double Sided ED =  Double Sided HD =  Double Sided DD =  Single Sided SD =  Double Sided SD 0=0% Insert a%sdiskette into the drive. X=  Ready to begin formatp=@7Cannot format %s - flexible disk page not changeable. =( Formatting device (%s). =(Done formatting device (%s). =0# Verifying format of device (%s). =0"Cannot reopen floppy drive (%s). 8=8) Verify failed: %s head %d cylinder %d. h=read error onx=(Done verifying device (%s). =(The device (%s) is mounted! =@2You cannot test or format a disk that's mounted! =@2Unmount the device before testing or formatting! (=8- Reassign Block unsupported on device (%s). X=( Read good data from block %d.x=8+ Either the block is not bad or the driver=8) already reassigned it via dynamic BBR. =8)Refer to "Bad Block Replacement on SCSI =8/disks" for assistance. Cancel reassign block8=8- Reassigning bad block (%d) on device (%s). h=8- Write of data to replacement block failed. =8- The data in the reassigned block is (BAD). =8. The data in the reassigned block is () 1$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1`9"KGOOD). =8, Invalid LBN (%d) entered for device (%s). (=8- Valid LBN range for device (%s) is [0-%d]. X=8/ Invalid length (%d) entered for device (%s). =@6 Length plus LBN cannot exceed (%d) for device (%s). =8* Scanning for bad blocks on device (%s). =8) Block range being scanned is [%d-%d].  =(Scanning blocks [%d-%d] @=0! Recoverable read error with ECCh=0% Recoverable read error with RETRIES=( Recoverable read error: (%s)=8* at (LBN = %d) Unrecoverable read error=h_ Unrecoverable read error: (%s) at (LBN = %d) Done scanning for bad blocks on device (%s). @=8+ BLOCK format unsupported on device (%s). p=8/ Read Defect Data unsupported on device (%s). =0$ Reading defects from device (%s). =  Defect list header: =( Format 0x%02x SECTOR = VENDOR = RESERVED  =8. Defect list length %d number of defects %d P= Block %8d `=0# Cylinder %6d Head %2d Byte %6d =0% Cylinder %6d Head %2d Sector %4d =@3Changing disk drive parameters to default values! = Are you sure=0! SAVE THE DEFAULT VALUES ON DISK =(change_drive_parameters: %s @=0%ms.pgcode does not match msc.pgcode!h=@2 Changing disk drive parameters for device (%s). =8/Changing disk drive parameters interactively! = Are you sure=  Block descriptor:  =  Density code %d =( Number of blocks %d 0=  Block length %d H=PE Do you want to change the block lengthEnter the new block length? =(change_drive_parameters: %s =0%ms.pgcode does not match msc.pgcode!=0& Page 1 - error recovery parameters: = PS %d =  Page code %d (=  Page length %d @=  Retry count %d X=@2 Correction span %d Head offset count %d =H< Data strobe offset count %d Recovery time limit %d =( Read retry count %d =( Write retry count %d =@2 Correction span %d Head offset count %d H=H< Data strobe offset count %d Recovery time limit %d =8/ Do you want to change any fields in this page=(Enter the new retry count? =PBEnter the new correction span? Enter the new head offset count?  =8)Enter the new data strobe offset count? P=0$Enter the new recovery time limit? x=0!Enter the new read retry count? =0"Enter the new write retry count? =PBEnter the new correction span? Enter the new head offset count? =8)Enter the new data strobe offset count? @=0$Enter the new recovery time limit? h=8, Page 2 - disconnect/reconnect parameters: = PS %d =  Page code %d =  Page length %d =( Buffer full ratio %d =( Buffer empty ratio %d =( Bus inactivity limit %d 8=( Disconnect time limit %d X=( Connect time limit %d x=8/ Do you want to change any fields in this page=(Enter the new bus full ratio? =PEEnter the new bus empty ratio? Enter the new bus inactivity limit?  =0&Enter the new disconnect time limit? 8 =0#Enter the new connect time limit? ` =@3 Page 3 - direct-access device format parameters:  = PS %d  =  Page code %d  =  Page length %d  =H: Tracks per zone %d Alternate sectors per zone %d !=0! Alternate tracks per zone %d @!=0# Alternate tracks per volume %d h!=( Sectors per track %d !=0! Data bytes per phy sector %d !=  Interleave %d !=  Track skew %d !=  Cylinder skew %d !=8/ Do you want to change any fields in this page("=XKEnter the new tracks per zone? Enter the new alternate sectors per zone? x"=8*Enter the new alternate tracks per zone? "=8,Enter the new alternate tracks per volume? "=0"Enter the new sectors per track? #=0!Enter the new bytes per sector? (#=0"Enter the new interleave factor? P# =(Enter the new track skew? p#=(Enter the new cylinder skew? #=@1 Page 4 - rigid disk drive geometry parameters: #= PS %d #=  Page code %d #=  Page length %d $=0# Maximum number of cylinders %d 0$=( Maximum number of heads %d P$=0# Write precompensation start %d x$=0# Reduced write current start %d $=@6 Drive step rate %d Landing zone cylinder %d $=8/ Do you want to change any fields in this page%=H<Enter the number of cylinders? Enter the number of heads? H%=xlEnter the write precompensation start? Enter the reduced write current start? Enter the drive step rate? %=0"Enter the landing zone cylinder? %=8+ Page 5 - flexible disk drive parameters: &= PS %d  &=  Page code %d 8&=  Page length %d P&=  Transfer rate %d h&=@2 Number of heads %d Sectors per track %d &=0% Data bytes per physical sector %d &=( Number of Cylinders %d &=8) Starting write precompensation cyl %d '=8) Starting reduced write current cyl %d H'=@6 Drive step rate %d Drive step pulse width %d '=( Head settle delay %d '=  Motor on delay %d '=8/ Motor off delay %d Motor on (MO) %d '=0! Start sector number (SSN) %d (=( True ready (TRDY) %d 0(=0% Step pulses per cylinder (SPC) %d X(=0# Write precompensation level %d (=@2 Head load delay %d Head unload delay %d (=( Pin 2 definition %d (=( Pin 34 d*#$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1"\efinition %d (=( Pin 1 definition %d )=( Pin 4 definition %d 8)=( Medium rotation rate %d X)=8/ Do you want to change any fields in this page)=(Enter the transfer rate? )=(Enter the number of heads? )=(Enter the sectors per track? )=8+Enter the data bytes per physical sector? *=XLEnter the number of cylinders? Enter the write precompensation start cyl? h*=8,Enter the reduced write current start cyl? *=(Enter the drive step rate? *=0#Enter the drive step pulse width? *=(Enter the head settle delay? +=(Enter the motor on delay?  +=(Enter the motor off delay? @+=(Enter the motor on (MO) bit? `+=8*Enter the start sector number (SSN) bit? +=0"Enter the true ready (TRDY) bit? +=8+Enter the step pulses per cylinder (SPC)? +=PDEnter the write precompensation level? Enter the head load delay? 0,=(Enter the head unload delay? P,=(Enter the pin 2 definition? p,=(Enter the pin 34 definition? ,=%Enter the pin 1 definition?  ,=(Enter the pin 4 definition? ,=0!Enter the medium rotation rate? ,=( Page 8 - caching parameters: -= PS %d (-=  Page code %d @-=  Page length %d X-= Read cache disable bit 0x%x Multiple selection bit 0x%x Write cache enable bit 0x%x Write retention priority %d Demand read retention priority %d .=0' Disable prefetch transfer length %d (.=( Minimum prefetch %d H.=( Maximum prefetch %d h.=XO Maximum prefetch ceiling %d Do you want to change any fields in this page.=H?Set read cache disable (RC) bitSet mutiple selection (MS) bit.=0!Set write cache enable (WCE) bit /=0%Enter the write retention priority? H/=8+Enter the demand read retention priority? x/=8*Enter disable pre-fetch transfer length? /=Enter minimum pre-fetch value? Enter maximum pre-fetch value? Enter maximum pre-fetch ceiling value? Page 37 - DEC unique parameters: 80= PS %d H0=  Page code %d `0=  Page length %d x0=( Spinup on power up %s 0=8/ Do you want to change any fields in this page0=(Have drive spinup on power on0=8) Page %d - unknown or unsupported page: 1= PS %d (1=  Page code %d @1=  Page length %d X1=  Byte %d 0x%x p1=8/ Do you want to change any fields in this page1=8+Enter the new value for byte %d in (HEX)? 1=( Make the changes permanent1=(change_drive_parameters: %s 2=0%ms.pgcode does not match msc.pgcode!82=@2 Changing disk drive parameters for device (%s). p2=Direct access2= Sequential access2= Processor2=Optical memory2=Medium changer2=Communications2=8. Getting inquiry data info from device (%s). 3=( Dump of Inquiry Data: (3=0% Device Type Qualifier %s device P3=( Removable Medium %s p3=  Version %d 3=( Terminate I/O process %s 3=@4 Async event notification %s Soft reset %s 3=( Command queueing %s 4=H9 Linked commands %s Synchronous communication %s @4=( 16 bit wide transfer %s `4=( 32 bit wide transfer %s 4=( Relative addressing %s 4=( Vendor Identificaton %s 4=( Product Identification %s 4=  Revision Level %s 4=@6A full test may destroy all data on the device (%s)! 05= Are you sure@5=8/ Sending diagnostic command %sto device (%s). p5=( Diagnostic data received: 5= %3.3x: 5=0% Getting capacity from device (%s). 5 =  Capacity: %d blocks. 5= Blocksize: %d bytes. 5= CHANGEABLE6=@5 Getting %s disk drive parameters from device (%s). @6=  Mode sense header: X6=( Sense data length %d x6=  Medium type %d 6= WP 0x%x 6=( Block descriptor length %d 6=  Block descriptor: 6=  Density code %d 6=( Number of blocks %d 7=8. Block length 0x%x Block length %d @7=0& Page 1 - error recovery parameters: h7= PS %d x7=  Page code %d 7=  Page length %d 7=( Disable correction 0x%x 7=0# Disable transfer on error 0x%x 7=  Post error 0x%x 8=H: Enable early recovery 0x%x Read continuous 0x%x H8=( Transfer block 0x%x h8=( Auto realloc on read 0x%x 8=@7 Auto realloc on write 0x%x Retry count 0x%x 8=( Correction span 0x%x 8=( Head offset count 0x%x 9=0" Data strobe offset count 0x%x (9=( Recovery time limit 0x%x H9=( Read retry count 0x%x h9=( Write retry count 0x%x 9=( Correction span 0x%x 9=( Head offset count 0x%x 9=0" Data strobe offset count 0x%x 9=( Recovery time limit 0x%x :=( Disable correction %x 0:=0! Disable transfer on error %x X:=  Post error %x p:=( Enable early recovery %x :=8/ Read continuous %x Transfer block %x :=( Auto realloc on read %x :=( Auto realloc on write %x ;=  Retry count %d ;=@2 Correction span %d Head offset count %d P;=H< Data strobe offset count %d Recovery time limit %d ;=( Read retry count %d ;=( Write retry count %d ;=@2 Correction span %d Head offset count %d <=H< Data strobe offset count %d Recovery time limit %d +9Az $ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1YJ"mH<=8, Page 2 - disconnect/reconnect parameters: x<= PS %d <=  Page code %d <=  Page length %d <=( Buffer full ratio 0x%x <=( Buffer empty ratio 0x%x <=( Bus inactivity limit 0x%x ==H= Disconnect time limit 0x%x Connect time limit 0x%x X==( Buffer full ratio %d x==( Buffer empty ratio %d ==( Bus inactivity limit %d ==( Disconnect time limit %d ==( Connect time limit %d ==@3 Page 3 - direct-access device format parameters: 0>= PS %d @>=  Page code %d X>=  Page length %d p>=" Tracks per zone 0x%x  >=0$ Alternate sectors per zone 0x%x >=0# Alternate tracks per zone 0x%x >=0% Alternate tracks per volume 0x%x ?=( Sectors per track 0x%x (?=0# Data bytes per phy sector 0x%x P?=  Interleave 0x%x h?=  Track skew 0x%x ?=( Cylinder skew 0x%x ?=  Surface 0x%x ?=  Removable 0x%x ?=xj Hard sectors 0x%x Soft sectors 0x%x Tracks per zone %d Alternate sectors per zone %d @@=0! Alternate tracks per zone %d h@=0# Alternate tracks per volume %d @=( Sectors per track %d @=0! Data bytes per phy sector %d @=  Interleave %d @=  Track skew %d A=  Cylinder skew %d  A=  Surface %x 8A=  Removable %x PA=  Hard sectors %x hA=  Soft sectors %x A=@1 Page 4 - rigid disk drive geometry parameters: A= PS %d A=  Page code %d A=  Page length %d A=0% Maximum number of cylinders 0x%x  B=0! Maximum number of heads 0x%x HB=0% Write precompensation start 0x%x pB=0% Reduced write current start 0x%x B=( Drive step rate 0x%x B=PC Landing zone cylinder 0x%x Maximum number of cylinders %d C=( Maximum number of heads %d  C=0# Write precompensation start %d HC=0# Reduced write current start %d pC=@6 Drive step rate %d Landing zone cylinder %d C=8+ Page 5 - flexible disk drive parameters: C= PS %d C=  Page code %d D=  Page length %d D=( Transfer rate 0x%x 8D=( Number of heads 0x%x XD=( Sectors per track 0x%x xD=0' Data bytes per physical sector 0x%x D=( Number of Cylinders 0x%x D=8+ Starting write precompensation cyl 0x%x D=8+ Starting reduced write current cyl 0x%x  E=( Drive step rate 0x%x @E=H< Drive step pulse width 0x%x Head settle delay 0x%x E=( Motor on delay 0x%x E=( Motor off delay 0x%x E=( Motor on (MO) 0x%x E=0# Start sector number (SSN) 0x%x F=( True ready (TRDY) 0x%x (F=0' Step pulses per cylinder (SPC) 0x%x PF=0% Write precompensation level 0x%x xF=( Head load delay 0x%x F=( Head unload delay 0x%x F=( Pin 2 definition 0x%x F=( Pin 34 definition 0x%x F=( Pin 1 definition 0x%x G=( Pin 4 definition 0x%x 8G=( Medium rotation rate 0x%x XG= Transfer rate %d y pG=@2 Number of heads %d Sectors per track %d G=0% Data bytes per physical sector %d G=( Number of Cylinders %d G=8) Starting write precompensation cyl %d  H=8) Starting reduced write current cyl %d PH=@6 Drive step rate %d Drive step pulse width %d H=( Head settle delay %d H=  Motor on delay %d H=8/ Motor off delay %d Motor on (MO) %d H=0! Start sector number (SSN) %d I=( True ready (TRDY) %d 8I=0% Step pulses per cylinder (SPC) %d `I=0# Write precompensation level %d I=@2 Head load delay %d Head unload delay %d I=( Pin 2 definition %d I=( Pin 34 definition %d J=( Pin 1 definition %d  J=( Pin 4 definition %d @J=( Medium rotation rate %d `J=0' Page 7 - verify error recovery page: J= PS %d J=  Page code %d J=  Page length %d J=( Disable correction 0x%x J=0# Disable transfer on error 0x%x K=  Post error 0x%x (K=H= Enable early recovery 0x%x Verify retry count 0x%x hK=PD Verify correction span 0x%x Verify recovery time limit 0x%x K=( Disable correction %x K=0! Disable transfer on error %x K=  Post error %x L=( Enable early recovery %x 0L=( Verify retry count %d PL=( Verify correction span %d pL=0" Verify recovery time limit %d L=( Page 8 - caching parameters: L= PS %d L=  Page code %d L=  Page length %d L= Read cache disable bit 0x%x Multiple selection bit 0x%x Write cache enable bit 0x%x Write retention priority 0x%x M=0' Demand read retention priority 0x%x M=8) Disable prefetch transfer length 0x%x M=( Minimum prefetch 0x%x M=( Maximum prefetch 0x%x N=0" Maximum prefetch ceiling 0x%x @N=( Read cache disable bit %x `N=( Multiple selection bit %x N=( Write cache enable bit %x N=PE Write retention priority %d Demand read retention priority %d N=0' Disable prefetch transfer length %d O=( Minimum prefetch %d 0O=( Maximum prefetch %d PO=PC Maximum prefetch ceiling %d Page 9 - peripher,_z3?$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1F"~al device page: O= PS %d O=  Page code %d O=  Page length %d O=0# Interface identifier 0x%02.2x P=0! Interface identifier %02.2x (P=( Page 10 - control mode page: HP= PS %d XP=  Page code %d pP= Page length %d , P=0' Report log exception condition 0x%x P=( Disable queueing 0x%x P=H: Queue error management 0x%x Queue algorithm 0x%x Q=( Error AEN permission 0x%x 0Q=0' Unit attention AEN permission 0x%x XQ=( Ready AEN permission 0x%x xQ=8. Enable extended contingent allegiance 0x%x Q=0! Read AEN holdoff period 0x%x Q=0% Report log exception condition %x Q=( Disable queueing %x R=( Queue error management %x 8R=@5 Queue algorithm %x Error AEN permission %x pR=0% Unit attention AEN permission %x R=( Ready AEN permission %x R=8, Enable extended contingent allegiance %x R=( Read AEN holdoff period %d S=8) Page 11 - medium types supported page: 8S= PS %d HS=  Page code %d `S=  Page length %d xS=0! Medium type 1 supported 0x%d S=0! Medium type 2 supported 0x%d S=0! Medium type 3 supported 0x%d S=0! Medium type 4 supported 0x%d T=( Medium type 1 supported %d 8T=( Medium type 2 supported %d XT=( Medium type 3 supported %d xT=( Medium type 4 supported %d T=0& Page 12 - notch and partition page: T= PS %d T=  Page code %d T=  Page length %d U=( Notched drive 0x%x  U=PC Logical/Physical notch 0x%x Maximum number of notches 0x%x hU=@4 Active notch 0x%x Starting boundary 0x%x U=( Ending boundary 0x%x U=`W Pages notched [1] 0x%08.8x Pages notched [2] 0x%08.8x Notched drive %x V=( Logical/Physical notch %x 8V=0! Maximum number of notches %d `V=  Active notch %d xV=( Starting boundary %d V=@6 Ending boundary %d Pages notched [1] %08.8x V=( Pages notched [2] %08.8x V=0# Page 37 - DEC unique parameters: W= PS %d (W=  Page code %d @W=  Page length %d XW=( Spinup on power up 0x%x xW=0! Enable staggered spinup 0x%x W=H; Staggered spinup delay 0x%x Spinup on power up %s W=( Enable staggered spinup %s X=0! Staggered spinup delay %4.1f (X=8) Page %d - unknown or unsupported page: XX= PS %d hX=  Page code %d X=  Page length %d X=  Byte %d 0x%x X=  Dump of %s data: X= %03.3x: X= no senseX=(recovered errornot readyY= medium errorY=hardware error(Y=(illegal requestunit attentionHY= data protect XY= blank checkhY=(vendor specificcopy abortedY=8+aborted commandvolume overflowmiscompareY= reservedY=@7no additional sense informationno index/sector signalZ= no seek completeZ=(peripheral device write fault8Z=8-logical unit not ready, cause not reportablehZ=8+logical unit does not respond to selectionZ=(no reference position foundZ=0%multiple peripheral devices selectedZ=0#logical unit communication failure[= track following error [= error log overflow8[= write errorH[= ID CRC or ECC error`[= unrecovered read errorx[=0#address mark not found in id field[=0%address mark not found in data field[=(recorded entry not found[=(random positioning error\=H<data synchronization mark errorrecovered data with retriesH\=8-recovered data with error correction appliedx\= defect list error\=(parameter list length error\=@6synchronous data transfer errordefect list not found\=0#miscompare during verify operation]=0!recovered id with ecc correction8]=(invalid command operation modeX]=0#logical block address out of range]=0!illegal function for device type]= invalid field in cdb]=(logical unit not supported]=XNinvalid field in parameter listwrite protectednot ready to ready transition0^=8.power on, reset, or bus device reset occurred`^= parameters changedx^=@1copy cannot execute since host cannot disconnect^= command sequence error^=0#overwrite error on update in place^=8-tagged commands cleared by another initiator _=(incompatible medium installed@_=H;medium format corruptedno defect spare location available_= tape length error_=(ribbon/ink/toner failure_= rounded parameter_=(sequential positioning error_=@3saving parameters not supportedmedium not present(`=0!invalid bits in identify messageP`=8)logical unit has not self-configured yet`=8)target operating conditions have changed`= ram failure`= data path failure`=(power-on or self-test failure`=message errora=hZinternal target failureselect/reselect failureunsuccessful soft resetscsi parity errorha=8*initiator detected error message receiveda= invalid message errora= command phase errora= data phase errora=0'logical unit failed self-configurationb=(overlapped commands attemtped(b= write append error@b=erase failurePb( ( =XNcartridge fa-$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1"ultmedia load/eject failedscsi to host system interface failureb=H<system resource failureunable to recover table-of-contentsb=(generation does not existc= updated block readc=H>operator request or state change input (unspec)log exceptionXc= rpl status changepc= lamp failurec=@4video acquisition errorscan head positioning errorc=8+end of user area encountered on this trackc=(illegal mode for this trackd=8-logical unit not ready, cause not reportable8d=0'logical unit not ready, becoming ready`d=@6logical unit not ready, initializing command requiredd=@5logical unit not ready, manual intervention requiredd=8+logical unit not ready, format in progresse= unknown keye= unknown code e=8. *** Error occurred during command (%s) *** Pe=8* Cannot get sense info from device (%s). e=8. *** Error occurred during command (%s) *** e=8* Cannot get sense info from device (%s). e=@4 *** Error occurred on %s during command (%s) *** f= Sense Key (0x%x): %s. 0f=0#Additional Sense Code (0x%x): %s. Xf= Sense Data: hf=(Test Unit ReadyFormat Unitf= Read Defect Dataf=Reassign Blockf= Verify Dataf= Mode Sensef= Mode Selectf=Read capacityf=0#Send diagnosticReceive diagnosticg=Request sense(g= Start unit8g= Stop unitHg=(Unknown Command%s [%c]? hg=0& ***** Bad input please enter (y/n)? g=@1 ***** Bad input please enter (INTEGER NUMBER)? g=8- ***** Bad input please enter (HEX NUMBER)? g=XN Usage: rzdisk [-q] [-m] [-b] -cdfghiprstuwy [LBN|command] [length] device Hh=PF -m (may precede -c option) masks parameters with changeable values. h=LDStarted formatting device (%s). Use "rzdisk -y" to check progress. p2424424444242424i i X4X4X4Y4Y4(Y48Y4HY4XY4hY4xY4Y44Y4Y4Y46 r   Y4Y4Z4Z48Z4hZ4Z4Z4Z4[4 [448[4444H[4`[4x[4[4[4[4\4(\4H\4x\4\4\4\4\4]448]4X]4]44]4]4]4^4^40^4`^4x^4^4^44^4 _4@_4X_4_444_4_4_4_4`444(`4P`4`4`4`4`4`4a4 a48a4Pa4ha4a4a4a4a44b44(b4@b4Pb4`b4xb4b44b4b4c4c4Hc4Xc44 4(4pc4c4c4c4c46   d48d4`d4d4d46 , , e4, , e4< <=,$#RZDISKDEC C V5.7-004? ?= 4=TRANSFER$BREAK$GOrl l= 44= main4=                    ! * * : 9 9 T S S d k j j~ }      T$ $= 4: := T 4=   = ` 44=open_special_file` 4=               d$ $=  4: :=  4=  =  44=start_stop_unit 4=MED      $ $ $= $ 4: :=  4= n n=  4@4= rz_test_ready 4=              y             ,$ $=  4: := 4=  = 4P4= isinteger4=?76       N N= ,444=  = @44= print_help@4=>65  $ $= d4: := 4=  = 44= format_a_disk4=-% ;  ;  M M V \ c c c e e g g g g h h i i i j k k o o p r $ $= 84: := T4= `n.̯$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;15" n= p44=format_a_floppyp4=  ' ' ( . - - / - 0 . . . . 1 9 @ B D F H J L N R V Y _ b h k q t z }                                                                                    ! ! # ! # " " " $ " ) * * * , * - + , - + 6 6 7 6 = = = = > > > ? > ?  K K L O L H N O Q S S S U U  [ V V X X X Y ` ` ` ` ` ` c c e d d e g g g g f  x | | | }      r   o   V       t tBL  $ $= 4: := 0%4= P = %44= disk_mounted%4=LDC      S$ $= %4: := &4=  = &44= reassign_bad_block&4=>6       =  -  -                    3   O< 4a$ $= &4: := )4= ( (=  @*44=!scan_for_bad_blocks@*4= . . ? E D E D D D F D W _ _ f e e e h h q q q q q u v              !$ t d:< h,$ $= *4: := .4=   = `/44= read_defects`/4=              *     $ $= /4: := X14= 0 = 144= print_defects14=|                                                           q           + 0$ $= 14: := P54=  = $54H4=%change_drive_parameters54=YQ   : A F F G F I H G G I H [ Y [ ^ a a e r r s r s s s t u t t ~                                         ,                       T  @     ,    <                                           + / 1 3 2, 8 8 8 8 < < @ @ @ F J K  Y Y Y$ Z ^ g p p          q q v { {   %                                                                                                 & & , , 2 2  A D F E E E F E E I J K J J ?  K J J O N N N O N N R R R R R U T T T U T T @ Z Z Z Z ^ ^ _ ^ _ b g g g k k k o o o s s t s t x z z ~                             /3$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1+"                               =                                                       $  &  &  .  1  2  2  2  4  4  4  4  6  6  6  6  8  8  8  8  :  :  :  <  <  <  <  <  >  >  >  >  >  @  @  @  @  @  B  B  B  B  B  ,  F  L  L  R  R  R  X  ]  ]  e  e  i  k  k  q  u  w  w  H7 }  }                                                               ,              ! ! ! ! ! ! ! ! ! ! !< !p !L ! ! ! ! !, ! ! !  A AL $ $= 54: := p4= ; = @q44=get_inquiry_info@q4=x ,! ,! ,! ,! 5! 6! 7! 6! 9! ! C! C! C! E! E! E! F! F! F! G! G! G! H! H! H! I! I! I! J! J! J! K! K! K! L! L! L! M! M! M! M! N! N! O!$ N! O! O! N! P! R! R!k S!$ R! S! S! R! T! T! W! W! W! W! W!$$ $= tq4: := v4= 6 6= w44= test_devicew4= ]! ]! ]! ]! a! g! g! g! g! a! h! l! o! p!B |! ! ~! ~!$ !$ $= Hw4: := 4y4= `= == py4h4= get_capacitypy4= ! ! ! ! ! ! ! ! ! ! ! ! ! !J ! ! ! ! ! ! !$ $= y4: := z4= P = !z44="get_drive_parametersz4=aY ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !  "  "  " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "  ("  4" ("  ("  4" 4" 6" 6" 8" 8" 8" :" :" :" <" <" <" <" >" >" >" >" >" *" )" )" )" )" +" +" +" -" -" -" /" /" /" 1" 1" G" E" N" N"  N" P" P" P" S" R" R" R" R" V" U" V" U" U" X" X" X" X" X" ]" ]" ]" _" _" _" b" a" a" a" a" e" d" e" d" d" g" g" g" g" g" p" n" w" w" w" y" y" y" y" {" {" {" }" }" }" }" }" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "2 " " " " " " " " " " " # " # " " # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # !# !# !# ## ## ## %# %# %# '# '# '# '# '# -# ,# ,# ,# ,# /# /# /# 1# 1# 1# 4# 3# 4# 3# 3# 6# 6# 6# 6# 6# :# 9# 9# 9# 9# =# <# =# <# <# @# ?# ?# ?# ?# B# B# E# D# D# D# D# G# G# G# I# I# I# K# N# N# N# N# P# P# P# P# R# R# R# T# T# T# V# V# V# X# X# Z# Z# Z# \# \# \# \# = ^# ^# ^# `# `# `# `# b# b# b# e# d# d# d# d# m# k# x# x# x# z# z# z# |# |# |# |# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #  # # # # # # # # # # # # # # # 0tX$ RZDISK030.A?j&.![VDBURG.SCSI.A]RZDISK_ALPHA.OBJ;1u # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ %$ %$ %$ '$ '$ '$ '$ *$ *$ *$ )$ *$ *$ )$ )$ -$ -$ -$ ,$ -$ ,$ ,$ 0$ 0$ /$ /$ 0$ 0$ /$ 3$ 3$ 3$ 2$ 3$ 3$ 2$ 2$ 9$ <$ C$ C$ C$ C$ E$ E$ F$ E$ G$ G$ G$ G$ G$ J$ J$ J$ L$ M$ M$ L$ L$ L$ N$ N$ N$ N$ N$ W$ W$ W$ W$R [$ \$ ^$ _$ ]$ ]$  V$4 ^$ $ $= z4: := P4= 1^ ^= 44= execute_rzcmd4= $  $  $ $, $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $0 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ % % % % % % % % % !% !% !% % "% *% *%Y )% *%  7% 6% 7% ;% =% 2% 7%$ $= Ĭ4: := 4=  7 7= 44= dump_data4= Q% F%  F%  F%  F%  S% T% V% V% X% Y% X% \% \% ]%F ]% _% _% a% _% U%H$ $= x4: := x4=  = 4`4=geterror4=YQ & & & &8 & & & & #& 3& 5& 3& 4& 5& 4& 5& 6& 7& 8& 8& <& =& B& D& D& E&I D& D& F& F& F& J& J& J&$$ $= 4: := 4=  = @44= format_cmnd@4=]UT Q& o& {&  ~&$ $= L4v v= p44d44=  = 4`4=print_sense_key4= & & : := 4= 0 =  404=print_error_code 4=2*) & & & &N N= `4l4= P = p44= moreoutputp4=A98 & & & & & &$ $= 4: := 4= P = 4@4= confirm4={sr & & & & & & & & & &$$ $= 4: := <4=  = `44=printstr`4=1)( & & & &$ $= 4: := 4= p = 4p4= getinteger4=;32 & & & & &$$ $= 4: := ,4=  = P4(4= gethexnumP4=;32 & & & & &$$ $= 4: := 4=  = 44= rbzero4=MED & & & & & & & & &: := h4=  = p44= rz_openp4=JBA & & & & ' '$ $= 4: := 4=  = 4@4=rz_close4=7/. ' ' ' ' ' $ $= 84: := T4= Pv v= `44=rz_lseek`4= ' : := t4=   = 44= rz_read4= ' ' ' ' ' ' !' ' !' !' "' "' %' &' &' &'$ $= 4: := 4= P = 4`4=rz_write4=~ 5' 0' 0' 0' 6' 6' 6' 7' 7' 7' 7' 8' ;' >'$ $= 4: := 4= s s= 44= yesno4= D': := 4=  ` `= 44= __main84: := 4=  =  *[VDBURG.SCSI.A]RZDISK_VAX.OBJ;1+,j@./!H 4 -.0123KPWO56L7k89G!HHJ1[H$ RZDISK030.Aj@.[VDBURG.SCSI.A]RZDISK_VAX.OBJ;1"3RZDISKV1.011-NOV-1998 13:13DEC C V5.6-003RZDEVRZDISKRZCOMINFOBYTEASCCURPOS NOMORE DODUMP MASKPARAMS PAGE37_FOREIGN RDPFPDPRPVPRCPDDMSPMSMSPCMSCINQDATAPARSENSE  DEVICETYPES RZ_SENSE_KEY_STR RZ_ERROR_CODE_STR RZ_NOTREADY_STR  UNKNOWN_KEY^PNo^PYes^P ***** Bad input please enter (HEX NUMBER)? ^P%xQ^P ***** Bad input please enter (INTEGER NUMBER)? N^P%d(^P ***** Bad input please enter (y/n)? ^P%s [%c]? ^P More^PUnknown Command]PStop unit]PStart unit]PRequest sense]PWrite]PRead]PReceive diagnostic]PSend diagnostic]PRead capacity]PInquiry]PMode Select]PMode Senset]PVerify Datae]PReassign BlockT]PRead Defect DataH]PFormat Unit8]PTest Unit Ready0]P (]P%02.2x ]PSense Data: \PAdditional Sense Code (0x%x): %s. \PSense Key (0x%x): %s. \P *** Error occurred on %s during command (%s) *** \P Cannot get sense info from device (%s). R\P *** Error occurred during command (%s) *** (\P Cannot get sense info from device (%s). [P *** Error occurred during command (%s) ***  P[[Punknown codeP[[Punknown keyPZ![H[~[[[Plogical unit not ready, format in progress~[Plogical unit not ready, manual intervention requiredH[Plogical unit not ready, initializing command required![Plogical unit not ready, becoming readyZPlogical unit not ready, cause not reportablePQQQQQ+RXRtRRRRRRRRRR S#SFSkSSSSS TT8TXTnTTTTTTUU,UHUhUxUUUUVVBVCVpVVVVVVVV W0WPWcWdWeWWWWWWX(X@XXXpXXXXXXYY0Y1YDYXYhYYYYYYZZHZVZhZiZjZkZxZZZZZPillegal mode for this trackZPend of user area encountered on this trackZPscan head positioning errorxZPvideo acquisition errorkZPlamp failureVZPrpl status changeHZPlog exceptionZPoperator request or state change input (unspec)ZPupdated block readYPgeneration does not existYPunable to recover table-of-contentsYPsystem resource failureYPscsi to host system interface failurehYPmedia load/eject failedXYPcartridge faultDYPerase failure1YPwrite append errorYPoverlapped commands attemtpedXPlogical unit failed self-configurationXPdata phase errorXPcommand phase errorXPinvalid message errorXPinitiator detected error message receivedpXPscsi parity errorXXPunsuccessful soft reset@XPselect/reselect failure(XPinternal target failureXPmessage errorWPpower-on or self-test failureWPdata path failureWPram failureWPtarget operating conditions have changedWPlogical unit has not self-configured yeteWPinvalid bits in identify messagePWPmedium not present0WPsaving parameters not supported WPsequential positioning errorVProunded parameterVPribbon/ink/toner failureVPtape length errorVPno defect spare location availableVPmedium format corruptedpVPincompatible medium installedCVPtagged commands cleared by another initiatorVPoverwrite error on update in placeVPcommand sequence errorUPcopy cannot execute since host cannot disconnectUPparameters changedUPpower on, reset, or bus device reset occurredxUPnot ready to ready transitionhUPwrite protectedHUPinvalid field in parameter list,UPlogical unit not supportedUPinvalid field in cdbTPillegal function for device typeTPlogical block address out of rangeTPinvalid command operation modeTPrecovered id with ecc correctionnTPmiscompare during verify operationXTPdefect list not found8TPsynchronous data transfer errorTPparameter list length error TPdefect list errorSPrecovered data with error correction appliedSPrecovered data with retriesSPdata synchronization mark errorSPrandom positioning errorkSPrecorded entry not foundFSPaddress mark not found in data field#SPaddress mark not found in id field SPunrecovered read errorRPID CRC or ECC errorRPwrite errorRPerror log overflowRPtrack following errorRPlogical unit communication failuretRPmultiple peripheral devices selectedXRPno reference position found+RPlogical unit does not respond to selectionQPlogical unit not ready, cause not reportableQPperipheral device write faultQPno seek completeQPno index/sector signalQPno additional sense informationPPPPPPQQQ,Q8QHQXQhQpQQQQPreservedQPmiscomparepQPvolume overflowhQPequalXQPaborted commandHQPcopy aborted8QPvendor specific,QPblank checkQPdata protectQPunit attentionQPillegal requestPPhardware errorPPmedium errorPPnot readyPPrecovered errorPPno sensePP PP%s PP%cPP PP PP%02.2x PP%03.3x: PP Dump of %s data: lPP Byte %d 0x%x jPP TPP Page length %d APP Page code %d 4PP PS %d  PP Page %d - unknown or unsupported page: OP Staggered spinup delay %4.1f OP Enable staggered spinup %s OP Spinup on power up %s OP Staggered spinup delay 0x%x iOP Enable staggered spinup 0x%x LOP Spinup on power up 0x%x 7OP Page length %d $OP Page code %d OP PS %d NP Page 37 - DEC unique parameters: NP Pages notched [2] %08.8x NP Pages notched [1] %08.8x NP Ending boundary %d NP Starting boundary %d pNP Active notch %d NNP Maximum number of notches %d 0NP Logical/Physical notch %x NP Notched drive %x MP Pages notched [2] 0x%08.8x MP Pages notched [1] 0x%08.8x MP Ending boundary 0x%x MP Starting boundary 0x%x MP Active notch 0x%x `MP Maximum number of notches 0x%x @MP Logical/Physical notch 0x%x %MP Notched drive 0x%x MP Page length %d LP Page code %d LP PS %d LP Page 12 - notch and partition page: LP Medium type 4 supported %d LP Medium type 3 supported %d lLP Medium type 2 supported %d MLP Medium type 1 supported %d ,LP Medium type 4 supported 0x%d  LP Medium type 3 supported 0x%d KP Medium type 2 supported 0x%d KP Medium type 1 supported 0x%d KP Page length %d KP Page code %d KP PS %d kKP Page 11 - medium types supported page: LKP Read AEN holdoff period %d  KP Enable extended contingent allegiance %x KP Ready AEN permission %x JP Unit attention AEN permission %x JP Error AEN permission %x JP Queue algorithm %x JP Queue error management %x lJP Disable queueing %x GJP Report log exception condition %x &JP Read AEN holdoff period 0x%x IP Enable extended contingent allegiance 0x%x IP Ready AEN permission 0x%x IP Unit attention AEN permission 0x%x IP Error AEN permission 0x%x xIP Queue algorithm 0x%x XIP Queue error management 0x%x 7IP Disable queueing 0x%x IP Report log exception condition 0x%x HP Page length %d HP Page code %d HP PS %d HP Page 10 - control mode page: HP Interface identifier %02.2x xHP Interface identifier 0x%02.2x cHP Page length %d PHP Page code %d CHP PS %d  HP Page 9 - peripheral device page: HP Maximum prefetch ceiling %d GP Maximum prefetch %d GP Minimum prefetch %d GP Disable prefetch transfer length %d GP Demand read retention priority %d `GP Write retention priority %d >GP Write cache enable bit %x  GP Multiple selection bit %x GP Read cache disable bit %x FP Maximum prefetch ceiling 0x%x FP Maximum prefetch 0x%x FP Minimum prefetch 0x%x F2G5D$ RZDISK030.Aj@.[VDBURG.SCSI.A]RZDISK_VAX.OBJ;1<"P Disable prefetch transfer length 0x%x ZFP Demand read retention priority 0x%x 8FP Write retention priority 0x%x FP Write cache enable bit 0x%x EP Multiple selection bit 0x%x EP Read cache disable bit 0x%x EP Page length %d EP Page code %d EP PS %d ~EP Page 8 - caching parameters: \EP Verify recovery time limit %d >EP Verify correction span %d "EP Verify retry count %d EP Enable early recovery %x DP Post error %x DP Disable transfer on error %x DP Disable correction %x DP Verify recovery time limit 0x%x pDP Verify correction span 0x%x PDP Verify retry count 0x%x 0DP Enable early recovery 0x%x DP Post error 0x%x CP Disable transfer on error 0x%x CP Disable correction 0x%x CP Page length %d CP Page code %d CP PS %d }CP Page 7 - verify error recovery page: `CP Medium rotation rate %d GCP Pin 4 definition %d .CP Pin 1 definition %d CP Pin 34 definition %d BP Pin 2 definition %d BP Head unload delay %d BP Head load delay %d BP Write precompensation level %d |BP Step pulses per cylinder (SPC) %d bBP True ready (TRDY) %d ABP Start sector number (SSN) %d *BP Motor on (MO) %d (BP BP Motor off delay %d AP Motor on delay %d AP Head settle delay %d AP Drive step pulse width %d AP Drive step rate %d }AP Starting reduced write current cyl %d TAP Starting write precompensation cyl %d 8AP Number of Cylinders %d AP Data bytes per physical sector %d @P Sectors per track %d @P Number of heads %d @P Transfer rate %d @P Medium rotation rate 0x%x @P Pin 4 definition 0x%x p@P Pin 1 definition 0x%x T@P Pin 34 definition 0x%x 8@P Pin 2 definition 0x%x @P Head unload delay 0x%x @P Head load delay 0x%x ?P Write precompensation level 0x%x ?P Step pulses per cylinder (SPC) 0x%x ?P True ready (TRDY) 0x%x s?P Start sector number (SSN) 0x%x Z?P Motor on (MO) 0x%x X?P >?P Motor off delay 0x%x $?P Motor on delay 0x%x ?P Head settle delay 0x%x >P Drive step pulse width 0x%x >P Drive step rate 0x%x >P Starting reduced write current cyl 0x%x v>P Starting write precompensation cyl 0x%x X>P Number of Cylinders 0x%x 0>P Data bytes per physical sector 0x%x >P Sectors per track 0x%x =P Number of heads 0x%x =P Transfer rate 0x%x =P Page length %d =P Page code %d =P PS %d ~=P Page 5 - flexible disk drive parameters: `=P Landing zone cylinder %d H=P Drive step rate %d %=P Reduced write current start %d =P Write precompensation start %d 

PYou cannot test or format a disk that's mounted!  PThe device (%s) is mounted! PdPDone verifying device (%s). Pread error onP Verify failed: %s head %d cylinder %d. PCannot reopen floppy drive (%s). P Verifying format of device (%s). bPDone formatting device (%s). HP Formatting device (%s). PCannot format %s - flexible disk page not changeable. P Ready to begin formatP Insert a%sdiskette into the drive. P P Double Sided SD P Single Sided SD P Double Sided DD P Double Sided HD xP Double Sided ED jP Are you sure@Psee rzdisk(8) reference page for deta4K%R$ RZDISK030.Aj@.[VDBURG.SCSI.A]RZDISK_VAX.OBJ;1# #C=GuQ?3@ ɟ %CvV{{`}9 j!CpKPjnժÉ8LQU׃mOu~ަ"@V'.:xn:,Q`27L9xnvCoL^= f?.=3pWI{.}Þ,JӂaP傱YKۓr럣sXuXQᴭ}|aT/H8˗i Z?RL5JgKgʱKYy{nmdH-dl( 'yt)iߎh qZd,b-G6Sw4+S#m:|dӬ TCdlQhIS|,| Y (ũUR"]kBfw+Y:_a7Ps܇xyԝ*o9Cm+^勠rG8N˗ ! {δaIעKjds.!I+غVbҰ?5 0 Qxkc> E !R*xlY.R \ TFEG]J|2ʅ ;oA$dC$|Gl Z7u8JU h2t_[h`E(וf\B!U+{dv/-}:q(HhRϾњ9'V LCkgU cUn,yV7˭.?v}!oy<Y9y):BQ~o?Gc"r4C^^10szo;]޾ qU5g Ŗ b*LC!2 13**잖|"U XtK8I`=5`q{5z @9)Bصץt9HpNݿI'ZcB| Pw·S dGUQ}%7E!SM7 `Ǣq}s=meĵMlD4aΕ~F( 7a7_!WcxhֵX{bRYwb2.zy`_)AE/pTd|:F]8!ۼTX6E9Ko@Rb/uʇ\wƂ&j+ o#Xw\ԳzI@,!BWI?+Kƞ&%*Y%v^&v@y66zM^6nYW=*J(?AEh!FKkwt!x2ؤٔyD/$ H782!((m1_O 9 ݾ4 %g$״v&B+P%+LEd٫I3o {N>HdXcM,ù{x'$*,]4 [ Tݭ;AT>Yƾ:aZM'{~bMr09+gy[GlçBSOIh1݋$o:VPLe/ )- b{uv~_W,yuB (7Ӆ|4I)JP/ *oߡ<8ɳU!t~-g[3i8DxyЅ]TN%IBJ$)b^(DdVIZ2WKr ~532AA4QK- agBkfJ\/9_[]h#5ٔV2ωDZզӚo,Ku~i/t5!LZF%\kD&)N8#0qʑU(fVH}1\p`9Tya{WڟyCGcD\ ƹ>%LmNM!WTr k-gl?@zA Ng;a_ܻu߼JK yS#WN@(NI\ ǚB9NON@mArҖ(ÎD]zlѮ7~= ІH%GMM2."J'\?4J2̯V&6iɾ&:y!(հ2gW؂qG+ypNbc_c;`}뗫 E}u1bhkt%&[t&U% UhsRMa^EAŒ'hBer4qȗtm8^f%g:7s; c"4Rdƚu=N Hsr mpNչwK=BsFqC!6R[ohcSB&+2M3]V- ^􋤏m9 [5HI*&'vNȼ; ;)hxZ,tTb~~7f#qwuIݬCY`FDF;C!';r$Ӷ׮*} W_tri‹Vܵ6丵O˰Xb%5֭%7} 󪸷w2\"c]&?P^FVɱ/< [U\صk4FzmԪ9Il ʉWt _{ 'DysZӘWE=86Q Q%gzg-<sa*wTK(iEFy6k[>> wԴԬʞxvzJnA OSJ)" CoL7 3[xn?y$_)8 bR;Ϫ92&mMTzVtj ݄_kȄw.E""vhHt +y,7-ٕ컫f)X"v4Kg`z֚41Jh"=^ ` "0- 8Cj4ͻ} ywi pɅdE!`REVm&MI-cX`93)/EZ\uI g;ݸ S@kC~.v36Ṗh"i_\K$KC)JӋ[AoJZۚ `?!D% w|/+ÒvSӑ!0W(*Lq͜Mpm-J8!iFK~ LfJvoJ 3xs`@: uFQ }MXK \"^*B?DlLO#|}5P㬷G{ Le5|G%r7sGf`B [6Z 5N#XzI9}{ >.wd[NlTᇠ=3LySI ״7oj4< h3p;X:3d{]0/iFvw4 nQ(!7FGsŇՀ/d|k<i#X6$ e/"+yM@1ÑRLg`V$BjN+ٔ:QYF xKj3`*hFP-Es䞌}h>Žw8>:nP%l'߫bkf : 9yZ#ϥ8dG#LrXwbZyUtݎ)r!_( $Ru µ"mb5\6"~"0T9k cq8 E/Zd֥QZ-X7t]jyVtxr)4%EIYU`QNכ}ŀ|'LTchLKY˘)vNuvl Jlv&[\5E%; &^n-bĵw`2̠&S;$DyՕ F l-B(O\(r}^\̕1*TٙBx)MDN\HGӓUh:pu qQm92&+,1ℼvri k+D5\1j`gd f`GG\Vsh =*kɀm"|߈T=xBc32+g)sJ МtE${0N)نW8{ %N#tGU2aw=t+%&ۋ:טk%?ӭ|ͳcXb{ao 4~yvR[=EqϾ/<P ۞]V[\E6幞ͱ$9~8_%&n_$kDiz*J*bLE+N(3U ]^|GpZcGdaJ G⥁48tZB hnJϬ{fj-{ʟ1XDd8˹)0Et+DȚq#cSGsMocӵȜ=9E*EQ_^ZSPƙrQic@9u*RKY]} g[[{54[+^Z@1cmG p9@'@0Ɉ=EAٸE7$MjFg򢽈.pKPn=Z2t5vV~a*ivo ^&>Y mIt7>'gKf$r)BwĹt(~Rͭ4Zߺ:4_'/ [>{ -^[(;e!O?ݿP6X1-w4JLpd@$@0ܽ4j R?vɢrkT)f-9J'b+i\}ⵛIpKTI]Py3aЭ?3i0xO]O_6;UVY*3aR;'OBA0¾%^UhT)U427c}7e|<7z[P\,4bU5[eɠd*,(GqiPHB&DN p=Qr34†), ?.20@zC7%xo1lBO( _M2O| ǂeOa]"g/M3KQzZV3Mfg61N&^NX{|wMK2 Q7O˖ __U I1PUY?A^ܰI+?:Xӟ: sdN>(KK8 Cm7$0vf#4sux9^='RV9c ?P#/A=́ahjδSնb$6Q1U\WL#=Yd.aeMF@߽؈k5/&$Nm&KȧD 6R7x=+ O_0E 4FZ4өoC;ًOKV2 "gAN6Qθ# k=,„ [ ,;Ogٌ[fg7eX 9p*N?TwF+VU8.2l+p TDyt<1c@ڞ,bl8$ׯ=+xoNo~?acm8O~)O55T6$ RZDISK030.Aj@.[VDBURG.SCSI.A]RZDISK_VAX.OBJ;1"4ils.(P RESTRICTED FORMAT: %s  P Invalid format type ( to abort)  PTransfer rate (kbit/second)?  PNumber of step pulses per cylinder?  PNumber of Cylinders?  PNumber of heads? q P Number of sectors per track? b P Format Type: ? P %d - CANCEL FORMAT OPERATION  P( you supply format parameters ) P %d - OTHER FORMAT TYPE %s  P( 9 sector, 40 cylinder, 2 head) P %d - 360KB 5.25" SD DISKETTE %s  P(10 sector, 80 cylinder, 1 head)g P %d - 400KB 5.25" SD DISKETTE %s F P( 9 sector, 80 cylinder, 2 head) P %d - 720KB 5.25" DD DISKETTE %s  P(15 sector, 80 cylinder, 2 head) P %d - 1.2MB 5.25" HD DISKETTE %s  P( 9 sector, 80 cylinder, 2 head) P %d - 720KB 3.5" DD DISKETTE %s n P(18 sector, 80 cylinder, 2 head)H P %d - 1.44MB 3.5" HD DISKETTE %s & P(36 sector, 80 cylinder, 2 head) P %d - 2.88MB 3.5" ED DISKETTE %s  P Please enter one of the following format options:  PFormatting will destroy all data on diskette (%s)! d PCannot format %s - not a floppy disk (no page 5).  PStarted formatting device (%s). Use "rzdisk -y" to check progress.  P Formatting device (%s).  PAre you sure PFormatting will destroy all data on disk (%s)!  PCannot format %s - not a direct access device. r P -h Prints out this help menu. L P -y report whether device is ready & P -w spin down a device (stop unit)  P -u spin up a device (start unit) P -n Disable pagination of output. P -m (may precede -c option) masks parameters with changeable values. XP -b (may precede -c or -g option) treat page 37 as foreign. P -q (may precede any option) dumps data to/from device. P -t full device Full test of device. P -t device Test of device. P -p device Gets the disk capacity. xP -g changeable device Gets CHANGEABLE disk drive parameters. @P -g default device Gets DEFAULT disk drive parameters. P -g saved device Gets SAVED disk drive parameters. P -g current device Gets CURRENT disk drive parameters. P -c ask device Changes disk parameters interactively. `P -c device Changes disk parameters to DEFAULT VALUES. *P -d block device Reads defect list in BLOCK format. P -d sector device Reads defect list in SECTOR format. P -d bfi device Reads defect list in BFI format. P -i device Prints out the inquiry data info. XP -s 0 -1 device Scans the entire disk for bad blocks. (P -r 1234 device Reassigns bad block (1234). P -f device Formats a floppy diskette. P -f known device Formats disk with all KNOWN defects. P -f vendor device Formats disk with VENDOR only defects. ~POptions: 0P Usage: rzdisk [-q] [-m] [-b] -cdfghiprstuwy [LBN|command] [length] device  P ******************************** P **** SCSI Disk Utility Menu **** P ******************************** P P Device %s is being formatted: %d%% complete. `P Device %s is not ready. I will spin it up... 8P SCSI device (%s) not ready, exiting. P Cannot open SCSI device (%s) exiting.  PPBad option (-%c), type "rzdisk -h" for help PUsage: rzdisk -d (bfi|sector|block) device PblockPsectorPbfilPUsage: rzdisk -d (bfi|sector|block) device. HPUsage: rzdisk -s LBN length device (PUsage: rzdisk -r LBN device PUsage: rzdisk -t (full) device PfullPUsage: rzdisk -t (full) device PUsage: rzdisk -f (vendor|known) device PknownPvendorPUsage: rzdisk -f (vendor|known) device CPUsage: rzdisk -g (current|saved|default|changeable) device. 8Pchangeable0Pdefault(Psaved PcurrentPUsage: rzdisk -g (current|saved|default|changeable) device PUsage: rzdisk -c (ask) device PaskPUsage: rzdisk -p device PUsage: rzdisk -w device vP Device %s is ready. ]PUsage: rzdisk -y device DPUsage: rzdisk -i device 2PUsage: rzdisk -h PNo option specified, type  UNKNOWN_CODEDECC$$GL___CTYPEADECC$$GA___CTYPET DECC$EXIT SYS$DASSGN SYS$ASSIGN DECC$WRITE DECC$READ DECC$ISPRINT FORMAT_CMNDSYS$EXIT DUMP_DATASYS$QIOW PRINT_DEFECTS DECC$MALLOCCONFIRMGETERROR EXECUTE_RZCMD LIB$SIGNAL LIB$GETDVI READ_DEFECTSSCAN_FOR_BAD_BLOCKSREASSIGN_BAD_BLOCK DECC$ATOI ISINTEGER TEST_DEVICE FORMAT_A_DISKFORMAT_A_FLOPPY"rzdisk -h" for help. P(P4^DECC$MAIN_ARGST4^TԮn׬ PRINT_HELP DECC$EXIT    Ԯ( DECC$DPRINTFX DECC$EXITZOPEN_SPECIAL_FILE[ EXECUTE_RZCMDW DECC$SLEEPY DECC$STRCMP,CHANGE_DRIVE_PARAMETERS TEST_DEVICE ISINTEGER DECC$ATOI̮ЬRb$bRR$bPP- dhj$PPbP1{P?P ֮(׬1p ֮(׬1` ֮(׬1P ֮(׬1@Ѭ 2hj PRINT_HELP1%Ѭ DhjݼkGET_INQUIRY_INFO1PѬ ]hjЬRbk RZ_TEST_READYP1bvh1Ѭ Čhjݼk$PPu5 gR|~gP1iRR<1y g1nP1iP|~gP1XiRR<1I g1>P19Ѭ ĥhjݼk GET_CAPACITY1ѬѬѬݼ4P hjѬЬRݢk1ݼk1PѬ hj ЬRb4PԮ KP(b4P 40b4P  ϟ8b4P  ChjЬRݢkݮ GET_DRIVE_PARAMETERS1+PѬݼkFORMAT_A_FLOPPY1Ѭ ĀhjĨЬRb4PԮ#Pİb4P ĸhjЬRݢkݮ FORMAT_A_DISK1PSѬݼkS 1PѬ hjݼ4PSPhjЬRݢkS 1CPѬ ݼP (hjЬRb PSݢkSREASSIGN_BAD_BLOCK1PѬЬRbP ݢP HhjЬRb PVݢ PUݢkѬ<0uS ݢ  PSSUVSCAN_FOR_BAD_BLOCKS1PѬ lhjĜЬRb4P6PĠb4P Ĩb4P İhjЬRݢk~ READ_DEFECTSP$~hjЮ(R׮(R1ծ n DECC$EXITnP<$^UT}!eݬ DECC$STRLEN}PЬ?ޟ  LIB$GETDVIPRP RR LIB$SIGNAL2P@eeSS DECC$STRLEN}PS|~?ܟ SYS$ASSIGNPR PRR2RPPe DECC$DPRINTF DECC$EXITլ% RZ_TEST_READYPRPe8 DECC$DPRINTFR DECC$EXITP ^լ6  EXECUTE_RZCMDR|~ EXECUTE_RZCMDPS$P DECC$SLEEPRR<S  EXECUTE_RZCMDSSPP<^TU|~ EXECUTE_RZCMDP1GETERRORGET_INQUIRY_INFOP1PPPPi PP` RRRRլM` DECC$DPRINTF DECC$SLEEP  EXECUTE_RZCMDR|~ EXECUTE_RZCMDPS1 DECC$SLEEPRR<܋PPPPZ PPGET_DRIVE_PARAMETERSCHANGE_DRIVE_PARAMETERS GET_CAPACITY RZ_TEST_READYGET_INQUIRY_INFOOPEN_SPECIAL_FILE DECC$EXIT PRINT_HELP DECC$STRLEN DECC$STRNCMP DECC$STRCMP DECC$STRCPY DECC$STRCAT DECC$TOLOWER DECC$SLEEP DECC$GETCHAR DECC$DSPRINTF DECC$DSCANF DECC$DPRINTF __MAIN (MAIN <OPEN_SPECIAL_FILE  START_STOP_UNIT < RZ_TEST_READY H ISINTEGERQ PPHPxPRPPRďdRQRPЏR RP QP{RPQPQŐ DECC$DPRINTF<SSSPPP-P+֬P1PPP0P9PP-P+֬PQ PQQPP^\̿ DECC$DPRINTFRbbb b0b~b̊bbb(bXb̐bbb*b`b̘bbb@bxb̶bbbbXb̖bb b& bL br b^UVWTPGET_INQUIRY_INFOPgĘ  DECC$DPRINTFg DECC$STRLENPg|~߭쟭 LIB$GETDVIխ%g  DECC$DPRINTFRb>bpbRPRR1g  DECC$DPRINTF CONFIRMP{eS<RPR P@cPPRf @eg  DECC$DPRINTFf EXECUTE_RZCMDP GETERRORP g  DECC$DPRINTF ^T DECC$STRLENP|~t LIB$GETDVIPpt( 6MA$ RZDISK030.Aj@.[VDBURG.SCSI.A]RZDISK_VAX.OBJ;1N"E DECC$DPRINTFRb>bpbԭխ1  EXECUTE_RZCMDPd  DECC$DPRINTFP  DECC$DPRINTF DECC$DPRINTFRb&  bn H bĶ Đ b  bF  bĎ g b į b  b ? bb RR DECC$STRLENPR DECC$WRITE߭N^ DECC$DSCANFP8 DECC$GETCHARP  DECC$GETCHARP Q^RR DECC$STRLENPR DECC$WRITEP DECC$GETCHARP  DECC$GETCHARP ЭЭSSPP P1P6?P$[<XPY<Z1y[<XPY<Z1] [<XPYZ1BP[<XPY<Z1% [<XPYZ1 P [<XPYZ1P [<X(YZ1Pq ݭ DECC$STRLENPݭ DECC$WRITE߭N^ DECC$DSCANFP8 DECC$GETCHARP  DECC$GETCHARP Q^ݭ DECC$STRLENPݭ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ЭЭ[<XĐ ݭ DECC$STRLENPݭ DECC$WRITE߭N^ DECC$DSCANFP: DECC$GETCHARP P DECC$GETCHARP Q^ݭ DECC$STRLENPݭ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ЭЭȮĢ RR DECC$STRLENPR DECC$WRITE߭N^ DECC$DSCANFP9 DECC$GETCHARP   DECC$GETCHARP Q^RR DECC$STRLENPR DECC$WRITEP DECC$GETCHARP  DECC$GETCHARP ЭЭĮĸ ݭ DECC$STRLENPݭ- DECC$WRITE߭N^ DECC$DSCANFP: DECC$GETCHARP P DECC$GETCHARP Q^ݭ DECC$STRLENPݭ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ЭЭY ݭ DECC$STRLENPݭ DECC$WRITE߭N^ DECC$DSCANFP; DECC$GETCHARP P DECC$GETCHARP Q^ݭ DECC$STRLENPݭ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ЭЭZP  DECC$DPRINTF1BPSSS SS#@( DECC$DPRINTFjCONFIRMP1SS ĊR4PSS ĜR PSĮRSRRR DECC$DPRINTFCONFIRMP11nlURUlSBcRRU EXECUTE_RZCMDPGETERRORP1hURUhSBcRRU EXECUTE_RZCMDPGETERRORP1uWWVVSSWRRV uSpRSRRRSRRRSRRRSRRRSRRRSRRRSRRRSRRWUVex[RʏRR ˏ[RR xXRʏRR ˏXRR WVЭRRSRSR"PWRWb\P\\\P\\bS\S\SSRRSS EXECUTE_RZCMDPGETERRORP1dRdSBcRR EXECUTE_RZCMDPGETERRORP1\R\SBcRR EXECUTE_RZCMDPGETERRORP15WWVVSSWRRVSpRSRRRSRRRSRRRSRRRSRRRSRRRSRRRSRRWUVexZRʏRRˏZRR[xXRʏRRˏXRRxRʏRRˏRR YWVЭRR1SRSR"PWRWb\P\\\P\\bS\S\SSRRSS EXECUTE_RZCMDP$GETERRORP1 DECC$DPRINTFPnH DECC$DPRINTF EXECUTE_RZCMDP%GETERRORPRR1n1n1Pb DECC$DPRINTFĀ DECC$DPRINTF2T2T~ SYS$DASSGNPPP PԭԞLL DECC$STRLEN}iPL|~?, SYS$ASSIGNPHP.2,D,..2.RRĤ DECC$DPRINTFPx [VV DECC$MALLOCPU28Wծ1[ EXECUTE_RZCMDZGETERRORY DECC$DPRINTFXU1Rծ1PU12[|VSx Q\QxPL`\\Q|SjP8iP)\\\\ \\\\P\PS\\VRWhURR1?WW1 U DECC$DPRINTFP ^SRc DECC$STRLENPc|~߭쟭 LIB$GETDVIխ&c  DECC$DPRINTF\l>lpl\P\\PP^UWXZ[GET_INQUIRY_INFOʢ DECC$STRNCMPRbP ʨbPʭbPʲ DECC$DPRINTFQ<PRP BaRRPx n[R[R1ǏYYԞT<VgS RPR P@cPPRTgVg EXECUTE_RZCMDP4GETERRORP!PPPP PPPP PPVPP PԮP[P[P1\ծAݬ DECC$DPRINTFRbb)bRbʀbʘCONFIRMP1MQPRP PBaRRPЬSxSRʏRRxSRʏRRxSRʏRRˏSRRԮݬʯ DECC$DPRINTF EXECUTE_RZCMDPGETERRORP1nRǏRמ[<YgV TST CfSST[gYg EXECUTE_RZCMDPGETERRORPRYRR DECC$DPRINTF֮Ѯ1Kծ  DECC$DPRINTFP6 DECC$DPRINTF^YZVT DECC$STRLENPfUSRS PBeRRSj k EXECUTE_RZCMDP GETERRORPSRxRRRSRxRRRSjRxRRRSSUլѬU)ݬd DECC$DPRINTFUĐ DECC$DPRINTFЬSS ìU7PSRRU*SĽ DECC$DPRINTFU DECC$DPRINTFP" DECC$DPRINTFRRRݬL DECC$DPRINTFլ1ެ nо[ DECC$DPRINTFWЬSSfzSP{[PQPPUЬPP[URRRPSRPPPPS<RfRRRfugf EXECUTE_RZCMDP1#GETERRORPUXU1Uy}RR ĎgYR įgKPRPPe @  S"PP RR BS@SSgXgtUk gNPPe @  S"PP RR BS@SS(gXHgU<RfRXRRRXf1լ1lX DECC$DPRINTFP^U VWTGET_INQUIRY_INFOć DECC$STRNCMPPČ DECC$STRNCMPPPgđ DECC$DPRINTFPļ DECC$STRNCMPRbP bPbPg DECC$DPRINTFPS<RPR P@cPPRfg DECC$DPRINTFf EXECUTE_RZCMDP GETERRORP PRINT_DEFECTS^S ZT  DECC$DPRINTFUeRR~8eHe M DECC$DPRINTFRRPP PI?PX DECC$DPRINTF>P` DECC$DPRINTF.Pi DECC$DPRINTFPr DECC$DPRINTFPĀ DECC$DPRINTFŚ\ʏ\RxRRʏR\RXRX\X\\XĈ DECC$DPRINTFURVUX1 DECC$DPRINTFW\\PP P1?PB\l\x\PʏPB\l\x\\ʏ\\PB\l\x\\ʏ\\PB\l\ʏ\\P~ĸgU1M~B\l\x\QʏQ~B\l\x\\ʏ\\Q~B\l\ʏ\\Q~B\l\x\PʏP~B \l\x\\ʏ\\P~B \l\x\\ʏ\\P~B \l\ʏ\\P~~B\l~QgU1~B\l\x\QʏQ~B\l\x\\ʏ\\Q~B\l\ʏ\\Q~B\l\x\PʏP~B \l\x\\ʏ\\P~B \l\x\\Ǐ\\P~B \l\ʏ\\P~~B\l~QgUPRVV)VUX"j^CONFIRMPYPYYUX1^[WGET_INQUIRY_INFOլ1  DECC$DPRINTF?CONFIRMP1*=RSBcRR?k EXECUTE_RZCMDPGETERRORP1 DECC$GETCHARP P DECC$GETCHARP Q^`` DECC$STRLENP` DECC$WRITE DECC$GETCHARP  DECC$GETCHARP dllR1XX DECC$STRLENPX DECC$WRITETN^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^PP DECC$STRLENPP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP T\\R1HH DECC$STRLENPH DECC$WRITEDN^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^@@ DECC$STRLENP@ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP DLL< R1,,88 DECC$STRLENP8 DECC$WRITE4N^ DECC$DSCANFP>F DECC$GETCHARP P DECC$GETCHARP Q^00 DECC$STRLENP0 DECC$WRITE DECC$GETCHARP  DECC$GETCHARP 4<< 13,ЮTЮVP DECC$DPRINTFUedRR|edRR~lje~ǜe~Dze~eRxRSRRS~eRxRSRRS~eRxRS RRS~"e=CONFIRMP1+R1l(( DECC$STRLENP( DECC$WRITE$N^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^  DECC$STRLENP  DECC$WRITE DECC$GETCHARP  DECC$GETCHARP $,,R1ǐ DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP R R1ǰ DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP< DECC$GETCHARP  DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP  SxSRʏRRˏSRRR R1 DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP SxSRʏRRˏSRRR R1( DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP=T DECC$GETCHARP   DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP SxSRʏRRˏSRR 1(ЮTЮV DECC$DPRINTFUedRRRedRR~_e~reRxRSRRS~LjeRxRSRRS~ǠeRxRSRRS~eRxRS RRS~e RxRS RRS~e RxRS RRS~ eRxRSRRS~DeRxRSRRS~XeRxRSRRS~leǃCONFIRMP1&R R1Ǹ DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP< DECC$GETCHARP  DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP SxSRʏRRˏSRRR R1 DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP   DECC$GETCHARP SxSRʏRRˏSRRR R1͸͸ DECC$STRLENP͸ DECC$WRITEʹN^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^ͰͰ DECC$STRLENPͰ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ʹͼͼSxSRʏRRˏSRRR R10ͨͨ DECC$STRLENPͨ DECC$WRITEͤN^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^͠͠ DECC$STRLENP͠ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ͤͬͬSxSRʏRRˏSRR R R1\͘͘ DECC$STRLENP͘ DECC$WRITE͔N^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^͐͐ DECC$STRLENP͐ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ͔͜͜SxSRʏRR ˏSRR R R1~͈͈ DECC$STRLENP͈ DECC$WRITË́N^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^̀̀ DECC$STRLENP̀ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ̈́͌͌SxSRʏRR ˏSRR R R1Ǡxx DECC$STRLENPx DECC$WRITEtN^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^pp DECC$STRLENPp DECC$WRITE DECC$GETCHARP  DECC$GETCHARP t||SxSRʏRRˏSRRR R1hh  DECC$STRLENPh DECC$WRITEdN^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^`` DECC$STRLENP` DECC$WRITE DECC$GETCHARP  DECC$GETCHARP dllSxSRʏRRˏSRRR R1 XX DECC$STRLENPX DECC$WRITETN^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^PP DECC$STRLENPP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP T\\SxSRʏRRˏSRR1 ЮTЮU DECC$DPRINTFVfdRR- fdRR~: f~M f8]$ RZDISK030.Aj@.[VDBURG.SCSI.A]RZDISK_VAX.OBJ;1"gRxRSRxRRRSRRS~b f~Dž fRxRSRxRRRSRRS~Ǥ f RxRS RxRRRS RRS~ f RxRS RRS~ fRxRSRxRRRSRRS~!f&!CONFIRMP1#RR R1X!HH DECC$STRLENPH DECC$WRITEDN^ DECC$DSCANFP? DECC$GETCHARP P DECC$GETCHARP Q^@@ DECC$STRLENP@ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP DLLSxSRʏRRxSRʏRRˏSRRR1x!88 DECC$STRLENP8 DECC$WRITE4N^ DECC$DSCANFP? DECC$GETCHARP P DECC$GETCHARP Q^00 DECC$STRLENP0 DECC$WRITE DECC$GETCHARP  DECC$GETCHARP 4<<RR R1ǘ!(( DECC$STRLENP( DECC$WRITE$N^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^  DECC$STRLENP  DECC$WRITE DECC$GETCHARP  DECC$GETCHARP $,,SxSRʏRRxSRʏRRˏSRR R R R1! DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP? DECC$GETCHARP P DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP SxSRʏRR xSRʏRR ˏSRR R R1! DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP  SxSRʏRR ˏSRR R R1," DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP SxSRʏRRˏSRR1xЮUЮV&" DECC$DPRINTFTdeRRQ"deRR~^"d~q"dRxRSRRS~dž"d~Ǡ"d~Ǹ"dRxRSRRS~"dRxRS RRS~"d RxRS RRS~#d RxRS RRS~=#dRxRSRRS~h#d~ǀ#dRxRSRRS~Ǟ#d~Ǹ#d~#d ^CONFIRMP Pԭխ1# DECC$DPRINTFTdRR#dRR$dRR"$dRR~<$d~a$d~Lj$d~Ǡ$dRR~$dRR$dRR~$dRR%dRxRSRRS~ %d=%CONFIRMP1_R R1l% DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP SxSRʏRRʏSSR1Lj% DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP< DECC$GETCHARP   DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ˏRRR1Ǥ% DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ˏRRR R1%͸͸ DECC$STRLENP͸ DECC$WRITEʹN^ DECC$DSCANFP< DECC$GETCHARP  DECC$GETCHARP Q^ͰͰ DECC$STRLENPͰ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ʹͼͼSxSRʏRRʏSS R R1%ͨͨ DECC$STRLENPͨ DECC$WRITEͤN^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^͠͠ DECC$STRLENP͠ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ͤͬͬSxSRʏRRʏSS R R1&͘͘D DECC$STRLENP͘ DECC$WRITE͔N^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^͐͐ DECC$STRLENP͐ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ͔͜͜SxSRʏRR ʏSS R R1<&͈͈ DECC$STRLENP͈ DECC$WRITË́N^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^̀̀ DECC$STRLENP̀ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ̈́͌͌SxSRʏRR ʏSS R R1h&xx DECC$STRLENPx DECC$WRITEtN^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^pp DECC$STRLENPp DECC$WRITE DECC$GETCHARP  DECC$GETCHARP t||SxSRʏRRʏSSR1DŽ&hh DECC$STRLENPh DECC$WRITEdN^ DECC$DSCANFP< DECC$GETCHARP  DECC$GETCHARP Q^`` DECC$STRLENP` DECC$WRITE DECC$GETCHARP  DECC$GETCHARP dlˏlRRR R1Ǩ&XX DECC$STRLENPX DECC$WRITETN^ DECC$DSCANFP< DECC$GETCHARP  DECC$GETCHARP Q^PP DECC$STRLENPP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP T\\SxSRʏRRʏSSR1&HH DECC$STRLENPH DECC$WRITEDN^ DECC$DSCANFP< DECC$GETCHARP  DECC$GETCHARP Q^@@ DECC$STRLENP@ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP DLˏLRRR1&88 DECC$STRLENP8 DECC$WRITE4N^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^00 DECC$STRLENP0 DECC$WRITE DECC$GETCHARP  DECC$GETCHARP 4<ˏ DECC$GETCHARP P DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ˏRRR1ǘ' DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP< DECC$GETCHARP  DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ˏRRR1' DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ˏRRR1' DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ˏRRR1'SS DECC$STRLENPS DECC$WRITE͸N^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^ʹʹ DECC$STRLENPʹ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ͸ͼˏͼRRR1(ͬͬ DECC$STRLENPͬP DECC$WRITEͨN^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^ͤͤ DECC$STRLENPͤ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ͨͰˏͰRRR16(͜͜ DECC$STRLENP͜ DECC$WRITE͘N^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^͔͔ DECC$STRLENP͔ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP ͘͠ˏ͠RRR1S(͌͌ DECC$STRLENP͌ DECC$WRITE͈N^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^̈́̈́ DECC$STRLENP̈́ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP 9_$ RZDISK030.Aj@.[VDBURG.SCSI.A]RZDISK_VAX.OBJ;1"x͈͐ˏ͐RRR R1p(|| DECC$STRLENP| DECC$WRITExN^ DECC$DSCANFP> DECC$GETCHARP P DECC$GETCHARP Q^tt DECC$STRLENPt DECC$WRITE DECC$GETCHARP  DECC$GETCHARP x̀̀SxSRʏRRʏSS1PЮTЮVǑ( DECC$DPRINTFUedRRǰ(edRR~ǽ(e~(eRR~(eRR)eRR()eRR~H)eRRh)eRxRSRRS~Ǎ)eRxRSRRS~Ǵ)eRxRS RRS~)e RxRS RRS~)e*CONFIRMP18*CONFIRMPX*CONFIRMPw*CONFIRMPR1ǘ*ll DECC$STRLENPl DECC$WRITEhN^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^dd DECC$STRLENPd DECC$WRITE DECC$GETCHARP  DECC$GETCHARP hppRRR1ǽ*\\ DECC$STRLENP\ DECC$WRITEXN^ DECC$DSCANFP? DECC$GETCHARP P DECC$GETCHARP Q^TT DECC$STRLENPT DECC$WRITE DECC$GETCHARP  DECC$GETCHARP X``RRR R1*LL DECC$STRLENPL DECC$WRITEHN^ DECC$DSCANFP? DECC$GETCHARP P DECC$GETCHARP Q^DD DECC$STRLENPD DECC$WRITE DECC$GETCHARP  DECC$GETCHARP HPPSxSRʏRRˏSRRR R1+<< DECC$STRLENP< DECC$WRITE8N^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^44 DECC$STRLENP4 DECC$WRITE DECC$GETCHARP  DECC$GETCHARP 8@@SxSRʏRRˏSRRR R18+,, DECC$STRLENP, DECC$WRITE(N^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^$$ DECC$STRLENP$ DECC$WRITE DECC$GETCHARP  DECC$GETCHARP (00SxSRʏRRˏSRR R R1X+ DECC$STRLENP DECC$WRITEN^ DECC$DSCANFP= DECC$GETCHARP   DECC$GETCHARP Q^ DECC$STRLENP DECC$WRITE DECC$GETCHARP   DECC$GETCHARP  SxSRʏRR ˏSRR 1( 1ЮTЮǀ+ DECC$DPRINTFUedRRǣ+edRR~ǰ+e~+eRRRSRSS  Ǵ^Ǹ^+e+CONFIRMP1",CONFIRMP 1}P1tjRR~@, DECC$DPRINTFScjRRi,cjRR~v,c~lj,cUSRSRf DECC$DPRINTFTPSAzSP{PQPP3 ^CONFIRMP PǞ,d~SǠ,dSRSRdz,CONFIRMP1UTRTR1 DECC$GETCHARSRrT, DECC$DPRINTFǂ^ DECC$DSCANFP6cP  PcP Dž^ DECC$STRLENP DECC$WRITEcP cP eU֭TRTR1uRRRЮ RRRR1nS-CONFIRMPSPSSRRkRRRkkYYXXSSYRRX ]SXRSRRRSRRRSRRRSRRRSRRRSRRRSRRRSRRYUXZeSSS R1R jRRRSRI-,- DECC$DPRINTFYXVRGXTn- DECC$STRNCMPPjRRRRXR SPSPRRVSSPTQVM 5QRQR1LPYSYcRPRRRPRRcQRQR1&RRYTX1PTXYRRRRPRRPPYSYPRPRQkRRQRPkRRQRkRRSR1kRRSR1t- DECC$DPRINTF EXECUTE_RZCMDPGETERROR^TWUլ. DECC$DPRINTFݞdQ,PRP BaRRPdg,g EXECUTE_RZCMDPGETERRORP  DECC$EXITլ1L. DECC$DPRINTFXhdSSSS  h.V PCVVp.h Ŵ^SPŸ^SSŕ.h~Ů.h Ŵ^SPŸ^SS.h Ŵ^SPŸ^SS.h Ŵ^SPŸ^SS/h Ŵ^SPŸ^SS/h Ŵ^SPŸ^SS0/h Ŵ^SPŸ^SSH/h Ŵ^SPŸ^SSi/h Ŵ^SPŸ^SSņ/h Ŵ^SPŸ^SSŤ/hRBBRRB蟭/CR RZDISK mainopen_special_filestart_stop_unitR rz_test_ready/H isintegerQ print_help  format_a_disk7 format_a_floppy L disk_mountedjreassign_bad_blockscan_for_bad_blocks read_defects print_defects#"change_drive_parametersp=<`get_inquiry_info DECC$DPRINTFSCCSSC蟭/ DECC$DPRINTFRB BRRB蟭/ DECC$DPRINTFP4^WXU0YgQPSP CaSSPV TRT BfRRT اgլ1h DECC$STRLENPОh|~̟߭ LIB$GETDVIխ%h  DECC$DPRINTFRb>bpbRPRR1h0 DECC$DPRINTFJ0CONFIRMP1gRRRRRgX0YhY`0 DECC$DPRINTFg EXECUTE_RZCMDP GETERRORPg EXECUTE_RZCMDP GETERRORŐ0 DECC$DPRINTFVS DECC$DPRINTFTzSP{PQPP SŬ0d~Ÿ0dSS ؟0 DECC$DPRINTF^RS0 DECC$DPRINTFb  EXECUTE_RZCMDP GETERRORQ\x\\\Q\x\\\Qb\x\\\QQP\x\\\P\x\\\P\x\\P\TQ0 DECC$DPRINTFT0 DECC$DPRINTF^ZX[UGET_INQUIRY_INFOĞhRSBcRR?ЬRRhkR1 DECC$STRCPYEPR 1 DECC$STRCPY.PR(1 DECC$STRCPYPR.1 DECC$STRCPY91 DECC$DPRINTFk EXECUTE_RZCMDPGETERRORP1n1 DECC$DPRINTFVfh~ń1f~Ş1fRRų1f~1f1f~1fRxRSRxRRRSRRS~2fѬA SS4 RR' TTxSSxRRRSTS~(2f(P RxRS RxRRRS RRS~@2 DECC$DPRINTFh<<RR<ЮgRxRSRRS~0>gRxRS RRS~X>g RxRS RRS~v>g RxRS RRS~š>gRxRSRRS~>g~>gRxRSRRS~?g~$?g~>?g ^RCONFIRMP 0PԮ0ծ01 X? DECC$DPRINTFVfRRZ?fRRs?fRRŘ?fRR~Ŵ?f~?f~@f~@fRR~8@fRRT@fRR~p@fRRŋ@fRxRSRRS~Ŧ@f1B RxRSRRS~@g~@g~@gRxRSRRS~AgRxRS RRS~8Ag RxRS RRS~TAg RxRS RRS~}AgRxRSRRS~ŨAg~AgRxRSRRS~Ag~Ag~Bg ^CONFIRMP4Ԯ4ծ41M (B DECC$DPRINTFVfRR*BfRRABfRRbBfRR~|Bf~šBf~Bf~BfRR~BfRRCfRR~.CfRRGCfRxRSRRS~`Cf1z ЮEf RxRS RRS~\Ef14 PЮGfRR~`GfRRŀGfRxRSRRS~ťGfRxRSRRS~GfRxRS RRS~Gf RxRS RRS~Hf1iЮPPnS/PP ЬS!(^RR DECC$STRLENPR DECC$WRITE1RPSP^ DECC$STRLENP DECC$WRITE ^R߭N^ DECC$DSCANFP: DECC$GETCHARP P DECC$GETCHARP Q^SS DECC$STRLENPS DECC$WRITEPR=|b test_devicec get_capacitydget_drive_parameters} execute_rzcmd: dump_dataXgeterror7 format_cmndcprint_sense_key, print_error_codeLl moreoutput2confirmprintstr  getintegerx  gethexnumx rbzerorz_openCrz_close DECC$GETCHARP  DECC$GETCHARP Э\\P ^R߭‚^ DECC$DSCANFP: DECC$GETCHARP P DECC$GETCHARP …^SS DECC$STRLENPS DECC$WRITEP DECC$GETCHARP  DECC$GETCHARP Э\\PQެRQbPA`QQb^ݬ DECC$STRLEN};vPЬ|~? SYS$AS;,$ RZDISK030.Aj@.[VDBURG.SCSI.A]RZDISK_VAX.OBJ;1FSIGNPPﰭP^2~ SYS$DASSGNPPPǏ<^UTdS RQR AcQQRЬdЬ d EXECUTE_RZCMDP.~rz_lseek(rz_read}rz_writeY yesno! N3 [0 +   L _ _Xא 5  2+C  r  |: p"=2  #Y Ll% Q% _& a6&  /E&c8 4)ߑߐߐߐߐߐߐߍߌߌߍߌߌߌߌߌߌߌߊߏߋߊߌߌߌߍߋߋߋߋߍߋߌߊߊߌߌߌ !\ ,!] ]P !4_ !s_ !_ !_  h! `>9 !b !=b !ab< "cP $d} u"x}  %} %[ % % %B) &ԃA &xܹ '`* PRINT_ERROR_CODE l MOREOUTPUT CONFIRM PRINTSTR GETINTEGER GETHEXNUM RBZERO RZ_OPEN RZ_CLOSE RZ_LSEEK (<RZ_READ RZ_WRITE YESNODECC$MAIN_ARGS%$CODE^$DATA $ADDRESS_DATA RZDEV (RZDISK RZCOM INFOBYTE ASC CURPOS NOMORE DODUMP  MASKPARAMS PAGE37_FOREIGN RDP& FP DP RP VP RCP DD MSP MS MSPC MSC ,INQ DATAPAR SENSE( DEVICETYPESDRZ_SENSE_KEY_STRRZ_ERROR_CODE_STRRZ_NOTREADY_STR UNKNOWN_KEY UNKNOWN_CODEGETERRORPPPPP PPPPPЬ PP^TdS RQR AcQQRЬdЬ d EXECUTE_RZCMDPGETERRORPPPЬ PPQլ ^RP^RRPP@Pp`@@0 @@@@@@@}P=MmqqYAqqqqq%qq1fP0LL \P)P& 22., P{ P#3C P <XtP>2~N^n~O <$ RZDISK030.Aj@.[VDBURG.SCSI.A]RZDISK_VAX.OBJ;1k>+,1NBFD'dJ4Vd 7k]dSugČ$:HjUEӝUK {{Hg5knF-#Qج9*`ZP.-/ WfS'+Ŧ-ĩf0|OzI։7UM9Jt׉,- %mpwMp̓ZRHt/Wk\[J$Jsv i7xpݴn;҅qP:t|21;9RU'׆<[dD;zvv[Zh+P!ajzTO;m]RFM# t=aaoP~\",ݭM`\ ϛ٬Č# lmɴ0Po.ufc)iݜ,UFxi!寢E^SYf1 o0^;ld^|@qAg/]Of.-0PA)C4% t2-\nz4B'Y%n̛}ʽeKIw>f^KNefKvMuRޙQd) 1A %n tCnnx?[DTs%mbhј]Ciလ | zgiLfFx5GV-ìBl%' B,;<hP "ՠGν_.1ʩS]_[M]Cp^r$$Y?tiDTnpRE^n/h,^o}BK@{90Z)8,[o_>yJԇ &znB3iʃZWγn8ǐ$-oPьmjtLɝG‚%? 1 Ȭ-EQ\J)eOj' s4ݥ4KHmPK/))zG@vᯈ>S(b^Ɏ_fx,#}1c}TRU[ |uNgBmͦ11RSc)h_cn$P](2?dvJ v9 Pg.tVh{c9Nhvk:3/j"YzȖ 1ƖҚ϶ o VvXj[q&C iOy}^V Qۺ%.> tz̘rZ@jAK)#p"PSZҍ#ylJɶ5ߍ=^uH2.dgYh4檦xY9_2330 y|5 &"ת|"T$vԪKmrRv v 58io(3Kd]"~i$Rnq7mxwWU=y> DFcBaE;>u,B>}?pq ݾ!Ӣ-R#(Pr½Sߣ-3hof}{?~"w,[ŝu ~`B$8ٕS-{#-Ae͓:("{2I Kտ'𤭍eHF"v_%^6ꐹ+1tx0x>L.!rnz p"akuONDgzSt%xGؒJ<{PrERhTdV'%H zq)VKqPH -/^)#TO7, ncd=8Y-kh'(_7>Z;8@j!qݶπȄadgYs^aK⥷ם$sn/Gr$L5Cնˡa{']zS#s-%-ȵ*6w$/VUJitP"E۽v]x,]%Ǿģ{ƨLu1<̣}N `A6r2{nuUJ}^+D kپϔ5XԼ~N?uF6T88f(X'y kBK׽/p\{uW!x} wDS(ܩdA(5;F8R4p5.Lq%y6MQf9q='r[[O#duvQлd 4o~E:X']<1nIF$m O~~ @C!Vlz.EBr m]z8%ʯWI;\YVg Ԫ+eI8[gŦN<\,?Eے#h 7|Z/)'׉n^.NJe?D\/ ;n%UϺI_N Uxbw:֊Na؈|2dlx`d'g dy7_D o6D(n Gfm(Hv8{ҕԻ*GlAMGu>Qܲ#r_.K)xyQtn,.  ]|'kdr ЈRtnFYasOgmF0E,ж--(qqE7Y;5 5{gO">1hwVJ QIKjBg,*TEPV+;D!$uy ˿ec^mϺښf=!XQ%^(EsAJt`J@h*Q+!~XxtA#`llTgBc BaCIR1qCd}43ۜ0N t+]aTOQ3::GZb<`qȝO[ȡ_g BxOݵDXxAf_ Z-'Z!يux3eiwzr f)UQ>ݭ؜7ce`$:.n88uN4I%RX0׻TOr7OW [d_S5hcv53NAM)(xMp8Z> }b%?;_άMZZYVYy{q,_>#Iܮ^0Rj|:cHVuIy3|T*DIxyy Mi q7|K3V]Ē=97 rRZHLbY3nkG3q-/.)E'A=&oJ(qvO-v%$R0E¸_@ rhh}G"['4UNtZCłزB)FՉ.tŊcm QKCZB#8BZlt>: PP@*#='ڧ,aeH /Y?Ե . cwK(6,= ̷#M<a/@-vKAF!Q:,M'q::RHMDv#AQ Y#rM9VC0{Hevܜ3tݠG>S2 w(Py1gKl!k`V0@M>A6l,J,_!Gkgi*ָ:aX\S/v\&KԂF5E&k,9ΑS6(8;b4|RZ+Ǔ_`mX|gRl:leeG,~*jg ++8+%T HךLJW ᛿{3A'0M&+AXZ:pf&q7?MLL^ II|c|^F S=OJ%9dW183Uu/岀`iKCVaj熶 !]O^ ñqe(JB q ,r!t^o=TLj_SjKб؝+EGn^zaDYцؼJeҹrQPU]+Sг.z:+4Ka_^̔arYNCeDf0qa/)~~~eJ7%ΝIWE=E3nMAI qT><t] H-G~v=aM߶dp(+M?P'偉;܎CA\0H4DX|/8}*nvK}fA y ^_PY$)KyFQye9OF0 TO`Ϡ)FMx~rV}`\56ɮRNi?ntguDǔa?qp-" DJu(7hCWEqO_\ !/xD[/:qA)j gauaf޿Rd:t~cf[:=10%{ӭ6p5r¡ݓJ  $iҟ ik}$I]7(^.{n㤑瑢2+CsӺ!P-:"DQX+jl~A Uyh4BrUwFgcUB_oQCw& !mZ[#̈+򺧐KT dA)9i壵"Okƥؓe# +( ^7躨0-*撦b {)3̉}3tm k 3/DŽ#Qނ#(dהФnN,dz!aAh1. -/bf$S$kS@A%ˆI>[5^ƪUUў)("U(S\J!%p!44d͛W?DjwQtvb0.' `9 DmS d^g>%O D197 |.yH=zӇ?T\]WX'R.K%"͘^ BXQ}c:B9-  I."DATRlCqwileD+s#%hD K74XQh6_vעpY$%3U[GRcBxѦ󁉬S9Hh6@'2`PptM'LkgcA@uU+ON6,?'W ?Ir8s@g>D6Bt$W|uYWH.&  -"u|ն%kΒƂ \zTů~+,Eę(=6rCvN8WGAb"Y74XwwM^a X{qx#/xS!YYEH n3Ddϱw 8b};'3^;X=XG&m꣧il~qP8 .˱?B/)\IN3TE(R*wZn{#*q/ [ftP6wxnp {"CFi3Ud8/餓Q*T'$ U1??Cզju5/ E )TiyKf̯Tj ,DO5{SC_GN@ͩ8Nld6vFyl@oHK9`)Q"}ഘ\5UuTΗtTֵ]Mھ;W@Csrxpy0O+I/T݁nX:`l1)Nz_y&ހY a0*x3f2đsQ&8PzV6~]) h6ҴHOd ̷0E {&'TXpGŒwF*Wx&bYoi<>݈S5}|c\'^zfח7% $:r/uo՗JC^-,uj ֥"v4e`}}J*iNYH-+"Fv;21M0vYw#;R{VX^DTF(OPRhɺ2"7!?c.=T0| .`9%ࢃVDK޳ _ˮ{DWn185M~=)ȕ&ٕt*)lbnHUAd,VI.9,5@~IϺ hإH&B\YдN{3 tw8fք#먊 N #Jy =#D,QUMAڰ%0ӂ,}.5^ 1՘B郖rJ:RN=So"9'}-XLZVR. f~M f