3c54eb346a5e78246cd9b4808d7f869f8ce62898
3 * NATIVE NAME: ReactOS manual browser
4 * AUTHOR : Semyon Novikov (tappak)
5 * PROJECT : ReactOS Operating System
6 * DESCRIPTION: manual file browser (Use Linux man file syntax)
13 * 2. Non ENVIRONMENT manpath varrible
14 * 3. At the end of man page must be ./" tag!
30 int OpenF(char* name
);
33 int AnalyzeArgv(char *);
40 char manpath
[MAXLINE
]="c:\\man\\";
46 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE
),cl
);
53 char *manpath_local
=(char*)malloc(sizeof(char)*MAXLINE
);
55 strcpy(manpath_local
, manpath
); //save mandir value
57 if((manfile
=fopen((strcat(manpath_local
,name
)),"r"))!=NULL
)
84 puts("usage: man [command]");
85 puts("see \"man man\" for details");
89 AnalyzeArgv(char *argument
)
93 char *keys
[]={"--help","/h","/?","-h"};
94 char *sections
[]={".1",".2",".3",".4",".5",".6",".7",".8",".9"};
95 char *filename
=(char*)malloc(sizeof(char)*MAXLINE
);
97 strcpy(filename
,argument
); //save argument value
99 for(element
=0;element
<_countof(keys
);element
++)
101 if(!strcmp(keys
[element
],argument
))
115 while(element
<_countof(sections
)&&OpenF(strcat(filename
,sections
[element
])))
117 strcpy(filename
,argument
);
121 if(element
>=_countof(sections
)) printf("No manual for %s\n",argument
);
129 void sh_outp(char *cur_string
)
134 for(symbol
=3;putchar(cur_string
[symbol
]); symbol
++);
137 void th_outp(char *cur_string
, char *THtag
)
145 for(symbol
=3;putchar(THtag
[symbol
]); symbol
++);
150 void text_outp(char *cur_string
)
154 if(cur_string
[0]=='.')
155 while(cur_string
[symbol
]!=' ')
159 for(;cur_string
[symbol
]!='\n'; symbol
++)
160 putchar(cur_string
[symbol
]);
167 char *cur_string
=(char*)malloc(sizeof(char)*MAXLINE
);
168 char *THtag
=(char*)malloc(sizeof(char)*MAXLINE
);
173 while(fgets(cur_string
,MAXLINE
,manfile
))
175 /* TAGs processing */
176 if((cur_string
[0]=='.')&&(cur_string
[1]=='S')&&
177 (cur_string
[2]=='H')) // .SH tag
184 if((cur_string
[0]=='.')&&(cur_string
[1]=='I')&&
185 (cur_string
[2]==' ')) // .I tag
188 text_outp(cur_string
);
192 if((cur_string
[0]=='.')&&(cur_string
[1]=='/')&&
193 (cur_string
[2]=='\"')); // ./" tag (comment)
196 if((cur_string
[0]=='.')&&(cur_string
[1]=='T')&&
197 (cur_string
[2]=='H')) // .TH tag
199 strcpy(THtag
,cur_string
);
202 if((cur_string
[0]=='.')&&(cur_string
[1]=='B')&&
203 (cur_string
[2]==' ')) // .B tag
206 text_outp(cur_string
);
210 if((cur_string
[0]=='.')&&(cur_string
[1]=='N')&&
211 (cur_string
[2]=='L'))
217 else text_outp(cur_string
); // print plane text
218 th_outp(cur_string
, THtag
);
219 /* END of TAGs processing */
228 main(int argc
, char *argv
[])
233 case 1: Usage(); break;
234 case 2: AnalyzeArgv(argv
[1]);break;
235 default: Usage();break;
238 if(OpenFlag
)CloseF();