⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os2setup.c

📁 GSview 4.6 PostScript previewer。Ghostscript在MS-Windows, OS/2 and Unix下的图形化接口
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -