value = setjmp(jumper); if (value != 0) { printf("Longjmp with value %d/n", value); exit(value); } printf("About to call subroutine ... /n"); subroutine(); return 0; }
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int color, maxcolor, ht; int y = 10; char msg[80];
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s/n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
maxcolor = getmaxcolor();
ht = 2 * textheight("W");
/* display the default colors */ for (color=1; color<=maxcolor; color++) { setcolor(color); sprintf(msg, "Color: %d", color); outtextxy(1, y, msg); y += ht; }
/* wait for a key */ getch();
/* black out the colors one by one */ for (color=1; color<=maxcolor; color++) { setpalette(color, BLACK); getch(); }
/* clean up */ closegraph(); return 0; }
函数名: setrgbpalette 功 能: 定义IBM8514图形卡的颜色 用 法: void far setrgbpalette(int colornum, int red, int green, int blue); 程序例:
int main(void) { /* select a driver and mode that supports the use */ /* of the setrgbpalette function. */ int gdriver = VGA, gmode = VGAHI, errorcode; struct palettetype pal; int i, ht, y, xmax;
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s/n", grapherrormsg(errorcode));
printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
/* grab a copy of the palette */ getpalette(&pal);
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int midx, midy, hj, vj; char msg[80];
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s/n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
midx = getmaxx() / 2; midy = getmaxy() / 2;
/* loop through text justifications */ for (hj=LEFT_TEXT; hj<=RIGHT_TEXT; hj++) for (vj=LEFT_TEXT; vj<=RIGHT_TEXT; vj++) { cleardevice(); /* set the text justification */ settextjustify(hj, vj);
/* the names of the text styles supported */ char *fname[] = { "DEFAULT font", "TRipLEX font", "SMALL font", "SANS SERIF font", "GOTHIC font" };
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int style, midx, midy; int size = 1;
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s/n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
midx = getmaxx() / 2; midy = getmaxy() / 2;
settextjustify(CENTER_TEXT, CENTER_TEXT);
/* loop through the available text styles */ for (style=DEFAULT_FONT; style<=GOTHIC_FONT; style++) { cleardevice(); if (style == TRIPLEX_FONT) size = 4;
/* select the text style */ settextstyle(style, HORIZ_DIR, size);
/* output a message */ outtextxy(midx, midy, fname[style]); getch(); }
/* clean up */ closegraph(); return 0; }
函数名: settextstyle 功 能: 为图形输出设置当前的文本属性 用 法: void far settextstyle (int font, int direction, char size); 程序例:
/* the names of the text styles supported */ char *fname[] = { "DEFAULT font", "TRIPLEX font", "SMALL font", "SANS SERIF font", "GOTHIC font" };
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int style, midx, midy;
int size = 1;
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s/n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
midx = getmaxx() / 2; midy = getmaxy() / 2;
settextjustify(CENTER_TEXT, CENTER_TEXT);
/* loop through the available text styles */ for (style=DEFAULT_FONT; style<=GOTHIC_FONT; style++) { cleardevice(); if (style == TRIPLEX_FONT) size = 4;
/* select the text style */ settextstyle(style, HORIZ_DIR, size);
/* output a message */ outtextxy(midx, midy, fname[style]); getch(); }
gettime(&t); printf("The current minute is: %d/n", t.ti_min);
printf("The current hour is: %d/n", t.ti_hour); printf("The current hundredth of a second is: %d/n", t.ti_hund); printf("The current second is: %d/n", t.ti_sec);
/* Add one to the minutes struct element and then call settime */ t.ti_min++; settime(&t);
return 0; }
函数名: setusercharsize 功 能: 为矢量字体改变字符宽度和高度 用 法: void far setusercharsize(int multx, int dirx, int multy, int diry); 程序例:
int main(void) { /* request autodetection */ int gdriver = DETECT, gmode, errorcode;
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s/n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
/* select a text style */ settextstyle(TRIPLEX_FONT, HORIZ_DIR, 4);
/* move to the text starting position */ moveto(0, getmaxy() / 2);
/* output some normal text */ outtext("Norm ");
/* make the text 1/3 the normal width */
setusercharsize(1, 3, 1, 1); outtext("Short ");
/* make the text 3 times normal width */ setusercharsize(3, 1, 1, 1); outtext("Wide");
/* clean up */ getch(); closegraph(); return 0; }
函数名: setvbuf 功 能: 把缓冲区与流相关 用 法: int setvbuf(FILE *stream, char *buf, int type, unsigned size); 程序例:
#include <stdio.h>
int main(void) { FILE *input, *output; char bufr[512];
/* set up input stream for minimal disk access, using our own character buffer */ if (setvbuf(input, bufr, _IOFBF, 512) != 0) printf("failed to set up buffer for input file/n"); else printf("buffer set up for input file/n");
/* set up output stream for line buffering using space that will be oBTained through an indirect call to malloc */ if (setvbuf(output, NULL, _IOLBF, 132) != 0) printf("failed to set up buffer for output file/n"); else printf("buffer set up for output file/n");
/***NOTE: This is an interrupt service routine. You can NOT compile this program with Test Stack Overflow turned on and get an executable file which will Operate correctly. */
#define CLIP_ON 1 /* activates clipping in viewport */
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode;
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s/n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
setcolor(getmaxcolor());
/* message in default full-screen viewport */ outtextxy(0, 0, "* <-- (0, 0) in default viewport");
int main(void) { /* select a driver and mode that supports */ /* multiple pages. */ int gdriver = EGA, gmode = EGAHI, errorcode; int x, y, ht;
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s/n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
x = getmaxx() / 2; y = getmaxy() / 2; ht = textheight("W");
/* select the off screen page for drawing */ setactivepage(1);
/* draw a line on page #1 */ line(0, 0, getmaxx(), getmaxy());
/* output a message on page #1 */ settextjustify(CENTER_TEXT, CENTER_TEXT); outtextxy(x, y, "This is page #1:"); outtextxy(x, y+ht, "Press any key to halt:");
/* select drawing to page #0 */ setactivepage(0);
/* output a message on page #0 */ outtextxy(x, y, "This is page #0."); outtextxy(x, y+ht, "Press any key to view page #1:"); getch();
/* select page #1 as the visible page */ setvisualpage(1);
int main() { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int xmax, ymax;
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s/n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
函数名: signal 功 能: 设置某一信号的对应动作 用 法: int signal(int sig, sigfun fname); 程序例:
/* This example installs a signal handler routine for SIGFPE, catches an integer overflow condition, makes an adjustment to AX register, and returns. This example program MAY cause your computer to crash, and will produce runtime errors depending on which memory model is used. */
void Catcher(int sig, int type, int *reglist) { printf("Caught it!/n"); *(reglist + 8) = 3; /* make return AX = 3 */ }
int main(void) { signal(SIGFPE, Catcher); asm mov ax,07FFFH /* AX = 32767 */ asm inc ax /* cause overflow */ asm into /* activate handler */
/* The handler set AX to 3 on return. If that hadn't happened,
there would have been another exception when the next 'into' was executed after the 'dec' instruction. */ asm dec ax /* no overflow now */ asm into /* doesn't activate */ return 0; }