home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 5 / FREESOFT.BIN / mopterm / led / led.plt next >
Text File  |  1992-08-19  |  16KB  |  701 lines

  1. /*
  2.         LOG閲覧用オートパイロット
  3.  
  4.                       by MEET MHG02535
  5.  
  6.                                  1991/08/11 ver1.0
  7.                                  1991/10/05 ver2.0
  8.  
  9. */
  10.  
  11. %MainD    {G:};            /*メインディレクトリ(最後の\は不要)*/
  12. %TmpD    {G:\TMP};       /*テンポラリファイル用ディレクトリ*/
  13. %BatFile MainD|{\_mopbat.bat};
  14.  
  15. /*グローバル変数*/
  16.  
  17. var NEXT[8];            /*次の処理*/
  18. var FORUM[7];            /*閲覧中フォーラム名*/
  19. var ROOMNAME[8];        /*閲覧中会議室名*/
  20. var LINENUM[5];            /*閲覧中の発言の発言一覧での位置*/
  21. var SAYFILE[3];            /*発言を含むファイル*/
  22. var SAY[7];                /*発言の先頭行*/
  23. var SAYNO[10];            /*発言の最終行*/
  24. var SAYNUM[3];            /*発言ナンバー*/
  25. var ROOMNO[1];            /*閲覧中会議室ナンバー*/
  26. var TMPNUM[10];            /*インデックスファイルにおける位置*/
  27. var TMP[100];
  28. var TMP1[100];
  29. var FILENAME[80];
  30.  
  31.  
  32. /*メモを全てクローズする*/
  33. %CloseAllMemo
  34. {
  35.     case(@mcheck != 0, 
  36.         {Yes},{ loop({  mclose(2);
  37.                 im(@mcheck != 0);
  38.                 })
  39.     });
  40. };
  41.  
  42. /*ファイルを探す。圧縮されている場合は、解凍。*/
  43. %MeltFile
  44. {    [FILENAME]
  45.     var RFILENAME[80];
  46.  
  47.     case( @filechk(FILENAME),
  48.         {No}, {    case( @filechk(TmpD | {\} | FILENAME),
  49.             {No}, {    command({lha x LEDARC\}|ROOMNAME|{.LZH }
  50.                             |TmpD|{\ }|FILENAME);
  51.                 RFILENAME := TmpD | {\} | FILENAME; },
  52.             {Yes},{    RFILENAME := TmpD | {\} | FILENAME; }
  53.             ); },
  54.         {Yes},{    RFILENAME := MainD | {\} | @head(FORUM, {_}) | {\} | FILENAME }
  55.     );
  56.  
  57.     im( RFILENAME);
  58. };
  59.  
  60. /*ファイルを探す2。圧縮されている場合は、解凍して、書庫から削除。*/
  61. %MDFile
  62. {    [FILENAME]
  63.     var RFILENAME[80];
  64.  
  65.     case( @filechk(FILENAME),
  66.         {No}, {    case( @filechk(TmpD | {\} | FILENAME),
  67.                     {No}, {    command({lha x LEDARC\}|ROOMNAME|{.LZH }
  68.                                     |TmpD|{\ }|FILENAME);
  69.                             command({lha d LEDARC\}|ROOMNAME|{.LZH }
  70.                                     |FILENAME);
  71.                             RFILENAME := TmpD | {\} | FILENAME; },
  72.                     {Yes},{    RFILENAME := TmpD | {\} | FILENAME; }
  73.                 ); },
  74.         {Yes},{    RFILENAME := MainD | {\} | @head(FORUM, {_}) | {\} | FILENAME }
  75.     );
  76.  
  77.     im( RFILENAME);
  78. };
  79.  
  80.  
  81. /*メイン*/
  82. %Main
  83. {
  84.     CloseAllMemo;
  85.  
  86.     /*フォーラム一覧読み込み*/
  87.     mclear(1);
  88.     mread(MainD|{\main.inx},1);
  89.  
  90.     NEXT := {forum};
  91.  
  92.     /* NEXTの中身によって分岐 */
  93.     loop( {
  94.         case( NEXT,
  95.             {forum}, { NEXT := {}; forum; },
  96.             {room},  { NEXT := {}; room; },
  97.             {inx},   { NEXT := {}; inx; },
  98.             {say},   { NEXT := {}; say; },
  99.             {},      { CloseAllMemo; stop; }
  100.         );
  101.         im({Yes});
  102.     });
  103. };
  104.  
  105.  
  106. /*フォーラム一覧*/
  107. %forum
  108. {
  109.     CloseAllMemo;
  110.     mopen(1,0,21,639,459);
  111.  
  112.     footnote({                                    EXIT        },{b});
  113.  
  114.     loop( { waitx(1000);
  115.         im(@xtype < 1 || (@xtype > 9 && @xtype < 201))
  116.     });
  117.  
  118.     footnote({});
  119.  
  120.     case( @im(@xtype) ,
  121.         {1},  { FORUM := @getchar( @head(@xline(0), { }), 1, 7);
  122.                 setcdir(MainD | {\} | FORUM );
  123.                 FORUM := @getchar( FORUM | {_______}, 1, 7);
  124.                 roominit;
  125.  
  126.                 NEXT := {room}; }
  127.     );
  128. };
  129.  
  130. /*会議室一覧読み込み*/
  131. %roominit
  132. {
  133.     CloseAllMemo;
  134.     CheckRoom;
  135.     mclear(2);
  136.     mread({roomlist.inx},2);
  137. };
  138.  
  139. /* 足りないファイルがあれば自動制作 */
  140. %CheckRoom
  141. {
  142.     var Linenum[4];
  143.  
  144.     %MakeIn2 {
  145.  
  146.         var line[1000];
  147.  
  148.         mclear(2);
  149.  
  150.         %file @getchar(@memo(3, Linenum, 1), 1, 8) | {.in2};
  151.  
  152.         footnote(file | {を、製作します});
  153.  
  154.         fopen( @getchar(@memo(3, Linenum, 1), 1, 8) | {.inx} );
  155.  
  156.         loop( {
  157.             line := @fread;
  158.             %roomno        @getchar(line,  2,  2);
  159.             %sayno        @getchar(line,  5,  3);
  160.             %commentno    @getchar(line, 10,  3);
  161.             %handle        @getchar(line, 23, 58);
  162.             line := @fread;
  163.             %filename    @getchar(line, 10,  3);
  164.             %lineno        @getchar(line, 15,  7);
  165.             %in2line roomno|{ }|sayno|{ }|commentno|{ }|handle|filename
  166.                         |lineno|{\n};
  167.             loop({
  168.                 case(@tail(line, {\n})={},
  169.                     {No}, { line := @fread;
  170.                             im({Yes}); } );
  171.             } );
  172.  
  173.             madd( 2, in2line );
  174.             im( line <> {} );
  175.         } );
  176.  
  177.         mwrite(file, 2);
  178.  
  179.         fclose;
  180.     };
  181.  
  182.     %MakeRoomlist {
  183.  
  184.         footnote({会議室一覧を、製作します});
  185.  
  186.         Linenum := 5;
  187.  
  188.         write({roomlist.inx}, FORUM|{\n});
  189.  
  190.         loop( {
  191.             var title[100];
  192.  
  193.             %file @getchar(@memo(3, Linenum, 1), 1, 8) | {.in2};
  194.             %roomno @getchar(@read(file, 1, 1), 1, 2);
  195.  
  196.             %firstline @read(file, 1, 1);
  197.             SAYFILE := @getchar(firstline, 70, 3);
  198.             ROOMNO := @getchar({123456789ABCDEFGHIJK},
  199.                         @getchar(firstline, 1, 2),1);
  200.             ROOMNAME := FORUM | ROOMNO;
  201.             FILENAME := @MeltFile( FORUM|ROOMNO|{.}|SAYFILE );
  202.             case (@filechk(FILENAME),
  203.                 {Yes},{ title := @getchar(@read(FILENAME, 1, 1), 3, 51)|
  204.                             {             };
  205.                         },
  206.                 {No}, { title := {                                                                } }
  207.             );
  208.  
  209.             %filename @getchar(@memo(3, Linenum, 1), 1, 8);
  210.  
  211.             %inxline roomno|{     }|title|filename|{\n};
  212.  
  213.             write({roomlist.inx}, inxline);
  214.             Linenum := Linenum + 1;
  215.             im(@getchar(@memo(3, Linenum, 1), 1, 1)<>{ });
  216.         } );
  217.     };
  218.  
  219.     %CheckRoomlist {
  220.  
  221.         var LINE[100];
  222.  
  223.         %AddRoomlist {
  224.             var title[100];
  225.  
  226.             %roomno @getchar(@read(file|{.in2}, 1, 1), 1, 2);
  227.  
  228.             %firstline @read(file|{.in2}, 1, 1);
  229.             SAYFILE := @getchar(firstline, 70, 3);
  230.             ROOMNO := @getchar({123456789ABCDEFGHIJK}, roomno, 1);
  231.             ROOMNAME := FORUM | ROOMNO;
  232.             FILENAME := @MeltFile( FORUM|ROOMNO|{.}|SAYFILE );
  233.             case (@filechk(FILENAME),
  234.                 {Yes},{ title := @getchar(@read(FILENAME, 1, 1), 3, 51)|
  235.                             {             };
  236.                         },
  237.                 {No}, { title := {                                                                }; }
  238.             );
  239.  
  240.             %inxline roomno|{     }|title|file|{\n};
  241.  
  242.             footnote(file|{を会議室一覧を、追加します});
  243.  
  244.             write({roomlist.inx}, inxline);
  245.         };
  246.  
  247.         footnote({会議室一覧を、チェックします});
  248.  
  249.         Linenum := 5;
  250.  
  251.         var Linenum2[4];
  252.  
  253.         loop( {
  254.             %file @getchar(@memo(3, Linenum, 1), 1, 8);
  255.             case(@getchar(@memo(3,Linenum, 1), 1, 1) = { },
  256.                 {No}, {    Linenum2 := 1;
  257.                         var Flug[3];
  258.                         loop( {
  259.                             Flug := {Yes};
  260.                             LINE := @memo(4, Linenum2, 1);
  261.                             %filename @getchar(LINE, 72, 8);
  262.                             case(LINE = {},
  263.                                 {No}, {    case(filename = {},
  264.                                             {No}, { case(filename = file,
  265.                                                         {Yes},{ Flug := {No} }
  266.                                                     ); }
  267.                                         ); },
  268.                                 {Yes},{ case(file = {ROOMLIST},
  269.                                             {No},{AddRoomlist} );
  270.                                         Flug := {No}; }
  271.                             );
  272.                         Linenum2 := Linenum2 + 1;
  273.                         im(Flug);
  274.                         } );
  275.                         im({Yes}); },
  276.                 {Yes},{    im({No}); }
  277.             );
  278.             Linenum := Linenum + 1;
  279.         } );
  280.  
  281.     };
  282.  
  283.     mclear(3);
  284.  
  285.     command({dir *.inx > }|TmpD|{\led_dir.tmp});
  286.     mread(TmpD|{\led_dir.tmp}, 3);
  287.  
  288.     Linenum := 5;
  289.  
  290.     loop( {
  291.         case(@getchar(@memo(3,Linenum, 1), 1, 1) = { },
  292.             {No}, {    %file @getchar(@memo(3, Linenum, 1), 1, 8) | {.in2};
  293.                     case(file = {ROOMLIST.in2} || @filechk(file) ,
  294.                         {No}, {    MakeIn2; } );
  295.                     im({Yes}); },
  296.             {Yes},{    im({No}); }
  297.         );
  298.         Linenum := Linenum + 1;
  299.     } );
  300.  
  301.     case(@filechk({roomlist.inx}),
  302.         {No}, {    MakeRoomlist },
  303.         {Yes},{    mclear(4);
  304.                 mread({roomlist.inx},4);
  305.                 CheckRoomlist }
  306.     );
  307.  
  308. };
  309.  
  310.  
  311. /* 会議室一覧モード */
  312. %room
  313. {
  314.     CloseAllMemo;
  315.     mopen(2,0,21,639,459);
  316.  
  317.     footnote({GO F                                EXIT        },{b});
  318.  
  319.     loop( { waitx(1000);
  320.         im(@xtype < 1 || (@xtype > 9 && @xtype < 201))
  321.     });
  322.  
  323.     footnote({});
  324.  
  325.     case( @im(@xtype) ,
  326.         {2},  { ROOMNAME := @tail(@xline(0), { }); 
  327.                 inxinit;
  328.                 NEXT := {inx}; },
  329.         {201},{ NEXT := {forum};},
  330.     );
  331. };
  332.  
  333. /*発言一覧読み込み*/
  334.  
  335. %inxinit
  336. {
  337.     CloseAllMemo;
  338.     mclear(3);
  339.     mread(ROOMNAME|{.in2},3);
  340. };
  341.  
  342. /*発言一覧のカット*/
  343. %SetInx
  344. {
  345.     var SAYFILE[3];
  346.     var FILENAME[80];
  347.     var LINENUM[8];
  348.     var title[100];
  349.  
  350.     mclose(1);
  351.  
  352.     footnote({会議室カット中 });
  353.     command({DEL }|ROOMNAME|{.bak});
  354.     command({RENAME }|ROOMNAME|{.in2 }|ROOMNAME|{.bak});
  355.     mclear(4);
  356.     mread(ROOMNAME|{.bak}, 4);
  357.  
  358.     LINENUM := 1;
  359.     TMP := Elinenum;
  360.  
  361.     loop( {
  362.         footnote(LINENUM | {  } | Slinenum | {  } | Elinenum );
  363.         case( LINENUM < Slinenum ,
  364.             {Yes},{    case( LINENUM + 100 < Slinenum ,
  365.                         {Yes},{ write(ROOMNAME|{.in2}, 
  366.                                 @memo(4, LINENUM, 100) );
  367.                                 LINENUM := LINENUM + 100;
  368.                                 },
  369.                         {No}, { write(ROOMNAME|{.in2},@memo(4,
  370.                                 LINENUM, Slinenum - LINENUM) );
  371.                                 LINENUM := Slinenum;
  372.                                 } );
  373.                     }
  374.         );
  375.         case( LINENUM >= Slinenum && Elinenum > 0,
  376.             {Yes},{    case( Elinenum < 100 ,
  377.                         {Yes},{ write(RNAME|{.in2},
  378.                                 @memo(4, LINENUM, Elinenum) );
  379.                                 LINENUM := LINENUM + Elinenum;
  380.                                 Elinenum := 0;
  381.                                 },
  382.                         {No}, { write(RNAME|{.in2},
  383.                                 @memo(4, LINENUM, 100) );
  384.                                 LINENUM := LINENUM + 100;
  385.                                 Elinenum := Elinenum -100;
  386.                                 }
  387.                     ); }
  388.         );
  389.         case( Elinenum = 0,
  390.             {Yes},{    case( @memo(4, LINENUM, 1) = {},
  391.                         {No}, { write(ROOMNAME|{.in2},
  392.                                 @memo(4, LINENUM, 100) );
  393.                                 LINENUM := LINENUM + 100;
  394.                                 }
  395.                     );    }
  396.         );
  397.         im( @memo(4, LINENUM, 1) != {} );
  398.     } );
  399.  
  400.     command({DEL }|ROOMNAME|{.bak });
  401.     command({RENAME }|ROOMNAME|{.inx }|ROOMNAME|{.bak});
  402.  
  403.     LINENUM := 1;
  404.     Elinenum := TMP;
  405.  
  406.     loop( {
  407.         footnote(LINENUM | {  } | Slinenum | {  } | Elinenum );
  408.         case( LINENUM < Slinenum ,
  409.             {Yes},{    case( LINENUM + 100 < Slinenum ,
  410.                         {Yes},{ write(ROOMNAME|{.inx}, 
  411.                                 @read(ROOMNAME|{.bak}, LINENUM, 100) );
  412.                                 LINENUM := LINENUM + 100;
  413.                                 },
  414.                         {No}, { write(ROOMNAME|{.inx},@read(ROOMNAME|
  415.                                 {.bak},LINENUM, Slinenum - LINENUM) );
  416.                                 LINENUM := Slinenum;
  417.                                 }
  418.                     ); }
  419.         );
  420.         case( LINENUM >= Slinenum && Elinenum > 0,
  421.             {Yes},{    case( Elinenum < 100 ,
  422.                         {Yes},{ write(RNAME|{.inx},@read(
  423.                                 ROOMNAME|{.bak}, LINENUM, Elinenum) );
  424.                                 LINENUM := LINENUM + Elinenum;
  425.                                 Elinenum := 0;
  426.                                 },
  427.                         {No}, { write(RNAME|{.inx},@read(
  428.                                 ROOMNAME|{.bak}, LINENUM, 100) );
  429.                                 LINENUM := LINENUM + 100;
  430.                                 Elinenum := Elinenum -100;
  431.                                 }
  432.                     ); }
  433.         );
  434.         case( Elinenum = 0,
  435.             {Yes},{    case( @memo(4, LINENUM, 1) = {},
  436.                         {No}, { write(ROOMNAME|{.inx},@read(ROOMNAME|
  437.                                     {.bak}, LINENUM, 100) );
  438.                                 LINENUM := LINENUM + 100;
  439.                                 }
  440.                     );
  441.                     }
  442.         );
  443.         im( @memo(4, LINENUM, 1) != {} );
  444.     });
  445.  
  446.     LINENUM := Slinenum;
  447.     Elinenum := TMP;
  448.     TMP := {};
  449.  
  450.     loop( {    SAYFILE := @getchar(@memo(3,LINENUM,1), 70, 3);
  451.             FILENAME := ROOMNAME | {.} | SAYFILE;
  452.             footnote( @getchar(@memo(3,LINENUM,1), 4, 3) );
  453.  
  454.             case ( SAYFILE = TMP ,
  455.                 {No}, {    FILENAME := @MDFile( FILENAME );
  456.                            write(BatFile, {LHa m }| MainD | {\} |@head(FORUM,{_})|
  457.                                    {\LEDARC\} | RNAME | { } | FILENAME | {\n});
  458.                         case ( LINENUM = Slinenum,
  459.                             {Yes},{    TMP1 := @read(FILENAME, 1, 1);}
  460.                         ); },
  461.                 {Yes},{    case ( LINENUM = Slinenum,
  462.                             {Yes},{    TMP1 := @read(FILENAME, 1, 1);}
  463.                         ); }
  464.             );
  465.  
  466.             TMP := SAYFILE;
  467.             LINENUM := LINENUM + 1;
  468.             im(LINENUM <= Elinenum);
  469.     } );
  470.  
  471.     roominit;
  472. };
  473.  
  474. %inxCut
  475. {
  476.     var Slinenum[8];
  477.     var Elinenum[8];
  478.     var RNAME[8];
  479.  
  480.     footnote({カットする先頭を指定してください});
  481.     loop( { waitx(1000);
  482.             im(@xtype != 3)
  483.     });
  484.     Slinenum := @xlinenum;
  485.     footnote({カットする最後を指定してください});
  486.     loop( { waitx(1000);
  487.             im(@xtype != 3)
  488.     });
  489.     Elinenum := @xlinenum;
  490.     case(Slinenum > Elinenum ,
  491.         {Yes},{    TMP := Slinenum;
  492.                 Slinenum := Elinenum;
  493.                 Elinenum := TMP; }
  494.     );
  495.     
  496.     %StartNo @getchar(@memo(3,Slinenum, 1), 4, 3);
  497.     %EndNo @getchar(@memo(3,Elinenum, 1), 4, 3);
  498.  
  499.     Elinenum := Elinenum - Slinenum + 1;
  500.     RNAME := @getchar(@input( {発言no.}|StartNo|{ からno.}|EndNo|
  501.        { 迄をカットします\n  Ok・・会議室名(八文字以内) Cancel・・空文字列})
  502.         |{________},1,8);
  503.     case( RNAME = {________},
  504.         {No},{    SetInx; NEXT := {room} }
  505.     );
  506. };
  507.  
  508. /*発言一覧モード*/
  509.  
  510. %inx
  511. {
  512.     CloseAllMemo;
  513.  
  514.     mopen(3,0,21,639,459);
  515.     curline(LINENUM);
  516.  
  517.     footnote({Go FGo RCut                         EXIT        },{b});
  518.  
  519.     loop( { waitx(1000);
  520.         im(@xtype < 1 || (@xtype > 9 && @xtype < 201))
  521.     });
  522.  
  523.     footnote({});
  524.  
  525.     case( @im(@xtype) ,
  526.         {3},  { LINENUM := @xlinenum;
  527.                 sayinit;
  528.                 NEXT := {say}; },
  529.         {201},{ NEXT := {forum};},
  530.         {202},{ NEXT := {room};},
  531.         {203},{    NEXT := {inx}; 
  532.                 inxCut; }
  533.     );
  534. };
  535.  
  536. /*発言読み込み*/
  537.  
  538. %sayinit
  539. {
  540.     SAYNUM := @getchar(@memo(3,LINENUM,1), 4, 3);
  541.     SAYNO := @getchar(@memo(3,LINENUM,1), 70, 10);
  542.     SAY := @getchar(SAYNO, 4,5);
  543.     SAYFILE := @head(SAYNO, SAY);
  544.     SAYNO := @getchar(@memo(3,LINENUM + 1, 1), 73, 5);
  545.     ROOMNO := @getchar({123456789ABCDEFGHIJK},
  546.                 @getchar(@memo(3,LINENUM, 1), 1, 2),1);
  547. };
  548.  
  549. %say
  550. {
  551.     CloseAllMemo;
  552.     mclear(4);
  553.     mclear(5);
  554.  
  555.     FILENAME := @MeltFile( FORUM|ROOMNO|{.}|SAYFILE );
  556.  
  557.     case(LINENUM < 3,
  558.         {Yes},{ madd(5, @memo(3, 0, 2 + LINENUM) ); },
  559.         {No}, { madd(5, @memo(3, LINENUM - 2, 5) ); }
  560.     );
  561.  
  562.     case( @filechk(FILENAME),
  563.         {No}, {    footnote({発言ファイル}|FILENAME|{が存在しません}); 
  564.                 NEXT := {inx}; },
  565.         {Yes},{    Printsay; }
  566.     );
  567.  
  568. };
  569.  
  570. /* 発言モード */
  571.  
  572. %Printsay
  573. {
  574.     case( SAYNO > SAY,
  575.         {Yes},{ madd(4, @read(FILENAME, SAY, SAYNO - SAY)); },
  576.         {No} ,{    madd(4, @read(FILENAME, SAY));    }
  577.     );
  578.  
  579.     CloseAllMemo;
  580.     mopen(5,0, 21,639,140);
  581.     mclose(1);
  582.     mopen(4,0,141,639,459);
  583.  
  584.     footnote({Go FGo RIndxNextBackコメント 元  次  前 EXIT        },{b});
  585.  
  586.     loop( { waitx(1000);
  587.         im(@xtype < 1 || (@xtype > 9 && @xtype < 201))
  588.     });
  589.  
  590.     footnote({});
  591.  
  592.     case( @im(@xtype) ,
  593.         {201},{ NEXT := {forum};},
  594.         {202},{ NEXT := {room};},
  595.         {203},{ NEXT := {inx};},
  596.         {204},{    LINENUM := LINENUM + 1;
  597.                 case( @memo(3, LINENUM, 1) = {},
  598.                     {Yes},{ LINENUM := LINENUM - 1;
  599.                             NEXT := {inx}; },
  600.                     {No} ,{ sayinit;
  601.                             NEXT := {say}; }
  602.                 );
  603.                 },
  604.         {205},{    LINENUM := LINENUM - 1;
  605.                 case( LINENUM < 1,
  606.                     {Yes},{ LINENUM := LINENUM + 1;
  607.                             NEXT := {inx}; },
  608.                     {No} ,{ sayinit;
  609.                             NEXT := {say}; }
  610.                 );
  611.                 },
  612.         {206},{ TMPNUM := LINENUM;
  613.                 loop( {    TMPNUM := TMPNUM + 1;
  614.                         TMP := @getchar(@memo(3,TMPNUM,1), 8, 3);
  615.                         case( TMP = SAYNUM || TMP = {} ,
  616.                             {No}, {    im({Yes});}
  617.                         );
  618.                         footnote(TMP | { } | TMP1);
  619.                 } );
  620.                 case( TMP = {},
  621.                     {No} ,{    LINENUM := TMPNUM;
  622.                             sayinit;
  623.                             },
  624.                     {Yes},{ footnote({コメントがありません});
  625.                             CloseAllMemo;
  626.                             } );
  627.                 NEXT := {say};
  628.                 },
  629.         {207},{ TMPNUM := LINENUM;
  630.                 TMP := @getchar(@memo(3,TMPNUM,1), 8, 3);
  631.                 loop( {    TMPNUM := TMPNUM - 1;
  632.                         TMP1 := @getchar(@memo(3,TMPNUM,1), 4, 3);
  633.                         case( TMP = TMP1 || TMPNUM = 0 ,
  634.                             {No}, {    im({Yes});}
  635.                         ); 
  636.                         footnote(TMP | { } | TMP1);
  637.                 } );
  638.                 case( TMP != TMP1,
  639.                     {No} ,{    LINENUM := TMPNUM;
  640.                             sayinit;
  641.                             },
  642.                     {Yes},{ footnote({元の発言がありません});
  643.                             CloseAllMemo;
  644.                             }
  645.                 );
  646.                 NEXT := {say};
  647.                 },
  648.         {208},{ TMPNUM := LINENUM;
  649.                 TMP := @getchar(@memo(3,TMPNUM,1), 8, 3);
  650.                 loop( {    TMPNUM := TMPNUM + 1;
  651.                         TMP1 := @getchar(@memo(3,TMPNUM,1), 8, 3);
  652.                         case( TMP = TMP1 || TMP1 = {} || TMP = {   },
  653.                             {No}, {    im({Yes});}
  654.                         ); }
  655.                         footnote(TMP | { } | TMP1);
  656.                 );
  657.                 case( TMP ,
  658.                     TMP1, {    LINENUM := TMPNUM;
  659.                             sayinit;
  660.                             },
  661.                         , { footnote({次のコメントはありません});
  662.                             CloseAllMemo;
  663.                             }
  664.                 );
  665.                 NEXT := {say};
  666.                 },
  667.         {209},{ TMPNUM := LINENUM;
  668.                 TMP := @getchar(@memo(3,TMPNUM,1), 8, 3);
  669.                 loop( {    TMPNUM := TMPNUM - 1;
  670.                         TMP1 := @getchar(@memo(3,TMPNUM,1), 8, 3);
  671.                         case( TMP = TMP1 || TMPNUM = 1 || TMP = {   },
  672.                             {No}, {    im({Yes});}
  673.                         ); }
  674.                         footnote(TMP | { } | TMP1);
  675.                 );
  676.                 case( TMP ,
  677.                     TMP1, {    LINENUM := TMPNUM;
  678.                             sayinit;
  679.                             },
  680.                         , { footnote({前のコメントはありません});
  681.                             CloseAllMemo;
  682.                             }
  683.                 );
  684.                 NEXT := {say};
  685.                 },
  686.     );
  687. };
  688.  
  689.  
  690. CloseAllMemo;
  691. mclear(1);
  692. madd(1,{a});
  693. mopen(1,0,21,200,100);
  694. CloseAllMemo;
  695. mclear(2);
  696. madd(2,{a});
  697. mopen(2,0,21,200,100);
  698.  
  699.  
  700. Main
  701.