[comp.windows.ms] Qtime for windows

rommel@lan.informatik.tu-muenchen.dbp.de (Kai-Uwe Rommel) (02/20/90)

This is a small "qtime" application for MS Windows (hacked last night).
It can be toggled between qtime and standard ctime display by double mouse
clicks or by pressing ENTER or SPACE when it has the focus. It adjusts its
window size to the line length and centers itself at the current X position.
Note that you can't move it with the mouse because it does not have a caption
bar. You CAN move it with ALT-F7 and the cursor keys.

I use a slightly modified <windows.h> which saves me from putting all the
window/dialog-box functions in my programs into the definition file's export
section (or forgetting it :-). It uses the _export attribute of MS C 5.1
like the CALLBACK define in the OS/2 PM headers. The context diff to the
standard <windows.h> of the SDK 2.1 is included.
-- (This may be of general interest besides qtime.)

I put qtime.exe into a .zip archive because of the CRC protection.
Hope you all have PKZIP 1.0x otherwise you have to compile.

Kai Uwe Rommel
Munich
rommel@lan.informatik.tu-muenchen.dbp.de

---- Cut Here and unpack ----
#!/bin/sh
# SHAR:	Shell Archiver  (v1.23)
#
#	Run the following text with /bin/sh to create:
#	  qtime.doc
#	  qtime.c
#	  qtimesub.c
#	  qtime.def
#	  qtime.cs
#	  qtime.uu
#	  windows.dif
#
echo "x - extracting qtime.doc (Text)"
sed 's/^X//' << 'SHAR_EOF' > qtime.doc &&
XThis is a small "qtime" application for MS Windows (hacked last night).
XIt can be toggled between qtime and standard ctime display by double mouse
Xclicks or by pressing ENTER or SPACE when it has the focus. It adjusts its
Xwindow size to the line length and centers itself at the current X position.
XNote that you can't move it with the mouse because it does not have a caption
Xbar. You CAN move it with ALT-F7 and the cursor keys.
X
XI use a slightly modified <windows.h> which saves me from putting all the
Xwindow/dialog-box functions in my programs into the definition file's export
Xsection (or forgetting it :-). It uses the _export attribute of MS C 5.1
Xlike the CALLBACK define in the OS/2 PM headers. The context diff to the
Xstandard <windows.h> of the SDK 2.1 is included.
X
XI put qtime.exe into a .zip archive because of the CRC protection.
XHope you all have PKZIP 1.0x otherwise you have to compile.
X
XKai Uwe Rommel
XMunich
Xrommel@lan.informatik.tu-muenchen.dbp.de
SHAR_EOF
chmod 0666 qtime.doc || echo "restore of qtime.doc fails"
echo "x - extracting qtime.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > qtime.c &&
X/* QTIME.C
X *
X * Windows "English" Clock
X *
X * Autor:     Kai Uwe Rommel
X * Date:      Sun 18-Feb-1990
X *
X * Compiler:  MS C 5.10
X * System:    PC/MS-DOS ab 3.20, MS-Windows ab 2.00
X *
X */
X
X#define LABEL    "qtime.c"
X#define VERSION  "1.0"
X
X#define WINEXPORT
X#define NOMINMAX
X#include <windows.h>
X
X#include <time.h>
X#include <string.h>
X
X
Xchar *szAppName = "QTIME";
Xshort xChar, yChar, xWidth, yHeight, timetype;
X
Xextern void qtime(char *buf);
X
X
Xvoid ShowQTIME(HWND hWnd)
X{
X  HDC hDC;
X  RECT rect;
X  PAINTSTRUCT ps;
X  char cBuffer[64];
X  short nWidth;
X  time_t clock;
X
X  if ( timetype )
X  {
X    time(&clock);
X    strcpy(cBuffer, ctime(&clock));
X    cBuffer[24] = 0;
X  }
X  else
X    qtime(cBuffer);
X
X  nWidth = strlen(cBuffer) * xChar + GetSystemMetrics(SM_CXDLGFRAME) * 4;
X
X  if ( nWidth != xWidth )
X  {
X    GetWindowRect(hWnd, &rect);
X    rect.left += (rect.right - rect.left) / 2 - nWidth / 2;
X    SetWindowPos(hWnd, NULL, rect.left, rect.top,
X                 nWidth, yHeight, SWP_NOACTIVATE);
X    xWidth = nWidth;
X  }
X
X  hDC = BeginPaint(hWnd, &ps);
X
X  GetClientRect(hWnd, &rect);
X  DrawText(hDC, cBuffer, -1, &rect,
X           DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_NOCLIP);
X
X  EndPaint(hWnd, &ps);
X}
X
X
XLONG EXPORT WindowProc(HWND hWnd, unsigned iMessage, WORD wParam, LONG lParam)
X{
X  switch ( iMessage )
X  {
X  case WM_DESTROY:
X    KillTimer(hWnd, 1);
X    PostQuitMessage(0);
X    break;
X
X  case WM_CHAR:
X    if ( (wParam != ' ') && (wParam != '\r') )
X      break;
X    /* else fall through */
X
X  case WM_LBUTTONDBLCLK:
X    timetype = !timetype;
X    /* fall through */
X
X  case WM_TIMER:
X    InvalidateRect(hWnd, NULL, FALSE);
X    break;
X
X  case WM_PAINT:
X    ShowQTIME(hWnd);
X    break;
X
X  default:
X    return DefWindowProc(hWnd, iMessage, wParam, lParam);
X  }
X
X  return 0L;
X}
X
X
Xint WinInit(HANDLE hInst)
X{
X  WNDCLASS wclass;
X
X  wclass.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
X  wclass.lpfnWndProc   = WindowProc;
X  wclass.cbClsExtra    = 0;
X  wclass.cbWndExtra    = 0;
X  wclass.hInstance     = hInst;
X  wclass.hIcon         = NULL;
X  wclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
X  wclass.hbrBackground = GetStockObject(WHITE_BRUSH);
X  wclass.lpszMenuName  = NULL;
X  wclass.lpszClassName = szAppName;
X
X  return RegisterClass(&wclass);
X}
X
X
Xint PASCAL WinMain(HANDLE hInst, HANDLE hPrevInstance,
X                   LPSTR lpszCmdLine, int nCmdShow)
X{
X  HWND hWnd;
X  HDC hDC;
X  TEXTMETRIC tm;
X  MSG msg;
X  short xPos, yPos;
X
X  if ( hPrevInstance )
X    return FALSE;
X
X  if ( !WinInit(hInst) )
X    return FALSE;
X
X  hDC = CreateDC("DISPLAY", NULL, NULL, NULL);
X  GetTextMetrics(hDC, &tm);
X  xChar = tm.tmAveCharWidth;
X  yChar = tm.tmHeight;
X  DeleteDC(hDC);
X
X  xWidth  = GetSystemMetrics(SM_CXDLGFRAME) * 2 + xChar;
X  yHeight = GetSystemMetrics(SM_CYDLGFRAME) * 2 + yChar * 3 / 2;
X  xPos    = (GetSystemMetrics(SM_CXSCREEN) - xWidth) / 2;
X  yPos    = GetSystemMetrics(SM_CYSCREEN) - yHeight - 2;
X
X  hWnd = CreateWindow(szAppName, szAppName, WS_POPUP | WS_DLGFRAME | WS_SYSMENU,
X                      xPos, yPos, xWidth, yHeight, NULL, NULL, hInst, NULL);
X
X  if ( !SetTimer(hWnd, 1, 60000, NULL) )
X    return FALSE;
X
X  ShowWindow(hWnd, SW_SHOWNOACTIVATE);
X  UpdateWindow(hWnd);
X
X  while ( GetMessage(&msg, NULL, 0, 0) )
X  {
X    TranslateMessage(&msg);
X    DispatchMessage(&msg);
X  }
X
X  return msg.wParam;
X}
X
X
X/* End of QTIME.C */
SHAR_EOF
chmod 0666 qtime.c || echo "restore of qtime.c fails"
echo "x - extracting qtimesub.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > qtimesub.c &&
X#include <stdio.h>
X#include <sys/types.h>
X#include <time.h>
X
X/* because the width of twelve BONG's is about 60 char's,
X * this is limited in the QTIME_SUBROUTINE to one `BONG!', resp. `BING!'.
X */
X
X#define QTIME_SUBROUTINE
X
X/* qtime.c	Displays time in real English, also chimes
X** This version current from 18/9/89
X**
X** 09/89	Ade Lovett	Complete rewrite
X** 04/86	Mark Dapoz	Converted to C for UNIX
X** 12/79-12/82	Mike Cowlishaw
X**
X** mod's by erik schoenfelder (schoenfr@tubsibr.uucp) for xqtime
X** mod's by Kai Uwe Rommel for MS Windows qtime and PM qtime
X*/
X
Xstatic char *minutesaying[] =
X{
X    "","just after ","a little after ","nearly ","almost "
X};
Xstatic char *fiveminsaying[] =
X{
X    "","five past ","ten past ","a quarter past ","twenty past ",
X    "twenty-five past ","half past ","twenty-five to ","twenty to ",
X    "a quarter to ","ten to ","five to ",""
X};
Xstatic char *hoursaying[] =
X{
X    "one","two","three","four","five","six","seven","eight","nine",
X    "ten","eleven",""
X};
X
X
X#ifdef QTIME_SUBROUTINE
X
Xvoid qtime(char *qtime)   /* run qtime as a subroutine */
X{
X
X#else
X
Xvoid main()
X{
X    char qtime[200];
X
X#endif
X
X    int i, hr, mn;
X    time_t clock, time();
X    struct tm *tm, *localtime();
X
X    time(&clock);
X    tm = localtime(&clock);
X    mn = tm->tm_min+(tm->tm_sec>29);
X    hr = tm->tm_hour+(mn>32);
X
X#ifdef QTIME_SUBROUTINE
X
X    *qtime = '\0';
X
X    /*
X     * the shorten'd Bing, resp. Bong;
X     */
X
X    if (! (mn%15))
X	    if (mn%60)
X		    strcat(qtime, "Bing! ");
X	    else
X		    strcat(qtime, "Bong! ");
X
X    strcat(qtime, "It's ");		    /* not too late for the dog */
X#else
X    strcpy(qtime, "It's ");
X#endif
X
X    strcat(qtime, minutesaying[mn%5]);
X    strcat(qtime, fiveminsaying[mn/5+(mn%5>2)]);
X
X    if (hr%12) {
X	strcat(qtime, hoursaying[(hr -= (hr>12)*12+1)]);
X	strcat(qtime, (mn%60) ? "." : " o'clock.");
X    } else {
X	strcat(qtime, (hr == 12) ? "Noon." : "Midnight.");
X	hr = 12;
X    }
X
X#ifndef QTIME_SUBROUTINE
X
X    if (!(mn%15))
X	if (mn%60)
X	    printf("(Ding-Dong!)\n\n");
X	else {
X	    printf("(");
X	    for (i=hr; i>=0; i--)
X		printf("Bong%s",(i==0 ? "!)\n\n" : ","));
X	}
X    printf("%s\n",qtime);
X
X#endif
X}
X
X/*
X * end of the fun.
X */
SHAR_EOF
chmod 0666 qtimesub.c || echo "restore of qtimesub.c fails"
echo "x - extracting qtime.def (Text)"
sed 's/^X//' << 'SHAR_EOF' > qtime.def &&
XNAME QTIME
XDESCRIPTION 'Windows QTIME, (c) Kai Uwe Rommel 1990'
X
XEXETYPE WINDOWS
XSTUB 'WINSTUB.EXE'
X
XCODE MOVEABLE
XDATA MOVEABLE MULTIPLE
X
XHEAPSIZE 1024
XSTACKSIZE 4096
SHAR_EOF
chmod 0666 qtime.def || echo "restore of qtime.def fails"
echo "x - extracting qtime.cs (Text)"
sed 's/^X//' << 'SHAR_EOF' > qtime.cs &&
Xqtime.c
Xqtimesub.c
Xqtime.def
Xqtime.exe
X-AS -OWIN -LW -S4096
SHAR_EOF
chmod 0666 qtime.cs || echo "restore of qtime.cs fails"
echo "x - extracting qtime.uu (Text)"
sed 's/^X//' << 'SHAR_EOF' > qtime.uu &&
Xbegin 600 qtime.zip
XM4$L#!`H````&`.I;4Q2S?_[J6Q```&H<```)````451)344N15A%#P`2`R05
XM-B<X.6I[3)UN'PD&`1,TY?:6]YMJ50OPP;&#&/;__PD0'Q#BNFL%P@]0"?01
XM\'_!@`=%OQ(@5;1IYX*$*_?M6;EAVX*46S9NW33$0=\T[1CIY[XU2Q?DU;1N
XMR;Z].]=E0X4DM3K\2#MA\Y"X`S(A+C<!_Q<,>%&G10L&[`N0(L"E16E:%PA0
XMP*0K1.H/`V1;LPX$J"+1'$JPFP7(%F!D`M5*8)O]XTP!XI<(L<'PC@,"'ABQ
XM(?.!!:-23=JTR/4*KR9U2O3I5:A2GPYAVH1'")"!\0;*7@K<,QUXE&A2@E6G
XM+!_P?\#F/P.2#.!=\@"2JYJ;<%T2!-*<)4B48U."7!HV+<BJ=\N"E/JV;=NR
XM;$'&S)D3QI.!7'4Q^\'LX5ZU.MBG,+ZFN[.Q4>Y0T<-7.)BX@&3N&D&R+\:^
XM>']CNYP98W<,/)<L/Q.X?-?WHZ_,?]A_]/3R2T],+I^T<:.T`:Y?"`E^3O"O
XM%P#O:@]JGK.5!P>G/_3&?O"'A@^?=''PQ<KOFT0^<&#PQ$8UAS8^,$?Q=(W^
XMMTO`?\D6H6HR[_Y%T6=>*3PZ_L7(DK>\PCIFOC)X@.3,K1<C[M@I";>^3>(#
XMU4*0QT<I7=$<7-%$UT.J&HJYL(1YM?^F.=J2`:R)>7BO7Q>7[SH<LD>LD(M<
XMR3TZPO-&&?9(\G0M]I`%TWV2?$"Z(GM.(+YFSX$"Z9)<KV1_AVJ*IJK*F*\$
XMGGD]TL%^%8*D:Z#8&]9]5T4-N!'X?>RCA75E[0,(%G6^?MJSHP?LSTV^'EE:
XM[D!X!L(K$!Z!\`;"^>!V?KK\QZY-E2L$"*D,7.-QH^87`B`>77?$JP>0[.R(
XMU9V?E8";AZ>\?`!@<[0`_PB)I-<VD;R]K2)>G_#X0UMH=OZ,O?JS\^;@B-'9
XMPN8ZZC(TCT"]:!>N8$O.$#WA?V'Y0N!TUWM$BQ'`7U21X9+>.!0_(8Q:_2C,
XMKWCPHY6UV8UEB5J\!RV>1P<_T(!V8W"U"&B_9];YARKO\\)V8:#/'N]1CF]'
XM)`V@1\V^7ED8_2P`:>F^I0"X';F'VT_($7.T2`$YGBJ'PASO6^,I@&=EX!6\
XMM]<_(%JPZJ)12;[NP'3\D>]=+8'?)[T]@:9PY)D=F4@&]V8X?YL\A^8EJ@HT
XM@]VJ?'JY_>X#M,62/4FRZ+V_VWKPSXY^#?""N'X@I"E6Z%$[_AXX?;\%I%5`
XMM-C!]2_V2M#X@3TY_LRY2O?[^1=*K\N#F?-@9HG[[X@!UQ.$_!MC`,#01:[3
XM8,`OSE88.1OS3Q<O:PS\]P=T`$<V+T"V+]8>??SBST(#E'KXV0/(@_4+2/*[
XMDLRW4:,'8EM:F2P-H.NSGP&=*2O\&&!.I_K>A`"]-L^##1<\T!1E4GU9JYFR
XM`(0@XKA+!%%QGPR0R-(/4`Z-:*SU,ZS3?XQ^?J.?T")`28SP8U22-HR<\>C/
XM`7$#K'%\8H^+MK#!Q@$H>LZ7U`W\0?06/RYV2'K@>)>.#78.:'*Q398`BQLT
XM/9"Q]IG;;?[W*'K@W`+?IX>HT`;UJJA]UR>LFDW73CMH?[Q-Q\%G_C<)N`=M
XMS.*([MMOP/FFZ2YHZC]<:=V,Z\L;]'@@[.__-AV0->;(K/T5^@&1JA9_#^AW
XM3=P!GZ+^EU$3&6JY"NT+!TRW(.!'T`-=FO>\;]<#?PF/7C0`9%(Q@$U37ZSS
XM+^'1]ZG&Z8S!K*69-F.-S9P"_@E:S1?H*;&O6^!($Z"M*MMW:=[V#WE=+DV0
XMM@^X'RI>/CK8%N8JLOV9']R5Z6E9/1:WN$A-7L+ZCX!](CN\Z3;T"#IY`.J5
XM!Z0UK<-WWI^K\,D9;SC>_O_HZ^4YJ\/![PDN+KBPR"-<_O^.Z]T/>SBZ^%H9
XM6%#/L'E"\WCDQ?J[;#/6*$IEF^!O</'WQ4X1CF?(6D%;#Z#2^&4"GZ]Z\;`Y
XM4.?8MYGQ;.YZK_5Y]H'+%_O3-S*NF,COGUQGT?]W"4CYI$G`CN*43Z</$+%8
XM?Z-G\F<Z_%GS6/COYYF0[GVH/%NHSW-EG23,,^?=CRQARMW@V$>7)GLOLFP[
XM;E@'9I]XS;<>+"V+<\?"_N2Z!^\QZWUM6=<)20)6NTW?`1?:>]EY4>D"V;F.
XMWL$GU,7X0L<'&]M9Q?9T5?ZGB3Z?Q=.=Q_TH:8Z`<_:L6_Y*ND]%?T+=#02R
XM6ZN^<=``H\G>#"<E2;,?LZT5V)83A(F8H!%F2QZP,.4I*&_,*!=.8)9)!&#F
XMOZ'A/5$&@H#*9%L>P3*N?V4RY6*C27!VQ8>-#D1<(%1+5B[)%R48].@@4IOO
XM^,1.^0\^7N"J.*.!_3^_/I)L2]Y.,BG@<$NFDOP89*;U"JR:C%5><()&&OV3
XM:9-&2D7_\S^NI$HRJJL%7$F)!R"$%..X`OF1E$DJE2K';J'EH@?^*]"YQ+\.
XM^1H,_!.@Z;D&OD]?.,"J#WBF[O`!I5B\[RC]3?34"8Y&.4#ZJ+HV/^E#*0_$
XM\A>V<<\5.T_'ARQ+G<EZ]$L+YJ)_%_U3HU!M]XQG>6*K]C3K`@%E^AN0XUEJ
XME?]ZDX&.0S]0<NHIS7,3Z&5:P;5&'71]@"[O`+O/GS]`OM0#&TA>]H%S,T=_
XM8.9DF.D&S!QR`&9>T+<Z,+MO@@,#NZB>[8&W,"7-3WC]Z"$,>19#1I'<]<$U
XM',[8H(F-.L!0U^<D*K`OQL9$VN3T!PFG5]=&Y.EAZT&^[HP-JJ#=PW"DTP[S
XM:!)&#]%A)JS1MR;&(J()JWF&C=/@Y(W$Y#W(`='05I+:0_1MZ,HLD^AQ_<#C
XM+96/*?('I.R)+:IHWJ`+4QX@+O$>']Z@5?2P`5C1%T7&5U;>!GD.W&C1YX`G
XM4G/S%ZVMB^%=UG4)_.'U+F;20!*,EZ!_9P"=2FO8HH75%AV`.P?@3A\G"J'/
XM6;:E`G:V6Z6MHE%<^^+XM%D<!V%6A%%6'$SXXE"A7.M.[5@L\CPO@/WBZ8N=
XM<;MP*-\>.#WO@U'1?RK;&3P&1S"6)PKKQ`>]K*H5-:RB&O31&\#D#20_[+:H
XM0'?<,`?$Y?SBPFJ.`OI2QWZHSL$/U8I!68@A7G5?:E@5J4I_0)(_]>P"2M?+
XM"QS5YQ/UV5<(UM\'>@<T.]/]@*R*#V+BN(7BSP,2K)L`FVYQ<T/-_Z'FV,[Q
XM"ET+I#_0&$MV(F$_7U_8O@Z*>UB.IXFQD8=B'>AH('F$.G4^F"_"@7W`VC4`
XM9$_H!_E2R#K0;P)GN79`_O/QG8_-[H'_"S_HM\*VUGVXF"L"E^F''.<"7;]>
XM(21GTH`=]/XQ+!GE)C',OEZXD<73=ROCQD4^UMDR$W*`>'BZ`!;K/&JE^PI-
XM=7]?\PFSL\._".MR8)Z@0+X68KI.&+OMJIVOO#Q7[0'YJNMDN"0/(LDLL%!N
XM3FT(05?$`;I>W>0V2WLUL);_%C#;&[M-5$3HHM92#GA$L:D*WN#U:L!<8FBG
XM).N&PKH"W6O:+'GRB;V:1]\CN[33R*8M7S;M[[M[)#>"5U/^6#D'5[YX]!<#
XMA'GP$ZV**YY<\>:(5@=$^T#D$[4'#L8H!YZ&*0=TJCZB5W;X>FQ&.GK5_4/Y
XM_HM\WQ3HKD.K(@_%%M6H020>PH*RXN7M-GWAM'?GU3S]^3:=,+!;=;YM1_<A
XM=9%]LP!^"D_/W\;O&_$(]@1>7BSO#C1:#11I`D_;-8G@&A5VS/U\KX"QS=YG
XM2K\?3R*;P<C8IZ_'H6S6;M4`M&W,HV>/KCXZ]H7;Z]+C=OCWS2J,1&2_;TY0
XME\MPA_AW#\HUN,-\.UYNZ"T_03FN3>6X=H!;LN+"$0P,]G5'**BFWDOIOV!L
XM':=-'3LR9XGZ`<=\G-3-HZ=><3+`0V@RB!B:#+=D+DSYIWF''!!!&;"105F&
XM1^!DY`(G2\]OS*6"%11/H'@#0F=E_.N6*B,VOH$0+.-1`%BQAH6K@0>0;UU)
XM?"Z&^VWF-&`PO_O`V"Q"M[/-4<4O!O]_/.S_NV'[$[Z?\/PQ@;`425NX``T6
XMIUN5$8;WQ`XAE>8V)0WOD]+P'BWA^`UBDC77)!.]/OI^'G'$`N2#@$D;X.7C
XM&YCU7[T-CVG8+0U;O*N/5[@+M$?WZ_%7G=GN9CD`R.6+T2W2`8=!QZBO!S>1
XMF,O2&008QJQ+F.%PRR#G`F`TCIMI.%3<8@',8.`%XHJ@A_)+K-P)E%,\).G/
XM:,0\P(II1[%'0CL9*`8(*P7\L4'/`W6Y:9P69N%T4Q`H1AR!"DP+#[`2/=<A
XM?`:+-QO]_J-']C3P`#J>7!S]%]?[#@S0L<=..M$8`LFS(=TW-][7'G4BK>BD
XMG9RT<Y&VG+A(NB1Y<I%P"UU/+L0?E)6RZY.V0TIPR_DQ,*>?&!UUP+K*UP?`
XM-_A7P/N);M<%3[.#![\-'BU]_24:&57MR@.O'XU^CGC`XOVO%+^8^&A>$ZP/
XMW&_QH,W$/X<.+6Z#KEFKDOJZ^MQR&V\)EKKRJNB"*WG^%P"X#UR?%Y(\\XMO
XMX_9K3;F8IMR+WGZB*57E%U3`F4N';K`J[JF.*\G#%L%\L2!S%_.N`MQOS5-!
XMAIFGL\V3EN:UF5-VY(\?V%TWZ<F'URIER7QG?G'ZQ?F3_##"81RB8V,1S#X4
XMRX0."!=YPOJ+7@9*8O+O'[W\@`3^CU=_)R#LW_9+M9]%/Q!_8A</.A2Y8^\S
XM[2<=/S$PSYU#(._$?@$6+7(D6GR[5!R`_%UX7T<"J*4:5)PTNF-+8#M^S;'K
XMZ&D#9'/L((X]SK$O?Z#Z!SAV%<\NYUQ"NA<X=D+';N#8<1W[@6.G\.U\KN5H
XM[W/LW:[]P;'/._8(Q_X0XH![GN7;[G7?PLN.';N49V=P[`;.W<.Q?WK*01Q[
XMO6,/<>SECOW$L6<X=Q3'GN[>4QP[@[==Q;$K%<`[USAV=-_>ZMAI??NL8X=P
XM[#F.G<VW$\G;=LS_CLRK/=FW'+O\`-=?.78LW][E:?GWJ@`%$DQVS@$$@RZP
XM#!^5:M*F10%"N/JD4Z$R#9H%>K5UY](%&=8LW;)R]#HL2+9IZ=)E6^89=ULV
XMK%RV>:Z=;=LWY<:^V;1VN(<;9EG`=Y-,U!^WSGGPDDW>T9YN'F;H%OCP:)K>
XM##<(@5$^2EFH1F`SMNU8TM$`WVR5N[\9'JW<,LF;?5M7#C<'.#<MGN'+(.\6
XM8-FT9]%8(+M-@R[.RJ::`Q0"_=D00"_TC3%/XEG/*=Z%'7Y[<BS;MV/7)._T
XM37;%-TU+ULV_)!?YMOBW!"`!5J>;<`\@3H_Y.DT=H&2`G>9@&\C&`3H'>!T@
XM=H#<`8(':,ZF#A`^0/H`]=$?L&#`!(=_`,#^J]&D3(M^3>K4Z!,L@!!,4@08
XM.'#@`'D`'L#NZ_\ASDB0(())E"B"K1D5C$8*$4(P-&%"P1@TD;:QS8)!^J8%
XM"PH6S"T8I&X%063`"@;<)-4Z@+?2,(TWS!C"P]0AS$'&S'D3QF-TI@;CG0"U
XM`OC]+P.L#9`ZP'F[<4`8F/"`;8)HV>O(@]\%:!D`BW@Z0'F_?<"7`9M\9G($
XMD0K0*=RG4AF>R/"`X2"^`Z0Y$.?`J77=-K&\]O:K9<E215O7J-RT4\-L;D>Y
XMT;)BFYC.0>'**3ZO$O*$9QNT[MFI9>$^'4L'<;=+M.R8_T9C89=A!?102P$"
XM"@`*````!@#J6U,4LW_^ZEL0``!J'```"0```````````"``````````451)
X<344N15A%4$L%!@`````!``$`-P```((0````````
X`
Xend
SHAR_EOF
chmod 0666 qtime.uu || echo "restore of qtime.uu fails"
echo "x - extracting windows.dif (Text)"
sed 's/^X//' << 'SHAR_EOF' > windows.dif &&
X*** windows.h
X--- windows.old
X**************
X*** 94,99
X  #define LONG	long
X  #define VOID	void
X
X  typedef unsigned char	BYTE;
X  typedef unsigned short	WORD;
X  typedef unsigned long  DWORD;
X--- 94,103 -----
X  #define LONG	long
X  #define VOID	void
X
X+ #ifdef WINEXPORT
X+ #define EXPORT  FAR PASCAL _export                               /* K.U.R. */
X+ #endif
X+
X  typedef unsigned char	BYTE;
X  typedef unsigned short	WORD;
X  typedef unsigned long  DWORD;
X**************
X*** 556,561
X  typedef HANDLE	NEAR *SPHANDLE;
X  typedef HANDLE	FAR *LPHANDLE;
X
X  typedef int (FAR PASCAL *FARPROC)();
X  typedef int (NEAR PASCAL *NEARPROC)();
X  typedef HANDLE GLOBALHANDLE;
X--- 560,568 -----
X  typedef HANDLE	NEAR *SPHANDLE;
X  typedef HANDLE	FAR *LPHANDLE;
X
X+ #ifdef WINEXPORT
X+ typedef int (FAR PASCAL _export *FARPROC)();                     /* K.U.R. */
X+ #else
X  typedef int (FAR PASCAL *FARPROC)();
X+ #endif
X  typedef int (NEAR PASCAL *NEARPROC)();
X**************
X*** 614,619
X  #ifndef NOBRUSH
X  typedef struct tagWNDCLASS {
X      WORD    style;
X      long    (FAR PASCAL *lpfnWndProc)();
X      int	    cbClsExtra;
X      int	    cbWndExtra;
X--- 622,630 -----
X  #ifndef NOBRUSH
X  typedef struct tagWNDCLASS {
X      WORD    style;
X+ #ifdef WINEXPORT
X+     long    (FAR PASCAL _export *lpfnWndProc)();                 /* K.U.R. */
X+ #else
X      long    (FAR PASCAL *lpfnWndProc)();
X+ #endif
X      int	    cbClsExtra;
SHAR_EOF
chmod 0666 windows.dif || echo "restore of windows.dif fails"
exit 0
----
EOF