home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
AW20.ZIP
/
AW.C
< prev
next >
Wrap
Text File
|
1989-11-28
|
15KB
|
489 lines
#define INCL_WIN
#define INCL_GPI
#define INCL_DOS
#define INCL_VIO
#define INCL_AVIO
#include <os2.h>
#include <mt\stdlib.h>
#include <mt\string.h>
#include <mt\process.h>
#include "aw.h"
#define NUMLINES 60
#define MAXWIDTH 80
HAB hAB;
HMQ hmqaw;
HWND hwndaw;
HWND hwndawFrame;
HWND hwndHscroll,hwndVscroll;
HPS hps;
HVPS hvps;
CHAR szClassName[] = "aw";
char far filename[20];
SHORT iSel = 0;
USHORT all = TRUE;
char drive_str[27][4];
USHORT drive_sel[27];
USHORT num_drive = 0;
LONG SecSem;
TID idThread;
UCHAR cThreadStack[9216];
USHORT busy = FALSE;
USHORT file_attr = 0x0000;
SHORT sHscrollPos,sVscrollPos,cxChar,cyChar,cxClient,cyClient;
SHORT cyPage = 0;
BYTE bBlankCell[2] = " ";
USHORT row = 0;
SWP swp;
USHORT szswp;
RECTL rect;
SHORT cdecl main( )
{
QMSG qmsg;
ULONG ctldata;
hAB = WinInitialize(NULL);
hmqaw = WinCreateMsgQueue(hAB, 0);
if (!WinRegisterClass( hAB,
(PCH)szClassName,
(PFNWP)awWndProc,
CS_SYNCPAINT | CS_SIZEREDRAW,
0))
return( 0 );
ctldata = FCF_STANDARD & ~FCF_SHELLPOSITION | FCF_VERTSCROLL | FCF_HORZSCROLL;
hwndawFrame = WinCreateStdWindow( HWND_DESKTOP,
WS_VISIBLE,
&ctldata,
(PCH)szClassName,
NULL,
0L,
(HMODULE)NULL,
AWICON,
(HWND FAR *)&hwndaw );
szswp = sizeof(swp);
if(!WinQueryProfileData(hAB,szClassName,"POSITION",(PVOID)&swp,&szswp))
{
WinQueryWindowRect( HWND_DESKTOP, (PRECTL)&rect );
WinSetWindowPos(hwndawFrame,HWND_TOP,
(SHORT)rect.xLeft,(SHORT)rect.yTop - 270,230,
(SHORT)270,
SWP_SIZE | SWP_MOVE |SWP_ACTIVATE);
}
else
WinSetWindowPos(hwndawFrame,HWND_TOP,
(SHORT)swp.x,(SHORT)swp.y,swp.cx,
(SHORT)swp.cy,
SWP_SIZE | SWP_MOVE |SWP_ACTIVATE);
WinShowWindow( hwndawFrame, TRUE );
while( WinGetMsg( hAB, (PQMSG)&qmsg, (HWND)NULL, 0, 0 ) )
{
WinDispatchMsg( hAB, (PQMSG)&qmsg );
}
DosSuspendThread(idThread);
WinDestroyWindow( hwndawFrame );
WinDestroyMsgQueue( hmqaw );
WinTerminate( hAB );
}
BYTE RgbToVioColor(COLOR clrRgb)
{
BYTE bIrgb = 0;
RGB rgb;
rgb = MAKETYPE(clrRgb,RGB);
if(rgb.bBlue >= 0x80)
bIrgb |= '\x01';
if(rgb.bGreen >= 0x80)
bIrgb |= '\x02';
if(rgb.bRed >= 0x80)
bIrgb |= '\x04';
if(rgb.bBlue >= 0xC0 || rgb.bGreen >= 0xC0 || rgb.bRed >= 0xC0)
bIrgb |= 8;
if(bIrgb == 0 && rgb.bBlue >= 0x40 && rgb.bGreen >= 0x40 && rgb.bRed >= 0x40)
bIrgb = 8;
return(bIrgb);
}
BYTE ConstructDefaultAttribute(VOID)
{
return RgbToVioColor( WinQuerySysColor(HWND_DESKTOP,SYSCLR_WINDOW,0L)) << 4 |
RgbToVioColor(WinQuerySysColor(HWND_DESKTOP,SYSCLR_WINDOWTEXT,0L));
}
VOID WndCreate(hWnd)
HWND hWnd;
{
HDC hdc;
SIZEL sizl;
hdc = WinOpenWindowDC(hWnd);
sizl.cx = sizl.cy = 0;
hps = GpiCreatePS(hAB,hdc,&sizl,PU_PELS | GPIF_DEFAULT |
GPIT_MICRO | GPIA_ASSOC);
VioCreatePS(&hvps,NUMLINES,MAXWIDTH,0,1,NULL);
VioAssociate(hdc,hvps);
VioGetDeviceCellSize(&cyChar,&cxChar,hvps);
bBlankCell[1] = ConstructDefaultAttribute();
VioScrollUp(0,0,-1,-1,-1,bBlankCell,hvps);
hwndHscroll = WinWindowFromID(WinQueryWindow(hWnd,QW_PARENT,
FALSE),FID_HORZSCROLL);
WinSendMsg(hwndHscroll,SBM_SETSCROLLBAR,
MPFROM2SHORT(sHscrollPos,0),
MPFROM2SHORT(0,MAXWIDTH - 1));
hwndVscroll = WinWindowFromID(WinQueryWindow(hWnd,QW_PARENT,
FALSE),FID_VERTSCROLL);
WinSendMsg(hwndVscroll,SBM_SETSCROLLBAR,
MPFROM2SHORT(sVscrollPos,0),
MPFROM2SHORT(0,NUMLINES - 1));
DosSemSet(&SecSem);
_beginthread((void(_CDECL far *)(void far *))SecondThread,cThreadStack,sizeof(cThreadStack),NULL);
}
VOID gotoxy(row,col,hvps)
SHORT row,col;
HVPS hvps;
{
SHORT trow,tcol;
VioGetCurPos(&trow,&tcol,hvps);
if(row != -1)
WinSendMsg(hwndVscroll,SBM_SETPOS,
MPFROM2SHORT(row,0),NULL);
else
row = trow;
if(col != -1)
WinSendMsg(hwndHscroll,SBM_SETPOS,
MPFROM2SHORT(col,0),NULL);
else
col = tcol;
VioSetCurPos(row,col,hvps);
}
VOID adj_view()
{
USHORT row,col;
VioGetCurPos(&row,&col,hvps);
if (sVscrollPos + cyPage < row + 2 )
{
sVscrollPos = (row - cyPage) + 1;
VioSetOrg(sVscrollPos,sHscrollPos,hvps);
}
else if (sVscrollPos > row )
{
sVscrollPos = row;
VioSetOrg(sVscrollPos,sHscrollPos,hvps);
}
}
MRESULT EXPENTRY awWndProc( hWnd, msg, mp1, mp2 )
HWND hWnd;
USHORT msg;
MPARAM mp1;
MPARAM mp2;
{
RECTL rclInvalid;
SHORT cyTemp,cxTemp;
if(!busy)
EnableMenuItem(hwndaw,IDM_PARA,TRUE);
switch (msg)
{
case WM_CREATE:
WndCreate(hWnd);
break;
case WM_COMMAND:
switch(LOUSHORT(mp1))
{
case IDM_EXITAW:
WinPostMsg( hWnd, WM_QUIT, 0L, 0L );
break;
case IDM_RESUME:
break;
case IDMABOUT:
WinDlgBox(HWND_DESKTOP,hWnd,(PFNWP)AboutDlg,NULL,IDD_ABOUT, NULL );
break;
case IDM_PARA:
WinDlgBox(HWND_DESKTOP,hWnd,(PFNWP)ParaDlg,NULL,IDD_PARA, NULL );
break;
case IDM_DEFAULTS:
WinQueryWindowRect( HWND_DESKTOP, (PRECTL)&rect );
WinSetWindowPos(hwndawFrame,HWND_TOP,
(SHORT)rect.xLeft,(SHORT)rect.yTop - 270,230,
(SHORT)270,SWP_SIZE | SWP_MOVE |SWP_ACTIVATE);
break;
}
break;
case WM_SIZE:
cxTemp = cxClient;
cyTemp = cyClient;
cxClient = SHORT1FROMMP(mp2);
cyClient = SHORT2FROMMP(mp2);
cyPage = cyClient / cyChar;
sVscrollPos = 0;
sHscrollPos = 0;
gotoxy(0,0,hvps);
VioSetOrg(sVscrollPos,sHscrollPos,hvps);
WinDefAVioWindowProc(hWnd,msg,mp1,mp2);
break;
case WM_DESTROY:
WinQueryWindowPos(hwndawFrame,&swp);
szswp = sizeof(swp);
WinWriteProfileData(hAB,szClassName,"POSITION",(PVOID)&swp,szswp);
VioAssociate(NULL,hvps);
VioDestroyPS(hvps);
GpiDestroyPS(hps);
break;
case WM_HSCROLL:
switch(SHORT2FROMMP(mp2))
{
case SB_LINELEFT:
cyTemp = SHORT1FROMMP(WinSendMsg(hwndHscroll,
SBM_QUERYPOS,NULL,NULL));
cyTemp--;
if(cyTemp >= 0)
gotoxy(-1,cyTemp,hvps);
sHscrollPos -= 1;
break;
case SB_LINERIGHT:
cyTemp = SHORT1FROMMP(WinSendMsg(hwndHscroll,
SBM_QUERYPOS,NULL,NULL));
cyTemp++;
if(cyTemp <= MAXWIDTH)
gotoxy(-1,cyTemp,hvps);
sHscrollPos += 1;
break;
case SB_PAGELEFT:
cyTemp = SHORT1FROMMP(WinSendMsg(hwndHscroll,
SBM_QUERYPOS,NULL,NULL));
cyTemp -= 1;
if(cyTemp < 0)
cyTemp = 0;
if(cyTemp <= MAXWIDTH)
gotoxy(-1,cyTemp,hvps);
sHscrollPos -= 1;
break;
case SB_PAGERIGHT:
cyTemp = SHORT1FROMMP(WinSendMsg(hwndHscroll,
SBM_QUERYPOS,NULL,NULL));
cyTemp += 1;
if(cyTemp >= MAXWIDTH)
cyTemp = MAXWIDTH - 1;
gotoxy(-1,cyTemp,hvps);
sHscrollPos += 1;
break;
case SB_SLIDERPOSITION:
sHscrollPos = SHORT1FROMMP(mp2);
gotoxy(-1,sHscrollPos,hvps);
break;
}
sHscrollPos = max(0,min(sHscrollPos,MAXWIDTH-(cxClient/cxChar)));
VioSetOrg(sVscrollPos,sHscrollPos,hvps);
break;
case WM_VSCROLL:
switch(SHORT2FROMMP(mp2))
{
case SB_LINEUP:
cyTemp = SHORT1FROMMP(WinSendMsg(hwndVscroll,
SBM_QUERYPOS,NULL,NULL));
cyTemp--;
if(cyTemp >= 0 && cyTemp <= NUMLINES)
gotoxy(cyTemp,-1,hvps);
sVscrollPos -= 1;
break;
case SB_LINEDOWN:
cyTemp = SHORT1FROMMP(WinSendMsg(hwndVscroll,
SBM_QUERYPOS,NULL,NULL));
cyTemp++;
if(cyTemp > 0 && cyTemp <= NUMLINES)
gotoxy(cyTemp,-1,hvps);
sVscrollPos += 1;
break;
case SB_PAGEUP:
cyTemp = SHORT1FROMMP(WinSendMsg(hwndVscroll,
SBM_QUERYPOS,NULL,NULL));
cyTemp -= cyPage;
if(cyTemp < 0)
cyTemp = 0;
if(cyTemp <= NUMLINES)
gotoxy(cyTemp,-1,hvps);
sVscrollPos -= cyPage;
break;
case SB_PAGEDOWN:
cyTemp = SHORT1FROMMP(WinSendMsg(hwndVscroll,
SBM_QUERYPOS,NULL,NULL));
cyTemp += cyPage;
if(cyTemp >= NUMLINES)
cyTemp = NUMLINES - 1;
gotoxy(cyTemp,-1,hvps);
sVscrollPos += cyPage;
break;
case SB_SLIDERPOSITION:
sVscrollPos = SHORT1FROMMP(mp2);
gotoxy(sVscrollPos,-1,hvps);
break;
}
sVscrollPos = max(0, min(sVscrollPos,NUMLINES - cyPage));
VioSetOrg(sVscrollPos,sHscrollPos,hvps);
break;
case WM_CHAR:
switch(CHARMSG(&msg)->vkey)
{
case VK_LEFT:
case VK_RIGHT:
return(WinSendMsg(hwndHscroll,msg,mp1,mp2));
case VK_UP:
case VK_DOWN:
case VK_PAGEUP:
case VK_PAGEDOWN:
return(WinSendMsg(hwndVscroll,msg,mp1,mp2));
}
break;
case WM_PAINT:
hps = WinBeginPaint( hWnd, NULL, &rclInvalid );
VioShowBuf(0,NUMLINES * MAXWIDTH * 2,hvps);
WinEndPaint(hps);
break;
case WM_PAINT_TTY:
if(row >= NUMLINES)
{
VioScrollUp(0,0,NUMLINES,MAXWIDTH,1,bBlankCell,hvps);
row--;
}
VioWrtCharStr(mp1,strlen(mp1),row,0,hvps);
VioSetCurPos(row,strlen(mp1),hvps);
WinSendMsg(hwndVscroll,SBM_SETPOS,
MPFROM2SHORT(row++,0),NULL);
WinSendMsg(hwndHscroll,SBM_SETPOS,
MPFROM2SHORT(strlen(mp1),0),NULL);
adj_view();
DosSemClear(&SecSem);
break;
default:
return( WinDefWindowProc( hWnd, msg, mp1, mp2 ) );
break;
}
return(0L);
}
MRESULT EXPENTRY AboutDlg( hWndDlg, message, mp1, mp2 )
HWND hWndDlg;
USHORT message;
MPARAM mp1;
MPARAM mp2;
{
switch( message )
{
case WM_COMMAND:
switch( SHORT1FROMMP( mp1 ) )
{
case DID_OK:
case DID_CANCEL:
WinDismissDlg( hWndDlg, TRUE );
break;
default:
return( FALSE );
}
break;
default:
return( WinDefDlgProc( hWndDlg, message, mp1, mp2 ) );
}
return( FALSE );
}
MRESULT EXPENTRY ParaDlg( hWndDlg, message, mp1, mp2 )
HWND hWndDlg;
USHORT message;
MPARAM mp1;
MPARAM mp2;
{
char drives;
char str[5];
USHORT indx;
USHORT disk;
ULONG drivemap;
USHORT con;
switch( message )
{
case WM_INITDLG:
DosQCurDisk(&disk,&drivemap);
for(drives = 'A'; drives <= 'Z'; drives++)
{
if(drivemap & 1)
{
str[0] = drives;
str[1] = ':';
str[2] = 0;
WinSendDlgItemMsg( hWndDlg, IDD_LISTBOX, LM_INSERTITEM,
(MPARAM)LIT_END, (MPARAM)(PCH)str );
}
drivemap >>= 1;
}
for(indx = 0;indx < num_drive;indx++)
WinSendDlgItemMsg( hWndDlg, IDD_LISTBOX, LM_SELECTITEM,
(MPARAM)(drive_sel[indx]), (MPARAM)TRUE );
if(indx == 0)
WinSendDlgItemMsg( hWndDlg, IDD_LISTBOX, LM_SELECTITEM,
(MPARAM)(disk - 1), (MPARAM)TRUE );
WinSetWindowText(WinWindowFromID(hWndDlg,IDD_FILE),filename);
if(file_attr & 0x0004)
WinSendDlgItemMsg(hWndDlg,IDD_SYS,BM_SETCHECK,(MPARAM)TRUE,0L);
if(file_attr & 0x0002)
WinSendDlgItemMsg(hWndDlg,IDD_HID,BM_SETCHECK,(MPARAM)TRUE,0L);
if(all)
WinSendDlgItemMsg(hWndDlg,IDD_ALL,BM_SETCHECK,(MPARAM)TRUE,0L);
WinSendDlgItemMsg(hWndDlg,IDD_FILE,EM_SETTEXTLIMIT,(MPARAM)12,0L);
break;
case WM_COMMAND:
switch( SHORT1FROMMP( mp1 ) )
{
case DID_OK:
file_attr = 0x0000;
all = FALSE;
WinQueryDlgItemText(hWndDlg,IDD_FILE,sizeof(filename),(PCH)filename);
iSel =LIT_FIRST;
for(indx = 0,con = 1;con == 1;indx++)
{
iSel = (SHORT)WinSendDlgItemMsg( hWndDlg, IDD_LISTBOX,
LM_QUERYSELECTION,(MPARAM)iSel, 0L);
if(iSel != LIT_NONE)
{
WinSendDlgItemMsg(hWndDlg,IDD_LISTBOX,LM_QUERYITEMTEXT,
MPFROM2SHORT((SHORT)iSel, (SHORT)3), drive_str[indx]);
drive_sel[indx] = iSel;
}
else
con = 0;
}
num_drive = indx - 1;
if(WinSendDlgItemMsg(hWndDlg,IDD_SYS,BM_QUERYCHECK,0L,0L) == 1)
file_attr = file_attr | 0x0004;
if(WinSendDlgItemMsg(hWndDlg,IDD_HID,BM_QUERYCHECK,0L,0L) == 1)
file_attr = file_attr | 0x0002;
if(WinSendDlgItemMsg(hWndDlg,IDD_ALL,BM_QUERYCHECK,0L,0L) == 1)
all = TRUE;
WinDismissDlg( hWndDlg, TRUE );
WinSendMsg(hwndaw,WM_PAINT_TTY,"Starting search...",0L);
busy = TRUE;
EnableMenuItem(hwndaw,IDM_PARA,FALSE);
DosSemClear(&SecSem);
break;
case DID_CANCEL:
WinDismissDlg( hWndDlg, TRUE );
break;
default:
return( FALSE );
}
break;
default:
return( WinDefDlgProc( hWndDlg, message, mp1, mp2 ) );
}
return( FALSE );
}