sqlweb.c
上传用户:aidanglao
上传日期:2007-01-07
资源大小:69k
文件大小:4k
源码类别:

Oracle数据库

开发平台:

Unix_Linux

  1. /* sqlweb.c - shell level interface contains the main() function
  2. /*
  3. /* Copyright (c) 1995-1999 Applied Information Technologies, Inc.
  4. /* All Rights Reserved.
  5. /*  
  6. /* Distributed uder the GNU General Public License which was included in
  7. /* the file named "LICENSE" in the package that you recieved.
  8. /* If not, write to:
  9. /* The Free Software Foundation, Inc.,
  10. /* 675 Mass Ave, Cambridge, MA 02139, USA.
  11.  */
  12. /* Includes */
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <string.h>
  16. #include <sys/types.h>
  17. #include <sys/stat.h>
  18. #include <unistd.h>
  19. #include "sqlweb.h"
  20. /*
  21. /* Internal Functions
  22.  */
  23. static eBoolean_t SQLwebProc();
  24. /*
  25. /* Global Variables...
  26. /* These are initialized here, but are overridden in swmain.pc
  27. /* as part of command-line processing..... these are the defaults.
  28.  */
  29. SQLWEB_LDA gLDA;
  30. char *gpFileName=0
  31.     ,*gpProgram=0
  32.     ,*gpIniFile=0
  33.     ;
  34. eBoolean_t
  35.      gbiFlag=eFalse /* Ini File */
  36.     ,gbpFlag=eFalse /* Parse level (0=cook;1=source dump;2=tag dump)*/
  37.     ,gbfFlag=eFalse /* File-to-process flag */
  38.     ,gbbFlag=eFalse /* Buffer output flag */
  39.     ;
  40. int 
  41.      giParseLevel=0 /* Parse Level */
  42.     ;
  43. /*
  44. /* SQLweb-- transaction control layer, based on return code
  45. /* of SQLwebProc() commit or rollback.
  46.  */
  47. eBoolean_t
  48. sqlweb()
  49. {
  50.     eBoolean_t bSQLwebRet;
  51.     /* 
  52.     /* Run SQLweb!
  53.      */
  54.     bSQLwebRet = SQLwebProc();
  55.     if(ISeFalse(bSQLwebRet)) {
  56. PrintHTMLErrStack();
  57. (void) DbDisconnect(&gLDA,eFalse);
  58. /* Don't care about discon status
  59. /*  we're already exiting with err 
  60.  */
  61. return(eFalse);
  62.     } else {
  63. RETeFalse(DbDisconnect(&gLDA,eTrue)
  64.  ,"Disconnect Failed"
  65.  );
  66.     }
  67.     return(bSQLwebRet);
  68. }
  69. /*
  70. /* SQLwebProc -- most of the high-level processing in
  71. /* SQLweb, multiple failure points. 
  72.  */
  73. static eBoolean_t
  74. SQLwebProc()
  75. {
  76.     char *pBuf, *pBuf2
  77. ,sBuf[BUFSIZ];
  78.     /*
  79.     /* Load the SYMBOL Table
  80.      */
  81.     RETeFalse(swinput(),"Internal error: swinput failed");
  82.     /*
  83.     /* Implement LISCENSE KEY (coming soon)
  84.      */
  85.     /* Set buffering */
  86.     if(ISeTrue(gbbFlag)
  87. || (ISeTrue(GetSymbolValueREF("SQLWEB_BUFFER_OUTPUT",&pBuf))
  88.     && is_casematch(pBuf,"TRUE")))
  89.     {
  90. gbBufferOutput = eTrue;
  91.     }
  92.     /*
  93.     /* Now that input is loaded... 
  94.     /* set the DEBUG LEVEL
  95.      */
  96.     if(ISeTrue(GetSymbolValueREF("SQLWEB_DEBUG_LEVEL",&pBuf))
  97. && ISCOOKED)
  98.     {
  99. DebugHTMLSet(atoi(pBuf));
  100.     }
  101.     if(ISeTrue(GetSymbolValueREF("SQLWEB_SHOW_SYMBOLS",&pBuf))
  102. && ISCOOKED
  103. && is_casematch(pBuf,"TRUE"))
  104.     {
  105. ShowSymbolTable();
  106.     }
  107.     /*
  108.     /* Connect to Database, perhaps...
  109.      */
  110.     if((ISeFalse(GetSymbolValueREF("SQLWEB_DELAY_CONNECT",&pBuf)) && ISCOOKED)
  111. || (is_casematch(pBuf,"FALSE")))
  112.     {
  113. RETeFalse(DbConnect(0,&gLDA),"Failed to CONNECT to Database");
  114.     }
  115.     /*
  116.     /* Check for PATH_TRANSLATED
  117.      */
  118.     if(    ISeTrue(GetSymbolValueREF("PATH_TRANSLATED",&pBuf))
  119. && gpFileName==0
  120. /* && access(pBuf,R_OK)==0 */ )
  121.     /* File is readable
  122.      */
  123.     {
  124. gpFileName=strdup(pBuf);
  125.     }
  126.     /*
  127.     /* Check for PATH_INFO, if no filename....
  128.      */
  129.     if( !gpFileName){
  130. if(ISeTrue(GetSymbolValueREF("PATH_INFO",&pBuf))
  131.     && ISeTrue(GetSymbolValueREF("SQLWEB_DOC_ROOT",&pBuf2)))
  132. {
  133.     sprintf(sBuf,"%s%s",pBuf2,pBuf);
  134.     gpFileName=strdup(sBuf);
  135. }
  136.     }
  137.     if(gpFileName) {
  138. /* A FILE
  139. /* Build a PAGE from an HTML file 
  140.  */
  141. PAGE *pPage;
  142. struct stat stBuf;
  143. char *pBasename;
  144. int iLen = iStrLen(gpFileName);
  145. /* Step on trailing '/' **chop**
  146.  */
  147. if( *(gpFileName+iLen-1)=='/'){
  148.     *(gpFileName+iLen-1)=0;
  149. }
  150. /*
  151. /* Verify file type...
  152.  */
  153. stat(gpFileName,&stBuf);
  154. if(S_ISDIR(stBuf.st_mode)){
  155.     if(ISeTrue(GetSymbolValueREF("SQLWEB_DEFAULT_PAGE",&pBuf2))) {
  156. sprintf(sBuf,"%s/%s",gpFileName,pBuf2);
  157. gpFileName = strdup(sBuf);
  158.     } else {
  159. MsgPush("Can't open directory: Missing SQLWEB_DEFAUL_PAGE");
  160. return(eFalse);
  161.     }
  162. }
  163. pBasename = strrchr(gpFileName,'/');
  164. RETeFalse2(LoadHTML(gpFileName,&pPage)
  165.   ,"Failed to load: %s"
  166.   ,pBasename? ++pBasename :gpFileName
  167.   );
  168. if(l_size(pPage->lPI)==0) {
  169.     MsgPush("File Contains no TAGS");
  170.     return(eFalse);
  171. }
  172. if(ISCOOKED) {
  173.     RETeFalse2(swoutput(pPage)
  174.       ,"Output module Failed on: %s"
  175.       ,pBasename? ++pBasename :gpFileName
  176.       );
  177. } else {
  178.     (void)DumpPage(pPage);
  179. }
  180.     } else {
  181. MsgPush("Can't find SQLweb file to process.");
  182. return(eFalse);
  183.     }
  184.     return(eTrue);
  185. }