mirror of
https://github.com/cc65/cc65.git
synced 2024-08-27 11:29:12 +00:00
88 lines
2.1 KiB
C
88 lines
2.1 KiB
C
/*
|
|
GEOSLib example
|
|
|
|
This small application removes GEOS disk write protection tag.
|
|
e.g. boot disk is always protected after boot-up
|
|
|
|
Maciej 'YTM/Elysium' Witkowiak
|
|
<ytm@elysium.pl>
|
|
|
|
21.03.2000
|
|
*/
|
|
|
|
|
|
#include <geos.h>
|
|
|
|
char diskName[17] = "";
|
|
|
|
static const graphicStr clearScreen = {
|
|
MOVEPENTO(0, 0),
|
|
NEWPATTERN(2),
|
|
RECTANGLETO(SC_PIX_WIDTH-1, SC_PIX_HEIGHT-1),
|
|
GSTR_END
|
|
};
|
|
|
|
static const dlgBoxStr mainDialog = {
|
|
DB_DEFPOS(1),
|
|
DB_TXTSTR(TXT_LN_X, TXT_LN_2_Y,
|
|
CBOLDON "Remove protection on:" CPLAINTEXT),
|
|
DB_TXTSTR(TXT_LN_X, TXT_LN_3_Y, diskName),
|
|
DB_ICON(OK, DBI_X_0, DBI_Y_2),
|
|
DB_ICON(DISK, DBI_X_1, DBI_Y_2),
|
|
DB_ICON(CANCEL, DBI_X_2, DBI_Y_2),
|
|
DB_END
|
|
};
|
|
|
|
static const dlgBoxStr changeDiskDlg = {
|
|
DB_DEFPOS(1),
|
|
DB_TXTSTR(TXT_LN_X, TXT_LN_2_Y, CBOLDON "Insert new disk"),
|
|
DB_TXTSTR(TXT_LN_X, TXT_LN_3_Y, "into drive." CPLAINTEXT),
|
|
DB_ICON(OK, DBI_X_0, DBI_Y_2),
|
|
DB_ICON(CANCEL, DBI_X_2, DBI_Y_2),
|
|
DB_END
|
|
};
|
|
|
|
static const dlgBoxStr errorDialog = {
|
|
DB_DEFPOS(1),
|
|
DB_TXTSTR(TXT_LN_X, TXT_LN_2_Y, CBOLDON "Error happened..."),
|
|
DB_TXTSTR(TXT_LN_X, TXT_LN_3_Y, "exiting..." CPLAINTEXT),
|
|
DB_ICON(OK, DBI_X_0, DBI_Y_2),
|
|
DB_END
|
|
};
|
|
|
|
void Error(void)
|
|
{
|
|
DoDlgBox(&errorDialog);
|
|
EnterDeskTop();
|
|
}
|
|
|
|
void main(void)
|
|
{
|
|
// Here we clear the screen. Not really needed anyway...
|
|
GraphicsString(&clearScreen);
|
|
|
|
// Get the name of current disk to show it in dialog box
|
|
GetPtrCurDkNm(diskName);
|
|
|
|
while (1) {
|
|
switch (DoDlgBox(&mainDialog)) {
|
|
|
|
// What's the result of dialog box? which icon was pressed?
|
|
case OK:
|
|
if (GetDirHead())
|
|
Error();
|
|
curDirHead[OFF_GS_DTYPE] = 0;
|
|
if (PutDirHead())
|
|
Error();
|
|
break;
|
|
case DISK:
|
|
DoDlgBox(&changeDiskDlg);
|
|
GetPtrCurDkNm(diskName);
|
|
break;
|
|
default: // CANCEL is the third option
|
|
return;
|
|
break;
|
|
}
|
|
}
|
|
}
|