|
You can read about CGILIB in the powerpoint I've posted online at: http://www.rpgxtools.com/xTools%20CGILIB%20Overview.mht Included near the end of the presentation is a cross reference of CGIDEV2 to CGILIB functions. In a nutshell: CGILIB is pretty much a plug-in replacement for CGIDEV2. Benefits, well most a subjective, but I have updated all my CGI program by replacing the CGIDEV2 procedure calls with CGILIB calls. It was literally a find/replace in SEU task. The things I like best are that the tool is more streamlined. It doesn't require the 3 or 4 /COPY statements to make it work. Once /COPY for the prototypes, then call the cgiInit() procedure. In fact, if you forget to call cgiInit(), most of the other cgi procs check for it, and if you haven't called it, will call it for you. Aside from that, there are several more functions in the CGILIB service program, including: Interpretation of the '\n' character (so you don't need to concatenate X'25'). Ability to use CGIDEV2-like HTML or raw/traditional CGI/HTML right in your code. That is there is a cgiStdOut() procedure that sends data to the browser directly. CGILIB checks the HTML when you call the final cgiWrtSection('*fini') routine. If "Content-type" is not the first line of HTML, it inserts it for you. The biggest thing, however, is that you can use your already written HTML with CGIDEV2 sections and token IDs, with CGILIB--no changes required. In fact, one developer on my system still has some CGIDEV2 stuff. I also use the same HTML files as he does, and he uses CGIDEV2, while I use CGILIB. It is _that_ compatible. Above and beyond CGIDEV2, the CGILIB has been optimized over and over to try to minimize certain tasks. CGILIB does not have any practical limits as far as the number of sections in an HTML file or the number of field tokens. Also, CGILIB does not output "***missing data***" when you avoid writing out a field token--a feature I sorely wanted. In addition, I have analyzied the QzhbCGIParse API, which is used by zhbGetVar in CGIDEV2 and by cgiGetvar() in CGILIB. CGIDEV2 retrieves all form fields and stores them and sorts them in memory. It was determined that this step adds unnecessary overhead and is avoided by CGILIB. There are a few things in CGIDEV2 that are not in CGILIB. The web server configuration statements are not inserted with CGILIB, you have to do that. Also the routine that builds a <SELECT><OPTION> tag set is not in CGILIB. CGILIB includes a few things not in CGIDEV2, such as cgiLineFeed() which is a procedure that scans an HTML string for embedded \n symbols and replaces them with X'25'. cgiObfuscate() which is a procedure that takes email addresses and Obfuscates them for output to the HTML so that email sniffers can't see the addresses. cgiSndMsgID() is a procedure that will allow you to create an entire HTML page from a raw CPF message ID. You 'send a message' that goes to the webpage, the page is dynamically created and sent to the user. Then there's cgiFmtMsgID that simply returns the HTML so that you can embed it in your own web page. UnEscape() which unescapes a URL encoded string, and on and on. Again, for more info you can look at the PowerPoint I put together on it at the www.rpgxtools.com website. -Bob Cozzi -----Original Message----- From: web400-bounces@xxxxxxxxxxxx [mailto:web400-bounces@xxxxxxxxxxxx] On Behalf Of Mike Skvarenina Sent: Thursday, October 21, 2004 9:33 PM To: 'Web Enabling the AS400 / iSeries' Subject: RE: [WEB400] Browser tries to download program Bob, Can you elaborate on what CGILIB is? I though earlier you were simply referring to a library name on your iSeries but now it sounds like you've created a tool similar to CGIDEV2. If true, can you compare and contrast the 2? Finally, any additional thoughts on my problem? My previous HTML didn't have a content type section. I don't know how that would effect the web server itself as opposed to the browser. For example does the web server itself read the HTML then do something different/special when it sees a content type directive? -----Original Message----- From: web400-bounces+mskvarenina=usa.net@xxxxxxxxxxxx [mailto:web400-bounces+mskvarenina=usa.net@xxxxxxxxxxxx] On Behalf Of Bob Cozzi Sent: Thursday, October 21, 2004 3:50 PM To: 'Web Enabling the AS400 / iSeries' Subject: RE: [WEB400] Browser tries to download program Yes, that's why I wrote CGILIB with the xTools. It doesn't have the scaling limitations that CGIDEV2 had. As long as you stay under 16MB of HTML being sent at once, there are no practical limitations. I do limit the section names to either 32 or 64 characters (can't remember which it is at the moment), but you can have as many of them as you want. I would like to hear more about your "conditional sections" including what you use them for, and how you use them. Perhaps offline would be better if others aren't interested. As to your 1993... that's perfect. In my CGI RPG classes, I have a line that I often use: "Many long-time HTML coders, and by long-time, I mean someone who started using HTML before 1997... seem to prefer Windows Notepad as their HTML editor of choice." That line usually gets a good laugh, but as you have indicated... there's some truth to it. -Bob -----Original Message----- From: web400-bounces@xxxxxxxxxxxx [mailto:web400-bounces@xxxxxxxxxxxx] On Behalf Of Joe Lee Sent: Thursday, October 21, 2004 5:30 PM To: web400@xxxxxxxxxxxx Subject: RE: [WEB400] Browser tries to download program Well, I suppose I could be considered experienced. I think I wrote my first web page in 1993. Though I suppose it might be sort of weird that I have never put together my own personal website. I wouldn't say that there is anything "wrong" with using the noname/*top sections. The reason that I wouldn't use them is that I like the consistency of having every section named. Granted in this case there would only be one unnamed section, but I still prefer to avoid using a mix of implied and defined section names. I'm also not sure that it would work with my version of CGIDEV. We kept running into problems with not enough sections or variables being available, so I rewrote it using dynamically allocated arrays to store up to 32K sections and variables, and I don't think I made provisions for the "noname" section. I also added several capabilities that weren't available at the time, this was several years ago, such as loading from the IFS, being able to load several templates at once, and "conditional" sections which are like a select statement and allow you to output portions of your section based on the values of your variables. Joe Lee >>> cozzi@xxxxxxxxx 10/21/2004 15:06:23 >>> Notepad? Oh, you're an "experienced" HTML coder than. :) But seriously, Dreamweaver and Frontpage don't complain, but rather reposition or loose that top section. There's nothing wrong with using the 'noname' or '*TOP' section identifiers. -Bob -----Original Message----- From: web400-bounces@xxxxxxxxxxxx [mailto:web400-bounces@xxxxxxxxxxxx] On Behalf Of Joe Lee Sent: Thursday, October 21, 2004 4:57 PM To: web400@xxxxxxxxxxxx Subject: RE: [WEB400] Browser tries to download program That's interesting, I hadn't realized that, though I think that I prefer using named sections rather than an unnamed one. I've never noticed any complaints about the section name at the beginning the HTML from my editor though. Of course that is probably because I only use notepad or an enhanced version of notepad for editing HTML. :) Joe Lee >>> cozzi@xxxxxxxxx 10/21/2004 14:34:20 >>> You don't need to have a "top" section name. Most HTML editors don't like having something like /$TOP Or /$HTML On the first line of the HTML. CGIDEV2 and CGILIB support a virtual top section using 'noname' as the section name. This virtual section continues until the first real section is detected. So in CGIDEV2 you would code (in your CGI RPG program): Callp wrtSection('noname') With CGILIB, you could code: Callp cgiWrtSection('noname') or Callp cgiWrtSection('*TOP') -Bob Cozzi -----Original Message----- From: web400-bounces@xxxxxxxxxxxx [mailto:web400-bounces@xxxxxxxxxxxx] On Behalf Of Joe Lee Sent: Thursday, October 21, 2004 4:20 PM To: web400@xxxxxxxxxxxx Subject: RE: [WEB400] Browser tries to download program At the beginning of the first template section that you write to the browser you need to have at least the following. The string "Content-type: text/html" followed by 2 carriage return linefeeds (CRLF)s. You may add other header information but it must be followed by the 2 CRLFs which tell the http server that this is the end of the header section. I use a "html" section that only contains the header information, and is the same for all of my templates. A sample would be: /$html Content-type: text/html /$NextSection Joe Lee >>> mskvarenina@xxxxxxx 10/21/2004 14:03:17 >>> Hmmm. Looks like you're saying I need something like this --> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> Which I just confirmed is not coming out of my existing CGI apps using original server. Is this what you're talking about? -----Original Message----- From: web400-bounces@xxxxxxxxxxxx [mailto:web400-bounces@xxxxxxxxxxxx] On Behalf Of Bartell, Aaron L. (TC) Sent: Thursday, October 21, 2004 4:25 PM To: Web Enabling the AS400 / iSeries Subject: RE: [WEB400] Browser tries to download program I am embarrassed to give the answer because I should have looked at this first, but make sure your headers are being sent. CGIDEV2 does not output your headers for you, you must included them in one of your templates. I am guessing that the IBM Original HTTP server was being nice and must have sent a default header if a program just starts pushing stuff out without headers. Apache doesn't do that. HTH, Aaron Bartell -----Original Message----- From: web400-bounces@xxxxxxxxxxxx [mailto:web400-bounces@xxxxxxxxxxxx] Sent: Thursday, October 21, 2004 3:01 PM To: 'Web Enabling the AS400 / iSeries' Subject: RE: [WEB400] Browser tries to download program Great thread. Has anyone discovered the solution yet? I too attempted to migrate my original servers to Apache today and I too received the file download box when I tried to run a RPG CGI program. My apologies for posting the entire config file below but I'm sure there's something in there causing the error and I'm hoping someone can recognize it... LoadModule ibm_ssl_module /QSYS.LIB/QHTTPSVR.LIB/QZSRVSSL.SRVPGM LiveLocalCache Off <Location /> <LimitExcept GET HEAD OPTIONS POST TRACE> Order Allow,Deny Deny From all </LimitExcept> </Location> Options -ExecCGI -SymLinksIfOwnerMatch -Includes -IncludesNoExec -Indexes -MultiViews DefaultType www/unknown Listen 10.100.15.184:81 ErrorLogFormatDDS On ErrorLog Off ThreadsPerChild 40 MaxKeepAliveRequests 1 TimeOut 120 KeepAliveTimeout 4 AccessFileName .htaccess DirectoryIndex welcome.html index.html CGIConvMode %%MIXED/MIXED%% IndexOptions -DescriptionWidth -FancyIndexing -FoldersFirst -IconHeight -IconsAreLinks -IconWidth -IgnoreCase -IgnoreClient -NameWidth -NameMinWidth -ScanHTMLTitles -SelectiveDirAccess -ShowSmallFileBytes -ShowOwner -SuppressColumnSorting -SuppressDescription -SuppressHTMLPreamble -SuppressIcon -SuppressLastModified -SuppressRules -SuppressSize -TrackModified -VersionSort HeaderName README <Directory /> Order Allow,Deny Deny From all </Directory> <Directory /Docimaging/> Allow From all </Directory> <Directory /WebPages/> Allow From all </Directory> <Directory /QIBM/ProdData/hostondemand/HOD/> Allow From all </Directory> <Directory /cgidev/> Allow From all </Directory> <Directory /QSYS.LIB/CGIDEV2.LIB/> Allow From all CGIConvMode %%EBCDIC/MIXED%% </Directory> <Directory /QSYS.LIB/CGIBIN.LIB/> CGIConvMode %%EBCDIC/MIXED%% Allow From all <FilesMatch ^(.*)\.PGM$> Options +ExecCGI Allow From all </FilesMatch> </Directory> <Directory /cgibin/> Allow From all </Directory> <Directory /QSYS.LIB/CGIBIN.LIB/HTMLSRC.FILE/> Allow From all </Directory> <VirtualHost 10.100.15.184:443> SSLEngine Off SSLAppName QIBM_HTTP_SERVER_CONFIG SSLClientAuth None SetEnv HTTPS_PORT 443 </VirtualHost> MapMatch ^/cgibinh/(.*)\.htm$ /cgibinh/$1.mbr MapMatch ^/cgibinh/(.*) /QSYS.LIB/CGIBIN.LIB/HTMLSRC.FILE/$1 AliasMatch ^/QSYS\.LIB/CGIBIN\.LIB/HTMLSRC\.FILE/(.*) /QSYS.LIB/CGIBIN.LIB/HTMLSRC.FILE/$1 AliasMatch ^/cgibin/(.*) /cgibin/$1 ScriptAlias /CGIBIN.LIB/ /QSYS.LIB/CGIBIN.LIB/ ScriptAliasMatch ^/cgibinp/(.*) /QSYS.LIB/CGIBIN.LIB/$1 MapMatch ^/cgidev2/start$ /QSYS.LIB/CGIDEV2.LIB/DEMOHTML.FILE/DEMOFRAME.MBR MapMatch ^/cgidev2/setup$ /QSYS.LIB/CGIDEV2.LIB/DEMOHTML.FILE/SETUPCSA.MBR MapMatch ^/cgidev2h/(.*)\.htm$ /cgidev2h/$1.mbr MapMatch ^/cgidev2o/(.*)\.htm$ /cgidev2o/$1.mbr MapMatch ^/cgidev2oit/(.*)\.htm$ /cgidev2oit/$1.mbr MapMatch ^/cgidev2o/(.*) /QSYS.LIB/CGIDEV2.LIB/DEMOHTML.FILE/$1 MapMatch ^/cgidev2oit/(.*) /QSYS.LIB/CGIDEV2.LIB/DEMOHTMLIT.FILE/$1 MapMatch ^/cgidev2h/(.*) /QSYS.LIB/CGIDEV2.LIB/HTMLSRC.FILE/$1 MapMatch ^/cgidev2r/(.*) /QSYS.LIB/CGIDEV2.LIB/QRPGLESRC.FILE/$1 MapMatch ^/cgidev2l/(.*) /QSYS.LIB/CGIDEV2.LIB/QCLSRC.FILE/$1 MapMatch ^/cgidev2d/(.*) /QSYS.LIB/CGIDEV2.LIB/QDDSSRC.FILE/$1 MapMatch ^/cgidev2f/(.*) /cgidev/$1 AliasMatch ^/QSYS\.LIB/CGIDEV2\.LIB/(.*) /QSYS.LIB/CGIDEV2.LIB/$1 AliasMatch ^/cgidev/(.*) /cgidev/$1 ScriptAliasMatch ^/cgidev2p/(.*) /QSYS.LIB/CGIDEV2.LIB/$1 MapMatch ^/CGI-BIN/APPS/(.*) /QSYS.LIB/CGIBIN.LIB/DB2WWW.PGM/$1 MapMatch ^/cgi-bin/apps/(.*) /QSYS.LIB/CGIBIN.LIB/DB2WWW.PGM/$1 ScriptAliasMatch ^/QSYS\.LIB/CGIBIN\.LIB/(.*) /QSYS.LIB/CGIBIN.LIB/$1 ScriptAliasMatch ^/cgi-bin/(.*) /QSYS.LIB/CGIBIN.LIB/$1.PGM AliasMatch ^/hod/(.*) /QIBM/ProdData/hostondemand/HOD/$1 AliasMatch ^/(.*) /WebPages/$1 AliasMatch ^/documents/(.*) /Docimaging/$1 # HostName 10.100.15.184 # AccessReportDoDnsLookup On # DoReporting Off 0 # DoWebUsageMining Off 0 # ReportProcessOldLogs Append # ReportDataArchive purge # ReportDataExpire 35 # ReportDataSizeLimit 30 -----Original Message----- From: web400-bounces@xxxxxxxxxxxx [mailto:web400-bounces@xxxxxxxxxxxx] On Behalf Of Tom Jedrzejewicz Sent: Thursday, September 09, 2004 5:16 PM To: Web Enabling the AS400 / iSeries Subject: Re: [WEB400] Browser tries to download program My suggestions . . . 1. Get to the most current CGIDEV2 release level. There has been a bunch done to CGIDEV2 in the 3 years, and a lot of sites have converted to Apache. 2. Download the Easy/400 deliverable EASY400APC - it has the other CGIDEV2 deliverables running under Apache. http://www-922.ibm.com/easy400p/downloads.html Between those two, you should be running, or in a place where figuring the problem is easier. Regards. On Thu, 9 Sep 2004 11:39:42 -0500, Bartell, Aaron L. (TC) < albartell@xxxxxxxxxxxxxx > wrote: > Update. > > >Do you have the xTools (www.rpgxtools.com)? > I have my own tools that I have been able to prove this out with, but > thanks for the link. I will check those out also. > > I have both the CGIDEV2 program and RPG CGI program running from the > same Apache config both out of the same library (AS400CGI) both > using/outputting the same IFS file (/CGIRPG/logtime.html). I created > an RPG CGI pgm to output the logtime.html file just so I could rule > out that it wasn't a CCSID issue with the file. > > When I run both programs from an IBM Original HTTP server they both > work fine unchanged. > > I must note that our CGIDEV2 version is '2001-09-21 09:20:36'. I got > that by doing a DSPDTAARA DTAARA(CGIDEV2/VERSION). In my mind that > shouldn't make a difference given that the CGIDEV2 programs operate > just fine under IBM Original HTTP server. > > We also changed QCSSID to 37 from 65535 with no effect (this was > suggested on the CGIDEV2 site). > > I think I have narrowed it down to it having something to do with > CGIDEV2. Any ideas based on the information I have presented? > > The machine is on CUM PTF 4077. Are there other specific PTF's that I > need to apply that wouldn't be covered by this CUM? > > Apache config that I am now using (from Brad Stone's site) > > Listen *:2012 > > #DocumentRoot /myweb > #DirectoryIndex index.html > > CGIConvMode %%EBCDIC/EBCDIC%% > > ScriptAliasMatch ^/cgi-bin/(.*) /qsys.lib/as400cgi.lib/$1.pgm > > <Directory /> > Options None > AllowOverride None > order deny,allow > deny from all > </Directory> > > <Directory /myweb> > AllowOverride None > order allow,deny > allow from all > <FilesMatch "\.html(\..+)?$"> > Options +Includes > SetOutputFilter Includes > </FilesMatch> > </Directory> > > <Directory /qsys.lib/as400cgi.lib> > allow from all > order allow,deny > Options +ExecCGI +Includes > SetOutputFilter Includes > </Directory> > > > > _______________________________________________ > This is the Web Enabling the AS400 / iSeries (WEB400) mailing list To > post a message email: WEB400@xxxxxxxxxxxx To subscribe, unsubscribe, > or change list options, > visit: http://lists.midrange.com/mailman/listinfo/web400 > or email: WEB400-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives at > http://archive.midrange.com/web400 . > > -- Tom Jedrzejewicz tomjedrz@xxxxxxxxx _______________________________________________ This is the Web Enabling the AS400 / iSeries (WEB400) mailing list To post a message email: WEB400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/web400 or email: WEB400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/web400 . _______________________________________________ This is the Web Enabling the AS400 / iSeries (WEB400) mailing list To post a message email: WEB400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/web400 or email: WEB400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/web400 . _______________________________________________ This is the Web Enabling the AS400 / iSeries (WEB400) mailing list To post a message email: WEB400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/web400 or email: WEB400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/web400 . _______________________________________________ This is the Web Enabling the AS400 / iSeries (WEB400) mailing list To post a message email: WEB400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/web400 or email: WEB400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/web400 . _______________________________________________ This is the Web Enabling the AS400 / iSeries (WEB400) mailing list To post a message email: WEB400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/web400 or email: WEB400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/web400. _______________________________________________ This is the Web Enabling the AS400 / iSeries (WEB400) mailing list To post a message email: WEB400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/web400 or email: WEB400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/web400. _______________________________________________ This is the Web Enabling the AS400 / iSeries (WEB400) mailing list To post a message email: WEB400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/web400 or email: WEB400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/web400. _______________________________________________ This is the Web Enabling the AS400 / iSeries (WEB400) mailing list To post a message email: WEB400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/web400 or email: WEB400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/web400. _______________________________________________ This is the Web Enabling the AS400 / iSeries (WEB400) mailing list To post a message email: WEB400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/web400 or email: WEB400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/web400. _______________________________________________ This is the Web Enabling the AS400 / iSeries (WEB400) mailing list To post a message email: WEB400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/web400 or email: WEB400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/web400. _______________________________________________ This is the Web Enabling the AS400 / iSeries (WEB400) mailing list To post a message email: WEB400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/web400 or email: WEB400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/web400.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.