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

📄 print.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
/*	Copyright (c) 1984 AT&T	*//*	  All Rights Reserved  	*//*	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T	*//*	The copyright notice above does not evidence any   	*//*	actual or intended publication of such source code.	*/#ifndef lintstatic	char sccsid[] = "@(#)print.c 1.1 92/07/30 SMI"; /* from S5R3 1.6 */#endif#include "curses.h"#include "print.h"/* local externs */extern char *iexpand();extern char *cexpand();extern char *infotocap();/* externs from libc */extern int strlen();/* global variables */static enum printtypes printing = pr_none;static int onecolumn = 0;		/* print a single column */static int width = 60;			/* width of multi-column printing */static int restrict = 1;		/* restrict termcap names *//* local variables */static int printed = 0;static int caplen = 0;void pr_init(type)enum printtypes type;{    printing = type;}void pr_onecolumn(onoff)int onoff;{    onecolumn = onoff;}void pr_width(nwidth)int nwidth;{    if (nwidth > 0)        width = nwidth;}void pr_caprestrict(onoff)int onoff;{    restrict = onoff;}static char capbools[] =    "ambsbwdadbeoeshchshzinkmmimsncnsosptulxbxnxoxsxt";static int ncapbools = sizeof(capbools) / sizeof(capbools[0]);static char capnums[] =    "codBdCdFdNdTknlipbsgug";static int ncapnums = sizeof(capnums) / sizeof(capnums[0]);static char capstrs[] =    "ALDCDLDOICLERISFSRUPaealasbcbtcdcechclcmcsctcvdcdldmdsedeifshoi1i2icifimipisk0k1k2k3k4k5k6k7k8k9kbkdkekhklkokrkskul0l1l2l3l4l5l6l7l8l9ndnlpcr1r2r3rcrfrpscsesosrsttetitsucueupusvbvevivs";static int ncapstrs = sizeof(capstrs) / sizeof(capstrs[0]);static int findcapname(capname, caplist, listsize)char *capname, *caplist;int listsize;{    int low = 0, mid, high = listsize - 2;    while (low <= high)        {	mid = (low + high) / 4 * 2;	if (capname[0] == caplist[mid])	    {	    if (capname[1] == caplist[mid + 1])	        return 1;	    else if (capname[1] < caplist[mid + 1])	        high = mid - 2;	    else	        low = mid + 2;	    }	else if (capname[0] < caplist[mid])	    high = mid - 2;	else	    low = mid + 2;	}    return 0;/*    for ( ; *caplist ; caplist += 2)	if (caplist[0] == capname[0] && caplist[1] == capname[1])	    return 1;    return 0;*/}/*    Print out the first line of an entry.*/void pr_heading (term, synonyms)register char *term, *synonyms;{    switch ((int) printing)        {	case (int) pr_terminfo:	    (void) printf ("%s,\n", synonyms);	    break;	case (int) pr_cap:	    (void) printf ("%s:\\\n", synonyms);	    caplen = strlen(synonyms) + 1;	    break;	case (int) pr_longnames:	    (void) printf ("Terminal type %s\n", term);	    (void) printf ("  %s\n", synonyms);	    break;	}}void pr_bheading(){    if (printing == pr_longnames)	(void) printf ("flags\n");    printed = 0;}void pr_boolean (infoname, capname, fullname, value)char *infoname, *capname, *fullname;int value;{    int nlen, vlen;    if (printing == pr_cap && restrict &&        !findcapname(capname, capbools, ncapbools))        return;            if (onecolumn)	{	if (value < 0)	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("\t%s@,\n", infoname);		    break;		case (int) pr_cap:		    (void) printf ("\t:%s@:\\\n", capname);		    caplen += 4 + strlen(capname);		    break;		case (int) pr_longnames:		    (void) printf ("  %s@\n", fullname);		}	else	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("\t%s,\n", infoname);		    break;		case (int) pr_cap:		    (void) printf ("\t:%s:\\\n", capname);		    caplen += 3 + strlen(capname);		    break;		case (int) pr_longnames:		    (void) printf ("  %s\n", fullname);	        }	}    else	{	switch ((int) printing)	    {	    case (int) pr_terminfo:	nlen = strlen(infoname);break;	    case (int) pr_cap:		nlen = strlen(capname);	break;	    case (int) pr_longnames:	nlen = strlen(fullname);break;	    }	vlen = (value < 0) ? 1 : 0;	if ((printed > 0) && (printed + nlen + vlen + 1 > width))	    {	    switch ((int) printing)	        {		case (int) pr_terminfo:		case (int) pr_longnames:		    (void) printf ("\n");		    break;		case (int) pr_cap:	            (void) printf (":\\\n");		    caplen += 1;		}	    printed = 0;	    }	if (printed == 0)	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("\t");		    printed = 8;		    break;		case (int) pr_cap:		    (void) printf ("\t:");		    printed = 9;		    caplen += 2;		    break;		case (int) pr_longnames:		    (void) printf ("  ");		    printed = 2;		}	else	    {	    switch ((int) printing)	        {		case (int) pr_terminfo:		case (int) pr_longnames:		    (void) printf (" ");		    break;		case (int) pr_cap:		    (void) printf (":");		    caplen += 1;		}	    printed++;	    }	if (value < 0)	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("%s@,", infoname);		    printed += nlen + 2;		    break;		case (int) pr_cap:		    (void) printf ("%s@", capname);		    printed += nlen + 1;		    caplen += nlen + 1;		    break;		case (int) pr_longnames:		    (void) printf ("%s@,", fullname);		    printed += nlen + 2;	        }	else	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("%s,", infoname);		    printed += nlen + 1;		    break;		case (int) pr_cap:		    (void) printf ("%s", capname);		    printed += nlen;		    caplen += nlen;		    break;		case (int) pr_longnames:		    (void) printf ("%s,", fullname);		    printed += nlen + 1;		}	}}void pr_bfooting(){    if (!onecolumn && (printed > 0))	switch ((int) printing)	    {	    case (int) pr_terminfo:	    case (int) pr_longnames:	        (void) printf ("\n");		break;	    case (int) pr_cap:	        (void) printf (":\\\n");		caplen += 1;	    }}void pr_nheading(){    if (printing == pr_longnames)	(void) printf ("\nnumbers\n");    printed = 0;}/*    Return the length of the number if it were printed out    with %d. The number is guaranteed to be in the range    0..maxshort.*/static int digitlen(value)int value;{    return value >= 10000 ? 5 :       value >=  1000 ? 4 :       value >=   100 ? 3 :       value >=    10 ? 2 :        value >=     0 ? 1 : 0;}void pr_number (infoname, capname, fullname, value)char *infoname, *capname, *fullname;int value;{    int nlen, vlen;    if (printing == pr_cap && restrict &&        !findcapname(capname, capnums, ncapnums))        return;            if (onecolumn)	{	if (value < 0)	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("\t%s@,\n", infoname);		    break;		case (int) pr_cap:		    (void) printf ("\t:%s@:\\\n", capname);		    caplen += 4 + strlen(capname);		    break;		case (int) pr_longnames:		    (void) printf ("  %s @\n", fullname);	        }	else	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("\t%s#%d,\n", infoname, value);		    break;		case (int) pr_cap:		    (void) printf ("\t:%s#%d:\\\n", capname, value);		    caplen += 4 + strlen(capname) + digitlen(value);		    break;		case (int) pr_longnames:		    (void) printf ("  %s = %d\n", fullname, value);	        }	}    else	{	switch ((int) printing)	    {	    case (int) pr_terminfo:	nlen = strlen(infoname); break;	    case (int) pr_cap:		nlen = strlen(capname); break;	    case (int) pr_longnames:	nlen = strlen(fullname); break;	    }	vlen = digitlen(value);	if ((printed > 0) && (printed + nlen + vlen + 2 > width))	    {	    switch ((int) printing)	        {		case (int) pr_terminfo:		case (int) pr_longnames:	            (void) printf ("\n");		    break;		case (int) pr_cap:	            (void) printf (":\\\n");		    caplen += 1;		}	    printed = 0;	    }	if (printed == 0)	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("\t");		    printed = 8;		    break;		case (int) pr_cap:		    (void) printf ("\t:");		    printed = 9;		    caplen += 2;		    break;		case (int) pr_longnames:		    (void) printf ("  ");		    printed = 2;	        }	else	    {	    switch ((int) printing)	        {		case (int) pr_terminfo:		case (int) pr_longnames:		    (void) printf (" ");		    break;		case (int) pr_cap:		    (void) printf (":");		    caplen += 1;		}	    printed++;	    }	if (value < 0)	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("%s@,", infoname);		    printed += nlen + 2;		    break;		case (int) pr_cap:		    (void) printf ("%s@", capname);		    printed += nlen + 1;		    caplen += nlen + 1;		    break;		case (int) pr_longnames:		    (void) printf ("%s@,", fullname);		    printed += nlen + 2;	        }	else	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("%s#%d,", infoname, value);		    printed += nlen + vlen + 2;		    break;		case (int) pr_cap:		    (void) printf ("%s#%d", capname, value);		    printed += nlen + vlen + 1;		    caplen += nlen + vlen + 1;		    break;		case (int) pr_longnames:		    (void) printf ("%s = %d,", fullname, value);		    printed += nlen + vlen + 4;	        }	}}void pr_nfooting(){    if (!onecolumn && (printed > 0))	switch ((int) printing)	    {	    case (int) pr_terminfo:	    case (int) pr_longnames:	        (void) printf ("\n");		break;	    case (int) pr_cap:	        (void) printf (":\\\n");		caplen += 1;	    }}void pr_sheading(){    if (printing == pr_longnames)	(void) printf ("\nstrings\n");    printed = 0;}void pr_string (infoname, capname, fullname, value)char *infoname, *capname, *fullname;char *value;{    register char *evalue;    int nlen, vlen, badcapvalue;    if (printing == pr_cap)        {	if(restrict && !findcapname(capname, capstrs, ncapstrs))            return;	if (value)	    value = infotocap(value, &badcapvalue);	}            if (onecolumn)	{	if (value == NULL)	    switch ((int) printing)	        {		case (int) pr_terminfo:	            (void) printf ("\t%s@,\n", infoname);		    break;		case (int) pr_cap:	            (void) printf ("\t:%s@:\\\n", capname);		    caplen += 4 + strlen(capname);		    break;		case (int) pr_longnames:	            (void) printf ("  %s@\n", fullname);	        }	else	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("\t%s=", infoname);		    tpr (stdout, value);		    (void) printf (",\n");		    break;		case (int) pr_cap:		    (void) printf ("\t:%s%s=", badcapvalue ? "." : "",			capname);		    caplen += 3 + strlen(capname) + (badcapvalue ? 1 : 0);		    caplen += cpr (stdout, value);		    (void) printf (":\\\n");		    caplen += 1;		    break;		case (int) pr_longnames:		    (void) printf ("  %s = '", fullname);		    tpr (stdout, value);		    (void) printf ("'\n");		}	}    else	{	switch ((int) printing)	    {	    case (int) pr_terminfo:	        nlen = strlen(infoname);		break;	    case (int) pr_cap:	        nlen = strlen(capname);		if (badcapvalue)		    nlen++;		break;	    case (int) pr_longnames:	        nlen = strlen(fullname);	    }	if (value == NULL)	    vlen = 1;	else	    if (printing == pr_cap)	        vlen = strlen(evalue = cexpand(value));	    else	        vlen = strlen(evalue = iexpand(value));	if ((printed > 0) && (printed + nlen + vlen + 1 > width))	    {	    switch ((int) printing)	        {		case (int) pr_terminfo:		case (int) pr_longnames:		    (void) printf ("\n");		    break;		case (int) pr_cap:	            (void) printf (":\\\n");		    caplen += 1;		}	    printed = 0;	    }	if (printed == 0)	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("\t");		    printed = 8;		    break;		case (int) pr_cap:		    (void) printf ("\t:");		    printed = 9;		    caplen += 2;		    break;		case (int) pr_longnames:		    (void) printf ("  ");		    printed = 2;	        }	else	    {	    switch ((int) printing)	        {		case (int) pr_terminfo:		case (int) pr_longnames:		    (void) printf (" ");		    break;		case (int) pr_cap:		    (void) printf (":");		    caplen += 1;		}	    printed++;	    }	if (value == NULL)	    {	    switch ((int) printing)	        {		case (int) pr_terminfo:	            (void) printf ("%s@,", infoname);		    printed += nlen + 2;		    break;		case (int) pr_cap:	            (void) printf ("%s@", capname);		    printed += nlen + 1;		    caplen += nlen + 1;		    break;		case (int) pr_longnames:	            (void) printf ("%s@,", fullname);		    printed += nlen + 2;		}	    }	else	    switch ((int) printing)	        {		case (int) pr_terminfo:		    (void) printf ("%s=%s,", infoname, evalue);		    printed += nlen + vlen + 2;		    break;		case (int) pr_cap:		    if (badcapvalue)		        {			(void) printf (".");			caplen += 1;			}		    (void) printf ("%s=%s", capname, evalue);		    printed += nlen + vlen + 1;		    caplen += nlen + vlen + 1;		    break;		case (int) pr_longnames:		    (void) printf ("%s = '%s',", fullname, evalue);		    printed += nlen + vlen + 6;		}	}}void pr_sfooting(){    if (onecolumn)	{	if (printing == pr_cap)	    (void) printf ("\n");	}    else	{	if (printed > 0)	    switch ((int) printing)	        {		case (int) pr_terminfo:		case (int) pr_longnames:		    (void) printf ("\n");		    break;		case (int) pr_cap:		    (void) printf (":\n");		    caplen += 1;	        }	}    if (caplen >= 1024)        {	extern char *progname;	(void) fprintf (stderr, "%s: WARNING: termcap entry is too long!\n",	    progname);	}    if (printing == pr_longnames)	(void) printf ("end of strings\n");}

⌨️ 快捷键说明

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