home *** CD-ROM | disk | FTP | other *** search
- #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 );
- }