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

📄 options.c

📁 udf文件系统工具软件
💻 C
字号:
/* * options.c * * Copyright (c) 2002       Ben Fennema <bfennema@falcon.csc.calpoly.edu> * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include "cdrwtool.h"#include "libudffs.h"#include "defaults.h"#include "options.h"struct option long_options[] = {	{ "help", no_argument, NULL, OPT_HELP },	{ "device", 1, NULL, 'd' },	{ "set write parameters", no_argument, NULL, 's' },	{ "get write parameters", no_argument, NULL, 'g' },	{ "blank cdrw disc", 1, NULL, 'b' },	{ "format cdrw disc", 1,NULL, 'm' },	{ "run mkudffs on track", 1, NULL, 'u' },	{ "set mkudffs version", 1, NULL, 'v' },	{ "set cd writing speed", 1, NULL, 't' },	{ "write fixed packets", 1, NULL, 'p' },	{ "perform quick setup", optional_argument, NULL, 'q' },	{ "reserve track", 1, NULL, 'r' },	{ "close track", 1, NULL, 'c' },	{ "fixed packet size", 1, NULL, 'z' },	{ "border/session setting", 1, NULL, 'l' },	{ "write type", 1, NULL, 'w' },	{ "file to write", 2, NULL, 'f' },	{ "start at this lba for file write", 1, NULL,'o' },	{ "print detailed disc info", no_argument, NULL, 'i' },	{ 0, 0, NULL, 0 },};void usage(void){	int i;	for (i = 0; long_options[i].name != NULL; i++)		if (long_options[i].val >= 0xFF)			printf("\t--%s\n", long_options[i].name);		else			printf("\t%c\t%s\n", long_options[i].val, long_options[i].name);	exit(1);}void parse_args(int argc, char *argv[], struct cdrw_disc *disc, char *device){	int retval;	while ((retval = getopt_long(argc, argv, "r:t:im:u:v:d:sgq::c:C:b:p:z:l:w:f:o:h", long_options, NULL)) != EOF)	{		switch (retval)		{			case OPT_HELP:			case 'h':				usage();				break;			case 'c':			{				disc->close_track = strtol(optarg, NULL, 10);				break;			}			case 'C':			{				disc->close_session = strtol(optarg, NULL, 10);				break;			}			case 'q':			{				disc->quick_setup = 1;				if (optarg)					disc->offset = strtol(optarg, NULL, 10);				else					disc->offset = 0;				break;			}			case 'u':			{				disc->mkudf = 1;				disc->offset = strtol(optarg, NULL, 10);				printf("mkudffs %lu blocks\n", disc->offset);				break;			}			case 'v':			{				if (udf_set_version(&disc->udf_disc, strtol(optarg, NULL, 16)))					exit(1);				printf("udf version set to 0x%04x\n", disc->udf_disc.udf_rev);				break;			}			case 'r':			{				disc->reserve_track = strtol(optarg, NULL, 10);				printf("reserving track %u\n", disc->reserve_track);				break;			}			case 't':			{				disc->speed = strtol(optarg, NULL, 10);				printf("setting speed to %d\n", disc->speed);				break;			}			case 'm':			{				disc->format = 1;				disc->offset = strtol(optarg, NULL, 10);				printf("formatting %lu blocks\n", disc->offset);				break;			}			case 'i':			{				disc->disc_track_info = 1;				break;			}			case 'd':			{				strcpy(device, optarg);				printf("using device %s\n", device);				break;			}			case 'g':			{				printf("ok, want to get\n");				disc->get_settings = 1;				break;			}			case 's':			{				printf("ok, want to set\n");				disc->set_settings = 1;				break;			}			case 'b':			{				if (!strcmp("full", optarg))				{					printf("full blank\n");					disc->blank = BLANK_FULL;				}				else if (!strcmp("fast", optarg))				{					printf("fast blank\n");					disc->blank = BLANK_FAST;				}				else				{					printf("full or fast blanking only\n");					exit(1);				}				break;			}			case 'p':			{				disc->fpacket = !!strtol(optarg, NULL, 10);				printf("%s packets\n", disc->fpacket?"fixed":"variable");				break;			}			case 'z':			{				disc->packet_size = strtol(optarg, NULL, 10);				printf("packet size: %d\n", disc->packet_size);				break;			}			case 'l':			{				disc->border = strtol(optarg, NULL, 10);				printf("border type: %d\n", disc->border);				break;			}			case 'w':			{				if (!strcmp("mode1", optarg))				{					printf("mode1\n");					disc->write_type = 1;				}				else if (!strcmp("mode2", optarg))				{					printf("mode2\n");					disc->write_type = 2;				}				else				{					fprintf(stderr, "mode1 or mode2 writing only\n");					exit(1);				}				break;			}			case 'f':			{				strcpy(disc->filename, optarg);				printf("write file %s\n", disc->filename);				break;			}			case 'o':			{				disc->offset = strtoul(optarg, NULL, 10);				printf("write offset %lu\n", disc->offset);			}		}	}	if (optind < argc)		usage();}

⌨️ 快捷键说明

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