windows-nt/Source/XPSP1/NT/shell/osshell/accesory/calendar/cal.h
2020-09-26 16:20:57 +08:00

663 lines
22 KiB
C

/*
* Windows Calendar
* Copyright (c) 1985 by Microsoft Corporation, all rights reserved.
* Written by Mark L. Chamberlin, consultant to Microsoft.
*
****** cal.h
*
*/
/* Get rid of some stuff from windows.h. */
#define NOGDICAPMASKS
#define NOATOM
#define NOWH
#define NOSOUND
#define NOATOM
#define NOCOMM
#define NOMETAFILE
#define NOREGION
#define NOKANJI
#include <stdlib.h> /* Get declaration for errno. */
#include <windows.h>
#ifndef RC_INVOKED
#include <port1632.h>
#endif
#include <commdlg.h>
#define LSTRING
#include "..\\common\\date.h" /* Common date/time stuff */
#include <io.h> /* Get I/O function declarations. */
#include <errno.h> /* Get definitions of error codes. */
typedef short SINT;
/* Note - I have avoided using frequently occuring sequences of letters
for data types. While the loss of mnemonic value is regrettable,
it is less important than being able to easily search for occurences of
the data type. For example, an appointment record is QR instead of AR,
because searching for "ar" doesn't work well (char, far, and all sorts
of English words in comments).
*/
typedef WORD DT; /*** DT - date packed into 2 bytes - the number
of days since January 1, 1980. */
#define PT_LEN 50
#define DTNIL (DT)0xFFFF /* An impossible DT. Note that by making this
the largest possible value, it can safely
be used in vftAlarmFirst.dt and
vftAlarmNext.dt and have comparisons work
properly. For example, if vftAlarmNext.dt
== DTNIL, there is no next alarm, and
the current FT will never look greater or
equal, so the alarm can't go off.
*/
#define DTFIRST (DT)0 /* The DT for January 1, 1980. */
#define DTLAST (DT)0xAB35 /* The DT for December 31, 2099. */
typedef SINT OBK; /*** Offset in Blocks within a file -
From 0 through 32765, so it
uses only 15 bits and does not include
DLNIL or DLNOCHANGE.
*/
typedef WORD DL; /*** DL - Date Location. Bit 15 is 0
if the date is in the original file,
1 if it's in the change file. Bits
0 through 14 contain the OBK.
If the date is in neither file, the
DL is DLNIL.
*/
#define DLNIL (DL)0xFFFF /* An impossible DL - it means the date is
not in a file.
*/
#define DLNOCHANGE (DL)0xFFFE /* An impossible DL that means don't change
the old DL.
*/
#define DLSPECIALLOW (DL)0xFFFE /* The lowest special DL. */
#define DLFCHANGEFILEMASK (DL)0x8000 /* Mask for getting at the change file
flag in a DL.
*/
#define DLOBKMASK (DL)0x7FFF /* Mask for getting at the OBK in a DL. */
#define BLOCKWRITE 0x0010 /* mask for disallowing other copies of
calendar from writing the same file */
typedef struct
{
DT dt; /* Date */
SINT fMarked; /* appropriate bit is set if
date is marked. */
SINT cAlarms; /* Count of alarms set. */
DL dl; /* Where the date is stored. */
WORD idr; /* The index into vrghlmDr if
the date is in memory. If not
in memory, this is IDRNIL.
*/
DL dlSave; /* Used to hold the previous DL
during a Save operation. This
is used for error recovery.
*/
} DD; /*** DD - Date Descriptor */
typedef struct /*** D3 - date in three parts */
{
WORD wMonth; /* 0 through 11 */
WORD wDay; /* 0 through 30 */
WORD wYear; /* 0 (1980) through 119 (2099) */
} D3;
#define MONTHJAN 0 /* Representation of January in a D3.wMonth */
#define MONTHFEB 1 /* Representation of February in a D3.wMonth */
#define MONTHDEC 11 /* Representation of December in a D3.wMonth */
#define YEAR1980 0 /* Representation of 1980 in a D3.wYear */
#define YEAR2099 119 /* Representation of 2099 in a D3.wYear */
typedef SINT TM; /*** - Time packed into an int - the number of
minutes since midnight.
*/
#define TMLAST (TM)(24 * 60 - 1)
#define TMNILHIGH (TM)(TMLAST + 1)
#define TMNILLOW (TM)-1
#define TMNOON (TM)(12 * 60)
typedef struct
{
DT dt; /* Date */
TM tm; /* Time */
} FT; /*** FT - Full Time (date and time) */
#define OTQRNIL 0xFFFF
#ifndef RC_INVOKED
#pragma pack(1)
typedef struct
{
SINT cb : 8; /* Count of bytes in this QR. */
SINT fAlarm : 1; /* TRUE if alarm set. */
SINT fSpecial : 1; /* TRUE if special time. */
SINT reserved : 6; /* Reserved for future use - 0 filled. */
TM tm; /* Appointment Time. */
CHAR qd [1]; /*** - QD - Appointment Description. Up to
CCHQDMAX + 1 chars but declared as a
single char here since storage is
dynamically allocated. Not AD since
we want to be able to search for this
data type.
*/
} QR;
typedef QR UNALIGNED *PQR; /*** QR - Appointment Record - not AR since
we want to be able to search for this data type.
*/
#pragma pack()
#endif /* RC_INVOKED */
/* Count of bytes in a QR header (everything except the QD). */
#define CBQRHEAD (sizeof (QR) - sizeof (char))
/* !!! WARNING - If CCHQDMAX is changed, be sure to adjust the ACKALARM
dialog in CALENDAR.RC (since the resource compiler can't multiply or
divide, and it also seems that it doesn't support the use of symbolic
constants for specifying the positions or sizes of controls. Note
that this value also affects the forced word-wrap in calprint.c!
*/
#define CCHQDMAX 80 /* Maximum number of text characters in
an appointment description (does not
include the zero byte terminator).
*/
#define PAGENUMMAX 4 /* max num. digits of page number displayable
in header or footer */
#define CCHJUST 3 /* size of array containing justified
header/footer info */
#define CCHNONJUST 10 /* size of array containing non-justified
header/footer info */
/* !!! WARNING END */
#define CBNOTESMAX 400 /* Maximum length of notes including unformatted
text, soft line breaks, and 0 terminator.
*/
#define CLNNOTES 3 /* The number of lines of notes. */
/* A soft line break takes 3 characters <CR,CR,LF>. All but the last line
of the notes area can end with a soft line break. This is the count
of bytes needed to accomodate that case.
*/
#define CBSOFTBREAKSMAX (3 * (CLNNOTES - 1))
/* The maximum length of the unformatted text of the notes (reserve
space for 0 terminator and soft line breaks).
*/
#define CBNOTESTEXTMAX (CBNOTESMAX - 1 - CBSOFTBREAKSMAX)
typedef struct
{
TM tm; /* Appointment time. */
WORD otqr; /* Offset into tqr. */
} LD; /*** - Line Descriptor. */
#define CBBK 64 /*** BK - disk block. The size of a disk block
(Calendar's fundamental unit of allocation).
*/
/* !!! WARNING - Be sure to adjust CDRHEAD when when modifying the
definition of a DR. Also note that except for the dt member,
all members can be initialized to 0 (dt must be set to DTNIL).
*/
/* The maximum size of a DR. Must be a multiple of CBBK. */
#define CBKDRMAX 32
#define CBDRMAX (CBKDRMAX * CBBK)
/* The size of the header. */
#define CBDRHEAD (sizeof (SINT) + sizeof (DT) + sizeof (SINT) + sizeof (SINT) + sizeof (SINT))
/* The count of bytes allocatable for the notes and the tqr. */
#define CBDRDATAMAX (CBDRMAX - CBDRHEAD)
/* The count of bytes available for the tqr. */
#define CBTQRMAX (CBDRDATAMAX - CBNOTESMAX)
typedef struct
{
SINT wReserved; /* Reserved for future use - written out
as 0.
*/
DT dt; /* The associated dt. DTNIL means this
DR is not in use.
*/
SINT fDirty; /* TRUE if modifications have been made. */
WORD cbNotes; /* Length of notes. */
WORD cbTqr; /* Length of tqr. */
BYTE rgbData [CBDRDATAMAX]; /* Room for the notes and the tqr. */
} DR; /*** DR - Date Record */
/* !!! WARNING END */
#define CDR 3 /* The number of DRs in memory. */
#define IDRNIL (WORD)0xFFFF /* An inpossible idr. */
/* The maximum length of a file specification in DOS 3.0, including
the device, directories, filename, and extension.
*/
#define CCHFILESPECMAX 128
#define CCHFILTERMAX 64 /* max. length of filter string for Fileopen */
/* Filename (8) plus period (1) plus extension (3). */
#define CCHFILENAMEANDEXTMAX 12
/* Enough room for "Calendar - filename.cal" plus the terminator (which
is included in CCHSZCALENDARDASH).
*/
#define CCHSZWINDOWTEXTMAX (CCHSZCALENDARDASH + CCHFILENAMEANDEXTMAX)
/* The sizes of the items in the header BK. */
#define CBMAGIC 8
#define CBCDD sizeof (SINT)
#define CBMINEARLYRING sizeof (SINT)
#define CBFSOUND sizeof (SINT)
#define CBMDINTERVAL sizeof (SINT)
#define CBMININTERVAL sizeof (SINT)
#define CBFHOUR24 sizeof (SINT)
#define CBTMSTART sizeof (TM)
/* Offsets into the file header BK. */
#define OBMAGIC 0
#define OBCDD (OBMAGIC + CBMAGIC)
#define OBMINEARLYRING (OBCDD + CBCDD)
#define OBFSOUND (OBMINEARLYRING + CBMINEARLYRING)
#define OBMDINTERVAL (OBFSOUND + CBFSOUND)
#define OBMININTERVAL (OBMDINTERVAL + CBMDINTERVAL)
#define OBFHOUR24 (OBMININTERVAL + CBMININTERVAL)
#define OBTMSTART (OBFHOUR24 + CBFHOUR24)
#define CBMONTHARRAY 56 /* Number of bytes in the month array. was 49 */
#define GRAYOUT (DWORD)0x00FA0089 /* dest = dest OR pattern */
#define CCHMONTH 20 /* The longest month name. */
#define CCHYEAR 4 /* Chars in a year (e.g., 1985). */
#define CCHTIMESZ 12 /* Absolute maximum number of chars in a zero
terminated time string, taking into account
international formats. 4 plus space plus
6 CHAR AM/PM string plus 0 at end.
*/
#define SAMPLETIME 600 /* arbitrary time used for calculating
length of a time string in daymode */
#define CCHDATEDISP 64 /* The number of characters in a zero
terminated ASCII date string.
30 is large enough for US style
strings, so 64 ought to do it for all
else.
*/
#define CCHBUFMAX 256
#define LRMARGINMAX 30 /* max. allowable left+right margin */
#define TBMARGINMAX 15 /* max. allowabe top+bottom margin */
#define CCHDASHDATE 11 /* Maximum length of zero terminated
dashed date string. For example,
"10-28-1985" (10 + zero byte).
*/
#define MAXHDRFTRLENGTH 80 /* maximum length of header/footer */
#define MARK_BOX 128 /* Bit indicating the date is marked. */
#define MARK_PARENTHESES 256 /* Bit indicating the date is marked. */
#define MARK_CIRCLE 512 /* Bit indicating the date is marked. */
#define MARK_CROSS 1024 /* Bit indicating the date is marked. */
#define MARK_UNDERSCORE 2048 /* Bit indicating the date is marked. */
#define TODAY 64 /* Bit indicating the date is today. */
#define CLEARMARKEDBITS 127 /* bit mask for clearing marked bits */
#define SCROLLMONTHLAST 1439 /* Can scroll from 0 to SCROLLMONTHLAST while
in month mode. (2099 - 1980 + 1) * 12 - 1.
*/
#define TWELVEHOURS 720 /* number of minutes in half a day */
#define MDINTERVAL15 0 /* Interval is 15 minutes. */
#define MDINTERVAL30 1 /* Interval is 30 minutes. */
#define MDINTERVAL60 2 /* Interval is 60 minutes. */
#define LNNIL (LN)-1 /* An invalid ln. */
#define ALARMBEEP 0 /* Value sent to MessageBeep. */
#define CALARMBEEPS 4 /* The total number of beeps in an alarm. */
/* Menu command ids. */
#define IDCM_NEW 0
#define IDCM_OPEN 1
#define IDCM_SAVE 2
#define IDCM_SAVEAS 3
#define IDCM_PRINT 4
#define IDCM_REMOVE 5
#define IDCM_CUT 6
#define IDCM_COPY 7
#define IDCM_PASTE 8
#define IDCM_DAY 9
#define IDCM_MONTH 10
#define IDCM_TODAY 11
#define IDCM_PREVIOUS 12
#define IDCM_NEXT 13
#define IDCM_DATE 14
#define IDCM_SET 15
#define IDCM_CONTROLS 16
#define IDCM_MARK 17
#define IDCM_SPECIALTIME 18
#define IDCM_DAYSETTINGS 19
#define IDCM_ABOUT 20
#define IDCM_DEL 21
#define IDCM_EXIT 22
/* 26-Mar-1987 */
#define IDCM_START 23
#define IDCM_START12 24
/* 18-Nov-88 page setup and help menu ids */
#define IDCM_PAGESETUP 132
#define IDCM_PRINTERSETUP 100
#define IDCM_ACTIVEWINDOW 134
/* Standard IDS */
#define IDCM_SEARCH 33
#define IDCM_USINGHELP 40
#define IDCM_HELP 41
/* Dialog ids.
!!! WARNING - The dialog ids are also used to index vrglpfnDialog
so they must be consecutive integers starting at 1, and must match
the entries in vrglpfnDialog. Apparently a dialog id of 0 is unacceptable,
so they begin with 1, and we subtract 1 to get the index into
vrglpfnDialog.
*/
#define CIDD 10 /* The number of dialog ids in
vrglpfnDialog. Changed from 9 to
10 on 11/8/88 on adding new dialog
box for multiple symbol day marking.
*/
#define IDD_SAVEAS 1
#define IDD_PRINT 2
#define IDD_REMOVE 3
#define IDD_DATE 4
#define IDD_CONTROLS 5
#define IDD_SPECIALTIME 6
#define IDD_DAYSETTINGS 7
#define IDD_ABOUT 8
#define IDD_ACKALARMS 9
#define IDD_PAGESETUP 10 /* for the new Page Setup Dialog */
#define IDD_OPEN 11 /* The open dialog is not included in
* vrglpfnDialog since it is taken
* care of by dlgopen.c.
*/
#define IDD_MARK 12 /* putting this in vrglpfnDialog and
increasing CIDD did not work */
#define IDD_ABORTPRINT 14 /* The abort print dialog is not included
in vrglpfnDialog.
*/
/* !!! WARNING END */
/* Control ids */
#define IDCN_IGNORE -1
/* IDOK is 1, and IDCANCEL is 2 from windows.h */
#define IDCN_EDIT 3
#define IDCN_LISTBOX 4
#define IDCN_PATH 5
#define IDCN_FROMDATE 6
#define IDCN_TODATE 7
#define IDCN_EARLYRING 8
#define IDCN_SOUND 9
#define IDCN_INSERT 10
#define IDCN_DELETE 11
#define IDCN_MIN15 12
#define IDCN_MIN30 13
#define IDCN_MIN60 14
#define IDCN_HOUR12 15
#define IDCN_HOUR24 16
#define IDCN_STARTINGTIME 17
/* foll ids added 11/8/88 for multiple-symbol marking */
#define IDCN_MARKBOX 18
#define IDCN_MARKPARENTHESES 19
#define IDCN_MARKCIRCLE 20
#define IDCN_MARKCROSS 21
#define IDCN_MARKUNDERSCORE 22
#define IDCN_AM 23
#define IDCN_PM 24
#define IDCN_LISTBOXDIR 25 /* for the new Open File Dialog */
#define IDCN_TEXT 26 /* for new Open File Dialog */
#define IDCN_READONLY 27 /* for new Open File Dialog */
/* Keep these in sequence. */
/* for Page Setup Dialog */
#define IDCN_EDITHEADER 28
#define IDCN_EDITFOOTER 29
#define IDCN_EDITMARGINLEFT 30
#define IDCN_EDITMARGINRIGHT 31
#define IDCN_EDITMARGINTOP 32
#define IDCN_EDITMARGINBOT 33
#define IDECQD 100 /* ID of appointment description
edit control.
*/
#define IDECNOTES 101 /* ID of notes area edit control. */
#ifndef BUG_8560
/* The Child window Id for the scrollbar control */
#define IDHORZSCROLL 201
#endif
/* File ids.
!!! WARNING - if the order of these is changed, the GIVEME string IDS must
also be changed.
*/
#define IDFILEORIGINAL 0
#define IDFILECHANGE 1
#define IDFILENEW 2
#define CFILE 3 /* Number of files. */
/* !!! WARNING END */
#define CCHSZCALENDARDASH 50 /* Length of string "Calendar - ",
including the termintor. If the
string is changed in the .RC file,
this must be changed accordingly.
*/
/* String ids. */
#define IDS_UNTITLED 0
#define IDS_CALENDAR 1
#define IDS_BADDATE 2
#define IDS_BADDATERANGE 3
#define IDS_BADTIME 4
#define IDS_NOCREATECHANGEFILE 5
#define IDS_NOCHANGEFILE 6
#define IDS_ERRORWRITINGCHANGES 7
#define IDS_ERRORREADINGDATE 8
#define IDS_TIMETOSAVE 9
#define IDS_OUTOFMEMORY 10
#define IDS_RENAMEFAILED 11
#define IDS_SAVEFAILED 12
#define IDS_DISKFULL 13
#define IDS_FILEEXISTS 14
#define IDS_SAVECHANGES 15
#define IDS_FILENOTFOUND 16
#define IDS_NOTCALFILE 17
#define IDS_CANNOTREADFILE 18
#define IDS_BADEARLYRING 19
#define IDS_NOTSPECIALTIME 20
#define IDS_NOSUCHTIME 21
#define IDS_TIMEALREADYINUSE 22
#define IDS_CANNOTPRINT 23
#define IDS_CALENDARDASH 24
#define IDS_TOOMANYDATES 25
#define IDS_DATEISFULL 26
#define IDS_TEXTTRUNCATED 27
/* The GIVEME strings must be ordered according to the order of the
IDFILEs (which are defined earlier in this file).
*/
#define IDS_GIVEMEFIRST 28
#define IDS_GIVEMEORIGINAL 28
#define IDS_GIVEMECHANGEFILE 29
#define IDS_GIVEMENEW 30
#define IDS_BADFILENAME 31
#define IDS_NEDSTP 32
#define IDS_NEMTP 33
#define IDS_ALARMSYNC 34
#define IDS_NOTIMER 35
#define IDS_DATERANGE 36
#define IDS_DATESUBRANGE 37
#define IDS_TIMESUBRANGE 38
#define IDS_NOCREATE 39
#define IDS_MERGE1 40
#define IDS_FILEEXTENSION 41
#define IDS_FILEREADONLY 42 /* string id for Read Only error msg */
#define IDS_BLANK 43 /* " " " a blank character */
#define IDS_MARKCIRCLE 44 /* " " " a "o" mark symbol */
#define IDS_MARKLEFTPAREN 45 /* " " " a "(" mark symbol */
#define IDS_MARKRIGHTPAREN 46 /* " " " a ")" mark symbol */
#define IDS_MARKCROSS 47 /* " " " a "*" mark symbol */
#define IDS_PNAMEPREFIX 48 /* " " " "\\*" string */
#define IDS_BLANKSTRING 49 /* string composed of blank characters */
#define IDS_HELPFILE 50 /* Help filename */
#define IDS_INCORRECTSYNTAX 51
#define IDS_LETTERS 52 /* letters used in Page Setup */
#define IDS_FILTERTEXT 53 /* Filter text for File/Open dialog */
#define IDS_ALLFILES 54 /* more Filter text */
#define IDS_OPENCAPTION 55 /* caption text for fileopen dlg */
#define IDS_SAVEASCAPTION 56 /* caption text for saveas dlg */
#define IDS_HEADER 100 /* Page Setup stuff. */
#define IDS_FOOTER 101
#define IDS_LEFT 102
#define IDS_RIGHT 103
#define IDS_TOP 104
#define IDS_BOTTOM 105
#define CSTRINGS 56 /* The number of strings loaded from the
resource file.
*/
#define CCHSTRINGSMAX 3500 /* The total length of all loaded strings
must be less than or equal to this.
If this is exceeded, CalInit will fail,
preventing Calendar from running. If
this should occur, CCHSTRINGSMAX should
be increased as necessary and the initial
heap size in CALENDAR.DEF should also
be increased accordingly. was 2048
*/
/* Message posted to self upon receiving activate message */
#define CM_PROCALARMS WM_USER+100
#ifndef RESOURCE
/* Abbreviations for referencing the loaded strings. */
#define vszUntitled vrgsz [IDS_UNTITLED]
#define vszCalendar vrgsz [IDS_CALENDAR]
#define vszBadDate vrgsz [IDS_BADDATE]
#define vszBadDateRange vrgsz [IDS_BADDATERANGE]
#define vszBadTime vrgsz [IDS_BADTIME]
#define vszNoCreateChangeFile vrgsz [IDS_NOCREATECHANGEFILE]
#define vszNoChangeFile vrgsz [IDS_NOCHANGEFILE]
#define vszErrorWritingChanges vrgsz [IDS_ERRORWRITINGCHANGES]
#define vszErrorReadingDate vrgsz [IDS_ERRORREADINGDATE]
#define vszTimeToSave vrgsz [IDS_TIMETOSAVE]
#define vszOutOfMemory vrgsz [IDS_OUTOFMEMORY]
#define vszRenameFailed vrgsz [IDS_RENAMEFAILED]
#define vszFileExtension vrgsz [IDS_FILEEXTENSION]
#define vszSaveFailed vrgsz [IDS_SAVEFAILED]
#define vszDiskFull vrgsz [IDS_DISKFULL]
#define vszFileExists vrgsz [IDS_FILEEXISTS]
#define vszSaveChanges vrgsz [IDS_SAVECHANGES]
#define vszFileNotFound vrgsz [IDS_FILENOTFOUND]
#define vszNotCalFile vrgsz [IDS_NOTCALFILE]
#define vszCannotReadFile vrgsz [IDS_CANNOTREADFILE]
#define vszBadEarlyRing vrgsz [IDS_BADEARLYRING]
#define vszNotSpecialTime vrgsz [IDS_NOTSPECIALTIME]
#define vszNoSuchTime vrgsz [IDS_NOSUCHTIME]
#define vszTimeAlreadyInUse vrgsz [IDS_TIMEALREADYINUSE]
#define vszCannotPrint vrgsz [IDS_CANNOTPRINT]
#define vszCalendarDash vrgsz [IDS_CALENDARDASH]
#define vszTooManyDates vrgsz [IDS_TOOMANYDATES]
#define vszDateIsFull vrgsz [IDS_DATEISFULL]
#define vszTextTruncated vrgsz [IDS_TEXTTRUNCATED]
#define vszBadFileName vrgsz [IDS_BADFILENAME]
#define vszAlarmSync vrgsz [IDS_ALARMSYNC]
#define vszFileReadOnly vrgsz [IDS_FILEREADONLY]
#define vszBlank vrgsz [IDS_BLANK]
#define vszPathnamePrefix vrgsz [IDS_PNAMEPREFIX]
#define vszMarkLeftParen vrgsz [IDS_MARKLEFTPAREN]
#define vszMarkRightParen vrgsz [IDS_MARKRIGHTPAREN]
#define vszMarkCircle vrgsz [IDS_MARKCIRCLE]
#define vszMarkCross vrgsz [IDS_MARKCROSS]
#define vszBlankString vrgsz [IDS_BLANKSTRING]
#define vszHelpFile vrgsz [IDS_HELPFILE]
#define vszIncorrectSyntax vrgsz [IDS_INCORRECTSYNTAX]
#define vszTooManyDates vrgsz [IDS_TOOMANYDATES]
#define vszDateIsFull vrgsz [IDS_DATEISFULL]
#define vszTextTruncated vrgsz [IDS_TEXTTRUNCATED]
#define vszFilterText vrgsz [IDS_FILTERTEXT]
#define vszAllFiles vrgsz [IDS_ALLFILES]
#define vszOpenCaption vrgsz [IDS_OPENCAPTION]
#define vszSaveasCaption vrgsz [IDS_SAVEASCAPTION]
/* This must go at the end since it may use typedefs from cal.h */
#include "declare.h"
#include "..\\common\\common.h"
#endif