亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dvi.c

?? 早期freebsd實現
?? C
字號:
#ifndef SABER#ifndef lintstatic char Xrcsid[] = "$XConsortium: Dvi.c,v 1.9 89/12/10 16:12:25 rws Exp $";#endif /* lint */#endif /* SABER *//* * Dvi.c - Dvi display widget * */#define XtStrlen(s)	((s) ? strlen(s) : 0)  /* The following are defined for the reader's convenience.  Any     Xt..Field macro in this code just refers to some field in     one of the substructures of the WidgetRec.  */#include <X11/IntrinsicP.h>#include <X11/StringDefs.h>#include <X11/Xmu/Converters.h>#include <stdio.h>#include <ctype.h>#include "DviP.h"/**************************************************************** * * Full class record constant * ****************************************************************//* Private Data */static char default_font_map[] =  "\TR	-adobe-times-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\TI	-adobe-times-medium-i-normal--*-100-*-*-*-*-iso8859-1\n\TB	-adobe-times-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\TBI	-adobe-times-bold-i-normal--*-100-*-*-*-*-iso8859-1\n\CR	-adobe-courier-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\CI	-adobe-courier-medium-o-normal--*-100-*-*-*-*-iso8859-1\n\CB	-adobe-courier-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\CBI	-adobe-courier-bold-o-normal--*-100-*-*-*-*-iso8859-1\n\HR	-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\HI	-adobe-helvetica-medium-o-normal--*-100-*-*-*-*-iso8859-1\n\HB	-adobe-helvetica-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\HBI	-adobe-helvetica-bold-o-normal--*-100-*-*-*-*-iso8859-1\n\NR	-adobe-new century schoolbook-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\NI	-adobe-new century schoolbook-medium-i-normal--*-100-*-*-*-*-iso8859-1\n\NB	-adobe-new century schoolbook-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\NBI	-adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\n\S	-adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\SS	-adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\";#define offset(field) XtOffset(DviWidget, field)#define MY_WIDTH(dw) ((int)(dw->dvi.paperwidth * dw->dvi.scale_factor + .5))#define MY_HEIGHT(dw) ((int)(dw->dvi.paperlength * dw->dvi.scale_factor + .5))static XtResource resources[] = { 	{XtNfontMap, XtCFontMap, XtRString, sizeof (char *),	 offset(dvi.font_map_string), XtRString, default_font_map},	{XtNforeground, XtCForeground, XtRPixel, sizeof (unsigned long),	 offset(dvi.foreground), XtRString, "black"},	{XtNbackground, XtCBackground, XtRPixel, sizeof (unsigned long),	 offset(dvi.background), XtRString, "white"},	{XtNpageNumber, XtCPageNumber, XtRInt, sizeof (int),	 offset(dvi.requested_page), XtRString, "1"},	{XtNlastPageNumber, XtCLastPageNumber, XtRInt, sizeof (int),	 offset (dvi.last_page), XtRString, "0"},	{XtNfile, XtCFile, XtRFile, sizeof (FILE *),	 offset (dvi.file), XtRFile, (char *) 0},	{XtNseek, XtCSeek, XtRBoolean, sizeof (Boolean),	 offset(dvi.seek), XtRString, "false"},	{XtNfont, XtCFont, XtRFontStruct, sizeof (XFontStruct *),	 offset(dvi.default_font), XtRString, "xtdefaultfont"},	{XtNbackingStore, XtCBackingStore, XtRBackingStore, sizeof (int),	 offset(dvi.backing_store), XtRString, "default"},	{XtNnoPolyText, XtCNoPolyText, XtRBoolean, sizeof (Boolean),	 offset(dvi.noPolyText), XtRString, "false"},	{XtNresolution, XtCResolution, XtRInt, sizeof(int),	 offset(dvi.default_resolution), XtRString, "75"},};#undef offsetstatic void		ClassInitialize ();static void		ClassPartInitialize();static void		Initialize(), Realize (), Destroy (), Redisplay ();static Boolean		SetValues (), SetValuesHook ();static XtGeometryResult	QueryGeometry ();static void		ShowDvi ();static void		CloseFile (), OpenFile ();static void		FindPage ();static void		SaveToFile ();DviClassRec dviClassRec = {{	&widgetClassRec,		/* superclass		  */		"Dvi",				/* class_name		  */	sizeof(DviRec),			/* size			  */	ClassInitialize,		/* class_initialize	  */	ClassPartInitialize,		/* class_part_initialize  */	FALSE,				/* class_inited		  */	Initialize,			/* initialize		  */	NULL,				/* initialize_hook	  */	Realize,			/* realize		  */	NULL,				/* actions		  */	0,				/* num_actions		  */	resources,			/* resources		  */	XtNumber(resources),		/* resource_count	  */	NULLQUARK,			/* xrm_class		  */	FALSE,				/* compress_motion	  */	TRUE,				/* compress_exposure	  */	TRUE,				/* compress_enterleave    */	FALSE,				/* visible_interest	  */	Destroy,			/* destroy		  */	NULL,				/* resize		  */	Redisplay,			/* expose		  */	SetValues,			/* set_values		  */	SetValuesHook,			/* set_values_hook	  */	NULL,				/* set_values_almost	  */	NULL,				/* get_values_hook	  */	NULL,				/* accept_focus		  */	XtVersion,			/* version		  */	NULL,				/* callback_private	  */	0,				/* tm_table		  */	QueryGeometry,			/* query_geometry	  */	NULL,				/* display_accelerator	  */	NULL				/* extension		  */},{	SaveToFile,			/* save    */},};WidgetClass dviWidgetClass = (WidgetClass) &dviClassRec;static void ClassInitialize (){	XtAddConverter( XtRString, XtRBackingStore, XmuCvtStringToBackingStore,			NULL, 0 );}/**************************************************************** * * Private Procedures * ****************************************************************//* ARGSUSED */static void Initialize(request, new)	Widget request, new;{	DviWidget	dw = (DviWidget) new;	dw->dvi.current_page = 0;	dw->dvi.font_map = 0;	dw->dvi.cache.index = 0;	dw->dvi.text_x_width = 0;	dw->dvi.text_device_width = 0;	dw->dvi.word_flag = 0;	dw->dvi.file = 0;	dw->dvi.tmpFile = 0;	dw->dvi.state = 0;	dw->dvi.readingTmp = 0;	dw->dvi.cache.char_index = 0;	dw->dvi.cache.font_size = -1;	dw->dvi.cache.font_number = -1;	dw->dvi.cache.adjustable[0] = 0;	dw->dvi.file_map = 0;	dw->dvi.fonts = 0;	dw->dvi.seek = False;	dw->dvi.device_resolution = dw->dvi.default_resolution;	dw->dvi.display_resolution = dw->dvi.default_resolution;	dw->dvi.paperlength = dw->dvi.default_resolution*11;	dw->dvi.paperwidth = (dw->dvi.default_resolution*8			      + dw->dvi.default_resolution/2);	dw->dvi.scale_factor = 1.0;	dw->dvi.sizescale = 1;	dw->dvi.line_thickness = -1;	dw->dvi.line_width = 1;	dw->dvi.fill = DVI_FILL_MAX;	dw->dvi.device_font = 0;	dw->dvi.device_font_number = -1;	dw->dvi.device = 0;	dw->dvi.native = 0;}#include <X11/bitmaps/gray>static voidRealize (w, valueMask, attrs)	Widget			w;	XtValueMask		*valueMask;	XSetWindowAttributes	*attrs;{	DviWidget	dw = (DviWidget) w;	XGCValues	values;	if (dw->dvi.backing_store != Always + WhenMapped + NotUseful) {		attrs->backing_store = dw->dvi.backing_store;		*valueMask |= CWBackingStore;	}	XtCreateWindow (w, (unsigned)InputOutput, (Visual *) CopyFromParent,			*valueMask, attrs);	values.foreground = dw->dvi.foreground;	values.cap_style = CapRound;	values.join_style = JoinRound;	values.line_width = dw->dvi.line_width;	dw->dvi.normal_GC = XCreateGC (XtDisplay (w), XtWindow (w),				       GCForeground|GCCapStyle|GCJoinStyle				       |GCLineWidth,				       &values);	dw->dvi.gray = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),					     gray_bits,					     gray_width, gray_height);	values.background = dw->dvi.background;	values.stipple = dw->dvi.gray;	dw->dvi.fill_GC = XCreateGC (XtDisplay (w), XtWindow (w),				     GCForeground|GCBackground|GCStipple,				     &values);	dw->dvi.fill_type = DVI_FILL_BLACK;	if (dw->dvi.file)		OpenFile (dw);	ParseFontMap (dw);}static voidDestroy(w)	Widget w;{	DviWidget	dw = (DviWidget) w;	XFreeGC (XtDisplay (w), dw->dvi.normal_GC);	XFreeGC (XtDisplay (w), dw->dvi.fill_GC);	XFreePixmap (XtDisplay (w), dw->dvi.gray);	DestroyFontMap (dw->dvi.font_map);	DestroyFileMap (dw->dvi.file_map);	device_destroy (dw->dvi.device);}/* * Repaint the widget window *//* ARGSUSED */static voidRedisplay(w, event, region)	Widget w;	XEvent *event;	Region region;{	DviWidget	dw = (DviWidget) w;	XRectangle	extents;		XClipBox (region, &extents);	dw->dvi.extents.x1 = extents.x;	dw->dvi.extents.y1 = extents.y;	dw->dvi.extents.x2 = extents.x + extents.width;	dw->dvi.extents.y2 = extents.y + extents.height;	ShowDvi (dw);}/* * Set specified arguments into widget *//* ARGSUSED */static BooleanSetValues (current, request, new)	DviWidget current, request, new;{	Boolean		redisplay = FALSE;	char		*new_map;	int		cur, req;	if (current->dvi.font_map_string != request->dvi.font_map_string) {		new_map = XtMalloc (strlen (request->dvi.font_map_string) + 1);		if (new_map) {			redisplay = TRUE;			strcpy (new_map, request->dvi.font_map_string);			new->dvi.font_map_string = new_map;			if (current->dvi.font_map_string)				XtFree (current->dvi.font_map_string);			current->dvi.font_map_string = 0;			ParseFontMap (new);		}	}	req = request->dvi.requested_page;	cur = current->dvi.requested_page;	if (cur != req) {		if (!request->dvi.file)		    req = 0;		else {		    if (req < 1)			    req = 1;		    if (current->dvi.last_page != 0 &&			req > current->dvi.last_page)			    req = current->dvi.last_page;		}		if (cur != req)	    	    redisplay = TRUE;		new->dvi.requested_page = req;		if (current->dvi.last_page == 0 && req > cur)			FindPage (new);	}	return redisplay;}/* * use the set_values_hook entry to check when * the file is set */static BooleanSetValuesHook (dw, args, num_argsp)	DviWidget	dw;	ArgList		args;	Cardinal	*num_argsp;{	Cardinal	i;	for (i = 0; i < *num_argsp; i++) {		if (!strcmp (args[i].name, XtNfile)) {			CloseFile (dw);			OpenFile (dw);			return TRUE;		}	}	return FALSE;}static void CloseFile (dw)	DviWidget	dw;{	if (dw->dvi.tmpFile)		fclose (dw->dvi.tmpFile);	ForgetPagePositions (dw);}static void OpenFile (dw)	DviWidget	dw;{	char	tmpName[sizeof ("/tmp/dviXXXXXX")];	dw->dvi.tmpFile = 0;	if (!dw->dvi.seek) {		strcpy (tmpName, "/tmp/dviXXXXXX");		mktemp (tmpName);		dw->dvi.tmpFile = fopen (tmpName, "w+");		unlink (tmpName);	}	dw->dvi.requested_page = 1;	dw->dvi.last_page = 0;}static XtGeometryResultQueryGeometry (w, request, geometry_return)	Widget			w;	XtWidgetGeometry	*request, *geometry_return;{	XtGeometryResult	ret;	DviWidget		dw = (DviWidget) w;	ret = XtGeometryYes;	if (((request->request_mode & CWWidth)	     && request->width < MY_WIDTH(dw))	    || ((request->request_mode & CWHeight)		&& request->height < MY_HEIGHT(dw)))		ret = XtGeometryAlmost;	geometry_return->width = MY_WIDTH(dw);	geometry_return->height = MY_HEIGHT(dw);	geometry_return->request_mode = CWWidth|CWHeight;	return ret;}SetDevice (dw, name)	DviWidget	dw;	char 		*name;{	XtWidgetGeometry	request, reply;	XtGeometryResult ret;	ForgetFonts (dw);	dw->dvi.device = device_load (name);	if (!dw->dvi.device)		return;	dw->dvi.sizescale = dw->dvi.device->sizescale;	dw->dvi.device_resolution = dw->dvi.device->res;	dw->dvi.native = dw->dvi.device->X11;	dw->dvi.paperlength = dw->dvi.device->paperlength;	dw->dvi.paperwidth = dw->dvi.device->paperwidth;	if (dw->dvi.native) {		dw->dvi.display_resolution = dw->dvi.device_resolution;		dw->dvi.scale_factor = 1.0;	}	else {		dw->dvi.display_resolution = dw->dvi.default_resolution;		dw->dvi.scale_factor = ((double)dw->dvi.display_resolution					/ dw->dvi.device_resolution);	}	request.request_mode = CWWidth|CWHeight;	request.width = MY_WIDTH(dw);	request.height = MY_HEIGHT(dw);	ret = XtMakeGeometryRequest ((Widget)dw, &request, &reply);	if (ret == XtGeometryAlmost	    && reply.height >= request.height	    && reply.width >= request.width) {		request.width = reply.width;		request.height = reply.height;		XtMakeGeometryRequest ((Widget)dw, &request, &reply);	}}static voidShowDvi (dw)	DviWidget	dw;{	if (!dw->dvi.file) {		static char Error[] = "No file selected";		XSetFont (XtDisplay(dw), dw->dvi.normal_GC,			  dw->dvi.default_font->fid);		XDrawString (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,			     20, 20, Error, strlen (Error));		return;	}	FindPage (dw);		dw->dvi.display_enable = 1;	ParseInput (dw);	if (dw->dvi.last_page && dw->dvi.requested_page > dw->dvi.last_page)		dw->dvi.requested_page = dw->dvi.last_page;}static voidFindPage (dw)	DviWidget	dw;{	int	i;	long	file_position;	if (dw->dvi.requested_page < 1)		dw->dvi.requested_page = 1;	if (dw->dvi.last_page != 0 && dw->dvi.requested_page > dw->dvi.last_page)		dw->dvi.requested_page = dw->dvi.last_page;	file_position = SearchPagePosition (dw, dw->dvi.requested_page);	if (file_position != -1) {		FileSeek(dw, file_position);		dw->dvi.current_page = dw->dvi.requested_page;	} else {		for (i=dw->dvi.requested_page; i > 0; i--) {			file_position = SearchPagePosition (dw, i);			if (file_position != -1)				break;		}		if (file_position == -1)			file_position = 0;		FileSeek (dw, file_position);		dw->dvi.current_page = i;				dw->dvi.display_enable = 0;		while (dw->dvi.current_page != dw->dvi.requested_page) {			dw->dvi.current_page = ParseInput (dw);			/*			 * at EOF, seek back to the begining of this page.			 */			if (!dw->dvi.readingTmp && feof (dw->dvi.file)) {				file_position = SearchPagePosition (dw,						dw->dvi.current_page);				if (file_position != -1)					FileSeek (dw, file_position);				dw->dvi.requested_page = dw->dvi.current_page;				break;			}		}	}}void DviSaveToFile(w, fp)	Widget w;	FILE *fp;{	XtCheckSubclass(w, dviWidgetClass, NULL);	(*((DviWidgetClass) XtClass(w))->command_class.save)(w, fp);}staticvoid SaveToFile(w, fp)	Widget w;	FILE *fp;{	DviWidget dw = (DviWidget)w;	long pos;	int c;	if (dw->dvi.tmpFile) {		pos = ftell(dw->dvi.tmpFile);		if (dw->dvi.ungot) {			pos--;			dw->dvi.ungot = 0;			/* The ungot character is in the tmpFile, so we don't			   want to read it from file. */			(void)getc(dw->dvi.file);		}	}	else		pos = ftell(dw->dvi.file);	FileSeek(dw, 0L);	while (DviGetC(dw, &c) != EOF)		if (putc(c, fp) == EOF) {			/* XXX print error message */			break;		}	FileSeek(dw, pos);}staticvoid ClassPartInitialize(widget_class)	WidgetClass widget_class;{	DviWidgetClass wc = (DviWidgetClass)widget_class;	DviWidgetClass super = (DviWidgetClass) wc->core_class.superclass;	if (wc->command_class.save == InheritSaveToFile)		wc->command_class.save = super->command_class.save;}	/*Local Variables:c-indent-level: 8c-continued-statement-offset: 8c-brace-offset: -8c-argdecl-indent: 8c-label-offset: -8c-tab-always-indent: nilEnd:*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲一级片| 日韩不卡一二三区| 天堂影院一区二区| 国产精品一区一区| 欧美日本免费一区二区三区| 国产清纯在线一区二区www| 丝袜美腿亚洲一区| 日本精品裸体写真集在线观看| 精品国产麻豆免费人成网站| 综合久久久久久久| 国产精品原创巨作av| 日韩欧美国产系列| 五月天视频一区| 日本精品一区二区三区高清 | 成人欧美一区二区三区| 久久精品国产久精国产| 欧美色爱综合网| 一区二区三区波多野结衣在线观看| 国产九色sp调教91| 欧美成人激情免费网| 爽好多水快深点欧美视频| 在线观看www91| 国产精品白丝在线| yourporn久久国产精品| 久久久久久99久久久精品网站| 久久国产麻豆精品| 欧美成人精品福利| 精品一区二区三区在线播放视频| 8v天堂国产在线一区二区| 一级做a爱片久久| 色综合一区二区| 伊人性伊人情综合网| 91在线免费播放| 亚洲精品免费视频| 欧美午夜免费电影| 午夜电影网一区| 91精品国产综合久久精品图片| 视频精品一区二区| 欧美一级xxx| 国产一区二区三区免费看 | 韩国欧美国产一区| xnxx国产精品| 国产成人在线电影| 国产精品看片你懂得| 99国产欧美久久久精品| 亚洲国产精品天堂| 91精品国产综合久久精品| 麻豆国产欧美日韩综合精品二区| 欧美一区二区高清| 国产九九视频一区二区三区| 国产精品久久久一本精品| 91视频在线观看| 一区二区三区高清| 91精品婷婷国产综合久久性色| 日韩中文字幕av电影| 久久久国产精品麻豆| 97精品视频在线观看自产线路二| 亚洲一区二区在线视频| 6080国产精品一区二区| 国产高清精品久久久久| 一区二区三区日本| 欧美成人aa大片| 精品亚洲成a人| 精品国产免费人成在线观看| 欧美性大战久久| 婷婷久久综合九色综合绿巨人| 欧美大片日本大片免费观看| 国产在线播放一区| 亚洲一区二区三区视频在线 | 国产精品资源网| 亚洲一区二区三区四区在线免费观看| 91麻豆精品91久久久久同性| 国产91在线|亚洲| 亚洲国产精品一区二区久久恐怖片 | 91精品欧美久久久久久动漫 | 色婷婷亚洲一区二区三区| 天堂资源在线中文精品| 欧美韩国日本综合| 在线电影一区二区三区| 成人av电影在线网| 美国毛片一区二区三区| 亚洲免费观看高清完整版在线| 精品国产精品一区二区夜夜嗨| 91精品免费在线观看| 96av麻豆蜜桃一区二区| 紧缚奴在线一区二区三区| 亚洲国产日韩精品| 中文字幕中文乱码欧美一区二区| 欧美一区二区三区喷汁尤物| 91美女在线看| 国产电影一区在线| 韩国女主播一区二区三区| 亚洲大型综合色站| 中文字幕一区二区在线播放| 欧美v国产在线一区二区三区| 欧美性xxxxx极品少妇| 不卡免费追剧大全电视剧网站| 麻豆成人av在线| 视频一区免费在线观看| 亚洲精品乱码久久久久| 亚洲欧洲无码一区二区三区| 久久精品在线免费观看| 久久夜色精品国产噜噜av | 久久日韩精品一区二区五区| 欧美剧情片在线观看| 色婷婷国产精品| 99精品在线观看视频| 9久草视频在线视频精品| 国产激情一区二区三区四区| 激情五月婷婷综合| 国产真实乱偷精品视频免| 美女视频一区二区三区| 日本亚洲一区二区| 美女一区二区久久| 免费人成在线不卡| 激情综合色播五月| 国产精品18久久久久久久久| 国产精品中文字幕日韩精品| 国产91精品一区二区| 成人高清免费在线播放| 99视频一区二区| 在线观看日韩毛片| 精品视频色一区| 91精品国产综合久久精品app| 欧美一级搡bbbb搡bbbb| 欧美精品一区二区三区蜜臀| 久久―日本道色综合久久| 久久久综合网站| 国产精品久久毛片av大全日韩| 亚洲欧洲三级电影| 亚洲另类春色国产| 日韩av一级电影| 国产高清不卡一区二区| 成人的网站免费观看| 成人丝袜18视频在线观看| 99精品久久免费看蜜臀剧情介绍| 欧美吞精做爰啪啪高潮| 欧美精品日韩一本| 久久久国产一区二区三区四区小说 | 欧美日韩一级大片网址| 日韩三区在线观看| 中文字幕精品—区二区四季| 精久久久久久久久久久| 成人av资源站| 欧美精品123区| 日本一区二区动态图| 亚洲综合一区二区三区| 极品美女销魂一区二区三区| 99视频一区二区三区| 欧美一区二区三区的| 中文字幕乱码一区二区免费| 午夜精品国产更新| 国产成人精品免费看| 欧美四级电影网| 久久九九久精品国产免费直播| 亚洲女厕所小便bbb| 精品在线一区二区三区| 色噜噜夜夜夜综合网| 欧美电影免费观看高清完整版在线观看| 国产精品视频观看| 美女一区二区三区在线观看| 91色乱码一区二区三区| 日韩欧美国产电影| 一个色在线综合| 成人自拍视频在线观看| 日韩一区二区中文字幕| 一区二区三区欧美视频| 粉嫩aⅴ一区二区三区四区| 欧美乱妇20p| 亚洲欧美自拍偷拍色图| 国模一区二区三区白浆| 欧美精品粉嫩高潮一区二区| 国产精品日产欧美久久久久| 美国毛片一区二区| 欧美日韩免费观看一区二区三区| 国产欧美日韩另类一区| 捆绑变态av一区二区三区| 欧美日韩激情一区二区| 亚洲欧美日韩中文字幕一区二区三区| 久久97超碰色| 5月丁香婷婷综合| 亚洲电影激情视频网站| 日本黄色一区二区| 亚洲欧美日韩在线| 成人黄色小视频在线观看| 久久亚洲免费视频| 极品销魂美女一区二区三区| 91麻豆精品国产无毒不卡在线观看 | 一本高清dvd不卡在线观看| 日本一区二区三区在线观看| 久草中文综合在线| 56国语精品自产拍在线观看| 婷婷综合另类小说色区| 欧美日韩精品电影| 亚洲国产精品久久久久婷婷884| 99麻豆久久久国产精品免费| 国产精品久久久久精k8 | 日本一区免费视频| 国产白丝精品91爽爽久久| 久久影院午夜论|