Win.版 サンプル閲覧実行ツール746

 投稿者:SECOND  投稿日:2010年 6月 9日(水)08時51分25秒
  !Win.版 サンプル閲覧実行ツール746
!----------------------------------------------------------
!各 ウィンドウの、左上位置(x0,y0)と、幅(xw,yw)。
CALL SetWindowPos( WinHandle("MAIN"       ),0,   0,  0, 720,600, 0)
CALL SetWindowPos( WinHandle("TEXT"       ),0,   0, 70, 514,670, 0)
CALL SetWindowPos( WinHandle("GRAPHICS"   ),0, 515,172,   0,  0, 1)

SUB SetWindowPos( handle, C2, x0,y0,xw,yw, nFLG ) !nFLG: 0=x0y0xwyw 1=x0y0 2=xwyw
   ASSIGN "user32.dll","SetWindowPos"
END SUB

!----------------------------------------------------------
!SET directory "C:\BASICw32"                      !アーカイブ版の多く。
!SET directory "C:\WINDOWS\デスクトップ\BASIC746"     !私の場合。
SET directory "C:\Program Files\Decimal BASIC\BASICw32"   !インストール版の、デフォルト。

!ここで、エラー停止した方、または、表示が出ない方 は、
!上のパス名を、ご自身の 十進BASICフォルダー に直して下さい。
!このプログラム自体が、そこから起動される場合は、削除しても可。
!
!----------------------------------------------------------
SET BITMAP SIZE 501,501
LET V=5                    !表示列数
SET WINDOW 0, V, 27,-6
SET AREA COLOR 5
DIM p$(5*V),wild$(5*V),names$(200)

DATA TEXTFILE\, Tutorial\, UserLib\,  COMM\, Complex\
DATA FRACTAL\ , FUNCTION\, Library\,  Math\, MICROSFT\
DATA "Q&A\",    SAMPLE\,   STATEMEN\, ".\"
!                                      ↑ BASIC フォルダー自体
FOR f=1 TO 25
   READ IF MISSING THEN EXIT FOR: w$
   FILE splitname(w$) p$(f), name$, ext$    !ext$は語頭に"."含む。
   IF ext$="" THEN LET wild$(f)="*.*" ELSE LET wild$(f)=name$& ext$
NEXT f
!
LET w=12                   !最初に開くフォルダー、1~?番目(上のDATA 文)
CALL basfiles
!----------------------------------------------------------
OPEN #9 :TextWindow2
ERASE #9
CALL SetWindowPos( WinHandle("TEXTWINDOW2"),0, 515,  0, 509,180, 0)
PRINT #9 :"フォルダーを、選んで"
PRINT #9 :"ファイル名を、左クリックすると、内容表示する。"
PRINT #9 :"  ↑ 重ねて、左クリックすると、(.BAS ならば、)"
PRINT #9 :" BASIC を、新しく起動、実行できます。 閉じると、続行。"& CHR$(0)
DO
   MOUSE POLL mx,my,mlb,mrb
   IF mrb=1 THEN EXIT DO   !右クリック
   IF mlb=1 THEN           !左クリック
      IF -1< my THEN
         IF 0< my THEN LET b=INT(mx)*27+CEIL(my) ELSE LET b=bak+1
         IF b=< n THEN
            IF b<>bak THEN
               CALL sampdisp
            ELSEIF UCASE$(right$(names$(b),4))=".BAS" THEN
               execute "BASIC.EXE" WITH("/NR",p$(m)& names$(b))
               CALL SetWindowPos( WinHandle("MAIN"       ),0,   0,  0, 720,600, 0)
               CALL SetWindowPos( WinHandle("TEXT"       ),0,   0, 70, 514,670, 0)
               CALL SetWindowPos( WinHandle("GRAPHICS"   ),0, 515,172,   0,  0, 1)
               CALL SetWindowPos( WinHandle("TEXTWINDOW2"),0, 515,  0, 509,180, 0)
            END IF
         END IF
      ELSEIF my< -1 THEN
         LET w=INT(my+6)*V+CEIL(mx)
         IF w< f THEN CALL basfiles
      END IF
      LET i=0
      DO
         WAIT DELAY .02
         MOUSE POLL mx,my,mlb,mrb
         IF mlb=0 AND mrb=0 THEN LET i=i+1 ELSE LET i=0
      LOOP UNTIL 5< i      !マウスボタンが離れるまで待つ。
   END IF
   WAIT DELAY 0            !クロックアップを押える
LOOP
PLOT AREA:0,-1;V,-1;V,0;0,0
SET TEXT BACKGROUND "TRANSPARENT"      !background none
PLOT TEXT,AT V*.3,0 :"終了しました。"

!-------------
SUB basfiles
   LET m=w
   CLEAR
   PLOT AREA:0,-1;V,-1;V,0;0,0
   SET TEXT BACKGROUND "TRANSPARENT"   !background none
   PLOT TEXT,AT V*.17,0 :"ココを左クリックすると順送り。 右クリックで、終了。"
   FOR i=0 TO 4
      FOR j=1 TO V
         LET w=i*V+j
         IF w=m THEN PLOT AREA:j-1,i-5;j,i-5;j,i-6;j-1,i-6
         IF wild$(w)="*.*" THEN LET w$=p$(w) ELSE LET w$=p$(w)& wild$(w)
         PLOT TEXT,AT j-1+0.03,i-5 :w$ !p$(w)& wild$(w)
      NEXT j
   NEXT i
   IF m>0 THEN LET n=files(p$(m)& wild$(m))
   IF n>0 THEN file list p$(m)& wild$(m), names$
   SET TEXT BACKGROUND "OPAQUE"        !background color 0
   FOR w=1 TO n
      PLOT TEXT,AT IP((w-1)/27)+0.03, MOD((w-1),27)+1 :"|"& names$(w)
   NEXT w
   LET bak=0
END SUB

!-------------
SUB sampdisp
   LET x=IP((bak-1)/27)
   LET y=MOD((bak-1),27)
   SET LINE COLOR 0
   PLOT LINES:x,y; x+1-0.03,y; x+1-0.03,y+1; x,y+1; x,y
   LET x=IP((b-1)/27)
   LET y=MOD((b-1),27)
   SET LINE COLOR 2
   PLOT LINES:x,y; x+1-0.03,y; x+1-0.03,y+1; x,y+1; x,y
   PRINT
   PRINT "!*******************************"
   PRINT "!"& p$(m)& names$(b)
   PRINT "!*******************************"
   WHEN EXCEPTION IN
      OPEN #1: NAME p$(m)& names$(b),ACCESS INPUT
      FOR L=1 TO 500      !最大 表示行数
         LINE INPUT #1,IF MISSING THEN EXIT FOR :w$
         FOR i=1 TO LEN(w$)
            IF w$(i:i)< " " AND w$(i:i)<>CHR$(9) THEN CAUSE EXCEPTION 1
         NEXT i
         PRINT w$
      NEXT L
   USE
      PRINT "******* テキストではない、表示の中止。"
   END WHEN
   CLOSE #1
   LET bak=b
END SUB

END
 

戻る