资源描述:
《unix环境下非图形终端上的通用下拉弹出式菜单工具论文》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、UNIX环境下非图形终端上的通用下拉弹出式菜单工具论文.freelalloc()、calloc()),动态地从中获得所需空间。由指针指向被分配的内存块,使之可作为变量空间使用。当该内存空间无用时,可利用内存释放函数free()释放指针所指向的内存块。而数据结构中链表的特点是:逻辑上相邻的元素在物理上不一定相邻,数据元素之间的逻辑关系是由结点中的指针指示的,换句话说,指针为数据元素之间的逻辑关系的映像。它是一种动态结构,链表所占用的空间不需预先分配,而是由系统应需求即时生成。2.用双向循环链表实现菜单功能下拉
2、弹出式菜单系统系在顶端水平显示包含各主功能选项的菜单条行,用户可以利用$-→键或←键移动并回车选择所需的主功能选项,而被选取的主功能选项将会显示其相关的子功能选项在下拉的弹出式菜单框中。同级菜单的功能选项形成一闭合循环,即:当用户利用↑(或↓)键移动高亮度反白亮条至同级功能选项的顶(或底)部时,再往上(或下)移动,则高亮度反白条将自动返回底(或顶)部。子菜单可在该级任一功能选项上按"q"键返回其父菜单。为了实现这一功能,采用双向式循环链表作为该软件的基本数据结构。将一个窗口下的菜单(仅有一个)作为一相对独立
3、的双向循环链表,即:同一级的菜单以各功能选项信息的结构体形式为结点,构造成双向循环链表。各菜单之间(即:相对独立的双向循环链表之间)又有父子关系,采用C语言的指针机制使各链表有机地连结成网。基于此,菜单便可"大"可"小",可"深"可"浅"("大":指菜单项目多,反之为"小";"深":指子菜单嵌套层数多)。3.创建与控制屏幕窗口与许多操作系统只在汇编语言级向用户提供系统调用的接口不同,UNIX不仅在汇编语言级,而且在程序设计语言C中提供了这种接口。这给编程者提供了很大方便。笔者充分利用此特点,借助AIX操作系
4、统(V3.2.5)提供的CURSES库完成屏幕窗口的创建与操纵。CURSES库是一组屏幕控制子程序,它允许用C程序调用这些子程序去控制终端的输入与输出。由此提供给用户友好的界面。由于CURSES库是一个较为复杂的问题,因此本文不作详细论述,有关这方面的内容,请读者参考相应的书籍。通过以上分析,笔者想到了一种应用内存分配(指针)和链表相结合来实现变量的动态定义,利用C语言的递归调用最终实现程序通用性的方法。现将该方法与程序提供出来供大家参考。三、具体方法1.先根据相应的text文件内容创建双向循环链表网;2.
5、再用自定义函数menu()实现对该链表网的应用。详见程序清单和text文件示例。(1)下拉弹出式菜单程序清单(以e20,subtitl30,mbegin,mend;inttlin,tcol,subhigh,sub,*parem,*paret;ain()/*主函数*/{structlink*creat();voidmenu();charfname10,tname30;intain.txt","r"))==NULL){exit(0);}fscanf(fp1,"%s%d%d%s%d%d%d%d%s/n",fnam
6、e,tlin,tcol,tname,hi,head=creat(fname,NULL,NULL);/*创建双向循环链表网*/menu(mhead,NULL,tlin,tcol,tname,hi,enu(head,parevend!='T';)/*菜单显示*/{p-pend!='T';){mvvvp(stoutprname,"exit")==0){p(stoutprname,"null.exe")!=0){(stoutprname);!=NULL)/*递归调用*/{enu(stoutsubm,;enu,par
7、emenu,pareitem)charsubmenu10;structlink*paremenu;structlink*pareitem;{intn;structlinkmenu1;structlink*head;structlink*p1,*p2;FILE*fp;charsubname60;strcpy(subname,NULL);strcpy(subname,tree);strcat(subname,submenu);if((fp=fopen(subname,"r"))==NULL){exit(0);}
8、head=NULL;n=1;for(;!feof(fp);){fscanf(fp,"%s%d%d%s%d%d%s%d%d%d%d%s/n",menu1.str,menu1.lin,menu1.col,menu1.subp,menu1.tlin,menu1.tcol,menu1.subtitl,menu1.subhigh,menu1.subenu1.sublin,menu1.subcol,menu1.prname)