home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / MEDIT.LZH / FXG.CPP < prev    next >
C/C++ Source or Header  |  1996-07-05  |  5KB  |  169 lines

  1. #include <owl\owlpch.h>
  2. #pragma hdrstop
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <dos.h>
  6. #include <cstring.h>
  7. #include <dir.h>
  8. #include "matrix.h"
  9. #include "suflib.h"
  10. #include "parts.h"
  11. #include "motion.h"
  12. #include "mecha.h"
  13. #include "profile.h"
  14. #include "files.h"
  15.  
  16. #include "log.h"
  17.  
  18. #define MaxHistory (int)(64)
  19. static Mechanic *convertmecha[MaxHistory];
  20. static int nconvertmecha = 0;
  21.  
  22. static char *apindfile    = "_temp1.ind";
  23. static char *f2aindfile    = "_temp2.ind";
  24. static char *frmfile    = "_temp.frm";
  25. static char *afmfile    = "_temp.afm";
  26. static char *cMotionView = "_aplay.bat";
  27. static char *cSuf2Agc   = "suf2agc.exe";
  28. static char *cFrm2Afm   = "frm2afm.exe";
  29. static char *cBGload    = "bgldexec.exe";
  30. static char *cAfmView   = "afmpexec.exe";
  31. //static char *iSuf2Agc    = "s2a%d.ind";
  32. static char *fScaleDat    = "scale.dat";
  33.  
  34.  
  35. int FXG_MakeAGC(Mechanic *mecha, FILE *batfp, FILE *apfp, FILE *f2afp, int count)
  36. {
  37.     char str[128];
  38.     FILE *fp;
  39.     for (int i = 0; i < nconvertmecha; ++i) {
  40.         if (convertmecha[i] == mecha) {
  41.             strcpy(str, mecha->name);
  42.             int l = strlen(str);
  43.             if (l > 4 && str[l-4] == '.') {
  44.                 str[l-4] = '\0';
  45.             }
  46.             fprintf(f2afp, "%s%s.agc\n", fxg_agcdir.c_str(), str);
  47.             fprintf(apfp, "%s%s.agc\n", fxg_agcdir.c_str(), str);
  48.             return TRUE;
  49.         }
  50.     }
  51.     if (nconvertmecha < MaxHistory-1) {
  52.         convertmecha[nconvertmecha++] = mecha;
  53.     }
  54.  
  55.     sprintf(str, "%ss2a%d.ind", fxg_agcdir.c_str(), count);
  56.     fprintf(batfp, "%s%s @%s\n", fxgdir.c_str(), cSuf2Agc, str);
  57. //logprintf("open %s\n", str);
  58.     if ((fp = fopen(str, "w")) == NULL) {
  59.         return FALSE;
  60.     }
  61.     fprintf(fp, "%s\n", mecha->filename);
  62.     fprintf(fp, "%s\n", fxg_atrfile.c_str());
  63.     for (Parts *p = mecha->parts; p != NULL; p = p->next) {
  64.         for (Parts *op = mecha->parts; op != p && op != NULL; op = op->next) {
  65.             if (op->object == p->object) {
  66.                 break;
  67.             }
  68.         }
  69.         if (op == p || op == NULL) {
  70.             char *f = p->object->filename;
  71.             if (strncmpi(f, partsdir.c_str(), partsdir.length()) == 0) {
  72.                 fprintf(fp, "%s%s\n", simplepartsdir.c_str(), f+partsdir.length());
  73.             } else if (f[1] == ':' || f[0] == '\\') {
  74.                 fprintf(fp, "%s\n", f);
  75.             } else {
  76.                 fprintf(fp, "%s%s\n", simplepartsdir.c_str(), f);
  77.             }
  78.         }
  79.     }
  80.     strcpy(str, mecha->name);
  81.     int l = strlen(str);
  82.     if (l > 4 && str[l-4] == '.') {
  83.         str[l-4] = '\0';
  84.     }
  85.     fprintf(fp, "-o%s%s.agc\n", fxg_agcdir.c_str(), str);
  86.     fprintf(fp, "-z%s%s\n", fxg_agcdir.c_str(), fScaleDat);
  87.     fprintf(f2afp, "%s%s.agc\n", fxg_agcdir.c_str(), str);
  88.     fprintf(apfp, "%s%s.agc\n", fxg_agcdir.c_str(), str);
  89.     fclose(fp);
  90.     return TRUE;
  91. }
  92.  
  93. void FXGA_ShowMotion(Motion* motion, CameraMotion* camera, Vector& light)
  94. {
  95.     char str[128];
  96.     FILE *batfp;
  97.     FILE *apfp, *f2afp;
  98.  
  99.     static int first = FALSE;
  100.     if (nconvertmecha == 0) {
  101.         sprintf(str, "%s%s", fxg_agcdir.c_str(), fScaleDat);
  102.         unlink(str);
  103.     }
  104.  
  105.     sprintf(str, "%s%s", fxgdir.c_str(), cMotionView);
  106. //logprintf("open %s\n", str);
  107.     if ((batfp = fopen(str, "w")) == NULL) {
  108.         return;
  109.     }
  110.     sprintf(str, "%s%s", fxgdir.c_str(), apindfile);
  111. //logprintf("open %s\n", str);
  112.     if ((apfp = fopen(str, "w")) == NULL) {
  113.         fclose(batfp);
  114.         return;
  115.     }
  116.     sprintf(str, "%s%s", fxgdir.c_str(), f2aindfile);
  117. //logprintf("open %s\n", str);
  118.     if ((f2afp = fopen(str, "w")) == NULL) {
  119.         fclose(batfp);
  120.         fclose(apfp);
  121.         return;
  122.     }
  123.     sprintf(str, "%s%s", fxgdir.c_str(), frmfile);
  124.     Motion::FileWrite(motion, camera, light, str);
  125.  
  126.     fprintf(f2afp, "%s\n", str);
  127.  
  128.     int mechanics = 0;
  129.     for (Motion *m = motion; m != NULL; m = m->next) {
  130.         for (Motion *om = motion; om != m && om != NULL; om = om->next) {
  131.             if (om->mecha == m->mecha) {
  132.                 break;
  133.             }
  134.         }
  135.         if (m->mecha != NULL && (om == m || om == NULL)) {
  136.             if (FXG_MakeAGC(m->mecha, batfp, apfp, f2afp, mechanics++) == FALSE) {
  137.                 fclose(batfp);
  138.                 fclose(apfp);
  139.                 fclose(f2afp);
  140.                 return;
  141.             }
  142.         }
  143.     }
  144.  
  145.     fprintf(f2afp, "-o%s%s\n", fxgdir.c_str(), afmfile);
  146.     fprintf(f2afp, "-z%s%s\n", fxg_agcdir.c_str(), fScaleDat);
  147.     fclose(f2afp);
  148.  
  149.     fprintf(apfp, "%s%s\n", fxgdir.c_str(), afmfile);
  150.     fprintf(apfp, "%s\n", fxg_colfile.c_str());
  151.  
  152.     fclose(apfp);
  153.  
  154.     fprintf(batfp, "%s%s @%s%s\n", fxgdir.c_str(), cFrm2Afm, fxgdir.c_str(), f2aindfile);
  155. //    fprintf(batfp, "%s%s %s_a.TN8 %s_b.TN8 %s.TCO\n", fxgdir.c_str(), cBGload, bgfile, bgfile, bgfile);
  156.     if (first == FALSE) {
  157.         fprintf(batfp, "%s%s __star.bg8\n", fxgdir.c_str(), cBGload);
  158.         first = TRUE;
  159.     }
  160.     fprintf(batfp, "%s%s @%s%s\n", fxgdir.c_str(), cAfmView, fxgdir.c_str(), apindfile);
  161.  
  162.     fclose(batfp);
  163.  
  164.     sprintf(str, "%s%s", fxgdir.c_str(), cMotionView);
  165.     WinExec(str, SW_SHOWMINIMIZED);
  166. }
  167.  
  168.  
  169.