100% Pure COBOL チャット

2002/10/18


HTMLとOpenCOBOLのみでチャットを作成致しました。
今回の新しい試みはURLエンコーディングされたデータをCOBOLでデコードしてみました。
Perlを利用すれば2行で終わるのですが 100%COBOLで作成したかったので
あえてCOBOLで作成してみました。 

チャットCGIとしては機能的にまだまだなのですが、今回Ver1.1と言う事で公開いたします。
以後 機能追加をして本格的なチャットCGIへと進めて行く予定です。

一緒に試行錯誤し「本格的なチャットCGIへと進めてやろう」と言うCOBOLドリーマーな方
こちらまでメール頂ければ詳細(といってもこれだけですが(^^;)ご連絡させて頂きます。
もちろん報酬等は全く御座いません、ただCOBOLプログラムでどこまで出来るか、それを楽しむだけです。


利用環境
OS Red Hat Linux 7.2
HTTPサーバー APACHE
COBOL OpenCOBOL 0.9.7

入り口の画面です。
お名前とメールアドレスを入れます。
入室のボタンでチャットに入室します。
過去ログボタンで過去のログ100件が表示されます。
チャット入室時の画面です。
内容に入力して「コーディング」のボタンを押すと書き込めます。
内容に何も入力しないで「コーディング」のボタンを押した時はリロード機能となります。




COBOLのコーディングシートをイメージしております。
過去ログ表示です。
100件まで出力されます。

HTMLのソースです
(COBOLの実行形式 chat01 を起動しております)
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-type" CONTENT="text/html">
<TITLE>COBOLチャット</TITLE>
</HEAD>
<BODY BGCOLOR="lavender" TEXT="#000000" LINK="#229955" VLINK="#999933" ALINK="#FF0000">
<CENTER><IMG src="at.gif">
<br><FONT SIZE="5" COLOR="RED">100% Pure COBOL チャット</FONT></CENTER><br>
<FORM method="POST" action="../cgi-bin/chat01">
<BR>
     お名前:<INPUT size="14" type="text" name="name" ><BR>
メールアドレス:<INPUT size="30" type="text" name="mail" ><BR><BR>
       <INPUT type="hidden" name="data" value="入室いたしました"><BR>
<BR>
<INPUT type="submit" value=" 入室 ">  名前の色:
<INPUT type="radio" name="color" value="000000 " checked>黒 
<INPUT type="radio" name="color" value="0000ff ">青 
<INPUT type="radio" name="color" value="ff0000 ">赤 
<INPUT type="radio" name="color" value="008000 ">緑 
<INPUT type="radio" name="color" value="800000 ">茶 
<INPUT type="radio" name="color" value="800080 ">紫 
<INPUT type="hidden" name="first" value="FIRST ">
</FORM>
<FORM method="POST" action="../cgi-bin/chat00">
<BR>
<INPUT type="submit" value=" 過去ログ "> 過去のログ100件が出ます。
</FORM><BR><BR><BR>
<BR><BR><FONT SIZE="4" COLOR="RED">
<CENTER>このチャットはHTMLとOpenCOBOLのみで作成致しました。
</FONT><br><br>
<a href="http://www.coboler.com">[ ホームページへ戻る ]</a></CENTER>
</BODY>
</HTML>


チャット本体部分です
                         
       IDENTIFICATION              DIVISION.                            
       PROGRAM-ID.                 chat01. 
       ENVIRONMENT                 DIVISION.                            
       CONFIGURATION               SECTION.                             
       INPUT-OUTPUT                SECTION.                             
       FILE-CONTROL.                                                    
           SELECT  CHATDAT         ASSIGN  TO  "chat.dat".     
       DATA                        DIVISION.                                        
       FILE                        SECTION.                                         
       FD  CHATDAT                                                      
           DATA    RECORD     IS   REC-A.                               
       01  REC-A.   
           03  REC-A-NAIYOTBL     OCCURS 100.
             05  REC-A-KEY         PIC 9(03).    
             05  REC-A-NAME        PIC X(14).  
             05  REC-A-MAIL        PIC X(30). 
             05  REC-A-DATE        PIC X(06).
             05  REC-A-TIME        PIC X(08).
             05  REC-A-NAIYO       PIC X(150).
             05  REC-A-COLOR       PIC X(06).
       WORKING-STORAGE SECTION.        
       01  WK-INDAT                PIC X(400).
       01  WK-INNAME.
           03  FILLER              PIC X(005).
           03  WK-INNAMEX          PIC X(60).
       01  WK-INMAIL.
           03  FILLER              PIC X(005).
           03  WK-INMAILX          PIC X(60).
       01  WK-INNAIYO.
           03  FILLER              PIC X(005).
           03  WK-INNAIYOX         PIC X(250).
       01  WK-NAME.
           03  FILLER              PIC X(005).
           03  WK-NAMEX            PIC X(060).
       01  WK-MAIL.
           03  FILLER              PIC X(005).
           03  WK-MAILX            PIC X(060).
       01  WK-NAIYO.
           03  FILLER              PIC X(005).
           03  WK-NAIYOX           PIC X(150).
       01  WK-COLOR.
           03  FILLER              PIC X(006).
           03  WK-COLORX           PIC X(006).
       01  WK-FIRST.
           03  FILLER              PIC X(006).
           03  WK-FIRSTX           PIC X(005).
       01  WK-BLK                  PIC X(007).
       01  WK-BLU                  PIC X(007).
       01  WK-RED                  PIC X(007).
       01  WK-GRE                  PIC X(007).
       01  WK-BRA                  PIC X(007).
       01  WK-PUR                  PIC X(007).
       01  WK-DATE                 PIC X(06).
       01  WK-DDATE                PIC X(08).
       01  WK-DTIME                PIC X(08).
       01  WK-TIME                 PIC X(08).
       01  I                       PIC S9(03) VALUE ZERO. 
       01  J                       PIC S9(03) VALUE ZERO. 
       PROCEDURE DIVISION.
      ******************************************************************
      *                                                            
      ******************************************************************
       A000-MAIN.                                                       
           PERFORM     X010-INIT.                                       
           PERFORM     A100-SYORI.
           PERFORM     X090-END.                                        
           STOP        RUN.                                             
      ******************************************************************
      *                                                           
      ******************************************************************
       A100-SYORI      SECTION.                                     
       A100-000.    
           READ    CHATDAT             AT  END  
               MOVE    SPACE           TO  REC-A
               WRITE   REC-A  
                                               GO  TO  A100-999.                 
       A100-100.                                                    
          ACCEPT   WK-DATE           FROM  DATE.
          ACCEPT   WK-TIME           FROM  TIME.
          IF  WK-FIRSTX             NOT =  SPACE
              PERFORM X200-SET       VARYING  I FROM 100 BY -1 
                                     UNTIL    I < 2          
              MOVE    1                TO  REC-A-KEY(1)          
              MOVE    '<B>管理人</B>'  TO  REC-A-NAME(1)
              MOVE    SPACE            TO  REC-A-MAIL(1)
              MOVE    SPACE            TO  REC-A-NAIYO(1)
              MOVE    WK-NAMEX         TO  REC-A-NAIYO(1) (1:14)
              MOVE   'さんいらっしゃ〜い!!' 
                                       TO  REC-A-NAIYO(1) (15:37)
              MOVE   '#00AA22'         TO  REC-A-COLOR(1)
              MOVE    WK-DATE          TO  REC-A-DATE(1)
              MOVE    WK-TIME          TO  REC-A-TIME(1)
              REWRITE REC-A
          ELSE
              IF  WK-NAIYOX        NOT =   SPACE
                  PERFORM X200-SET       VARYING  I FROM 100 BY -1 
                                         UNTIL    I < 2          
                  MOVE    1                TO  REC-A-KEY(1)          
                  MOVE    WK-NAMEX         TO  REC-A-NAME(1)
                  MOVE    WK-MAILX         TO  REC-A-MAIL(1)
                  MOVE    WK-NAIYOX        TO  REC-A-NAIYO(1)
                  MOVE    WK-COLORX        TO  REC-A-COLOR(1)
                  MOVE    WK-DATE          TO  REC-A-DATE(1)
                  MOVE    WK-TIME          TO  REC-A-TIME(1)
                  REWRITE REC-A
              END-IF
          END-IF. 
          CLOSE   CHATDAT.        
       A100-200.
           DISPLAY 'Content-type: text/html'.
           DISPLAY.
           DISPLAY '<HTML>'.
           DISPLAY '<HEAD>'.
           DISPLAY '<TITLE>COBOLチャット</TITLE>'.
           DISPLAY '</HEAD>'.
           DISPLAY '<BODY BGCOLOR="lavender" TEXT="#000000">'
                   '<CENTER>'.
           DISPLAY '<IMG src="../at.gif"><BR>'.
           DISPLAY '<FONT SIZE="4" COLOR="RED"><B>'.
           DISPLAY '100% Pure COBOL チャット'.
           DISPLAY '</CENTER></FONT></B><br>'.
           DISPLAY '<FORM method="POST"'
                   ' action="../cgi-bin/chat01">'.
           DISPLAY '<BR>'.
           DISPLAY '     お名前:'.
           DISPLAY '<INPUT size="20" type="text" name="name"'
                   ' VALUE="'
                   WK-NAMEX
                   '"><BR>'.
           DISPLAY 'メールアドレス:'.
           DISPLAY '<INPUT size="30" type="text" name="mail" VALUE="'
                    WK-MAILX
                   '"><BR><BR>'.
           DISPLAY '      内容:'.
           DISPLAY '<INPUT size="80" type="text" name="data"><BR>'.
           DISPLAY '<BR><INPUT type="submit" value=" コーディング ">'.
           DISPLAY '  名前の色:'.
           MOVE    SPACE                   TO  WK-BLK
                                               WK-BLU
                                               WK-RED
                                               WK-GRE
                                               WK-BRA
                                               WK-PUR.
           EVALUATE WK-COLORX
               WHEN "000000"
                   MOVE    "checked"       TO  WK-BLK
               WHEN "0000ff"
                   MOVE    "checked"       TO  WK-BLU
               WHEN "ff0000"
                   MOVE    "checked"       TO  WK-RED
               WHEN "008000"
                   MOVE    "checked"       TO  WK-GRE
               WHEN "800000"
                   MOVE    "checked"       TO  WK-BRA
               WHEN "800080"
                   MOVE    "checked"       TO  WK-PUR
           END-EVALUATE.
           DISPLAY '<INPUT type="radio" name="color"'
                   ' value="000000"' WK-BLK '>黒 '.
           DISPLAY '<INPUT type="radio" name="color"'
                   ' value="0000ff"' WK-BLU '>青 '.
           DISPLAY '<INPUT type="radio" name="color"'
                   ' value="ff0000"' WK-RED '>赤 '.
           DISPLAY '<INPUT type="radio" name="color"'
                   ' value="008000"' WK-GRE '>緑 '.
           DISPLAY '<INPUT type="radio" name="color"'
                   ' value="800000"' WK-BRA '>茶 '.
           DISPLAY '<INPUT type="radio" name="color"'
                   ' value="800080"' WK-PUR '>紫 '.
           DISPLAY '<INPUT type="hidden" name="first"'
                   ' value="     " >'.
           DISPLAY '</FORM><TABLE><TR><FONT SIZE="4" COLOR="RED">'.
           DISPLAY '<A HREF=../chat01.htm>[退室]</A></FONT><BR><BR>'.
           DISPLAY '<TD WIDTH="775" background="../seat02.jpg">'.
           DISPLAY '<IMG src="../seat00.jpg">'.
       A100-300.
           OPEN    INPUT   CHATDAT.        
           READ    CHATDAT             AT END                      
                                               GO  TO  A100-400.                 
           PERFORM X300-DISP     VARYING  I  FROM 1 BY 1   
                                   UNTIL  I > 20.          
       A100-400.
           DISPLAY '</TR></TABLE><HR>'.
           DISPLAY '</BODY>'.
           DISPLAY '</HTML>'.
       A100-999.
           EXIT.                                                        
      ******************************************************************
      *                                                 
      ******************************************************************
       X010-INIT       SECTION.                                         
       X010-000.                                                        
          OPEN     I-O   CHATDAT. 
          MOVE    SPACE                TO  WK-NAME WK-MAIL WK-NAIYO
                                           WK-COLOR WK-FIRST
                                           WK-INNAME WK-INMAIL 
                                           WK-INNAIYO.
          ACCEPT   WK-INDAT.
          UNSTRING WK-INDAT DELIMITED BY "&"
             INTO WK-INNAME WK-INMAIL WK-INNAIYO WK-COLOR WK-FIRST.
          CALL    "decode"         USING  WK-INNAMEX WK-NAMEX.
          CALL    "decode"         USING  WK-INMAILX WK-MAILX.
          CALL    "decode"         USING  WK-INNAIYOX WK-NAIYOX.
          INSPECT  WK-NAMEX  REPLACING ALL "+" BY " ".
          INSPECT  WK-MAILX  REPLACING ALL "+" BY " ".
          INSPECT  WK-NAIYOX REPLACING ALL "+" BY " ".
          INSPECT  WK-COLORX REPLACING ALL "+" BY " ".
          INSPECT  WK-FIRSTX REPLACING ALL "+" BY " ".
       X010-999.                                                        
           EXIT.                                                        
      **************************************************************
      *    終了処理                                                 
      **************************************************************
       X090-END        SECTION.                                     
       X090-000.                                                    
           CLOSE   CHATDAT          
       X090-999.                                                       
           EXIT.                                                       
      **************************************************************
      *                                                             
      **************************************************************
       X200-SET        SECTION.                                     
       X200-000.                                                    
           COMPUTE J                   =   I - 1.   
           MOVE    I                   TO  REC-A-KEY(I).          
           MOVE    REC-A-NAME(J)       TO  REC-A-NAME(I).
           MOVE    REC-A-MAIL(J)       TO  REC-A-MAIL(I).
           MOVE    REC-A-NAIYO(J)      TO  REC-A-NAIYO(I).
           MOVE    REC-A-COLOR(J)      TO  REC-A-COLOR(I).
           MOVE    REC-A-DATE(J)       TO  REC-A-DATE(I).
           MOVE    REC-A-TIME(J)       TO  REC-A-TIME(I).
       X200-999.                                                       
           EXIT.                                                       
      **************************************************************
      *                                                             
      **************************************************************
       X300-DISP       SECTION.                                     
       X300-000.                                                    
           DISPLAY '<FONT COLOR="#'
                    REC-A-COLOR(I)
                   '">'.
           DISPLAY REC-A-NAME(I).
           DISPLAY '</FONT><FONT COLOR="#000000">'.
           DISPLAY ">".
           DISPLAY REC-A-NAIYO(I).
           DISPLAY "   ".
           MOVE    REC-A-DATE(I) (1:2) TO  WK-DDATE(1:2).
           MOVE    "/"                 TO  WK-DDATE(3:1).
           MOVE    REC-A-DATE(I) (3:2) TO  WK-DDATE(4:2).
           MOVE    "/"                 TO  WK-DDATE(6:1).
           MOVE    REC-A-DATE(I) (5:2) TO  WK-DDATE(7:2).
           DISPLAY '</FONT><FONT SIZE=2 COLOR="#337777">'.
           DISPLAY WK-DDATE.
           MOVE    REC-A-TIME(I) (1:2) TO  WK-DTIME(1:2).
           MOVE    ":"                 TO  WK-DTIME(3:1).
           MOVE    REC-A-TIME(I) (3:2) TO  WK-DTIME(4:2).
           MOVE    ":"                 TO  WK-DTIME(6:1).
           MOVE    REC-A-TIME(I) (5:2) TO  WK-DTIME(7:2).
           DISPLAY WK-DTIME.
           DISPLAY '</FONT>'.
           DISPLAY '<BR><BR>'.
       X300-999.                                                       
           EXIT.                                                       
                               

   


デコード用のサブ プログラムです。
(HEXコード変換テーブルを作成し1バイトずつ変換しています)
       IDENTIFICATION  DIVISION.                                        
       PROGRAM-ID.     decode.                               
       ENVIRONMENT     DIVISION.                                            
       DATA            DIVISION.                      
       WORKING-STORAGE SECTION.                                         
       01  WK-INTBL        PIC X(250).
       01  WK-INTBLR       REDEFINES WK-INTBL.
         03  WK-INR        PIC X(01) OCCURS 250.                  
       01  WK-OUTTBL.                                            
         03  WK-OUT        PIC X(01) OCCURS 250.         
       01  WK-IDX          PIC 9(03).                                         
       01  IX              PIC 9(03) VALUE ZERO.                              
       01  IX2             PIC 9(03) VALUE ZERO.                              
       01  SW-DECODE       PIC 9(01) VALUE ZERO.                              
       01  WK-CNT          PIC 9(03) VALUE ZERO.
       01  WK-HEN.                                               
         03  WK-HEN1       PIC X(01).                              
         03  WK-HEN2       PIC X(01).                              
       01  WK-HEXTBL.
         03  WK-IN10VAL.  
          05 FILLER          PIC X(32) VALUE          
                       '000102030405060708090A0B0C0D0E0F'.   
           05 FILLER          PIC X(32) VALUE          
                       '101112131415161718191A1B1C1D1E1F'.                     
           05 FILLER          PIC X(32) VALUE          
                       '202122232425262728292A2B2C2D2E2F'.                     
           05 FILLER          PIC X(32) VALUE          
                       '303132333435363738393A3B3C3D3E3F'.                     
           05 FILLER          PIC X(32) VALUE          
                       '404142434445464748494A4B4C4D4E4F'.                     
           05 FILLER          PIC X(32) VALUE          
                       '505152535455565758595A5B5C5D5E5F'.                     
           05 FILLER          PIC X(32) VALUE          
                       '606162636465666768696A6B6C6D6E6F'.                     
           05 FILLER          PIC X(32) VALUE          
                       '707172737475767778797A7B7C7D7E7F'.                     
           05 FILLER          PIC X(32) VALUE          
                       '808182838485868788898A8B8C8D8E8F'.                     
           05 FILLER          PIC X(32) VALUE          
                       '909192939495969798999A9B9C9D9E9F'.                     
           05 FILLER          PIC X(32) VALUE          
                       'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF'.                     
           05 FILLER          PIC X(32) VALUE          
                       'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'.                     
           05 FILLER          PIC X(32) VALUE          
                       'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF'.                     
           05 FILLER          PIC X(32) VALUE          
                       'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'.                     
           05 FILLER          PIC X(32) VALUE          
                       'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF'.                     
           05 FILLER       PIC X(32) VALUE          
                       'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF'.                     
         03  WK-IN10T REDEFINES WK-IN10VAL.    
           05  WK-IN10     PIC X(02) OCCURS 256 INDEXED BY IDX.    
         03  WK-IN16VAL.        
           05 FILLER   PIC X(01) VALUE   X'00'.     
           05 FILLER   PIC X(01) VALUE   X'01'.     
           05 FILLER   PIC X(01) VALUE   X'02'.     
           05 FILLER   PIC X(01) VALUE   X'03'.     
           05 FILLER   PIC X(01) VALUE   X'04'.     
           05 FILLER   PIC X(01) VALUE   X'05'.     
           05 FILLER   PIC X(01) VALUE   X'06'.     
           05 FILLER   PIC X(01) VALUE   X'07'.     
           05 FILLER   PIC X(01) VALUE   X'08'.     
           05 FILLER   PIC X(01) VALUE   X'09'.     
           05 FILLER   PIC X(01) VALUE   X'0A'.     
           05 FILLER   PIC X(01) VALUE   X'0B'.     
           05 FILLER   PIC X(01) VALUE   X'0C'.     
           05 FILLER   PIC X(01) VALUE   X'0D'.     
           05 FILLER   PIC X(01) VALUE   X'0E'.     
           05 FILLER   PIC X(01) VALUE   X'0F'.                      
           05 FILLER   PIC X(01) VALUE   X'10'.     
           05 FILLER   PIC X(01) VALUE   X'11'.     
           05 FILLER   PIC X(01) VALUE   X'12'.     
           05 FILLER   PIC X(01) VALUE   X'13'.     
           05 FILLER   PIC X(01) VALUE   X'14'.     
           05 FILLER   PIC X(01) VALUE   X'15'.     
           05 FILLER   PIC X(01) VALUE   X'16'.     
           05 FILLER   PIC X(01) VALUE   X'17'.     
           05 FILLER   PIC X(01) VALUE   X'18'.     
           05 FILLER   PIC X(01) VALUE   X'19'.     
           05 FILLER   PIC X(01) VALUE   X'1A'.     
           05 FILLER   PIC X(01) VALUE   X'1B'.     
           05 FILLER   PIC X(01) VALUE   X'1C'.     
           05 FILLER   PIC X(01) VALUE   X'1D'.     
           05 FILLER   PIC X(01) VALUE   X'1E'.     
           05 FILLER   PIC X(01) VALUE   X'1F'.     
           05 FILLER   PIC X(01) VALUE   X'20'.     
           05 FILLER   PIC X(01) VALUE   X'21'.     
           05 FILLER   PIC X(01) VALUE   X'22'.     
           05 FILLER   PIC X(01) VALUE   X'23'.     
           05 FILLER   PIC X(01) VALUE   X'24'.     
           05 FILLER   PIC X(01) VALUE   X'25'.     
           05 FILLER   PIC X(01) VALUE   X'26'.     
           05 FILLER   PIC X(01) VALUE   X'27'.     
           05 FILLER   PIC X(01) VALUE   X'28'.     
           05 FILLER   PIC X(01) VALUE   X'29'.     
           05 FILLER   PIC X(01) VALUE   X'2A'.     
           05 FILLER   PIC X(01) VALUE   X'2B'.     
           05 FILLER   PIC X(01) VALUE   X'2C'.     
           05 FILLER   PIC X(01) VALUE   X'2D'.     
           05 FILLER   PIC X(01) VALUE   X'2E'.     
           05 FILLER   PIC X(01) VALUE   X'2F'.     
           05 FILLER   PIC X(01) VALUE   X'30'.     
           05 FILLER   PIC X(01) VALUE   X'31'.     
           05 FILLER   PIC X(01) VALUE   X'32'.     
           05 FILLER   PIC X(01) VALUE   X'33'.     
           05 FILLER   PIC X(01) VALUE   X'34'.     
           05 FILLER   PIC X(01) VALUE   X'35'.     
           05 FILLER   PIC X(01) VALUE   X'36'.     
           05 FILLER   PIC X(01) VALUE   X'37'.     
           05 FILLER   PIC X(01) VALUE   X'38'.     
           05 FILLER   PIC X(01) VALUE   X'39'.     
           05 FILLER   PIC X(01) VALUE   X'3A'.     
           05 FILLER   PIC X(01) VALUE   X'3B'.     
           05 FILLER   PIC X(01) VALUE   X'3C'.     
           05 FILLER   PIC X(01) VALUE   X'3D'.     
           05 FILLER   PIC X(01) VALUE   X'3E'.     
           05 FILLER   PIC X(01) VALUE   X'3F'.     
           05 FILLER   PIC X(01) VALUE   X'40'.     
           05 FILLER   PIC X(01) VALUE   X'41'.     
           05 FILLER   PIC X(01) VALUE   X'42'.     
           05 FILLER   PIC X(01) VALUE   X'43'.     
           05 FILLER   PIC X(01) VALUE   X'44'.     
           05 FILLER   PIC X(01) VALUE   X'45'.     
           05 FILLER   PIC X(01) VALUE   X'46'.     
           05 FILLER   PIC X(01) VALUE   X'47'.     
           05 FILLER   PIC X(01) VALUE   X'48'.     
           05 FILLER   PIC X(01) VALUE   X'49'.     
           05 FILLER   PIC X(01) VALUE   X'4A'.     
           05 FILLER   PIC X(01) VALUE   X'4B'.     
           05 FILLER   PIC X(01) VALUE   X'4C'.     
           05 FILLER   PIC X(01) VALUE   X'4D'.     
           05 FILLER   PIC X(01) VALUE   X'4E'.     
           05 FILLER   PIC X(01) VALUE   X'4F'.     
           05 FILLER   PIC X(01) VALUE   X'50'.     
           05 FILLER   PIC X(01) VALUE   X'51'.     
           05 FILLER   PIC X(01) VALUE   X'52'.     
           05 FILLER   PIC X(01) VALUE   X'53'.     
           05 FILLER   PIC X(01) VALUE   X'54'.     
           05 FILLER   PIC X(01) VALUE   X'55'.     
           05 FILLER   PIC X(01) VALUE   X'56'.     
           05 FILLER   PIC X(01) VALUE   X'57'.     
           05 FILLER   PIC X(01) VALUE   X'58'.     
           05 FILLER   PIC X(01) VALUE   X'59'.     
           05 FILLER   PIC X(01) VALUE   X'5A'.     
           05 FILLER   PIC X(01) VALUE   X'5B'.     
           05 FILLER   PIC X(01) VALUE   X'5C'.     
           05 FILLER   PIC X(01) VALUE   X'5D'.     
           05 FILLER   PIC X(01) VALUE   X'5E'.     
           05 FILLER   PIC X(01) VALUE   X'5F'.     
           05 FILLER   PIC X(01) VALUE   X'60'.     
           05 FILLER   PIC X(01) VALUE   X'61'.     
           05 FILLER   PIC X(01) VALUE   X'62'.     
           05 FILLER   PIC X(01) VALUE   X'63'.     
           05 FILLER   PIC X(01) VALUE   X'64'.     
           05 FILLER   PIC X(01) VALUE   X'65'.     
           05 FILLER   PIC X(01) VALUE   X'66'.     
           05 FILLER   PIC X(01) VALUE   X'67'.     
           05 FILLER   PIC X(01) VALUE   X'68'.     
           05 FILLER   PIC X(01) VALUE   X'69'.     
           05 FILLER   PIC X(01) VALUE   X'6A'.     
           05 FILLER   PIC X(01) VALUE   X'6B'.     
           05 FILLER   PIC X(01) VALUE   X'6C'.     
           05 FILLER   PIC X(01) VALUE   X'6D'.     
           05 FILLER   PIC X(01) VALUE   X'6E'.     
           05 FILLER   PIC X(01) VALUE   X'6F'.     
           05 FILLER   PIC X(01) VALUE   X'70'.     
           05 FILLER   PIC X(01) VALUE   X'71'.     
           05 FILLER   PIC X(01) VALUE   X'72'.     
           05 FILLER   PIC X(01) VALUE   X'73'.     
           05 FILLER   PIC X(01) VALUE   X'74'.     
           05 FILLER   PIC X(01) VALUE   X'75'.     
           05 FILLER   PIC X(01) VALUE   X'76'.     
           05 FILLER   PIC X(01) VALUE   X'77'.     
           05 FILLER   PIC X(01) VALUE   X'78'.     
           05 FILLER   PIC X(01) VALUE   X'79'.     
           05 FILLER   PIC X(01) VALUE   X'7A'.     
           05 FILLER   PIC X(01) VALUE   X'7B'.     
           05 FILLER   PIC X(01) VALUE   X'7C'.     
           05 FILLER   PIC X(01) VALUE   X'7D'.     
           05 FILLER   PIC X(01) VALUE   X'7E'.     
           05 FILLER   PIC X(01) VALUE   X'7F'.     
           05 FILLER   PIC X(01) VALUE   X'80'.     
           05 FILLER   PIC X(01) VALUE   X'81'.     
           05 FILLER   PIC X(01) VALUE   X'82'.     
           05 FILLER   PIC X(01) VALUE   X'83'.     
           05 FILLER   PIC X(01) VALUE   X'84'.     
           05 FILLER   PIC X(01) VALUE   X'85'.     
           05 FILLER   PIC X(01) VALUE   X'86'.     
           05 FILLER   PIC X(01) VALUE   X'87'.     
           05 FILLER   PIC X(01) VALUE   X'88'.     
           05 FILLER   PIC X(01) VALUE   X'89'.     
           05 FILLER   PIC X(01) VALUE   X'8A'.     
           05 FILLER   PIC X(01) VALUE   X'8B'.     
           05 FILLER   PIC X(01) VALUE   X'8C'.     
           05 FILLER   PIC X(01) VALUE   X'8D'.     
           05 FILLER   PIC X(01) VALUE   X'8E'.     
           05 FILLER   PIC X(01) VALUE   X'8F'.     
           05 FILLER   PIC X(01) VALUE   X'90'.     
           05 FILLER   PIC X(01) VALUE   X'91'.     
           05 FILLER   PIC X(01) VALUE   X'92'.     
           05 FILLER   PIC X(01) VALUE   X'93'.     
           05 FILLER   PIC X(01) VALUE   X'94'.     
           05 FILLER   PIC X(01) VALUE   X'95'.     
           05 FILLER   PIC X(01) VALUE   X'96'.     
           05 FILLER   PIC X(01) VALUE   X'97'.     
           05 FILLER   PIC X(01) VALUE   X'98'.     
           05 FILLER   PIC X(01) VALUE   X'99'.     
           05 FILLER   PIC X(01) VALUE   X'9A'.     
           05 FILLER   PIC X(01) VALUE   X'9B'.     
           05 FILLER   PIC X(01) VALUE   X'9C'.     
           05 FILLER   PIC X(01) VALUE   X'9D'.     
           05 FILLER   PIC X(01) VALUE   X'9E'.     
           05 FILLER   PIC X(01) VALUE   X'9F'.     
           05 FILLER   PIC X(01) VALUE   X'A0'.     
           05 FILLER   PIC X(01) VALUE   X'A1'.     
           05 FILLER   PIC X(01) VALUE   X'A2'.     
           05 FILLER   PIC X(01) VALUE   X'A3'.     
           05 FILLER   PIC X(01) VALUE   X'A4'.     
           05 FILLER   PIC X(01) VALUE   X'A5'.     
           05 FILLER   PIC X(01) VALUE   X'A6'.     
           05 FILLER   PIC X(01) VALUE   X'A7'.     
           05 FILLER   PIC X(01) VALUE   X'A8'.     
           05 FILLER   PIC X(01) VALUE   X'A9'.     
           05 FILLER   PIC X(01) VALUE   X'AA'.     
           05 FILLER   PIC X(01) VALUE   X'AB'.     
           05 FILLER   PIC X(01) VALUE   X'AC'.     
           05 FILLER   PIC X(01) VALUE   X'AD'.     
           05 FILLER   PIC X(01) VALUE   X'AE'.     
           05 FILLER   PIC X(01) VALUE   X'AF'.     
           05 FILLER   PIC X(01) VALUE   X'B0'.     
           05 FILLER   PIC X(01) VALUE   X'B1'.     
           05 FILLER   PIC X(01) VALUE   X'B2'.     
           05 FILLER   PIC X(01) VALUE   X'B3'.     
           05 FILLER   PIC X(01) VALUE   X'B4'.     
           05 FILLER   PIC X(01) VALUE   X'B5'.     
           05 FILLER   PIC X(01) VALUE   X'B6'.     
           05 FILLER   PIC X(01) VALUE   X'B7'.     
           05 FILLER   PIC X(01) VALUE   X'B8'.     
           05 FILLER   PIC X(01) VALUE   X'B9'.     
           05 FILLER   PIC X(01) VALUE   X'BA'.     
           05 FILLER   PIC X(01) VALUE   X'BB'.     
           05 FILLER   PIC X(01) VALUE   X'BC'.     
           05 FILLER   PIC X(01) VALUE   X'BD'.     
           05 FILLER   PIC X(01) VALUE   X'BE'.     
           05 FILLER   PIC X(01) VALUE   X'BF'.     
           05 FILLER   PIC X(01) VALUE   X'C0'.     
           05 FILLER   PIC X(01) VALUE   X'C1'.     
           05 FILLER   PIC X(01) VALUE   X'C2'.     
           05 FILLER   PIC X(01) VALUE   X'C3'.     
           05 FILLER   PIC X(01) VALUE   X'C4'.     
           05 FILLER   PIC X(01) VALUE   X'C5'.     
           05 FILLER   PIC X(01) VALUE   X'C6'.     
           05 FILLER   PIC X(01) VALUE   X'C7'.     
           05 FILLER   PIC X(01) VALUE   X'C8'.     
           05 FILLER   PIC X(01) VALUE   X'C9'.     
           05 FILLER   PIC X(01) VALUE   X'CA'.     
           05 FILLER   PIC X(01) VALUE   X'CB'.     
           05 FILLER   PIC X(01) VALUE   X'CC'.     
           05 FILLER   PIC X(01) VALUE   X'CD'.     
           05 FILLER   PIC X(01) VALUE   X'CE'.     
           05 FILLER   PIC X(01) VALUE   X'CF'.     
           05 FILLER   PIC X(01) VALUE   X'D0'.     
           05 FILLER   PIC X(01) VALUE   X'D1'.     
           05 FILLER   PIC X(01) VALUE   X'D2'.     
           05 FILLER   PIC X(01) VALUE   X'D3'.     
           05 FILLER   PIC X(01) VALUE   X'D4'.     
           05 FILLER   PIC X(01) VALUE   X'D5'.     
           05 FILLER   PIC X(01) VALUE   X'D6'.     
           05 FILLER   PIC X(01) VALUE   X'D7'.     
           05 FILLER   PIC X(01) VALUE   X'D8'.     
           05 FILLER   PIC X(01) VALUE   X'D9'.     
           05 FILLER   PIC X(01) VALUE   X'DA'.     
           05 FILLER   PIC X(01) VALUE   X'DB'.     
           05 FILLER   PIC X(01) VALUE   X'DC'.     
           05 FILLER   PIC X(01) VALUE   X'DD'.     
           05 FILLER   PIC X(01) VALUE   X'DE'.     
           05 FILLER   PIC X(01) VALUE   X'DF'.     
           05 FILLER   PIC X(01) VALUE   X'E0'.     
           05 FILLER   PIC X(01) VALUE   X'E1'.     
           05 FILLER   PIC X(01) VALUE   X'E2'.     
           05 FILLER   PIC X(01) VALUE   X'E3'.     
           05 FILLER   PIC X(01) VALUE   X'E4'.     
           05 FILLER   PIC X(01) VALUE   X'E5'.     
           05 FILLER   PIC X(01) VALUE   X'E6'.     
           05 FILLER   PIC X(01) VALUE   X'E7'.     
           05 FILLER   PIC X(01) VALUE   X'E8'.     
           05 FILLER   PIC X(01) VALUE   X'E9'.     
           05 FILLER   PIC X(01) VALUE   X'EA'.     
           05 FILLER   PIC X(01) VALUE   X'EB'.     
           05 FILLER   PIC X(01) VALUE   X'EC'.     
           05 FILLER   PIC X(01) VALUE   X'ED'.     
           05 FILLER   PIC X(01) VALUE   X'EE'.     
           05 FILLER   PIC X(01) VALUE   X'EF'.     
           05 FILLER   PIC X(01) VALUE   X'F0'.     
           05 FILLER   PIC X(01) VALUE   X'F1'.     
           05 FILLER   PIC X(01) VALUE   X'F2'.     
           05 FILLER   PIC X(01) VALUE   X'F3'.     
           05 FILLER   PIC X(01) VALUE   X'F4'.     
           05 FILLER   PIC X(01) VALUE   X'F5'.     
           05 FILLER   PIC X(01) VALUE   X'F6'.     
           05 FILLER   PIC X(01) VALUE   X'F7'.     
           05 FILLER   PIC X(01) VALUE   X'F8'.     
           05 FILLER   PIC X(01) VALUE   X'F9'.     
           05 FILLER   PIC X(01) VALUE   X'FA'.     
           05 FILLER   PIC X(01) VALUE   X'FB'.     
           05 FILLER   PIC X(01) VALUE   X'FC'.     
           05 FILLER   PIC X(01) VALUE   X'FD'.     
           05 FILLER   PIC X(01) VALUE   X'FE'.     
           05 FILLER   PIC X(01) VALUE   X'FF'.     
         03  WK-IN16T REDEFINES WK-IN16VAL.    
           05  WK-IN16  PIC X(01) OCCURS 256.   
       LINKAGE SECTION.
       01  LN-IN           PIC X(250).
       01  LN-OUT          PIC X(150).
       PROCEDURE DIVISION  USING LN-IN LN-OUT.
       A000-SHORI.  
           MOVE    ZERO            TO  IX2 
                                       SW-DECODE. 
           MOVE    SPACE           TO  WK-OUTTBL.
           MOVE    LN-IN           TO  WK-INTBL.
           PERFORM X100-SET VARYING IX FROM 1 BY 1 
                          UNTIL IX >  249.
           MOVE    WK-OUTTBL       TO  LN-OUT.
           EXIT-PROGRAM.
      ******************************************************************
      *                                                    *  
      ******************************************************************
       X100-SET        SECTION.                                         
       X100-000.                                                        
           IF  WK-INR(IX)               =  "%"
               MOVE  1                  TO  SW-DECODE
               MOVE  ZERO               TO  WK-CNT
           ELSE                                
               IF  SW-DECODE            =   1 
                   ADD 1                TO  WK-CNT
                   IF  WK-CNT           =   2 
                       MOVE  WK-INR(IX) TO  WK-HEN2
                       MOVE  ZERO       TO  SW-DECODE
                       SET   IDX        TO  1
                       SEARCH  WK-IN10   VARYING IDX   
                               AT  END
                           ADD 1        TO  IX2    
                           MOVE    X'30'    TO  WK-OUT(IX2) 
                       WHEN  WK-HEN     =  WK-IN10 (IDX)    
                             SET WK-IDX TO  IDX
                       END-SEARCH
                       ADD 1            TO  IX2    
                       MOVE    WK-IN16(WK-IDX) TO  WK-OUT(IX2) 
                   ELSE 
                      IF  WK-CNT        =  1 
                          MOVE    WK-INR(IX)   TO  WK-HEN1
                      ELSE
                          NEXT SENTENCE
               ELSE
                     ADD 1              TO  IX2    
                     MOVE    WK-INR(IX) TO  WK-OUT(IX2).
       X100-999.                                                        
           EXIT.                                      
           


過去ログ表示のソースです
       IDENTIFICATION              DIVISION.                            
       PROGRAM-ID.                 chat00. 
       ENVIRONMENT                 DIVISION.                            
       CONFIGURATION               SECTION.                             
       INPUT-OUTPUT                SECTION.                             
       FILE-CONTROL.                                                    
           SELECT  CHATDAT         ASSIGN  TO  "chat.dat".     
       DATA                        DIVISION.                                        
       FILE                        SECTION.                                         
       FD  CHATDAT                                                      
           DATA    RECORD     IS   REC-A.                               
       01  REC-A.   
           03  REC-A-NAIYOTBL     OCCURS 100.
             05  REC-A-KEY         PIC 9(03).    
             05  REC-A-NAME        PIC X(14).  
             05  REC-A-MAIL        PIC X(30). 
             05  REC-A-DATE        PIC X(06).
             05  REC-A-TIME        PIC X(08).
             05  REC-A-NAIYO       PIC X(150).
             05  REC-A-COLOR       PIC X(06).
       WORKING-STORAGE SECTION.        
       01  WK-DDATE                PIC X(08).
       01  WK-DTIME                PIC X(08).
       01  WK-TIME                 PIC X(08).
       01  I                       PIC S9(03) VALUE ZERO. 
       PROCEDURE DIVISION.
      ******************************************************************
      *                                                            
      ******************************************************************
       A000-MAIN.                                                       
           PERFORM     X010-INIT.                                       
           PERFORM     A100-SYORI.
           PERFORM     X090-END.                                        
           STOP        RUN.                                             
      ******************************************************************
      *                                                           
      ******************************************************************
       A100-SYORI      SECTION.                                     
       A100-000.    
       A100-200.
           DISPLAY 'Content-type: text/html'.
           DISPLAY.
           DISPLAY '<HTML>'.
           DISPLAY '<HEAD>'.
           DISPLAY '<TITLE>COBOLチャット</TITLE>'.
           DISPLAY '</HEAD>'.
           DISPLAY '<BODY BGCOLOR="lavender" TEXT="#000000" '
                   'LINK="#229955" '
                   'VLINK="#999933" ALINK="#FF0000"><CENTER>'.
           DISPLAY '<IMG src="../at.gif"><BR>'.
           DISPLAY '<FONT SIZE="4" COLOR="RED"><B>'.
           DISPLAY '100% Pure COBOL チャット 過去ログ'.
           DISPLAY '</CENTER></FONT></B><br>'.
           DISPLAY '<TABLE><TR>'.
           DISPLAY '<TD WIDTH="775" background="../seat02.jpg">'.
           DISPLAY '<IMG src="../seat00.jpg">'.
       A100-300.
           READ    CHATDAT             AT END                      
                                               GO  TO  A100-400.                 
           PERFORM X300-DISP     VARYING  I  FROM 1 BY 1   
                                   UNTIL  I > 100.          
       A100-400.
           DISPLAY '</TR></TABLE><HR>'.
           DISPLAY '<A HREF=../chat01.htm>戻る</A></CENTER>'.
           DISPLAY '</BODY>'.
           DISPLAY '</HTML>'.
       A100-999.
           EXIT.                                                        
      ******************************************************************
      *                                                 
      ******************************************************************
       X010-INIT       SECTION.                                         
       X010-000.                                                        
          OPEN     INPUT   CHATDAT. 
       X010-999.                                                        
           EXIT.                                                        
      **************************************************************
      *    終了処理                                                 
      **************************************************************
       X090-END        SECTION.                                     
       X090-000.                                                    
           CLOSE   CHATDAT          
       X090-999.                                                       
           EXIT.                                                       
      **************************************************************
      *                                                             
      **************************************************************
       X300-DISP       SECTION.                                     
       X300-000.                                                    
           DISPLAY '<FONT COLOR="#'
                    REC-A-COLOR(I)
                   '">'.
           DISPLAY REC-A-NAME(I).
           DISPLAY '</FONT><FONT COLOR="#000000">'.
           DISPLAY ">".
           DISPLAY REC-A-NAIYO(I).
           DISPLAY "   ".
           MOVE    REC-A-DATE(I) (1:2) TO  WK-DDATE(1:2).
           MOVE    "/"                 TO  WK-DDATE(3:1).
           MOVE    REC-A-DATE(I) (3:2) TO  WK-DDATE(4:2).
           MOVE    "/"                 TO  WK-DDATE(6:1).
           MOVE    REC-A-DATE(I) (5:2) TO  WK-DDATE(7:2).
           DISPLAY '</FONT><FONT SIZE=2 COLOR="#337777">'.
           DISPLAY WK-DDATE.
           MOVE    REC-A-TIME(I) (1:2) TO  WK-DTIME(1:2).
           MOVE    ":"                 TO  WK-DTIME(3:1).
           MOVE    REC-A-TIME(I) (3:2) TO  WK-DTIME(4:2).
           MOVE    ":"                 TO  WK-DTIME(6:1).
           MOVE    REC-A-TIME(I) (5:2) TO  WK-DTIME(7:2).
           DISPLAY WK-DTIME.
           DISPLAY '</FONT>'.
           DISPLAY '<BR><BR>'.
       X300-999.                                                       
           EXIT.                                                       

Open COBOL コンパイル方法
cobc -c -static -main chat01.cob
cobc -c -static decode.cob
cobc -o chat01 chat01.o decode.o



<HOME>