📄 os2setup.c
字号:
return 1;
}
sprintf(secver, "GSview-%s", GSVIEW_DOT_VERSION);
profile_write_string(prf, secver, "Configured", "0");
sprintf(buf, "%3d", gsver);
profile_write_string(prf, secver, "GSversion", buf);
profile_close(prf);
return 0;
}
int
create_object(void)
{
char buf[MAXSTR];
char setup[MAXSTR];
APIRET rc;
strcpy(buf, destdir);
strcat(buf, "\\");
strcat(buf, gsviewbase);
strcat(buf, "\\gvpm.exe");
sprintf(setup, "EXENAME=%s;ASSOCFILTER=*.ps,*.eps,*.pdf", buf);
rc = !WinCreateObject((PCSZ)"WPProgram", (PCSZ)"GSview", (PCSZ)setup,
(PCSZ)"<WP_DESKTOP>", CO_REPLACEIFEXISTS);
if (rc)
load_string(IDS_PROGRAMOBJECTFAILED, error_message, sizeof(error_message));
else {
load_string(IDS_PROGMANGROUP6, setup, sizeof(setup));
sprintf(buf, setup, groupname);
SetDlgItemText(find_page_from_id(IDD_DONE)->hwnd, IDD_DONE_GROUP, (PCSZ)buf);
}
return rc;
}
int
create_dialog(void)
{
WIZPAGE *page;
char buf[MAXSTR];
/* main dialog box */
hMain = WinLoadDlg(HWND_DESKTOP, HWND_DESKTOP, MainDlgProc, hlanguage, IDD_MAIN, 0);
sprintf(buf, "%d.%02d - %d.%02d",
GS_REVISION_MIN / 100, GS_REVISION_MIN % 100,
GS_REVISION_MAX / 100, GS_REVISION_MAX % 100);
WinSetWindowText( WinWindowFromID(find_page_from_id(IDD_INTRO)->hwnd, IDD_INTRO_T3), (PCSZ)buf);
/* initialize GS version */
page = find_page_from_id(IDD_GSVER);
if (page) {
sprintf(buf, "%d.%02d", gsver / 100, gsver % 100);
WinSetWindowText( WinWindowFromID(page->hwnd, IDD_GSVER_TEXT), (PCSZ)buf);
WinSendMsg( WinWindowFromID(page->hwnd, PARTIAL_GSVIEW),
BM_SETCHECK, MPFROMLONG(1), MPFROMLONG(0));
WinSendMsg( WinWindowFromID(page->hwnd, PARTIAL_GS),
BM_SETCHECK, MPFROMLONG(1), MPFROMLONG(0));
}
{ /* put scroll thumb in middle to enable both arrows */
HWND hwndScroll = WinWindowFromID(page->hwnd, IDD_GSVER_SCROLL);
WinSendMsg(hwndScroll, SBM_SETSCROLLBAR, MPFROMLONG(1),
MPFROM2SHORT(0, 2));
}
/* initialize destination directory */
strcpy(destdir, bootdrive);
strcat(destdir, INSTALL_DIR);
WinSetWindowText( WinWindowFromID(find_page_from_id(IDD_DIR)->hwnd, ID_ANSWER), (PCSZ)destdir);
if (!emx || init_temp()) {
page = find_page_from_id(IDD_CONFIG);
if (page) {
WinSendMsg( WinWindowFromID(page->hwnd, IDM_AUTOEXECBAT),
BM_SETCHECK, MPFROMLONG(1), MPFROMLONG(0));
WinSendMsg( WinWindowFromID(page->hwnd, IDM_AUTOEXECBAT),
BM_SETCHECK, MPFROMLONG(1), MPFROMLONG(0));
WinSendMsg( WinWindowFromID(page->hwnd, IDM_AUTOEXECBAK),
BM_SETCHECK, MPFROMLONG(1), MPFROMLONG(0));
}
find_page_from_id(IDD_FINISH)->prev = IDD_CONFIG;
}
/* program group */
load_string(IDS_PROGMANGROUP4, buf, sizeof(buf));
page = find_page_from_id(IDD_FINISH);
if (page) {
WinSendMsg( WinWindowFromID(page->hwnd, IDM_PROGMAN1),
BM_SETCHECK, MPFROMLONG(1), MPFROMLONG(0));
WinSetWindowText( WinWindowFromID(page->hwnd, IDM_PROGMAN2), (PCSZ)buf);
}
/* try again to set the focus where we want it */
WinSetFocus(HWND_DESKTOP, WinWindowFromID(pages[0].hwnd, IDNEXT));
return 0; /* success */
}
void
install_init(void)
{
int i;
char *s, *d;
sprintf(gs_basedir, "gs%d.%02d", gsver / 100, gsver % 100);
sprintf(gs_zipprefix, "gs%3d", gsver);
/* derive group filename from group name */
for (i=0, s=groupname, d=groupfile; i<8 && *s; s++) {
if (isalpha((int)(*s)) || isdigit((int)(*s))) {
*d++ = *s;
i++;
}
}
*d = '\0';
if (strlen(groupfile)==0)
strcpy(groupfile, "gstools");
}
BOOL gszip_exists(int ver)
{
FILE *f;
char name[256];
sprintf(name, "%sgs%03dos2.zip", sourcedir, ver);
if ( (f = fopen(name, "r")) != (FILE *)NULL ) {
fclose(f);
return TRUE;
}
return FALSE;
}
/* Try to find if we are being asked to install a different
* version of Ghostscript than GS_REVISION.
* Do this by trying to open gsNNNos2.zip for other version
* numbers.
*/
void
find_gszip(void)
{
int i;
gsver = GS_REVISION;
/* try to find a Ghostscript OS/2 zip file */
for (i=gsver; i <= GS_REVISION_MAX; i++) {
if (gszip_exists(i)) {
gsver = i;
return; /* got one */
}
}
/* try a couple of earlier versions */
if (gszip_exists(550)) {
gsver = 550;
return;
}
if (gszip_exists(510)) {
gsver = 510;
return;
}
}
int
init_setup(LPSTR lpszCmdLine)
{
char *p;
LPSTR d, s;
char buf[256];
APIRET rc = 0;
PTIB pptib;
PPIB pppib;
HMODULE hmodule;
if (lpszCmdLine[0] != '\0') {
d = destdir;
s = lpszCmdLine;
if (*s == '\042')
s++; /* don't copy quotes */
while (*s) {
if (*s == '\042')
s++; /* don't copy quotes */
else
*d++ = *s++;
if (d - destdir > sizeof(destdir) - 1) {
*d = '\0';
break;
}
}
batch = TRUE;
}
/* get path to EXE */
if ( (rc = DosGetInfoBlocks(&pptib, &pppib)) != 0 ) {
sprintf(error_message, "DosGetInfoBlocks rc=%ld", rc);
return rc;
}
if ( (rc = DosQueryModuleName(pppib->pib_hmte, sizeof(sourcedir), sourcedir)) != 0 ) {
sprintf(error_message, "DosQueryModuleName rc=%ld", rc);
return rc;
}
if ((p = strrchr(sourcedir,'\\')) != (char *)NULL)
p++;
else
p = sourcedir;
*p = '\0';
/* Inspect system, get boot drive */
getcwd(workdir, sizeof(workdir)); /* remember the working directory */
strcpy(bootdrive, getenv("USER_INI"));
bootdrive[2] = '\0';
if ( !(rc = DosLoadModule((PBYTE)buf, sizeof(buf), (PCSZ)"EMX", &hmodule)) ) {
emx = TRUE;
DosFreeModule(hmodule);
}
/* Set the initial Ghostscript revision (gsver) */
find_gszip();
return 0;
}
MRESULT EXPENTRY InputDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
switch(msg) {
case WM_INITDLG:
WinSendMsg( WinWindowFromID(hwnd, ID_ANSWER),
EM_SETTEXTLIMIT, MPFROM2SHORT(MAXSTR, 0), MPFROMLONG(0) );
WinSetWindowText( WinWindowFromID(hwnd, ID_ANSWER),
(PCSZ)get_string_answer );
break;
case WM_COMMAND:
switch(SHORT1FROMMP(mp1)) {
case DID_OK:
WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
WinQueryWindowText(WinWindowFromID(hwnd, ID_ANSWER),
MAXSTR, (PBYTE)get_string_answer);
WinDismissDlg(hwnd, DID_OK);
return (MRESULT)TRUE;
case DID_CANCEL:
WinDismissDlg(hwnd, DID_CANCEL);
return (MRESULT)TRUE;
}
break;
}
return WinDefDlgProc(hwnd, msg, mp1, mp2);
}
MRESULT EXPENTRY MainDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
static BOOL initialised = FALSE;
switch(msg) {
case WM_INITDLG:
/* create child dialog windows */
if (!initialised) {
WIZPAGE *page;
initialised=TRUE;
for (page=pages; page->id; page++) {
page->hwnd = WinLoadDlg(hwnd, hwnd, ModelessDlgProc,
hlanguage, page->id, 0);
WinShowWindow(page->hwnd, FALSE);
}
page = find_page_from_id(IDD_DIR);
if (page) {
WinSendMsg( WinWindowFromID(page->hwnd, ID_ANSWER),
EM_SETTEXTLIMIT, MPFROM2SHORT(MAXSTR, 0), MPFROMLONG(0) );
}
page = find_page_from_id(IDD_FINISH);
if (page) {
WinSendMsg( WinWindowFromID(page->hwnd, IDM_PROGMAN2),
EM_SETTEXTLIMIT, MPFROM2SHORT(MAXSTR, 0), MPFROMLONG(0) );
}
WinShowWindow(pages[0].hwnd, TRUE);
WinSetFocus(HWND_DESKTOP, WinWindowFromID(pages[0].hwnd, IDNEXT));
WinSendMsg(WinWindowFromID(pages[0].hwnd, IDNEXT),
BM_SETDEFAULT, (MPARAM)TRUE , (MPARAM)0);
hwnd_current = pages[0].hwnd;
}
break;
case WM_COMMAND:
switch(SHORT1FROMMP(mp1)) {
case DID_OK:
case DID_CANCEL:
WinPostMsg(hwnd, WM_QUIT, (MPARAM)0, (MPARAM)0);
return (MRESULT)TRUE;
}
break;
case WM_CLOSE:
WinPostMsg(hwnd, WM_QUIT, (MPARAM)0, (MPARAM)0);
return (MRESULT)TRUE;
break;
}
return WinDefDlgProc(hwnd, msg, mp1, mp2);
}
MRESULT EXPENTRY ModelessDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
switch(msg) {
case WM_INITDLG:
break;
case WM_COMMAND:
switch(SHORT1FROMMP(mp1)) {
case IDOK:
case IDNEXT:
next_page(hwnd);
return(MRESULT)TRUE;
case IDPREV:
/* remove default style */
WinSendMsg(WinWindowFromID(hwnd, IDPREV), BM_SETDEFAULT,
(MPARAM)FALSE , (MPARAM)0);
prev_page(hwnd);
return(MRESULT)TRUE;
case IDFINISH:
installing = TRUE;
if (do_install() || cancelling) {
WIZPAGE *page;
/* FAILED */
failed = TRUE;
page = find_page_from_id(IDD_TEXTWIN);
page->next = IDD_FAILED; /* KLUDGE */
WinEnableWindow(WinWindowFromID(page->hwnd, IDNEXT), TRUE);
WinSetWindowText( WinWindowFromID(find_page_from_id(IDD_FAILED)->hwnd,
IDD_FAILED_REASON), (PCSZ)error_message);
gs_addmess(error_message);
gs_addmess_update();
}
else {
WIZPAGE *page;
page = find_page_from_id(IDD_TEXTWIN);
page->next = IDD_DONE; /* KLUDGE */
WinEnableWindow(WinWindowFromID(page->hwnd, IDNEXT), TRUE);
}
installing = FALSE;
if (autoexec_bak[0] != '\0') {
char buf1[MAXSTR], buf2[MAXSTR];
load_string(IDS_DONEBAK, buf1, sizeof(buf2));
sprintf(buf2, buf1, autoexec_bak);
WinSetWindowText( WinWindowFromID(find_page_from_id(IDD_DONE)->hwnd,
IDD_DONE_BAK), (PCSZ)buf2);
}
WinPostMsg(find_page_from_id(IDD_TEXTWIN)->hwnd,
WM_COMMAND, MPFROMSHORT(IDNEXT), (MPARAM)0);
return(MRESULT)TRUE;
case IDCANCEL:
if (installing) {
gs_addmess("\ncancelling\n");
cancelling = 1;
}
else
WinPostMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND, MPFROMSHORT(IDCANCEL), (MPARAM)0);
return(MRESULT)TRUE;
case TEXTWIN_COPY:
{MRESULT mr;
mr = WinSendMsg( WinWindowFromID(hwnd, TEXTWIN_MLE),
MLM_QUERYSEL, (MPARAM)MLFQS_MINMAXSEL, (MPARAM)0);
if (SHORT1FROMMP(mr) == SHORT2FROMMP(mr)) /* no selection so select all */
WinSendMsg( WinWindowFromID(hwnd, TEXTWIN_MLE),
MLM_SETSEL, 0, (MPARAM)strlen(twbuf));
WinSendMsg( WinWindowFromID(hwnd, TEXTWIN_MLE),
MLM_COPY, (MPARAM)0, (MPARAM)0);
WinSendMsg( WinWindowFromID(hwnd, TEXTWIN_MLE),
MLM_SETSEL, (MPARAM)strlen(twbuf), (MPARAM)strlen(twbuf));
}
return(MRESULT)TRUE;
default:
return(MRESULT)FALSE;
}
break;
case WM_VSCROLL:
/* handle scrolling GS version */
{ int ver;
char buf[16];
switch(SHORT2FROMMP(mp2)) {
case SB_LINEUP:
ver = add_gsver(hwnd, 1);
break;
case SB_LINEDOWN:
ver = add_gsver(hwnd, -1);
break;
default:
ver = add_gsver(hwnd, 0);
break;
}
sprintf(buf, "%d.%02d", ver / 100, ver % 100);
WinSetWindowText( WinWindowFromID(hwnd, IDD_GSVER_TEXT), (PCSZ)buf);
}
return(MRESULT)TRUE;
}
return WinDefDlgProc(hwnd, msg, mp1, mp2);
}
int
main(int argc, char *argv[])
{
HMQ hand_mq; /* message queue */
QMSG q_mess; /* queue message */
APIRET rc = 0;
hab = WinInitialize(0); /* Get the Anchor Block */
phInstance = hab;
hlanguage = 0;
hand_mq = WinCreateMsgQueue(hab, 0); /* start a queue */
if (argc==2)
init_setup(argv[1]);
else
init_setup("");
check_language();
load_string(IDS_GSVIEWBASE, gsviewbase, sizeof(gsviewbase));
load_string(IDS_PROGMANGROUP4, groupname, sizeof(groupname));
if (!beta_warn()) {
if (!rc) {
if (batch) {
rc = do_install();
}
else
rc = create_dialog();
}
if (!batch) {
while (!rc && WinGetMsg(hab, &q_mess, 0L, 0, 0))
WinDispatchMsg(hab, &q_mess);
WinDestroyWindow(hMain);
}
}
if (hlanguage)
DosFreeModule(hlanguage);
WinDestroyMsgQueue(hand_mq);
WinTerminate(hab);
return rc;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -