예제 #1
0
파일: ex14.c 프로젝트: Attler/hello-world
int main(int argc, char *argv[])
{
	printArguments(argc, argv);
	return 0;
}
예제 #2
0
int main(int argc, char* argv[]) {
	BApplication app("application/x-vnd.Haiku.dump-print-job");
	
	bool printPicture = false;
	bool hasFiles = false;
	
	for (int i = 1; i < argc; i ++) {
		const char* arg = argv[i];
		if (strcmp(arg, "--pictures") == 0) {
			printPicture = true;
			continue;
		}

		hasFiles = true;
		BFile jobFile(arg, B_READ_WRITE);
		if (jobFile.InitCheck() != B_OK) {
			fprintf(stderr, "Error opening file %s!\n", arg);
			continue;
		}			

		PrintJobReader reader(&jobFile);
		if (reader.InitCheck() != B_OK) {
			fprintf(stderr, "Error reading spool file %s!", arg); 
			continue;
		}
		
		printf("Spool file: %s\n", arg); 
		printf("Job settings message:\n");
		reader.JobSettings()->PrintToStream();
		
		int32 pages = reader.NumberOfPages();
		printf("Number of pages: %d\n", (int)pages);
		for (int page = 0; page < pages; page ++) {
			printf("Page: %d\n", page+1);
			PrintJobPage pjp;
			if (reader.GetPage(page, pjp) != B_OK) {
				fprintf(stderr, "Error reading page!\n");
				break;
			}
				
			BPicture picture;
			BPoint pos; 
			BRect rect;
			printf("Number of pictures: %ld\n", pjp.NumberOfPictures());
			while (pjp.NextPicture(picture, pos, rect) == B_OK) {
				printf("Picture position = (%f, %f) bounds = [l: %f t: %f r: %f b: %f]\n",
					pos.x, pos.y,
					rect.left, rect.top, rect.right, rect.bottom);

				if (printPicture) {
					printf("Picture:\n");
					PicturePrinter printer;
					printer.Iterate(&picture);
				}
			}
		}
	}
	
	if (!hasFiles)
		printArguments(argv[0]);
}