home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windoware
/
WINDOWARE_1_6.iso
/
source
/
f4w3api
/
f4w3api.kit
/
WINDEV
/
FORTRAN
/
FWCLOCK
/
FWCLOCK.FOR
< prev
next >
Wrap
Text File
|
1991-11-09
|
5KB
|
138 lines
$DEFINE KERNEL
$DEFINE USER
$DEFINE GDI
$DEFINE MSG
$DEFINE MENUS
$DEFINE SYSMETRICS
$DEFINE WINMESSAGES
$DEFINE WINSTYLES
$DEFINE RESOURCE
INCLUDE 'WINDOWS.FI'
C
C Author : Kevin B Black
C Date written : 23-Oct-1991
C Abstract :
C
C FORTRAN WINDOWS 3.0 DIGITAL/ANALOGUE CLOCK
C
C WinMain - Main Windows 3.0 function for FWCLOCK
C
FUNCTION WinMain[PASCAL,FAR] (hInstance,hPrevInstance,
* IpCmdLine,nCmdShow)
IMPLICIT NONE
INTEGER*2 WinMain
INTEGER*2 hInstance ! current instance
INTEGER*2 hPrevInstance ! previous instance
INTEGER*4 IpCmdLine ! command line
INTEGER*2 nCmdShow ! show-window type (open/icon)
INCLUDE 'WINDOWS.FD'
INTEGER*2 InitFWClock [EXTERN,FAR]
INCLUDE 'FWCLOCK.FD'
INTEGER*2 JUNK ! Dummy argument for 100ths seconds for GETTIM
RECORD /MSG/ Wmsg ! message
IF(hPrevInstance.EQ.0)THEN ! Other instances of app running?
IF(InitFWClock(hInstance).EQ.0)THEN ! Initialize shared things
WinMain=0 ! Exits if unable to initialize
RETURN
ENDIF
ENDIF
C
C Perform initializations that apply to this specific instance
C
HINST=HINSTANCE
c IMANICON=.FALSE.
C
C Determine the display device size and its aspect ratio
C
FWCPS.HDC=GetDC(NULL) ! Get device context
DWIDTH=GetDeviceCaps(FWCPS.HDC,VERTRES)
DHEIGHT=GetDeviceCaps(FWCPS.HDC,HORZRES)
HASPECT=(DHEIGHT*1000/(GetDeviceCaps(FWCPS.HDC,HORZSIZE)*10)+5)/10
VASPECT=(DWIDTH*1000/(GetDeviceCaps(FWCPS.HDC,VERTSIZE)*10)+5)/10
VARATIO=FLOAT(VASPECT)/FLOAT(HASPECT)
WSTATUS=ReleaseDC(NULL,FWCPS.HDC)
C
C Determine height and width to which the clock window is to be set, the
C various bit around the work area are added on to make the window the
C appropriate size (the work area is then a square)
C
WWIDTH=DWIDTH/2+
* GetSystemMetrics(SM_CXFRAME)*2
WHEIGHT=WWIDTH*VASPECT/HASPECT+
* GetSystemMetrics(SM_CYCAPTION)+
* GetSystemMetrics(SM_CYFRAME)*2
RCLOCK.TOP=1
RCLOCK.LEFT=1
RCLOCK.BOTTOM=WHEIGHT
RCLOCK.RIGHT=WWIDTH
C
C Create the main FWClock window and get its handle.
C
HWND=CreateWindow(
* 'FWClockWClass'C, ! Window class
* 'FWClock'C, ! Text for window title bar
* WS_OVERLAPPEDWINDOW, ! Window style
* CW_USEDEFAULT, ! Default horizontal position
* CW_USEDEFAULT, ! Default vertical position
* WWIDTH, ! Default width
* WHEIGHT, ! Default height
* NULL, ! No parent
* NULL, ! Use the window class menu
* hInstance, ! This instance owns this window
* NULLSTR) ! Pointer not needed
C
C Read user selectable functions from profile file and check menu items if
C enabled
C
SECONDSICON=0.NE.GetPrivateProfileInt('FWClock'C,'SecondsInIcon'C,
* 0,'FWCLOCK.INI'C)
IF(SECONDSICON)WSTATUS=CheckMenuItem(GetMenu(hWnd),
* IDM_SECONDSICON,MF_CHECKED)
SOLIDHANDS=0.NE.GetPrivateProfileInt('FWClock'C,'SolidHands'C,
* 0,'FWCLOCK.INI'C)
IF(SOLIDHANDS)WSTATUS=CheckMenuItem(GetMenu(hWnd),
* IDM_SOLIDHANDS,MF_CHECKED)
CHIMES=0.NE.GetPrivateProfileInt('FWClock'C,'Chimes'C,
* 0,'FWCLOCK.INI'C)
IF(CHIMES)WSTATUS=CheckMenuItem(GetMenu(hWnd),
* IDM_CHIMES,MF_CHECKED)
C
C Get the current time, wait until the seconds change.
C
CALL GETTIM(HOURS,MINS,SECS,JUNK)
CALL GETTIM(OHOURS,OMINS,OSECS,JUNK)
DO WHILE (HOURS.EQ.OHOURS.AND.MINS.EQ.OMINS.AND.SECS.EQ.OSECS)
CALL GETTIM(OHOURS,OMINS,OSECS,JUNK)
ENDDO
C
C Create general tools
C
CALL TOOL_UP
C
C Start a timer for a open window every 200 milliseconds
C
IF(SetTimer(hWnd,MYTIMER,200,0).EQ.0)THEN
CALL FatalAppExit(0,'FWClock: All public timers in use'C)
STOP
ENDIF
C
C Show window and acquire and dispatch messages until a WM_QUIT message
C is received.
C
WSTATUS=ShowWindow(hWnd,nCmdShow) ! Show the window
DO WHILE (GetMessage(Wmsg, ! message structure
* NULL, ! handle of window receiving the message
* NULL, ! lowest message to examine
* NULL).NE.0) ! highest message to examine
WSTATUS=TranslateMessage(Wmsg) ! Translates virtual key codes
WSTATUS=DispatchMessage(Wmsg) ! Dispatches message to window
ENDDO
WinMain=Wmsg.wParam ! Returns the value from PostQuitMessage
RETURN
END