;LSI C parser ver 3.5.12 for WonderWitch Copyright (C) 1988-2000 by LSI JAPAN [Apr 14 2000] ;LSI i8086 CG ver 3.5.12 for WonderWitch Copyright (C) 1988-1991, 1995-2000 by LSI JAPAN [Apr 14 2000] CGROUP GROUP TEXT DGROUP GROUP DATA,BSS TEXT CSEG DATA DSEG BSS DSEG TEXT CSEG ;/*---------------------------------------------------------------------------------------- ; Ver1.00 2001/01/07 21:47:50 ; WWCTool用サンプルプログラム。 ; スピード遅く、バグが有ります。 ;----------------------------------------------------------------------------------------*/ ; ;#include "..\WWCMain.h" ;#include "TextView.h" ; ;/*---------------------------------------------------------------------------------------- ; グローバル変数 ;----------------------------------------------------------------------------------------*/ ; ;UCHAR TextImage[28*18*32]; ;UCHAR Image1Buf[MAXFNAME*10*32]; ;int Line; ;int Column; ;int TextTop[1000]; ; ;UCHAR FileList[10][MAXFNAME]; ;int FileListPos; ; ;/*---------------------------------------------------------------------------------------- ; WWCInitはWWCToolが管理しています。 ;----------------------------------------------------------------------------------------*/ ;/*WWCTool*/ ; ;/*--------------------------------------------------------------------------------------*/ ; ;void WWCInit(void) _WWCInit:: ;{ ; ; Form->OnCreate = &EFormCreate; MOV BX,[_Form].W MOV [2+BX].W,_EFormCreate ; Form->StartClose = true; MOV BX,[_Form].W MOV AL,[28+BX].B AND AL,~2 OR AL,2 MOV [28+BX].B,AL ; Image0->OnKeyUp = &EImage0KeyUp; MOV BX,[_Image].W MOV [BX].W,_EImage0KeyUp ; Image0->Image = TextImage; MOV BX,[_Image].W MOV [6+BX].W,_TextImage MOV 2[6+BX].W,DS ; Image1->Top = 3; MOV BX,[_Image+2].W MOV [3+BX].B,3 ; Image1->Left = 1; MOV BX,[_Image+2].W MOV [2+BX].B,1 ; Image1->Height = 10; MOV BX,[_Image+2].W MOV [5+BX].B,10 ; Image1->Width = MAXFNAME; MOV BX,[_Image+2].W MOV [4+BX].B,16 ; Image1->Image = Image1Buf; MOV BX,[_Image+2].W MOV [6+BX].W,_Image1Buf MOV 2[6+BX].W,DS ; Image1->Enabled = true; MOV BX,[_Image+2].W MOV AL,[14+BX].B AND AL,~1 OR AL,1 MOV [14+BX].B,AL ; Image1->ImageHeight = 10; MOV BX,[_Image+2].W MOV [13+BX].B,10 ; Image1->OnKeyUp = &EImage1KeyUp; MOV BX,[_Image+2].W MOV [BX].W,_EImage1KeyUp ; Image1->ImageWidth = MAXFNAME; MOV BX,[_Image+2].W MOV [12+BX].B,16 ; Timer->OnTimer = &ETimerTimer; MOV BX,[_Timer].W MOV [BX].W,_ETimerTimer ; Timer->Interval = 500; MOV BX,[_Timer].W MOV [2+BX].W,500 ; Timer->Enabled = true; MOV BX,[_Timer].W MOV AL,[4+BX].B AND AL,~1 OR AL,1 MOV [4+BX].B,AL ; Image0->Enabled = true; MOV BX,[_Image].W MOV AL,[14+BX].B AND AL,~1 OR AL,1 MOV [14+BX].B,AL ;} RET ; ;/*--------------------------------------------------------------------------------------*/ ; ;void EFormCreate(void) _EFormCreate:: ;{ ; chdir("/rom0/"); MOV AX,Z1 PUSH DS PUSH AX CALL _chdir ADD SP,4 ; Form->Focused = 1; MOV BX,[_Form].W MOV [30+BX].B,1 ; EImage1KeyUp(Key->ExUp); MOV BX,[_Key].W PUSH [12+BX].W CALL _EImage1KeyUp ADD SP,2 ;} RET DATA DSEG EVEN Z1: DB 47 DB 114 DB 111 DB 109 DB 48 DB 47 DB 0 TEXT CSEG ; ;/*--------------------------------------------------------------------------------------*/ ; ;void EImage1KeyUp(UINT Keys) _EImage1KeyUp:: PUSH BP MOV BP,SP SUB SP,4 ;{ ; int Size, n; ; ; if(Keys & Key->ExUp){ MOV AX,[BP+4].W MOV BX,[_Key].W TEST AX,[12+BX].W JE _6 ; ImageFill(Image1, (WHITE<<4)|WHITE); MOV BX,[_Image+2].W MOV AL,[12+BX].B XOR AH,AH MOV BX,[_Image+2].W MOV BL,[13+BX].B XOR BH,BH MUL BX PUSH AX MOV AL,255 PUSH AX MOV BX,[_Image+2].W PUSH 2[6+BX].W PUSH [6+BX].W CALL _MemSet32 ADD SP,8 ; Size = FileGetName(FileList, "", 10); MOV AX,10 PUSH AX MOV AX,Z7 PUSH DS PUSH AX MOV AX,_FileList PUSH DS PUSH AX CALL _FileGetName ADD SP,10 MOV [BP-2].W,AX ; for(n=0;n < Size;n++){ MOV [BP-4].W,0 JMP _7 _8: ; FileList[n][MAXFNAME-1] = 0; MOV BX,[BP-4].W SHL BX,4 ADD BX,_FileList MOV [15+BX].B,0 ; ImagePuts(Image1, 0, n, FileList[n], BLACK, WHITE); MOV AL,15 PUSH AX XOR AL,AL PUSH AX MOV AX,[BP-4].W SHL AX,4 ADD AX,_FileList PUSH DS PUSH AX PUSH [BP-4].W XOR AX,AX PUSH AX PUSH [_Image+2].W CALL _ImagePuts ADD SP,14 ; } INC [BP-4].W _7: MOV AX,[BP-4].W CMP AX,[BP-2].W JL _8 ; } _6: ; ; ImagePuts(Image1, 0, FileListPos, FileList[FileListPos], BLACK, WHITE); MOV AL,15 PUSH AX XOR AL,AL PUSH AX MOV AX,[_FileListPos].W SHL AX,4 ADD AX,_FileList PUSH DS PUSH AX PUSH [_FileListPos].W XOR AX,AX PUSH AX PUSH [_Image+2].W CALL _ImagePuts ADD SP,14 ; if(Keys & Key->Up){ MOV AX,[BP+4].W MOV BX,[_Key].W TEST AX,[BX].W JE _13 ; if(FileListPos > 0){ CMP [_FileListPos].W,0 JNG _15 ; FileListPos--; DEC [_FileListPos].W ; } _15: ; } _13: ; if(Keys & Key->Down){ MOV AX,[BP+4].W MOV BX,[_Key].W TEST AX,[2+BX].W JE _17 ; if(FileListPos < 10-1){ CMP [_FileListPos].W,9 JNL _19 ; FileListPos++; INC [_FileListPos].W ; } _19: ; } _17: ; ImagePuts(Image1, 0, FileListPos, FileList[FileListPos], WHITE, BLUE); MOV AL,12 PUSH AX MOV AL,15 PUSH AX MOV AX,[_FileListPos].W SHL AX,4 ADD AX,_FileList PUSH DS PUSH AX PUSH [_FileListPos].W XOR AX,AX PUSH AX PUSH [_Image+2].W CALL _ImagePuts ADD SP,14 ; if(Keys & Key->Enter){ MOV AX,[BP+4].W MOV BX,[_Key].W TEST AX,[8+BX].W JE _21 ; ReadFile(FileList[FileListPos], _heap, TextTop); MOV AX,_TextTop PUSH AX PUSH [__heap].W MOV AX,[_FileListPos].W SHL AX,4 ADD AX,_FileList PUSH AX CALL _ReadFile ADD SP,6 ; View(); CALL _View ; Form->Focused = 0; MOV BX,[_Form].W MOV [30+BX].B,0 ; Image1->Enabled = false; MOV BX,[_Image+2].W MOV AL,[14+BX].B AND AL,~1 OR AL,0 MOV [14+BX].B,AL ; } _21: ;} MOV SP,BP POP BP RET DATA DSEG EVEN Z7: DB 0 TEXT CSEG ; ;/*--------------------------------------------------------------------------------------*/ ; ;void EImage0KeyUp(UINT Keys) _EImage0KeyUp:: PUSH BP MOV BP,SP ;{ ; if(Keys & Key->ExUp){ MOV AX,[BP+4].W MOV BX,[_Key].W TEST AX,[12+BX].W JE _25 ; Form->Focused = 1; MOV BX,[_Form].W MOV [30+BX].B,1 ; Image1->Enabled = true; MOV BX,[_Image+2].W MOV AL,[14+BX].B AND AL,~1 OR AL,1 MOV [14+BX].B,AL ; EImage1KeyUp(Key->ExUp); MOV BX,[_Key].W PUSH [12+BX].W CALL _EImage1KeyUp ADD SP,2 ; } _25: ; if(Keys & Key->Esc){ MOV AX,[BP+4].W MOV BX,[_Key].W TEST AX,[10+BX].W JE _27 ; FormViewChange(!Form->TateView); MOV BX,[_Form].W TEST [28+BX].B,4 JNE _29 MOV AX,1 JMP _30 _29: XOR AX,AX _30: PUSH AX CALL _FormViewChange ADD SP,2 ; View(); CALL _View ; } _27: ;} POP BP RET ; ;/*--------------------------------------------------------------------------------------*/ ; ;void ETimerTimer(void) _ETimerTimer:: ;{ ; if(Form->Focused == 0){ MOV BX,[_Form].W CMP [30+BX].B,0 JNE _34 ; if(Form->Key & Key->Up){ MOV BX,[_Form].W MOV AX,[20+BX].W MOV BX,[_Key].W TEST AX,[BX].W JE _36 ; Line--; DEC [_Line].W ; View(); CALL _View ; } _36: ; if(Form->Key & Key->Down){ MOV BX,[_Form].W MOV AX,[20+BX].W MOV BX,[_Key].W TEST AX,[2+BX].W JE _38 ; Line++; INC [_Line].W ; View(); CALL _View ; } _38: ; if(Form->Key & Key->Right){ MOV BX,[_Form].W MOV AX,[20+BX].W MOV BX,[_Key].W TEST AX,[6+BX].W JE _40 ; Column++; INC [_Column].W ; View(); CALL _View ; } _40: ; if(Form->Key & Key->Left){ MOV BX,[_Form].W MOV AX,[20+BX].W MOV BX,[_Key].W TEST AX,[4+BX].W JE _42 ; Column--; DEC [_Column].W ; View(); CALL _View ; } _42: ; } _34: ; ;} RET ; ;/*--------------------------------------------------------------------------------------*/ ;/* ライン変換 */ ;/*--------------------------------------------------------------------------------------*/ ; ;void GetLine(UINT far *Buf, int Line) _GetLine:: PUSH BP MOV BP,SP SUB SP,6 PUSH CX PUSH SI ;{ ; int n, x, m; ; ; x=0; MOV [BP-2].W,0 ; for(n=TextTop[Line];n < TextTop[Line+1];n++){ MOV BX,[BP+8].W SHL BX,1 MOV AX,[_TextTop+BX].W MOV [BP-4].W,AX JMP _45 _46: ; if(_heap[n] == '\t'){ MOV BX,[__heap].W ADD BX,[BP-4].W CMP [BX].B,9 JNE _51 ; for(m=0;m < 4-(x%4);m++){ MOV [BP-6].W,0 JMP _52 _53: ; Buf[x+m] = ' '; LES BX,[BP+4].D MOV AX,[BP-2].W ADD AX,[BP-6].W SHL AX,1 ADD BX,AX MOV ES:[BX].W,32 ; } INC [BP-6].W _52: MOV AX,[BP-2].W MOV BX,4 CWD IDIV BX MOV AX,4 SUB AX,DX CMP AX,[BP-6].W JG _53 ; x += 4-(x%4); MOV AX,[BP-2].W MOV BX,4 CWD IDIV BX MOV AX,4 SUB AX,DX ADD [BP-2].W,AX ; }else if(_heap[n] == '\n'){ JMP _57 _51: MOV BX,[__heap].W ADD BX,[BP-4].W CMP [BX].B,10 JNE _59 ; Buf[x] = ' '; LES BX,[BP+4].D MOV AX,[BP-2].W SHL AX,1 ADD BX,AX MOV ES:[BX].W,32 ; break; JMP _49 _59: MOV BX,[__heap].W ADD BX,[BP-4].W CMP [BX].B,13 JNE _63 ; }else if(_heap[n] == '\r'){ ; Buf[x] = 0x19; LES BX,[BP+4].D MOV AX,[BP-2].W SHL AX,1 ADD BX,AX MOV ES:[BX].W,25 ; x++; INC [BP-2].W ; }else if((_heap[n] >= 0x81 && _heap[n] <= 0x9f) || (_heap[n] >= 0xe0 && _heap[n] <= 0xfc)){ JMP _64 _63: MOV BX,[__heap].W ADD BX,[BP-4].W CMP [BX].B,129 JB _67 MOV BX,[__heap].W ADD BX,[BP-4].W CMP [BX].B,159 JNA _65 _67: MOV BX,[__heap].W ADD BX,[BP-4].W CMP [BX].B,224 JB _66 MOV BX,[__heap].W ADD BX,[BP-4].W CMP [BX].B,252 JA _66 _65: ; Buf[x] = (_heap[n]<<8) | (_heap[n+1] & 0xff); LES BX,[BP+4].D MOV AX,[BP-2].W SHL AX,1 ADD BX,AX MOV SI,[__heap].W ADD SI,[BP-4].W MOV AL,[SI].B MOV AH,AL MOV SI,[BP-4].W INC SI ADD SI,[__heap].W MOV CL,[SI].B AND CL,255 MOV AL,CL MOV ES:[BX].W,AX ; n++; INC [BP-4].W ; x++; INC [BP-2].W ; }else{ JMP _70 _66: ; Buf[x] = _heap[n]; LES BX,[BP+4].D MOV AX,[BP-2].W SHL AX,1 ADD BX,AX MOV SI,[__heap].W ADD SI,[BP-4].W MOV AL,[SI].B XOR AH,AH MOV ES:[BX].W,AX ; x++; INC [BP-2].W ; } _70: _64: _57: ; } INC [BP-4].W _45: MOV AX,[BP-4].W MOV BX,[BP+8].W SHL BX,1 CMP AX,[_TextTop+2+BX].W JL _46 _49: ; for(;x < 128;x++){ JMP _71 _72: ; Buf[x] = ' '; LES BX,[BP+4].D MOV AX,[BP-2].W SHL AX,1 ADD BX,AX MOV ES:[BX].W,32 ; } INC [BP-2].W _71: CMP [BP-2].W,128 JL _72 ; Buf[x] = 0; LES BX,[BP+4].D MOV AX,[BP-2].W SHL AX,1 ADD BX,AX MOV ES:[BX].W,0 ;} POP SI POP CX MOV SP,BP POP BP RET ; ;/*--------------------------------------------------------------------------------------*/ ;/* 表示 */ ;/*--------------------------------------------------------------------------------------*/ ; ;void View(void) _View:: PUSH BP MOV BP,SP SUB SP,260 PUSH SI ;{ ; UINT TextBuf[128+1]; ; int y; ; ImageFill(Image1, (WHITE<<4)|WHITE); MOV BX,[_Image+2].W MOV AL,[12+BX].B XOR AH,AH MOV BX,[_Image+2].W MOV BL,[13+BX].B XOR BH,BH MUL BX PUSH AX MOV AL,255 PUSH AX MOV BX,[_Image+2].W PUSH 2[6+BX].W PUSH [6+BX].W CALL _MemSet32 ADD SP,8 ; for(y=0;y < Image0->Height;y++){ MOV [BP-2].W,0 JMP _78 _79: ; GetLine(TextBuf, Line+y); MOV AX,[_Line].W ADD AX,[BP-2].W PUSH AX LEA AX,[BP-260] PUSH SS PUSH AX CALL _GetLine ADD SP,6 ; ImageWPuts(Image0, 0, y, &(TextBuf[Column]), WHITE, 0); XOR AL,AL PUSH AX MOV AL,15 PUSH AX MOV SI,[_Column].W SHL SI,1 LEA AX,[BP-260+SI] PUSH SS PUSH AX PUSH [BP-2].W XOR AX,AX PUSH AX PUSH [_Image].W CALL _ImageWPuts ADD SP,14 ; } INC [BP-2].W _78: MOV BX,[_Image].W MOV AL,[5+BX].B XOR AH,AH CMP AX,[BP-2].W JG _79 ;} POP SI MOV SP,BP POP BP RET ; ;/*--------------------------------------------------------------------------------------*/ ;/*return */ ;/* サイズ */ ;/* Topに行の先頭の位置を記録 */ ;/*--------------------------------------------------------------------------------------*/ ; ;int ReadFile(UCHAR *Path, UCHAR *Buf, int *Top) _ReadFile:: PUSH BP MOV BP,SP SUB SP,8 ;{ ; int fd, Size, y, Pos; ; ; ClrInterrupt(); cli ; if((fd = open(Path, FMODE_R, 0)) >= 0) { XOR AX,AX PUSH AX MOV AX,4 PUSH AX MOV AX,[BP+4].W PUSH DS PUSH AX CALL _open ADD SP,8 MOV [BP-2].W,AX CMP AX,0 JL _86 ; Size = read(fd, Buf, -(int)Buf); MOV AX,[BP+6].W NEG AX PUSH AX MOV AX,[BP+6].W PUSH DS PUSH AX PUSH [BP-2].W CALL _read ADD SP,8 MOV [BP-4].W,AX ; close(fd); PUSH [BP-2].W CALL _close ADD SP,2 ; SetInterrupt(); sti ; ; Top[0] = 0; MOV BX,[BP+8].W MOV [BX].W,0 ; y = 1; MOV [BP-6].W,1 ; for(Pos=0;Pos < Size;Pos++){ MOV [BP-8].W,0 JMP _87 _88: ; if(Buf[Pos] == '\n'){ MOV BX,[BP+6].W ADD BX,[BP-8].W CMP [BX].B,10 JNE _93 ; Top[y] = Pos+1; MOV BX,[BP-6].W SHL BX,1 ADD BX,[BP+8].W MOV AX,[BP-8].W INC AX MOV [BX].W,AX ; y++; INC [BP-6].W ; } _93: ; } INC [BP-8].W _87: MOV AX,[BP-8].W CMP AX,[BP-4].W JL _88 ; Top[y] = 0; MOV BX,[BP-6].W SHL BX,1 ADD BX,[BP+8].W MOV [BX].W,0 ; return(Size); MOV AX,[BP-4].W JMP _94 _86: ; }else{ ; SetInterrupt(); sti ; return(0); XOR AX,AX _94: MOV SP,BP POP BP RET BSS DSEG EVEN _Column:: RS 2 EVEN _FileList:: RS 160 EVEN _FileListPos:: RS 2 EVEN _Image1Buf:: RS 5120 EVEN _Line:: RS 2 EVEN _TextImage:: RS 16128 EVEN _TextTop:: RS 2000 EXTRN _Form EXTRN _Image EXTRN _Key EXTRN _Timer EXTRN __heap EXTRN _FileGetName EXTRN _FormViewChange EXTRN _ImagePuts EXTRN _ImageWPuts EXTRN _MemSet32 EXTRN _chdir EXTRN _close EXTRN _open EXTRN _read ;core used: 10947/34304 END