source: trunk/dll/menu.c@ 123

Last change on this file since 123 was 123, checked in by root, 21 years ago

Rework lstrip/rstrip usage

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.3 KB
Line 
1
2/***********************************************************************
3
4 $Id: menu.c 123 2004-12-05 00:20:19Z root $
5
6 Custom menu support routines for FM/2
7
8 Copyright (c) 1996-98 M. Kimes
9 Copyright (c) 2004 Steven H.Levine
10
11 Revisions 01 Aug 04 SHL - Rework lstrip/rstrip usage
12
13***********************************************************************/
14
15#define INCL_DOS
16#define INCL_WIN
17
18#include <os2.h>
19#include <stdio.h>
20#include <stdlib.h>
21#include <string.h>
22#include <share.h>
23#include "fm3dll.h"
24#include "menu.h"
25
26#pragma data_seg(DATA2)
27#pragma alloc_text(MENU,tokenize,FreeMenuList,AddToMenu)
28
29MENU *menuhead = NULL;
30
31
32INT tokenize (CHAR *str,INT max,CHAR **tokens) {
33
34 INT x = 0;
35 CHAR *p;
36
37 if(str && max && tokens) {
38 p = str;
39 for(;;) {
40 p = skip_delim(p," \t");
41 if(!p)
42 break;
43 tokens[x++] = p;
44 if(x == max)
45 break;
46 p = to_delim(p," \t");
47 if(!p)
48 break;
49 *p = 0;
50 p++;
51// saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"\"%s\"\r\r%d",tokens[x - 1],x);
52 if(!*p)
53 break;
54 }
55 }
56 return x;
57}
58
59
60VOID FreeMenuList (MENU *head) {
61
62 MENU *info,*next;
63
64 info = head;
65 while(info) {
66 next = info->next;
67 if(info->text)
68 free(info->text);
69 free(info);
70 info = next;
71 }
72}
73
74
75BOOL AddToMenu (CHAR *filename,HWND hwndMenu) {
76
77 FILE *fp;
78 CHAR s[256];
79 CHAR *tokens[3];
80 INT lines = 0;
81 MENU *info,*last = NULL;
82 BOOL ret = FALSE;
83
84 if(!hwndMenu)
85 return ret;
86 if(!filename)
87 filename = "FM3MENU.DAT";
88 fp = _fsopen(filename,"r",SH_DENYWR);
89 if(fp) {
90 while(!feof(fp)) {
91 if(!fgets(s,256,fp))
92 break;
93 lines++;
94 bstripcr(s);
95 if(!*s || *s == ';')
96 continue;
97 if(tokenize(s,3,tokens) == 3 && (USHORT)atoi(tokens[1])) {
98// saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"%s\r\r%s\r\r%s",tokens[0],tokens[1],tokens[2]);
99 info = malloc(sizeof(MENU));
100 if(info) {
101 memset(info,0,sizeof(MENU));
102 info->size = sizeof(MENU);
103 info->text = strdup(tokens[2]);
104 if(info->text) {
105 if(!stricmp(tokens[0],"MENUITEM"))
106 info->cmd = atoi(tokens[1]);
107 else if(!stricmp(tokens[0],"SEPARATOR"))
108 info->type = SEPARATOR;
109 else { /* error! */
110 free(info->text);
111 free(info);
112 info = NULL;
113 }
114 if(info) {
115 if(!menuhead)
116 menuhead = info;
117 else
118 last->next = info;
119 info->next = NULL;
120 last = info;
121 }
122 }
123 else
124 free(info);
125 }
126 }
127 else { /* error! */
128// saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Tokenization failed");
129 }
130 }
131 fclose(fp);
132 if(menuhead) {
133
134 MENUITEM mi;
135
136 memset(&mi,0,sizeof(mi));
137 info = menuhead;
138 WinEnableWindow(hwndMenu,FALSE);
139 while(info) {
140 mi.iPosition = MIT_END;
141 mi.id = info->cmd;
142 mi.afStyle = (info->type == SEPARATOR) ? MIS_BREAKSEPARATOR : MIS_TEXT;
143 if(WinSendMsg(hwndMenu, MM_INSERTITEM, MPFROMP(&mi),
144 MPFROMP(info->text)))
145 ret = TRUE;
146 info = info->next;
147 }
148 WinEnableWindow(hwndMenu,TRUE);
149 FreeMenuList(menuhead);
150 menuhead = NULL;
151 }
152 }
153// else saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Couldn't open %s",filename);
154 return ret;
155}
Note: See TracBrowser for help on using the repository browser.