mac-tip/mac-cpp-source/tip/tip.h

323 lines
9.5 KiB
C

#include "ctype.h"
extern WindowPtr tipWindow;
void run_tip();
typedef enum TipPage {
INTRO_PAGE,
PERFORM_TEST_PAGE,
EXPLAIN_RESULTS,
} TipPage;
#define MINIMUM_JAZ_SPARES 500
#define MAXIMUM_JAZ_SPARES 2557
#define MINIMUM_ZIP_SPARES 50
#define MAXIMUM_ZIP_SPARES 126
extern TipPage CurrentPage;
extern long CurrentDevice;
extern long DriveCount;
extern long JazDrive; // true if the current drive
extern long CartridgeStatus;
extern long LastLBAOnCartridge;
extern uint32_t StartingInstant;
extern long NumberOfLBAs;
extern long AdapterMaxSectors;
extern long Side_0_SparesCount; // JAZ has only one count
extern long Side_1_SparesCount; // ZIP has counts for both sides
extern long Initial_Side_0_Spares;
extern long Initial_Side_1_Spares;
extern long TestingPhase; // 0 = not testing, no data ...
extern long PercentComplete;
extern long FirstLBASector;
extern long NumberOfLBAs;
extern long SecondsElapsed;
extern long SoftErrors;
extern long FirmErrors;
extern long HardErrors;
extern long ElapsedTimeOfLastEstimate;
extern long CurrentTotalTimeEstimate;
extern bool UserInterrupt;
extern long LastError;
extern long SingleTransferLBA;
//-------------------------- Drive Array Status Flags ---------------------------
#define JAZ_DRIVE 0x01
#define MEDIA_CHANGED 0x02
#define DISK_EJECTING 0x04 // we've asked for eject and waiting ...
#define ODD_BYTE_COMPENSATION 0x08 // special handling for ODD length PSWD
#define MOUNTED_DRIVE 0x10 // drive was mounted at startup, ignore it
#define MAX_DRIVE_COUNT 8 // we can handle up to 8 Zip/Jaz drives
struct DriveEntry {
uint8_t flags;
uint8_t scsi_id;
};
extern DriveEntry DriveArray[MAX_DRIVE_COUNT];
// ----------------------- Macintosh Compatibility -----------------------
enum AlertTypes {
ERR_DLG,
YN_DLG
};
enum {
BACK_COLOR = -1,
BLACK_COLOR = 0x000000,
LTGRAY_COLOR = 0xc0c0c0,
GRAY_COLOR = 0x808080,
WHITE_COLOR = 0xffffff,
BLUE_COLOR = 0x0000ff,
RED_COLOR = 0xff0000,
GREEN_COLOR = 0x00ff00,
};
#define BDR_SUNKENOUTER 1
#define BF_RECT 1
#define WM_PAINT 1
#define WM_COMMAND 2
#define SW_SHOW 1
#define SW_HIDE 2
#define BM_GETCHECK 1
#define BST_CHECKED 1
void SetRGBColor(long color, RGBColor *rgbColor);
void SetColor(long color);
void SetColor(long color, long monoColor);
void SetBackColor(long color);
void DrawLed(int x, int y, long color);
void StrToPascal(Str255 pStr, const char *str);
int ShowAlert(AlertTypes type, const char* format, ...);
void SetRichEditText(const char *name);
long GetTextExtent(const char *str, unsigned long len);
void TextOut(int x, int y, Str255 str);
void TextOut(int x, int y, const char *str);
void TextOutCentered(int x, int y, int w, int h, const char *str);
void SetWindowText(int id, const char *str);
void EnableWindow(int id, bool enabled);
void ShowWindow(ControlHandle hCntl, int state);
void ShowWindow(int id, int state);
long SendMessage(int id, int msg);
void InvalidateRect(int id);
void Rectangle(int left, int top, int right, int bottom);
void DrawEdge(Rect *qrc, int edge, int grfFlags);
void StartApplicationTimer();
void StopApplicationTimer();
void PostQuitMessage();
unsigned long GetSystemTime();
bool PrepareDC(int which);
void SplashTheBitmap();
void Paint3DHeadline();
#define GetDC(h) {GrafPtr oldPort; \
GetPort(&oldPort); \
if(PrepareDC(h)) {
#define ReleaseDC(h) } SetOrigin(0,0); \
SetPort(oldPort);}
// ------------------------------ Cartridge Status -------------------------------
enum {
DISK_STATUS_UNKNOWN = 1,
DISK_AT_SPEED = 2,
DISK_SPINNING_UP = 3,
DISK_NOT_PRESENT = 4,
DISK_SPUN_DOWN = 5,
DISK_STALLED = 6,
DISK_Z_TRACK_FAILURE = 7,
DISK_PROTECTED = 8,
DISK_LOW_SPARES = 9,
DISK_TEST_UNDERWAY = 10,
DISK_TEST_FAILURE = 11,
LAST_CART_STATUS = 11
};
// ---------------------------- Testing Phase Status -----------------------------
enum {
UNTESTED = 0,
READY_TO_TEST = 1,
TESTING_STARTUP = 2,
READING_DATA = 3,
WRITING_PATT = 4,
READING_PATT = 5,
WRITING_DATA = 6
};
/*******************************************************************************
* STRINGS
*******************************************************************************/
extern const char *szIntroTitle;
extern const char *szIntroSubTitle;
extern const char *szIntroText;
extern const char *szWindowTitle;
extern const char *szCopyright_1;
extern const char *szCopyright_2;
extern const char *szIomega;
extern const char *szZip;
extern const char *szJaz;
extern const char *szSide0;
extern const char *szSide1;
extern const char *szSpaceDashSpace;
extern const char *szBarChartPercent;
extern const char *szCenteredDecimal;
extern const char *szCenteredHex;
extern const char *szHoursMinsSecs;
extern const char *szCartStatus;
extern const char *szEstimating;
extern const char *szOneMoment;
extern const char *szPressToStart;
extern const char *szPressToStop;
extern const char *szPressToSpin;
extern const char *szPressToEject;
extern const char *szPressToProceed;
/************* Filenames *************/
extern const char *szInstructions;
extern const char *szNoASPI;
extern const char *szASPITrouble;
extern const char *szPPAVersion;
extern const char *szDefectList;
extern const char *szLocked;
extern const char *szNoSpares;
extern const char *szOutOfSpares;
extern const char *szFewSpares;
extern const char *szNotRunning;
extern const char *szRunning;
extern const char *szInterrupted;
extern const char *szPerfectResult;
extern const char *szExplainResult;
extern const char *szBadResult;
extern const char *szIomegaQuote;
/************* Cartridge Status Text *************/
typedef struct {long code; char *str;} ErrorTypeList;
typedef struct {int x, y; char *str;} TextList;
extern const char *szUnknownStat;
extern const char *szAtSpeedStat;
extern const char *szSpinningUp;
extern const char *szNotPresent;
extern const char *szSpunDown;
extern const char *szStalledStat;
extern const char *szZtrackFailure;
extern const char *szDiskLocked;
extern const char *szLowSpares;
extern const char *szTestUnderway;
extern const char *DriveUnderTest;
extern const char *szTestFailure;
extern const char *szNoIomegaDrives;
extern const char *CartStatStrings[];
extern ErrorTypeList errorTypeList[];
extern TextList TestBlackText[];
extern TextList TestGrayText[];
/************* Window Creation Data **************/
extern const char *szBack;
extern const char *szNext;
extern const char *szQuit;
#define IDB_BACK 0xFF00
#define IDB_NEXT 0xFF01
#define IDB_QUIT 0xFF02
#define IDB_TEST 0xFF03
#define IDB_EXPL 0xFF04
#define IDB_OKAY 0xFF05
#define IDB_READ 0xFF06
#define IDB_BEEP 0xFF07
enum {
hDefault,
hMainWnd,
hTestMonitor,
hTestButton = IDB_TEST,
hExitButton = IDB_QUIT,
hSoundCheckbox,
// Extras added by MLT
hIntroWnd = 5,
hExplainWnd = IDB_EXPL
};
typedef struct {
int id;
const char *name;
int x;
int y;
int w;
int h;
int type;
ControlHandle hndl;
} BtnList;
extern BtnList tipBtns[];
extern Rect CS_Stat, TP_Perc, SS_Jaz, SS_Sid0, TL_Sect, ES_Read, SE_Rect;
/*******************************************************************************
* FUNCTION PROTOTYPES
*******************************************************************************/
void PaintCenteredString(int Xleft, int Ytop, int XWidth, int YHeight, const char *pText, bool Active);
void PaintCenteredValue(int Xleft, int Ytop, int XWidth, int YHeight, long value, bool Active);
void SunkenFields(Rect *pFirstRect, long count, long yspacing);
void PaintCartStatus();
void PaintTextArray(TextList *list, long color);
void PaintBarGraph(int Xleft, int Ytop, int XWidth, int YHeight, long BarColor, long BarValue, char *pRightText, bool Active);
int CvrtIntoPrcnt(long val, long max);
void PaintTestPhase();
void PaintTheBarGraphs(bool Active);
void PaintTestStatistics(bool Active);
void CvrtSecondsToHMSstring(char *szString, long seconds);
void UpdateCurrentSector();
void UpdateRunTimeDisplay();
void UpdateRunPhaseDisplay();
void PreventProgramExit();
void AllowProgramExit();
void ErrorSound();
void ProcessPendingMessages();
void WinMain(uint8_t *DrivesSkipped);
void Paint3DHeadline(const char *pszText, int Xleft, int Ytop);
void WndProc(long iMessage, uint16_t wParam);
void TestMonitorWndProc();
void ApplicationTimerProc();
void TestButtonClicked();
int GetDriveEntryOffset(short Device);
void GetCommandDetails(char command, char &cmd_flags, char &cmd_length);
long SCSICommand(short Device, char *lpCmdBlk, void *lpIoBuf, short IoBufLen);
long EnumerateIomegaDevices(uint8_t *DrivesSkipped);
long GetModePage(short Device, short PageToGet, void *pBuffer, short BufLen);
long SetModePage(short Device, void *pBuffer);
void ModifyModePage(char *PageBuff, char eec, char retries);
void SetErrorRecovery(bool Retries, bool ECC, bool Testing);
long GetNonSenseData(short Device, short DataPage, void *Buffer, short BufLen);
long LockCurrentDrive();
long UnlockCurrentDrive();
void UnlockAllMedia();
long SpinUpIomegaCartridge(short Device);
void EjectAllMedia();
long GetSpareSectorCounts(char);
uint8_t GetCartridgeStatus(long Device);
void HandleDriveChanging();
void SetCartridgeStatusToEAX(long eax);
void EjectIomegaCartridge(int Device);
long PerformRegionTransfer(short XferCmd, void *pBuffer);
void TestTheDisk();
long GetElapsedTimeInSeconds();
void PrepareToBeginTesting();
void BumpErrorCounts(long ErrorCode);
void EjectIomegaCartridge();