⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rzdisk.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
📖 第 1 页 / 共 4 页
字号:
	printf("  PS\t\t\t\t\t%d\n", ms.ms_page1.ps);	printf("  Page code\t\t\t\t%d\n", ms.ms_page1.pgcode);	printf("  Page length\t\t\t\t%d\n", ms.ms_page1.pglength);	printf("  Flags\t\t\t\t\t0x%02x\n", ms.ms_page1.flags);	printf("  Retry count\t\t\t\t%d\n", ms.ms_page1.retry_count);	printf("  Correction span\t\t\t%d\n", ms.ms_page1.correct_span);	printf("  Head offset count\t\t\t%d\n", ms.ms_page1.head_offset);	printf("  Data strobe offset count\t\t%d\n", ms.ms_page1.data_strobe);	printf("  Recovery time limit\t\t\t%d\n", ms.ms_page1.recovery_time);	printstr("\nDo you want to change any fields in this page (y/n)? ");	if(confirm()) {		if(msc.ms_page1.flags) {		    printstr("Enter the new flags in (HEX)? ");		    value = gethexnum();		    ms.ms_page1.flags = value;		}		if(msc.ms_page1.retry_count) {		    printstr("Enter the new retry count? ");		    value = getinteger();		    ms.ms_page1.retry_count = value;		}		if(msc.ms_page1.correct_span) {		    printstr("Enter the new correction span? ");		    value = getinteger();		    ms.ms_page1.correct_span = value;		}		if(msc.ms_page1.head_offset) {		    printstr("Enter the new head offset count? ");		    value = getinteger();		    ms.ms_page1.head_offset = value;		}		if(msc.ms_page1.data_strobe) {		    printstr("Enter the new data strobe offset count? ");		    value = getinteger();		    ms.ms_page1.data_strobe = value;		}		if(msc.ms_page1.recovery_time) {		    printstr("Enter the new recovery time limit? ");		    value = getinteger();		    ms.ms_page1.recovery_time = value;		}	}	ms.ms_page1.flags &= msc.ms_page1.flags;	ms.ms_page1.retry_count &= msc.ms_page1.retry_count;	ms.ms_page1.correct_span &= msc.ms_page1.correct_span;	ms.ms_page1.head_offset &= msc.ms_page1.head_offset;	ms.ms_page1.data_strobe &= msc.ms_page1.data_strobe;	ms.ms_page1.recovery_time &= msc.ms_page1.recovery_time;	if(rz22_rz23_disk)		goto dec_unique_page;	if(rrd40_disk)		goto dec_unique_page;	printf("\nPage 2 disconnect/reconnect parameters:\n");	printf("  PS\t\t\t\t\t%d\n", ms.ms_page2.ps);	printf("  Page code\t\t\t\t%d\n", ms.ms_page2.pgcode);	printf("  Page length\t\t\t\t%d\n", ms.ms_page2.pglength);	printf("  Buffer full ratio\t\t\t%d\n", ms.ms_page2.bus_fratio);	printf("  Buffer empty ratio\t\t\t%d\n", ms.ms_page2.bus_eratio);	printf("  Bus inactivity limit\t\t\t%d\n", 			((ms.ms_page2.bus_inactive1<<8) +				ms.ms_page2.bus_inactive0));	printf("  Disconnect time limit\t\t\t%d\n",			((ms.ms_page2.disconn_time1<<8) +				ms.ms_page2.disconn_time0));	printf("  Connect time limit\t\t\t%d\n", 			((ms.ms_page2.conn_time1<<8) +				ms.ms_page2.conn_time0));	printstr("\nDo you want to change any fields in this page (y/n)? ");	if(confirm()) {		if(msc.ms_page2.bus_fratio) {		    printstr("Enter the new bus full ratio? ");		    value = getinteger();		    ms.ms_page2.bus_fratio = value;		}		if(msc.ms_page2.bus_eratio) {		    printstr("Enter the new bus empty ratio? ");		    value = getinteger();		    ms.ms_page2.bus_eratio = value;		}		if(msc.ms_page2.bus_inactive1 || msc.ms_page2.bus_inactive0) {		    printstr("Enter the new bus inactivity limit? ");		    value = getinteger();		    ms.ms_page2.bus_inactive1 = ((value >> 8) & 0xff);		    ms.ms_page2.bus_inactive0 = ((value >> 0) & 0xff);		}		if(msc.ms_page2.disconn_time1 || msc.ms_page2.disconn_time0) {		    printstr("Enter the new disconnect time limit? ");		    value = getinteger();		    ms.ms_page2.disconn_time1 = ((value >> 8) & 0xff);		    ms.ms_page2.disconn_time0 = ((value >> 0) & 0xff);		}		if(msc.ms_page2.conn_time1 || msc.ms_page2.conn_time0) {		    printstr("Enter the new connect time limit? ");		    value = getinteger();		    ms.ms_page2.conn_time1 = ((value >> 8) & 0xff);		    ms.ms_page2.conn_time0 = ((value >> 0) & 0xff);		}	}	ms.ms_page2.bus_fratio &= msc.ms_page2.bus_fratio;	ms.ms_page2.bus_eratio &= msc.ms_page2.bus_eratio;	ms.ms_page2.bus_inactive1 &= msc.ms_page2.bus_inactive1;	ms.ms_page2.bus_inactive0 &= msc.ms_page2.bus_inactive0;	ms.ms_page2.disconn_time1 &= msc.ms_page2.disconn_time1;	ms.ms_page2.disconn_time0 &= msc.ms_page2.disconn_time0;	ms.ms_page2.conn_time1 &= msc.ms_page2.conn_time1;	ms.ms_page2.conn_time0 &= msc.ms_page2.conn_time0;	printf("\nPage 3 direct-access device format parameters:\n");	printf("  PS\t\t\t\t\t%d\n", ms.ms_page3.ps);	printf("  Page code\t\t\t\t%d\n", ms.ms_page3.pgcode);	printf("  Page length\t\t\t\t%d\n", ms.ms_page3.pglength);	printf("  Tracks per zone\t\t\t%d\n", 			((ms.ms_page3.tpz1<<8) + ms.ms_page3.tpz0));	printf("  Alternate sectors per zone\t\t%d\n", 			((ms.ms_page3.aspz1<<8) + ms.ms_page3.aspz0));	printf("  Alternate tracks per zone\t\t%d\n", 			((ms.ms_page3.atpz1<<8) + ms.ms_page3.atpz0));	printf("  Alternate tracks per volume\t\t%d\n", 			((ms.ms_page3.atpv1<<8) + ms.ms_page3.atpv0));	printf("  Sectors per track\t\t\t%d\n", 			((ms.ms_page3.spt1<<8) + ms.ms_page3.spt0));	printf("  Data bytes per phy sector\t\t%d\n", 			((ms.ms_page3.bps1<<8) + ms.ms_page3.bps0));	printf("  Interleave\t\t\t\t%d\n", 			((ms.ms_page3.interleave1<<8) + 				ms.ms_page3.interleave0));	printf("  Track skew\t\t\t\t%d\n", 			((ms.ms_page3.track_skew1<<8) + 				ms.ms_page3.track_skew0));	printf("  Cylinder skew\t\t\t\t%d\n", 			((ms.ms_page3.cylinder_skew1<<8) + 				ms.ms_page3.cylinder_skew0));	printf("  Flags\t\t\t\t\t0x%02x\n", ms.ms_page1.flags);	printstr("\nDo you want to change any fields in this page (y/n)? ");	if(confirm()) {		if(msc.ms_page3.tpz1 || msc.ms_page3.tpz0) {		    printstr("Enter the new tracks per zone? ");		    value = getinteger();		    ms.ms_page3.tpz1 = ((value >> 8) & 0xff);		    ms.ms_page3.tpz0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.aspz1 || msc.ms_page3.aspz0) {		    printstr("Enter the new alternate sectors per zone? ");		    value = getinteger();		    ms.ms_page3.aspz1 = ((value >> 8) & 0xff);		    ms.ms_page3.aspz0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.atpz1 || msc.ms_page3.atpz0) {		    printstr("Enter the new alternate tracks per zone? ");		    value = getinteger();		    ms.ms_page3.atpz1 = ((value >> 8) & 0xff);		    ms.ms_page3.atpz0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.atpv1 || msc.ms_page3.atpv0) {		    printstr("Enter the new alternate tracks per volume? ");		    value = getinteger();		    ms.ms_page3.atpv1 = ((value >> 8) & 0xff);		    ms.ms_page3.atpv0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.spt1 || msc.ms_page3.spt0) {		    printstr("Enter the new sectors per track? ");		    value = getinteger();		    ms.ms_page3.spt1 = ((value >> 8) & 0xff);		    ms.ms_page3.spt0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.bps1 || msc.ms_page3.bps0) {		    printstr("Enter the new bytes per sector? ");		    value = getinteger();		    ms.ms_page3.bps1 = ((value >> 8) & 0xff);		    ms.ms_page3.bps0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.interleave1 || msc.ms_page3.interleave0) {		    printstr("Enter the new interleave factor? ");		    value = getinteger();		    ms.ms_page3.interleave1 = ((value >> 8) & 0xff);		    ms.ms_page3.interleave0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.track_skew1 || msc.ms_page3.track_skew0) {		    printstr("Enter the new track skew? ");		    value = getinteger();		    ms.ms_page3.track_skew1 = ((value >> 8) & 0xff);		    ms.ms_page3.track_skew0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.cylinder_skew1 || msc.ms_page3.cylinder_skew0) {		    printstr("Enter the new cylinder skew? ");		    value = getinteger();		    ms.ms_page3.cylinder_skew1 = ((value >> 8) & 0xff);		    ms.ms_page3.cylinder_skew0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.flags) {		    printstr("Enter the new flags in (HEX)? ");		    value = gethexnum();		    ms.ms_page3.flags = value;		}	}	ms.ms_page3.tpz1 &= msc.ms_page3.tpz1;	ms.ms_page3.tpz0 &= msc.ms_page3.tpz0;	ms.ms_page3.aspz1 &= msc.ms_page3.aspz1;	ms.ms_page3.aspz0 &= msc.ms_page3.aspz0;	ms.ms_page3.atpz1 &= msc.ms_page3.atpz1;	ms.ms_page3.atpz0 &= msc.ms_page3.atpz0;	ms.ms_page3.atpv1 &= msc.ms_page3.atpv1;	ms.ms_page3.atpv0 &= msc.ms_page3.atpv0;	ms.ms_page3.spt1 &= msc.ms_page3.spt1;	ms.ms_page3.spt0 &= msc.ms_page3.spt0;	ms.ms_page3.bps1 &= msc.ms_page3.bps1;	ms.ms_page3.bps0 &= msc.ms_page3.bps0;	ms.ms_page3.interleave1 &= msc.ms_page3.interleave1;	ms.ms_page3.interleave0 &= msc.ms_page3.interleave0;	ms.ms_page3.track_skew1 &= msc.ms_page3.track_skew1;	ms.ms_page3.track_skew0 &= msc.ms_page3.track_skew0;	ms.ms_page3.cylinder_skew1 &= msc.ms_page3.cylinder_skew1;	ms.ms_page3.cylinder_skew0 &= msc.ms_page3.cylinder_skew0;	ms.ms_page3.flags &= msc.ms_page3.flags;	printf("\nPage 4 rigid disk drive geometry parameters:\n");	printf("  PS\t\t\t\t\t%d\n", ms.ms_page4.ps);	printf("  Page code\t\t\t\t%d\n", ms.ms_page4.pgcode);	printf("  Page length\t\t\t\t%d\n", ms.ms_page4.pglength);	printf("  Maximum number of cylinders\t\t%d\n", 			((ms.ms_page4.ncyl2<<16) +				(ms.ms_page4.ncyl1<<8) +					ms.ms_page4.ncyl0));	printf("  Maximum number of heads\t\t%d\n", ms.ms_page4.nheads);	printf("  Write precompensation start\t\t%d\n", 			((ms.ms_page4.wprecomp2<<16) +				(ms.ms_page4.wprecomp1<<8) +					ms.ms_page4.wprecomp0));	printf("  Reduced write current start\t\t%d\n", 			((ms.ms_page4.rwc2<<16) +				(ms.ms_page4.rwc1<<8) +					ms.ms_page4.rwc0));	printf("  Drive step rate\t\t\t%d\n", 			((ms.ms_page4.dsr1<<8) + ms.ms_page4.dsr0));	printf("  Landing zone cylinder\t\t\t%d\n", 			((ms.ms_page4.lzc2<<16) +				(ms.ms_page4.lzc1<<8) +					ms.ms_page4.lzc0));	printstr("\nDo you want to change any fields in this page (y/n)? ");	if(confirm()) {		if(msc.ms_page4.ncyl2 || 			msc.ms_page4.ncyl1 || msc.ms_page4.ncyl0) {		    printstr("Enter the number of cylinders? ");		    value = getinteger();		    ms.ms_page4.ncyl2 = ((value >> 16) & 0xff);		    ms.ms_page4.ncyl1 = ((value >> 8) & 0xff);		    ms.ms_page4.ncyl0 = ((value >> 0) & 0xff);		}		if(msc.ms_page4.nheads) {		    printstr("Enter the number of heads? ");		    value = getinteger();		    ms.ms_page4.nheads = value;		}		if(msc.ms_page4.wprecomp2 || 			msc.ms_page4.wprecomp1 || msc.ms_page4.wprecomp0) {		    printstr("Enter the write precompensation start? ");		    value = getinteger();		    ms.ms_page4.wprecomp2 = ((value >> 16) & 0xff);		    ms.ms_page4.wprecomp1 = ((value >> 8) & 0xff);		    ms.ms_page4.wprecomp0 = ((value >> 0) & 0xff);		}		if(msc.ms_page4.rwc2 || 			msc.ms_page4.rwc1 || msc.ms_page4.rwc0) {		    printstr("Enter the reduced write current start? ");		    value = getinteger();		    ms.ms_page4.rwc2 = ((value >> 16) & 0xff);		    ms.ms_page4.rwc1 = ((value >> 8) & 0xff);		    ms.ms_page4.rwc0 = ((value >> 0) & 0xff);		}		if(msc.ms_page4.dsr1 || msc.ms_page4.dsr0) {		    printstr("Enter the drive step rate? ");		    value = getinteger();		    ms.ms_page4.dsr1 = ((value >> 8) & 0xff);		    ms.ms_page4.dsr0 = ((value >> 0) & 0xff);		}		if(msc.ms_page4.lzc1 || msc.ms_page4.lzc0) {		    printstr("Enter the landing zone cylinder? ");		    value = getinteger();		    ms.ms_page4.lzc1 = ((value >> 8) & 0xff);		    ms.ms_page4.lzc0 = ((value >> 0) & 0xff);		}	}	ms.ms_page4.ncyl2 &= msc.ms_page4.ncyl2;	ms.ms_page4.ncyl1 &= msc.ms_page4.ncyl1;	ms.ms_page4.ncyl0 &= msc.ms_page4.ncyl0;	ms.ms_page4.nheads &= msc.ms_page4.nheads;	ms.ms_page4.wprecomp2 &= msc.ms_page4.wprecomp2;	ms.ms_page4.wprecomp1 &= msc.ms_page4.wprecomp1;	ms.ms_page4.wprecomp0 &= msc.ms_page4.wprecomp0;	ms.ms_page4.rwc2 &= msc.ms_page4.rwc2;	ms.ms_page4.rwc1 &= msc.ms_page4.rwc1;	ms.ms_page4.rwc0 &= msc.ms_page4.rwc0;	ms.ms_page4.dsr1 &= msc.ms_page4.dsr1;	ms.ms_page4.dsr0 &= msc.ms_page4.dsr0;	ms.ms_page4.lzc1 &= msc.ms_page4.lzc1;	ms.ms_page4.lzc0 &= msc.ms_page4.lzc0;dec_unique_page:	if(ms.ms_page37.pgcode != 37)		goto skip_dec_page;	printf("\nPage 37 DEC unique parameters:\n");	printf("  PS\t\t\t\t\t%d\n", ms.ms_page37.ps);	printf("  Page code\t\t\t\t%d\n", ms.ms_page37.pgcode);	printf("  Page length\t\t\t\t%d\n", ms.ms_page37.pglength);	printf("  Spinup on power up\t\t\t%d\n", ms.ms_page37.spinup);	printstr("\nDo you want to change any fields in this page (y/n)? ");	if(confirm()) {		printstr("Have drive spinup on power on (y/n)? ");		if(confirm())		   	ms.ms_page37.spinup = 0;		else		   	ms.ms_page37.spinup = 1;	}skip_dec_page:	if(rrd40_disk)		setps = 0;	else {		printstr("\nSAVE THE CHANGED VALUES ON DISK (y/n)? ");		if(confirm())			setps = 1;		else			setps = 0;	}	ms.ms_hdr.sense_len = 0;	ms.ms_hdr.wp = 0;	ms.ms_page1.ps = 0;	ms.ms_page2.ps = 0;	ms.ms_page3.ps = 0;	ms.ms_page4.ps = 0;	ms.ms_page37.ps = 0;	ms.ms_setps = setps;	if(ms.ms_page37.pgcode == 37)	   	ms.ms_length = sizeof(ms) - 4;	else		ms.ms_length = sizeof(ms) - sizeof(ms.ms_page37) - 4;	/* Adjust the length for the RZ22/RZ23 disks */	if(rz22_rz23_disk) {		ms.ms_length = ms.ms_length - sizeof(ms.ms_page2) -			       sizeof(ms.ms_page3) - sizeof(ms.ms_page4);		if(ms.ms_page37.pgcode == 37) {			ptr = (char *)&ms.ms_page2;			bcopy((char *)&ms.ms_page37, ptr, 						sizeof(ms.ms_page37));		}	}	/* Adjust the length for the RRD40 disk */	if(rrd40_disk) {		ms.ms_length = ms.ms_length - sizeof(ms.ms_page2) -				sizeof(ms.ms_page3) - sizeof(ms.ms_page4);		ptr = (char *)&ms.ms_page2;		bcopy((char *)&ms.ms_page3, ptr, sizeof(ms.ms_page3));	}	printf("\nChanging disk drive parameters for device (%s).\n",		rzdisk);	if(execute_rzcmd(SCSI_MODE_SELECT, (char *)&ms) != SUCCESS) {		geterror();		return;	}}get_inquiry_info(){        char hold[20];    int i;	printf("\nGetting inquiry data info from device (%s).\n", rzdisk);	bzero((char *)&inq, sizeof(inq));	if(execute_rzcmd(SCSI_GET_INQUIRY_DATA, (char *)&inq) != SUCCESS) {		geterror();		return;	}    	printf("\nDump of Inquiry Data:\n");    	printf("  Peripheral Device Type\t\t0x%x\n",inq.perfdt);    	printf("  Device Type Qualifier\t\t\t0x%x\n",inq.devtq);    	printf("  Removable Medium\t\t\t0x%x\n",inq.rmb);    	printf("  Version\t\t\t\t0x%x\n",inq.version);    	for(i=0; i<8; i++)		hold[i] = inq.vndrid[i];    	hold[i] = '\0';    	printf("  Vendor Identificaton\t\t\t%s\n", hold);    	for(i=0; i<16; i++)		hold[i] = inq.prodid[i];    	hold[i] = '\0';    	printf("  Product Identification\t\t%s\n", hold);    	for(i=0; i<4; i++)		hold[i] = inq.revlvl[i];    	hold[i] = '\0';    	printf("  Revision Level\t\t\t%s\n", hold);}get_drive_parameters(page_control){	char strtype[20];	struct page_code_1 ms_page1;	struct page_code_2 ms_page2;	struct page_code_3 ms_page3;	struct page_code_4 ms_page4;	struct page_code_37 ms_page37;	u_char *byteptr;	bzero((char *)&ms, sizeof(ms));	ms.ms_pgcode = 0x3f;	ms.ms_length = sizeof(ms) - 4;	ms.ms_pgctrl = page_control;	if(page_control == CURRENT_VALUES)	    strcpy(strtype,"CURRENT");	else if(page_control == DEFAULT_VALUES)	    strcpy(strtype,"DEFAULT");	else if(page_control == SAVED_VALUES)	    strcpy(strtype,"SAVED");	else if(page_control == CHANGED_VALUES)	    strcpy(strtype,"CHANGEABLE");	printf("\nGetting %s disk drive parameters from device (%s).\n",			strtype,rzdisk);	if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&ms) != SUCCESS) {		geterror();		return;	}	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%02x\n", ms.ms_hdr.wp);	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);	printf("  Number of blocks\t\t\t%d\n", 			((ms.ms_desc.nblks2<<16) + 				(ms.ms_desc.nblks1<<8) + ms.ms_desc.nblks0));	if(page_control == CHANGED_VALUES && ms.ms_desc.blklen2 == 0xff &&		ms.ms_desc.blklen1 == 0xff && ms.ms_desc.blklen0 == 0xff) {		printf("  Block length\t\t\t\t0x%x\n", 			((ms.ms_desc.blklen2<<16) + 				(ms.ms_desc.blklen1<<8) + ms.ms_desc.blklen0));	}	else {		printf("  Block length\t\t\t\t%d\n", 			((ms.ms_desc.blklen2<<16) + 				(ms.ms_desc.blklen1<<8) + ms.ms_desc.blklen0));	}	byteptr = (u_char *)&ms.ms_page1;	ms_page1 = *((struct page_code_1 *)byteptr);	if(ms_page1.pgcode == 1) {		if(!moreoutput())			return;	    	printf("\nPage 1 error recovery parameters:\n");	    	printf("  PS\t\t\t\t\t%d\n", ms_page1.ps);	    	printf("  Page code\t\t\t\t%d\n", ms_page1.pgcode);	    	printf("  Page length\t\t\t\t%d\n", ms_page1.pglength);		if(page_control == CHANGED_VALUES) {	    		printf("  Flags\t\t\t\t\t0x%x\n", ms_page1.flags);	    		printf("  Retry count\t\t\t\t0x%x\n", 					ms_page1.retry_count);	    		printf("  Correction span\t\t\t0x%x\n", 					ms_page1.correct_span);	    		printf("  Head offset count\t\t\t0x%x\n", 					ms_page1.head_offset);	    		printf("  Data strobe offset count\t\t0x%x\n", 					ms_page1.data_strobe);	    		printf("  Recovery time limit\t\t\t0x%x\n", 					ms_page1.recovery_time);		}		else {	    		printf("  Flags\t\t\t\t\t0x%02x\n", ms_page1.flags);	    		printf("  Retry count\t\t\t\t%d\n", 					ms_page1.retry_count);	    		printf("  Correction span\t\t\t%d\n", 					ms_page1.correct_span);	    		printf("  Head offset count\t\t\t%d\n", 					ms_page1.head_offset);	    		printf("  Data strobe offset count\t\t%d\n", 					ms_page1.data_strobe);	    		printf("  Recovery time limit\t\t\t%d\n", 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -