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
)
65 strcpy(manpath_local
, manpath
);
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
< 5;element
++)
100 if(!strcmp(keys
[element
],argument
))
111 while(OpenF(strcat(filename
,sections
[element
])) && (element
<9))
113 strcpy(filename
,argument
);
117 if(element
>8) printf("No manual for %s\n",argument
);
125 char *cur_string
=(char*)malloc(sizeof(char)*MAXLINE
);
127 char *THtag
=(char*)malloc(sizeof(char)*MAXLINE
);
134 for(symbol
=3;putchar(cur_string
[symbol
]); symbol
++);
144 for(symbol
=3;putchar(THtag
[symbol
]); symbol
++);
154 if(cur_string
[0]=='.')
155 while(cur_string
[symbol
]!=' ')
158 if(symbol
) TagFlag
=1;
160 for(;cur_string
[symbol
]!='\n'; symbol
++)
161 putchar(cur_string
[symbol
]);
165 while(fgets(cur_string
,MAXLINE
,manfile
))
167 /* TAGs processing */
168 if((cur_string
[0]=='.')&&(cur_string
[1]=='S')&&
169 (cur_string
[2]=='H')) // .SH tag
176 if((cur_string
[0]=='.')&&(cur_string
[1]=='I')&&
177 (cur_string
[2]==' ')) // .I tag
184 if((cur_string
[0]=='.')&&(cur_string
[1]=='/')&&
185 (cur_string
[2]=='\"')); // ./" tag (comment)
188 if((cur_string
[0]=='.')&&(cur_string
[1]=='T')&&
189 (cur_string
[2]=='H')) // .TH tag
191 strcpy(THtag
,cur_string
);
194 if((cur_string
[0]=='.')&&(cur_string
[1]=='B')&&
195 (cur_string
[2]==' ')) // .B tag
202 if((cur_string
[0]=='.')&&(cur_string
[1]=='N')&&
203 (cur_string
[2]=='L'))
209 else text_outp(); // print plane text
211 /* END of TAGs processing */
217 main(int argc
, char *argv
[])
222 case 1: Usage(); break;
223 case 2: AnalyzeArgv(argv
[1]);break;
224 default: Usage();break;
227 if(OpenFlag
)CloseF();