Changeset 356 for trunk/dll/menu.c
- Timestamp:
- Jul 26, 2006, 9:58:37 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/menu.c
r123 r356 7 7 8 8 Copyright (c) 1996-98 M. Kimes 9 Copyright (c) 2004 Steven H.Levine9 Copyright (c) 2004, 2006 Steven H.Levine 10 10 11 Revisions 01 Aug 04 SHL - Rework lstrip/rstrip usage 11 01 Aug 04 SHL Rework lstrip/rstrip usage 12 22 Jul 06 SHL Check more run time errors 12 13 13 14 ***********************************************************************/ … … 15 16 #define INCL_DOS 16 17 #define INCL_WIN 18 #include <os2.h> 17 19 18 #include <os2.h>19 20 #include <stdio.h> 20 21 #include <stdlib.h> 21 22 #include <string.h> 22 23 #include <share.h> 24 23 25 #include "fm3dll.h" 24 26 #include "menu.h" 25 27 26 28 #pragma data_seg(DATA2) 29 30 static PSZ pszSrcFile = __FILE__; 31 27 32 #pragma alloc_text(MENU,tokenize,FreeMenuList,AddToMenu) 28 33 29 34 MENU *menuhead = NULL; 30 35 31 32 INT tokenize (CHAR *str,INT max,CHAR **tokens) { 33 36 INT tokenize (CHAR *str,INT max,CHAR **tokens) 37 { 34 38 INT x = 0; 35 39 CHAR *p; … … 49 53 *p = 0; 50 54 p++; 51 // saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"\"%s\"\r\r%d",tokens[x - 1],x);55 // saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"\"%s\"\r\r%d",tokens[x - 1],x); 52 56 if(!*p) 53 57 break; … … 58 62 59 63 60 VOID FreeMenuList (MENU *head) {61 64 VOID FreeMenuList (MENU *head) 65 { 62 66 MENU *info,*next; 63 67 … … 73 77 74 78 75 BOOL AddToMenu (CHAR *filename,HWND hwndMenu) {76 79 BOOL AddToMenu (CHAR *filename,HWND hwndMenu) 80 { 77 81 FILE *fp; 78 82 CHAR s[256]; … … 82 86 BOOL ret = FALSE; 83 87 84 if(!hwndMenu) 88 // fixme to complain? 89 if (!hwndMenu) { 90 Runtime_Error(pszSrcFile, __LINE__, "no data"); 85 91 return ret; 86 if(!filename) 92 } 93 if (!filename) 87 94 filename = "FM3MENU.DAT"; 88 95 fp = _fsopen(filename,"r",SH_DENYWR); 89 if(fp) { 90 while(!feof(fp)) { 91 if(!fgets(s,256,fp)) 96 if (!fp) { 97 // else saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Couldn't open %s",filename); 98 } 99 else { 100 while (!feof(fp)) { 101 if (!fgets(s,256,fp)) 92 102 break; 93 103 lines++; … … 95 105 if(!*s || *s == ';') 96 106 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)); 107 if (tokenize(s,3,tokens) == 3 && (USHORT)atoi(tokens[1])) { 108 info = xmallocz(sizeof(MENU),pszSrcFile,__LINE__); 109 if (info) { 102 110 info->size = sizeof(MENU); 103 info->text = strdup(tokens[2]); 104 if(info->text) { 105 if(!stricmp(tokens[0],"MENUITEM")) 111 info->text = xstrdup(tokens[2],pszSrcFile,__LINE__); 112 if (!info->text) 113 free(info); 114 else { 115 if (!stricmp(tokens[0],"MENUITEM")) 106 116 info->cmd = atoi(tokens[1]); 107 else if (!stricmp(tokens[0],"SEPARATOR"))117 else if (!stricmp(tokens[0],"SEPARATOR")) 108 118 info->type = SEPARATOR; 109 else { /* error! */ 119 else { 120 /* error! */ 110 121 free(info->text); 111 122 free(info); 112 123 info = NULL; 113 124 } 114 if (info) {125 if (info) { 115 126 if(!menuhead) 116 127 menuhead = info; … … 121 132 } 122 133 } 123 else124 free(info);125 134 } 126 135 } 127 else { /* error! */ 128 // saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Tokenization failed"); 136 else { 137 // fixme to complain? 138 // saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Tokenization failed"); 129 139 } 130 140 } 131 141 fclose(fp); 132 if(menuhead) {133 142 143 if (menuhead) { 134 144 MENUITEM mi; 135 145 … … 137 147 info = menuhead; 138 148 WinEnableWindow(hwndMenu,FALSE); 139 while (info) {149 while (info) { 140 150 mi.iPosition = MIT_END; 141 151 mi.id = info->cmd; 142 152 mi.afStyle = (info->type == SEPARATOR) ? MIS_BREAKSEPARATOR : MIS_TEXT; 143 if (WinSendMsg(hwndMenu, MM_INSERTITEM, MPFROMP(&mi),144 MPFROMP(info->text)))153 if (WinSendMsg(hwndMenu, MM_INSERTITEM, MPFROMP(&mi), 154 MPFROMP(info->text))) 145 155 ret = TRUE; 146 156 info = info->next; … … 151 161 } 152 162 } 153 // else saymsg(MB_ENTER,HWND_DESKTOP,DEBUG_STRING,"Couldn't open %s",filename);154 163 return ret; 155 164 }
Note:
See TracChangeset
for help on using the changeset viewer.