home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- * ececdos.c: DOSコマンド処理
- ******************************************************************************
- *
- *
- */
- #include <sxdef2.h>
- #include <stdio.h>
- #include <iocslib.h>
- #include <stdlib.h>
- #include <string.h>
- #include <io.h>
- #include <doslib.h>
- #include <event.h> /* イベントマンを利用するときに必要 */
- #include <sxgraph.h> /* グラフ系マネージャを利用するときに必要 */
- #include <window.h> /* ウィンドウマンを利用するときに必要 */
- #include <control.h> /* コントロールマンを利用するときに必要 */
- #include <dialog.h> /* ダイアログマンを利用するときに必要 */
- #include <task.h> /* タスクマンを利用するときに必要 */
- #include "DC.h" /* このプログラム固有のヘッダファイル */
-
- /******************************************************************************
- * execDos(): DOSコマンド処理用のバッチファイル作成
- ******************************************************************************
- * 引数: ComVal *pcv 共通変数へのポインタ
- */
- void execDos(ComVal *pcv, char *comPt, char *path, int type)
- {
- int len, i, j, drv, ii, ret, b_flag, b_no;
- FILE *fn, *fn2;
- char *str, *bufc;
- char com[256], com_drv[90], temp_path[90], temp_drv[5], filePath[256];
- char strbuf[90], buf[20][90];
- char tempfname[90],PathSet[256], buff[90], buff2[256], batfname[90];
- char bdrv[TS_NAMEMAX],bpath[TS_NAMEMAX],bnode[21],bext[5];
-
- temp_drv[0] = 0; /* カレントドライブを調べる */
- if (!strncmp(pcv->currentPath, pcv->a_drv, strlen(pcv->a_drv))) {
- strncpy(temp_drv, pcv->a_drv, 2);
- strcpy(com_drv, pcv->a_drv);
- drv = 1;
- } else if (!strncmp(pcv->currentPath, pcv->b_drv, strlen(pcv->b_drv))) {
- strncpy(temp_drv, pcv->b_drv, 2);
- strcpy(com_drv, pcv->b_drv);
- drv = 2;
- } else {
- strncpy(temp_drv, pcv->c_drv, 2);
- strcpy(com_drv, pcv->c_drv);
- drv = 3;
- }
-
- temp_drv[2] = 0;
-
- len = strlen(comPt); /* コマンドライン抽出 */
- for(i=0;i<len;i++) {
- if (*comPt == ':')
- break;
- comPt++;
- }
- comPt++;
- str = comPt;
- for(j=0;j<len-i;j++) {
- if (*comPt == ';')
- break;
- comPt++;
- }
- *comPt = 0;
- strcpy(com, str);
- replace(pcv, com, drv);
-
- len = strlen(com);
- bufc = com;
- comPt = com;
- j = 0;
- ii = 0;
- for(i=1;i<len+2;i++) {
- if (*comPt == 0 || *comPt == '|') {
- if (*comPt == '|') {
- comPt++;
- if (*comPt == ' ') {
- comPt++;
- }
- }
- buf[ii][0] = 0;
- strncpy(&buf[ii][0], bufc, i - j);
- buf[ii][i - j - 1] = 0;
- bufc = comPt;
- bufc++;
- j = i;
- ii++;
- }
- if (*comPt == 0)
- break;
- comPt++;
- }
-
- sprintf(batfname, "%s\\AUTOEXEC.BAT", pcv->a_drv);
- fn = fopen(batfname, "rt"); /* AUTOEXEC.BATからPATHの設定を読み込む */
- if (fn == NULL) {
- sprintf(buff, "%s\rが見つかりませんでした!", batfname);
- DMError(D_CONFIRM, buff);
- return;
- }
- while(fgets(filePath, 256, fn) != NULL) {
- stoupper(filePath);
- if (!strncmp(filePath, "PATH",4))
- break;
- }
- fclose(fn);
- replace(pcv, filePath, 1);
-
- b_flag = 0;
- b_no = 0;
- for(i=0;i<ii;i++) { /* パス指定検索 */
- strsfn(&buf[i][0], bdrv, bpath, bnode, bext);
- if (!strcmp(bext, "bat") || !strcmp(bext, "BAT")) {
- ret = TSSearchFile3(0, 2, &buf[i][0], buff, filePath, NULL);
- if (ret<0) {
- break;
- } else {
- b_flag = 1;
- b_no = i;
- break;
- }
- }
- }
-
- sprintf(tempfname, "%s%s", pcv->myPath, "DCV_COM.BAT");
- /* バッチファイル作成 */
- fn = fopen(tempfname, "wt");
- if (fn == NULL) {
- DMError(D_CONFIRM,"バッチファイル作成に失敗しました(1)!");
- return;
- }
-
-
- fprintf(fn, "ECHO OFF\n");
- fprintf(fn, "SET OLDPATH = %sPATH%s\n", "%", "%");
- fprintf(fn, "%s", filePath);
- fprintf(fn, "%s\n", temp_drv);
- structfname(pcv, path, "", temp_path);
- fprintf(fn, "CD %s\n", temp_path);
- if (b_flag) {
- for(i=0;i<b_no;i++) {
- fprintf(fn, &buf[i][0]);
- }
- fn2 = fopen(buff, "rt");
- if (fn2 == NULL) {
- DMError(D_CONFIRM,"バッチファイル作成に失敗しました(2)!");
- fclose(fn);
- return;
- }
- while(fgets(buff2, 256, fn2) != NULL) {
- replace(pcv, buff2, drv);
- fprintf(fn, "%s\n", buff2);
- }
- for(i=b_no+1;i<ii;i++) {
- fprintf(fn, &buf[i][0]);
- } fclose(fn2);
- } else {
- fprintf(fn, "%s\n", com);
- }
- fprintf(fn, "PATH = %sOLDPATH%s\n", "%", "%");
- fprintf(fn, "SET OLDPATH =\n");
- fprintf(fn, "\n");
- fclose(fn);
-
- }
-
- /******************************************************************************
- * replace(): パスを現状の環境に合わせて書き直す
- ******************************************************************************
- * 引数: ComVal *pcv 共通変数へのポインタ
- */
- void replace(ComVal *pcv, char *com, int drv)
- {
- char *comPt, *c_drv[4];
- char com2[256], d_drv[90];
- int path_start = 1;
-
- c_drv[1] = pcv->a_drv;
- c_drv[2] = pcv->b_drv;
- c_drv[3] = pcv->c_drv;
-
- comPt = com;
- while(*comPt) {
- if (*comPt == ' ')
- path_start = 0;
- if ((*comPt == '-') || (*comPt == '/'))
- path_start = 1;
- if (*comPt == '\\') {
- if (path_start) {
- if (com == comPt) {
- sprintf(com2, "%s%s", c_drv[drv], comPt++);
- comPt += strlen(c_drv[drv]) - 1;
- } else {
- *comPt++ = 0;
- sprintf(com2, "%s%s\\%s", com, c_drv[drv], comPt++);
- comPt += strlen(c_drv[drv]);
- }
- strcpy(com, com2);
- path_start = 0;
- }
- }
- if (((*comPt == ' ') || (*comPt == '|')) && *(comPt+1) == '\\') {
- if (*comPt == '|') {
- *comPt++ = 0;
- sprintf(com2, "%s|%s%s", com, c_drv[drv], comPt++);
- } else {
- *comPt++ = 0;
- sprintf(com2, "%s %s%s", com, c_drv[drv], comPt++);
- }
- comPt += strlen(c_drv[drv]);
- strcpy(com, com2);
- }
- if ((*comPt == 'A' || *comPt == 'B' || *comPt == 'a' || *comPt == 'b') && *(comPt+1) == ':') {
- if (*comPt == 'A' || *comPt == 'a') {
- drv = 1;
- } else {
- drv = 2;
- }
- *comPt = 0;
- comPt += 2;
- if (*comPt == '\\') {
- if (*(comPt-3) == ' ') {
- sprintf(com2, "%s %s%s", com, c_drv[drv], comPt++);
- comPt += strlen(c_drv[drv]) - 1;
- } else {
- sprintf(com2, "%s%s%s", com, c_drv[drv], comPt++);
- comPt += strlen(c_drv[drv]) - 2;
- }
- strcpy(com, com2);
- } else {
- *d_drv = 0;
- strncpy(d_drv, c_drv[drv], 2);
- d_drv[2] = 0;
- if (*(comPt-3) == ' ') {
- sprintf(com2, "%s %s||CD %s%s", com, d_drv, c_drv[drv], comPt++);
- comPt += strlen(c_drv[drv]) + 2 + 5;
- } else {
- sprintf(com2, "%s%s||CD %s%s", com, d_drv, c_drv[drv], comPt++);
- comPt += strlen(c_drv[drv]) + 2 + 5 - 1;
- }
- strcpy(com, com2);
- }
- path_start = 0;
- }
- comPt++;
- }
- }