Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

645 lines
24 KiB

/*
Enhanced NCSA Mosaic from Spyglass
"Guitar"
Copyright 1994 Spyglass, Inc.
All Rights Reserved
Author(s):
Eric W. Sink [email protected]
Jim Seidman [email protected]
Scott Piette [email protected]
Jeff Hostetler [email protected]
*/
/********************************************************************************/
#if defined(FEATURE_SUPPORT_SHTTP)
WARNING_WARNING This feature is not completely implemented.
#endif
#if defined(FEATURE_SUPPORT_WRAPPING) || defined(FEATURE_SUPPORT_UNWRAPPING)
/* WARNING_WARNING Under advise from NSA, these features, as currently */
/* WARNING_WARNING implemented, are considered to be not exportable */
/* WARNING_WARNING from the US under the ITAR regulations. Actual */
/* WARNING_WARNING determination is pending legal consul. Even though */
/* WARNING_WARNING we include no encryption technology in Mosaic, we */
/* WARNING_WARNING do provide hooks for encryption and that allegedly */
/* WARNING_WARNING places us under the related materials section of the */
/* WARNING_WARNING ITAR regulation. */
/* WARNING_WARNING */
/* WARNING_WARNING We are working with NSA to arrive at a solution */
/* WARNING_WARNING which would allow these features to be safely */
/* WARNING_WARNING exported. */
/* WARNING_WARNING */
/* WARNING_WARNING Jeff Hostetler, 2/16/95 */
#endif
/********************************************************************************/
/* This file is sharable between the Mac and Windows and UNIX versions */
#ifndef GUITAR_H
#define GUITAR_H
#ifdef MAC
#ifdef FEATURE_TOOLBAR
#include "toolbar.h"
#endif
#endif
/* NrElements() -- returns number of elements in array. */
#define NrElements(array) ((sizeof(array)) / (sizeof(array[0])))
#ifdef FEATURE_SUPPORT_SHTTP
/* S-HTTP spec is still in flux, so these features
* (most of which we'd like to kill) are ifdef'd.
*/
#define SHTTP_STATUS_LINE /* allow 'Secure-HTTP/1.x' in server response */
#define SHTTP_ACCESS_TYPE /* allow url's with 'shttp://...' access type */
#define SHTTP_STATUS_CODES /* allow '420 SecurityRetry' and '421 BogusHeader' */
#endif
/********************************************************************/
/* Window structure for MOSAIC windows */
/********************************************************************/
/** Window types should always be defined Scott Piette **/
#define GHTML 1
#define GIMAGE 2
#define GSOUND 3
#define GWINDOWLESS 4 /* tw without a window attached */
#define MAX_URL_STRING 1024 /* Max size for url */
#define MAX_TITLE_STRING 256 /* Max size for title */
#define MAX_PROT_LEN 15 /* Maximum length of protocol string */
/* Moved here from tw.h */
struct _position
{
int elementIndex; /* -1 for no position */
int offset; /* Offset within element, or -1 for non-text */
};
#ifdef MAC
/* typedef Rect RECT; */
typedef unsigned int COLORREF;
#endif
#ifdef FEATURE_IAPI
#define FIRST_SERIAL_WINDOW_ID 1 /* each window receives a unique, serialized ID */
#endif
#ifdef FEATURE_SOUND_PLAYER
enum sound_formats
{
SOUND_INVALID,
SOUND_AU,
SOUND_AIFF,
SOUND_FORMAT_COUNT
};
struct SoundInfo
{
char *fsOrig; /* original file (temporary) */
BOOL bNoDeleteFile; /* if TRUE, don't delete the fsOrig file */
int count; /* used for thermometer */
int style; /* file sub-format */
int state; /* current state of state machine */
int size; /* file alignment (byte or word) */
int swap; /* used in swapping bytes */
int buf_size; /* size of buf (not exact) */
char *buf; /* buffer holding sound data */
BOOL bValid; /* file validation flag */
unsigned long magic; /* magic number */
unsigned long hdr_size; /* header size */
unsigned long data_size; /* actual size of the sound data */
unsigned long encoding; /* encoding flag */
unsigned long sample_rate; /* file sampling rate */
unsigned long channels; /* number of channels */
int loc; /* temporary state variable */
int idx; /* temporary state variable */
int offset; /* temporary state variable */
unsigned char temp[10]; /* temporary storage variable */
enum sound_formats type; /* type of the sound file (AU, AIFF, WAV) */
struct Mwin *tw; /* fake tw used for error reporting */
struct Mwin *tw_refer; /* document tw which referred to this file */
char szURL[MAX_URL_STRING + 1]; /* URL for this sound */
#ifdef UNIX
int fd; /* file descriptor for tmp sound file */
int aud; /* sound device */
char *aud_name; /* sound device name */
ThreadID tid; /* thread for this sound file */
long data_start; /* file offset of start of data */
int stop; /* if true, then stop playing music */
/* close sound device (could be pause)*/
int stopped; /* if true, output is suspended and */
/* audio device is closed */
unsigned long base_sample; /* beginning sample for this run */
unsigned long max_samples; /* beginning sample for this run */
unsigned long cur_position; /* current play position. may or may */
/* be acurate at certain point */
int ok; /* things are cool for playing */
int total_time; /* total playing time (in tenths of seconds) */
int elapsed_time; /* in tenths of second */
int pos_changed; /* if user modified position in file */
int pause; /* pause playing while slide is moved */
#endif
#ifdef WIN32
HWND hwnd; /* handle of the sound player window */
HWND hwndPos; /* handle of the current position indicator */
HWND hwndScroll; /* handle of the scrollbar */
HGLOBAL hWaveFormat; /* wave format structure */
HGLOBAL hWaveHeader; /* wave header structure (handle to allocated memory) */
WAVEHDR *wh; /* wave header structure (pointer to allocated memory) */
HWAVEOUT hwo; /* wave out ID */
DWORD total_time; /* total playing time (in tenths of seconds) */
PCMWAVEFORMAT *pwf; /* PCM wave format structure */
DWORD scroll_offset; /* current position of the scrollbar thumb */
BOOL bPaused; /* keeps track of paused status */
BOOL bPausedAndMoved; /* user paused the sound and moved the position */
BOOL bTimerOn; /* keeps track of timer status */
BOOL bInterrupted; /* interrupted during playback through scrollbar movement */
DWORD lastpos; /* last position of the thumb */
BOOL bReset; /* TRUE if sound playing was stopped because we called waveOutReset */
HGLOBAL hWaveData; /* wave data to be played */
char *pWaveData; /* memory pointed to by hWaveData */
BOOL bMemoryError; /* flag indicating there was a memory error */
HBITMAP hPlay; /* bitmap for the play button */
HBITMAP hStop; /* bitmap for the stop button */
HBITMAP hPause; /* bitmap for the pause button */
#endif
#ifdef MAC
short fRefNum; /* File Reference Number */
SndChannelPtr myChan; /* Macintosh sound channel record */
Fixed volume; /* Playback volume */
char *fsPlayBack; /* File to play back from */
Fixed playTime; /* Elapsed playback time */
Fixed totalTime; /* Total playback time */
long startTicks; /* TickCount() at playback start */
#endif
};
#endif /* FEATURE_SOUND_PLAYER */
#ifdef FEATURE_IMAGE_VIEWER
#ifdef MAC
struct _image
{
GWorldPtr gw;
};
#endif
enum viewer_formats
{
VIEWER_INVALID,
VIEWER_GIF,
VIEWER_JFIF,
VIEWER_FORMAT_COUNT /* Number of different formats we support */
};
struct ViewerInfo
{
#ifdef MAC
FSSpec fsOrig; /* Original file */
FSSpec fsAux; /* Auxiliary file to store temporary info */
BOOL bNoDeleteFile; /* if TRUE, don't delete the file afterwards */
#endif
#ifdef WIN32
char *fsOrig; /* original file (temporary) */
unsigned char *gw; /* buffer holding the image data */
BITMAPINFO *pbmi; /* bitmap info structure */
HBITMAP hBitmap; /* handle to bitmap */
int horz; /* beginning x coordinate for painting */
int vert; /* beginning y coordinate for painting */
HWND hwnd; /* handle of the image viewer dialog */
BOOL bInitialized;
BOOL bNoDeleteFile; /* if TRUE, don't delete the file afterwards */
long transparent; /* transparent color index (-1 means none) */
#endif
#ifdef UNIX
char *fsOrig; /* original file (temporary) */
XColor *xPalette;
unsigned char *data;
int num_colors;
int depth;
Pixmap xpix;
XImage *ximg;
long transparent;
int width;
int height;
int flags;
#endif
short nHeight, nWidth;
enum viewer_formats format;
struct Mwin *tw; /* fake tw used for error reporting */
struct Mwin *original_tw; /* tw of window which requested this */
char szURL[MAX_URL_STRING + 1];
};
#endif /* FEATURE_IMAGE_VIEWER */
struct _CachedConn {
enum _conntype {
CONN_NONE = 0,
CONN_FTP,
CONN_NNTP,
CONN_SMTP,
CONN_HTTP
} type; /* Type of connection we've cached */
unsigned long addr; /* IP address of server we're connected to */
int socket; /* Socket for control connection */
HTInputSocket *isoc;
unsigned short port; /* For CONN_HTTP, this specifies the port we are connected to */
};
/*
The famous Mwin (tw) structure. This struct contains far too many things
right now, as it has evolved from being the representation of a window,
to being the representation of a thread, and so on.
It needs some redesign at some point.
*/
struct Mwin
{
short wintype;
int offl;
int offt;
#define SPYGLASS_MWIN_MAGIC (2173556000UL)
#define SPYGLASS_BAD_MAGIC (0006553712UL)
unsigned long iMagic; /* magic number to validate Mwin pointers */
#ifdef UNIX
int iLastMouseElement; /* Element that mouse was last on */
Point pLastMousePt;
int iActiveAnchorElement; /* Element that was last clicked on */
Point pActiveAnchorPt;
int iPopupMenuElement; /* Element that popup menu attached to */
char szWaitMsg[_MAX_MESG + 1]; /* current wait msg, (for comparison) */
XtIntervalId wait_id; /* Timer interval for wait info stuff */
struct _ErrMesgData *pError; /* Error Dialog when up */
int nPrev_nTherm;
short globe_state; /* Current globe position */
short globe_spin; /* is globe spinning or not */
short globe_pause; /* is spinning globe paused */
struct _position selectAnchor; /* Used for selections */
BOOL bHaveSelection;
Point pLastSelectPt;
int iSelectLastElementIndex;
int iSelectLastOffset;
int use_h_scroll; /* Flags for using the scrollbars */
int use_v_scroll; /* = 0 not in use, > 0 in use. */
XtIntervalId scroll_id; /* Timer for autoscroll selections */
int rWidth, rHeight; /* Current view port window size */
Pixmap xpix; /* Offscreen pixmap for document window */
Widget win; /* Drawing area widget of document */
Widget Shell; /* Top level shell for window */
#if 0
struct _x11_stuff *x11_GUI; /* Structure that contains all gui */
/* objects needed for drawing */
#endif
GC xgc; /* Drawing gc for wait/globe/gui */
GC wgc; /* Drawing gc for document */
GC pgc; /* Drawing gc for no graphics expose */
GC textgc;
GC anchorgc;
GC vanchorgc;
Pixel fg_color; /* GUI foreground color */
Pixel bg_color; /* GUI background color */
Pixel ts_color; /* GUI top shadow color */
Pixel bs_color; /* GUI bottom shadow color */
Pixel sel_fg_color; /* Document selection foreground color */
Pixel sel_bg_color; /* Document selection background color */
Pixel wfg_color; /* Document window foreground color */
Pixel wbg_color; /* Document window background color */
Pixel wts_color; /* Document window top shadow color */
Pixel wbs_color; /* Document window bottom shadow color */
BOOL bNeedReformat; /* Needs reformat before next draw */
char toolbar_attachment; /* Where is the tool bar attached */
struct _MosaicData *Mosaic;
WinMenu *WinLast; /* Points to last window in window list */
WinMenu WinList; /* Needed for window list menu */
/** Storage for the last typed url **/
char szLastTypedURL[MAX_URL_STRING + 1];
/** This keeps the pointer to a dialog if one is in use **/
void *dialog;
/** This is used for setting the current interaction mode of the window **/
char InteractionLevel;
/** internationalization support **/
BOOL (*SetDialogLanguage)(struct Mwin *tw);
#endif /* UNIX */
#ifdef WIN32
BOOL bNeedReformat; /* need to reformat before next paint */
BOOL bNoDrawSelection;
HWND win; /* mdi child window */
HDC hdc;
WC_WININFO *pwci; /* window class data */
HWND hWndFrame; /* frame window */
HWND hWndTBar; /* tbar */
HWND hWndBHBar; /* status bar */
HWND hWndGlobe;
HWND hWndErrors; /* errors window */
int nTBarHeight; /* height of TBar */
GWC gwc; /* for contents of non-changing Gwc for this window */
#ifdef FEATURE_TOOLBAR
GWC gwc_menu;
#endif
BHBARINFO bhi; /* status bar info */
int iPopupMenuElement; /* When a popup menu refers to an element, this is the one */
#endif /* WIN32 */
#ifdef MAC
WindowPtr win; /* Mac Window */
GWorldPtr gWorld; /* The Window's gWorld */
BOOL useGWorld; /* should drawing be done off screen */
ControlHandle vbar, hbar; /* Scroll bars */
int iPopupMenuElement; /* When a popup menu refers to an element, this is the one */
Rect
docrect, /* location of main document area */
grow2; /* what is the largest we will allow this window? */
Rect statrect; /* location of status bar */
Rect msgrect; /* Area of message (loading, anchor link, etc. inside statrect */
Rect globerect; /* Where globe appears */
Rect rButtons[2]; /* foreward & backward buttons */
Rect rTherm; /* termometer rect */
char szStatMsg[512];
short globe_state; /* Current globe position */
short lastcontrol; /* temp value of a control before I started modifying it */
TEHandle teActive;
int nEditElement; /* Which element has teActive - only valid when teActive != NULL */
/* If nEditElement == -1, the editable URL is active */
TEHandle teURL;
Handle hErrorText; /* handle to the current error text string */
short statfont; /* Font used for stuff in status area */
short statsize;
Rect deadzone; /* don't need to redo hit test if mouse inside */
long nNextTime; /* next time to spin the globe */
#ifdef FEATURE_TOOLBAR
struct ToolbarVars toolbarVars;
#endif
#endif
#ifdef FEATURE_IMAGE_VIEWER
struct ViewerInfo *pViewerInfo;
#ifdef MAC
struct _image Image;
#endif
#endif
#ifdef UNIX
#ifdef FEATURE_SOUND_PLAYER
struct SoundInfo *pSoundInfo;
#endif
#endif
HTRequest *request;
HTRequest *image_request;
HTRequest *post_request;
HTList *history;
int history_index;
BOOL bLoading;
struct hash_table doc_cache;
struct _www *w3doc;
struct Mwin *next; /* Linked list of Mwin's */
#ifdef FEATURE_IAPI
long serialID; /* each window receives a unique, serialized ID */
int nPushCount; /* used to count WAIT_Push and WAIT_Pop for Progress stuff */
unsigned long transID; /* SDI 4 byte transaction ID */
long lErrorOccurred; /* error code for sdi requests */
#ifndef UNIX
char szProgressApp[32]; /* name of the app to receive progress */
#endif
int mimeType; /* MIME type of the document just loaded */
int SDI_MimeType; /* MIME type of the document just loaded */
char* SDI_url;
long client; /* id of client to receive progress */
BOOL bProgress; /* progress reports are requested. */
BOOL bSuppressError; /* flag to suppress error messages */
#endif
struct AsyncWaitInfo * awi;
#ifdef WIN32
HWND hWndStop;
#endif
int nOpenConnections; /* current # of async img connections */
/* only used w/ FEATURE_ASYNC_IMAGES */
struct _CachedConn cached_conn; /* The cached net connection for this window */
/* Variables used for the window-specific Find dialog */
char szSearch[512 + 1];
BOOL bSearchCase;
#ifndef WIN32
/*
The bStartFromTop item should not be needed, on any platform. The Find dialog,
as spec-ed, just ALWAYS come up with Start From Top checked. I'm #ifdef-ing it
out for WIN32, but leaving for the other platforms so that their builds won't break.
*/
BOOL bStartFromTop;
#endif
#if defined(WIN32)
/*
Used for Windows to change the cursor to a hand when over a link
*/
BOOL bInHotspot;
#ifdef FEATURE_OLE
IDropTarget *pDropTarget;
#endif
#endif
#ifdef _GIBRALTAR
HWND hWndLocation;
int xForwardButton;
int xGlobe;
#endif // _GIBRALTAR
};
struct MiniRequest
{
char *url;
BOOL bPost;
char *szPostData;
};
/* shared/gtrutil.c */
int GTR_strcmpi ( const char *a , const char *b );
int GTR_strncmpi ( const char *a , const char *b, int n);
char *GTR_strdup ( const char *a );
char *GTR_strndup ( const char *a , int n );
char * GTR_strncat (char *T, CONST char *F, int n);
char * GTR_strncpy (char *T, CONST char *F, int n);
char * GTR_strmcat (char *T, CONST char *F, int n);
BOOL GTR_is_Yes_or_True(char *s);
char *GTR_strStripEndSpaces(char *s);
unsigned char * MB_GetWindowNameFromURL(unsigned char * szActualURL);
unsigned char * MB_GetWindowName(struct Mwin * tw);
char * GTR_MakeStringLowerCase(char *s);
void *GTR_StructCopy (void *ptr, int size);
void FixPathName(char *path);
#ifdef FEATURE_TIME_BOMB
/* -------------------------------- */
/*
GTR_CheckTimeBomb() is in shared code, in gtrutil.c. It will check the
current status of demo mode, and return one of the following:
-1 the program should warn the user and terminate
0 the program should proceed without warning
N>0 the program should warn the user of N days left, and proceed
Platform-specific code should call GTR_CheckTimeBomb() from main() or
equivalent, and take the appropriate action.
GTR_CheckTimeBomb() calls the three routines listed below, which must be
provided in platform-specific code.
*/
int GTR_CheckTimeBomb(void);
/* -------------------------------- */
/*
The following three functions must be provided in platform-specific code.
They are platform-specific because the date and cookie will be stored in
different places on different platforms, and the call to obtain it will likely be
platform-specific.
*/
/* -------------------------------- */
/*
GTR_CheckTimeBombCookie() should check to see if the given cookie is
present.
If the cookie cannot be found, then the function should return FALSE.
GTR_CheckTimeBomb() calls this function. If TRUE, then the build is assumed to
be licensed, and GTR_TIMEBOMB_GO is returned.
*/
BOOL GTR_CheckTimeBombCookie(char *correct_cookie);
/* -------------------------------- */
/*
GTR_GetTimeBombDate() should find the date associated with the start of demo
mode.
If the date cannot be found, this function should return 0.
GTR_CheckTimeBomb() calls this function if a cookie match was not found, to
determine when demo mode started.
*/
time_t GTR_GetTimeBombDate(void);
/* -------------------------------- */
/*
GET_SetTimeBombDate() should take the given date and store it in the appropriate
place.
GTR_CheckTimeBomb() calls this function to mark the beginning of demo mode.
*/
void GTR_SetTimeBombDate(time_t time_start);
/* -------------------------------- */
/*
The cookie calculations use the md5 algorithm. Specifically, the
cookie for a given build is the md5 hash of its user agent string.
*/
void md5 (unsigned char *string, unsigned char result[33]);
#endif /* FEATURE_TIME_BOMB */
struct _element;
struct GTRFont *GTR_GetElementFont(struct _www *pdoc, struct _element *pel);
struct GTRFont *GTR_GetNormalFont(struct _www *pdoc);
struct GTRFont *GTR_GetMonospaceFont(struct _www *pdoc);
int TW_AddToHistory(struct Mwin *tw, char *url, BOOL bPost, char *szPostData);
#define BASE_LOGICAL_FONT_SIZE (3)
#define LATIN1_CHARSET_NAME "iso-8859-1"
HTAtom GTR_GetDefaultCharset(void);
void GTR_ViewSource(struct Mwin *tw);
int GTR_GetCurrentBasePointSize(int);
void W3Doc_UpdateBasePointSizes(void);
/*
================================================================
Language strings - see the misc prefs dialog
*/
extern char* PreferredLanguageStrings[];
#ifdef FEATURE_POPUPMENU
#define _HTML_NO_OP 0
#define _HTML_OPEN_IN_NEW_WINDOW 1
#define _HTML_DOWN_LOAD_TO_DISK 2
#define _HTML_ADD_TO_HOT_LIST 3
#define _HTML_LOAD_DOCUMENT 4
void HTML_LoadImageInNewWindow(struct Mwin *tw, struct _element *pel);
void HTML_LoadMissingImage(struct Mwin *tw, struct _element *pel);
void HTML_DownLoadImage(struct Mwin *tw, struct _element *pel);
BOOL HTML_ValidateTwElements(struct Mwin *tw);
void HTML_CloneWindow(struct Mwin *tw);
void HTML_SetHome(struct Mwin *tw);
void HTML_LoadLink(struct Mwin *tw, int Op, struct _element *pel);
#endif /** FEATURE_POPUPMENU **/
#define GTR_MAX_TCP_CONNECTIONS (5)
#endif /* GUITAR_H */