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

📄 qmenu.c

📁 国外网站上的一些精典的C程序
💻 C
字号:
/* *  QuickMenu VidMgr demonstration application. * *  Written in June 1996 by Andrew Clarke and released to the public domain. * *  Currently assumes 80x25 video output, but may be rewritten to *  recognise other video dimensions. */#include <stdio.h>#include <stdlib.h>#include <string.h>#include "vidmgr.h"#include "vioimage.h"#define maxx  vm_getscreenwidth()#define maxy  vm_getscreenheight()#define PROG     "QuickMenu"#define VERSION  "1.2"#define MAXITEMS 12typedef struct{    char desc[40];    char cmd[250];}MENUDATA;static VIOIMAGE sysimage;static MENUDATA menudata[MAXITEMS];static int menuitems, curritem, olditem;int qmenuLoadMenu(char *fnm){    FILE *fp;    int item, line;    fp = fopen(fnm, "r");    if (fp == NULL)    {    	perror(fnm);    	return 0;    }    item = 0;    line = 1;    while (item < MAXITEMS && !feof(fp))    {    	char *p;    	    	if (fgets(menudata[item].desc, 40, fp) == NULL)    	{    	    break;    	}    	p = strrchr(menudata[item].desc, '\n');    	if (p != NULL)    	{    	    *p = '\0';    	}    	if (*menudata[item].desc == '\0')    	{            printf("%s(%d): Error! Expected description but found ''\n", fnm, line);            return 0;        }    	line++;    	if (fgets(menudata[item].cmd, 250, fp) == NULL)        {            printf("%s(%d): Error! Expected command but reached end of file\n", fnm, line);            return 0;        }    	p = strrchr(menudata[item].cmd, '\n');    	if (p != NULL)    	{    	    *p = '\0';    	}            	if (*menudata[item].cmd == '\0')    	{            printf("%s(%d): Error! Expected command but found ''\n", fnm, line);            return 0;        }        line++;        item++;    }    fclose(fp);    menuitems = item;    return 1;}void qmenuRun(void){    int done, ch;    FILE *ofp;    char qmtmpfnm[12];    #if defined(OS2)    strcpy(qmtmpfnm, "$qmtemp.cmd");#elif defined(EMX)    if (_osmode == DOS_MODE)    {        strcpy(qmtmpfnm, "$qmtemp.bat");    }    else    {        strcpy(qmtmpfnm, "$qmtemp.cmd");    }#else    strcpy(qmtmpfnm, "$qmtemp.bat");#endif    vm_attrib(24, (char) (7 + curritem), 56, (char) (7 + curritem), vm_mkcolor(WHITE, BLACK));    done = 0;    while (!done)    {    	if (curritem != olditem)    	{            vm_attrib(24, (char) (7 + olditem), 56, (char) (7 + olditem), vm_mkcolor(BLACK, LIGHTGRAY));            vm_attrib(24, (char) (7 + curritem), 56, (char) (7 + curritem), vm_mkcolor(WHITE, BLACK));        }        while (!vm_kbhit())        {            /* nada */        }        ch = vm_getch();        switch (ch)        {        case 0x3b00:    /* F1 */            /* nada */            break;        case 0x4800:    /* up arrow */            olditem = curritem;            if (curritem != 0)            {                curritem--;            }            break;        case 0x5000:    /* down arrow */            olditem = curritem;            if (curritem != menuitems - 1)            {                curritem++;            }            break;        case 0x4700:    /* Home */            olditem = curritem;            curritem = 0;            break;        case 0x4f00:    /* End */            olditem = curritem;            curritem = menuitems - 1;            break;        case 0x001b:    /* Escape */        case 0x3d00:    /* F3 */        case 0x4400:    /* F10 */        case 0x6b00:    /* Alt+F4 */        case 0x2d00:    /* Alt+X */            remove(qmtmpfnm);            done = 1;            break;        case 0x000d:    /* Enter */            ofp = fopen(qmtmpfnm, "w");            fputs("@echo off\n", ofp);            fputs(menudata[curritem].cmd, ofp);            fputs("\n", ofp);            fputs("qm\n", ofp);            fclose(ofp);            done = 1;            break;                    default:            break;        }    }}void qmenuTerm(void){    vioImageRestore(&sysimage, 1, 1);    vioImageTerm(&sysimage);    vm_gotoxy(vm_startup.xpos, vm_startup.ypos);    vm_done();}void qmenuInit(void){    int item;    printf("\n" PROG " " VERSION "; Written in June 1996 by Andrew Clarke.\n");    printf("Released to the public domain.\n");    vm_init();    vioImageDefaults(&sysimage);    vioImageInit(&sysimage, maxx, maxy);    vioImageSave(&sysimage, 1, 1);    if (qmenuLoadMenu("qmenu.mnu") != 1)    {        vm_done();    	exit(EXIT_FAILURE);    }    vm_setcursorstyle(CURSORHIDE);    vm_attrib(22, 6, 62, 21, vm_mkcolor(LIGHTGRAY, BLACK));    vm_paintclearbox(20, 5, 60, 20, vm_mkcolor(BLACK, LIGHTGRAY));    vm_frame(23, 6, 57, 19, vm_mkcolor(BLACK, LIGHTGRAY), vm_frame_double);    for (item = 0; item < menuitems; item++)    {        vm_puts(25, (char) (7 + item), menudata[item].desc);    }}int main(void){    qmenuInit();    qmenuRun();    qmenuTerm();    return 0;}

⌨️ 快捷键说明

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