HELPEXE.C
上传用户:dcs7469208
上传日期:2010-01-02
资源大小:443k
文件大小:4k
源码类别:

操作系统开发

开发平台:

DOS

  1. /****************************************************************/
  2. /* */
  3. /*       helpexe.c */
  4. /* */
  5. /*       DOS External "help" Command  */
  6. /* */
  7. /* Copyright (c) 1995 */
  8. /* Pasquale J. Villani */
  9. /* All Rights Reserved */
  10. /* */
  11. /* This file is part of DOS-C. */
  12. /* */
  13. /* DOS-C is free software; you can redistribute it and/or */
  14. /* modify it under the terms of the GNU General Public License */
  15. /* as published by the Free Software Foundation; either version */
  16. /* 2, or (at your option) any later version. */
  17. /* */
  18. /* DOS-C is distributed in the hope that it will be useful, but */
  19. /* WITHOUT ANY WARRANTY; without even the implied warranty of */
  20. /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See */
  21. /* the GNU General Public License for more details. */
  22. /* */
  23. /* You should have received a copy of the GNU General Public */
  24. /* License along with DOS-C; see the file COPYING.  If not, */
  25. /* write to the Free Software Foundation, 675 Mass Ave, */
  26. /* Cambridge, MA 02139, USA. */
  27. /****************************************************************/
  28. /* $Logfile:   C:/dos-c/src/command/helpexe.c_v  $ */
  29. /* $Log:   C:/dos-c/src/command/helpexe.c_v  $
  30.  * 
  31.  *    Rev 1.4   31 Jan 1998 17:06:58   patv
  32.  * Added search along PATH environment variable for helpfile search.
  33.  * 
  34.  *    Rev 1.3   31 Jan 1998  8:12:26   patv
  35.  * Put preprocessor switch for version strings and changed log strings
  36.  * 
  37.  *    Rev 1.2   29 Aug 1996 13:06:54   patv
  38.  * Bug fixes for v0.91b
  39.  * 
  40.  *    Rev 1.1   01 Sep 1995 18:04:38   patv
  41.  * First GPL release.
  42.  * 
  43.  *    Rev 1.0   02 Jul 1995 10:02:02   patv
  44.  * Initial revision.
  45.  */
  46. #ifdef VERSION_STRINGS
  47. static char *RcsId = "$Header:   C:/dos-c/src/command/helpexe.c_v   1.4   31 Jan 1998 17:06:58   patv  $";
  48. #endif
  49. #include <stdio.h>
  50. #include <dos.h>
  51. #include <ctype.h>
  52. #include <string.h>
  53. #include "../../hdr/portab.h"
  54. #include "../../hdr/error.h"
  55. #include "globals.h"
  56. #define HELP_FILE "helpfile"
  57. #define HELP_FILE_DELIMITER "===n"
  58. VOID main(argc, argv)
  59. COUNT argc;
  60. BYTE **argv;
  61. {
  62. FILE *helpptr;
  63. BYTE szLine[MAX_CMDLINE];
  64. BYTE szPath[MAX_CMDLINE];
  65. BYTE szHelpPath[MAX_CMDLINE], *pszEnv, *pszPtr;
  66. BYTE cmd_marker[20]; /* delimiter + command */
  67. BYTE *help_str = "dummy_dos";
  68. REG COUNT i = 0;
  69. COUNT c;
  70. BOOL got_one;
  71. pszEnv = getenv("PATH");
  72. if(pszEnv)
  73. {
  74. got_one = FALSE;
  75. while(*pszEnv)
  76. {
  77. struct ffblk ffblk;
  78. for(pszPtr = szPath; *pszEnv && *pszEnv != ';'; )
  79. {
  80. *pszPtr++ = *pszEnv++;
  81. }
  82. *pszPtr++ = '';
  83. if(*pszEnv == ';')
  84. ++pszEnv;
  85. strcat(szPath, "\");
  86. strcat(szPath, HELP_FILE);
  87. if(got_one = !findfirst(szPath, &ffblk, 0))
  88. {
  89. strcpy(szHelpPath, szPath);
  90. break;
  91. }
  92. }
  93. }
  94. if(!got_one)
  95. {
  96. strcpy(szHelpPath, ".\");
  97. strcat(szHelpPath, HELP_FILE);
  98. }
  99. if(argc == 1)
  100. {
  101. if((helpptr = fopen(szHelpPath,"r")) == NULL)
  102. {
  103. printf("nSorry, help data file is missingn");
  104. return;
  105. }
  106. while((c = fgetc(helpptr)) != 'f')
  107. ;
  108. while(fgets(szLine,MAX_CMDLINE,helpptr) != '')
  109. printf("%s",szLine);
  110. fclose(helpptr);
  111. return;
  112. }
  113. if(argc > 3)
  114. {
  115. printf("nUsage: help command_name or command_name \? n");
  116. return;
  117. }
  118. help_str = argv[1];
  119. if((helpptr = fopen(szHelpPath,"r")) == NULL)
  120. {
  121. printf("help -- provide brief command explanationsnUsage:  help [command] or command \?nnSorry, help data file is missingn");
  122. return;
  123. }
  124. while(help_str[i] != '')
  125. {
  126. help_str[i]=toupper(help_str[i]);
  127. i++;
  128. }
  129. sprintf(cmd_marker,"%s%s",help_str,HELP_FILE_DELIMITER);
  130. got_one = FALSE;
  131. while(fgets(szLine, MAX_CMDLINE, helpptr), *szLine != 'f')
  132. {
  133. if(got_one)
  134. {
  135. fclose(helpptr);
  136. break;
  137. }
  138. if(strcmp(szLine,cmd_marker) == 0)
  139. {
  140. got_one = TRUE;
  141. while((fgets(szLine,MAX_CMDLINE,helpptr) != NULL) &&
  142.  (strcmp(szLine,".n") != 0))
  143. printf("%s",szLine);
  144. }
  145. }
  146. if(!got_one)
  147. printf("nhelp -- no help information for command: %sn",help_str);
  148. return;
  149. }