1818#include " ../token.h"
1919#include " ../ahtobj.h"
2020
21- #define DPM_SUPPORT // DPMファイルマネージャをサポート
21+ // #define DPM_SUPPORT // DPMファイルマネージャをサポート
22+ #define DPM2_SUPPORT // DPM2ファイルマネージャをサポート
23+
24+ #ifdef DPM_SUPPORT
2225#include " ../win32dll/dpm.h"
26+ #endif
27+
28+ #define DPM2_SUPPORT // DPM2ファイルマネージャをサポート
29+ #include " ../../hsp3/filepack.h"
30+ #define PACKFILE " packfile"
31+ #define DPMFILE " data"
32+
2333
2434#define EXPORT extern " C" EMSCRIPTEN_KEEPALIVE
2535#define BOOL int
@@ -37,6 +47,10 @@ static CHsc3 *hsc3=NULL;
3747
3848extern char *hsp_prestr[];
3949
50+ #ifdef DPM2_SUPPORT
51+ static FilePack filepack; // File Pack Manager
52+ #endif
53+
4054int main ()
4155{
4256 hsc3 = new CHsc3;
@@ -155,13 +169,22 @@ EXPORT BOOL hsc_comp ( int p1, int p2, int p3, int p4 )
155169 // hsc_comp mode,ppopt,dbgopt (type0)
156170 // ( mode: 1=debug/0=no debug )
157171 // ( 2=preprocessor only )
172+ // ( 4=UTF8 output mode )
173+ // ( 8=strmap output mode )
174+ // ( 16=keyword list mode )
158175 // ( ppopt = preprocessor option )
159176 // ( 0=default/1=ver2.6 mode )
177+ // ( 32=UTF8 input mode )
160178 // ( dbgopt = debug window option )
161179 // ( 0=default/1=debug mode )
162180/*
163- int st;
164- st=tcomp_main( rname, fname, oname, mesbuf, p1, compath );
181+
182+ p1が1(bit0)の場合は、デバッグ情報が付加されます。
183+ p1が2(bit1)の場合はプリプロセス処理のみ行います。
184+ p1が4(bit2)の場合は文字列データをUTF-8コードに変換して出力します。
185+ p1が8(bit3)の場合は使用している文字列データファイル(strmap)を出力します
186+ p1が16(bit4)の場合はキーワード解析リストを出力します
187+
165188*/
166189 int st;
167190 int ppopt;
@@ -212,14 +235,19 @@ EXPORT BOOL pack_ini ( BMSCR *bm, char *p1, int p2, int p3 )
212235 //
213236 // pack_ini "src-file" (type6)
214237 //
215- #ifdef DPM_SUPPORT
216- strcpy (fname,p1);
238+ strcpy (fname, p1);
217239 cutext (fname);
218- if ( hsc3== NULL ) Alert ( " #No way." );
240+ if (hsc3 == NULL ) Alert (" #No way." );
219241 hsc3->ResetError ();
242+ opt1 = 640 ; opt2 = 480 ; opt3 = 0 ;
243+ strcpy (hspexe, " hsprt" );
244+
245+ #ifdef DPM_SUPPORT
220246 dpmc_ini ( hsc3->errbuf , fname );
221- opt1=640 ;opt2=480 ;opt3=0 ;
222- strcpy (hspexe," hsprt" );
247+ #endif
248+ #ifdef DPM2_SUPPORT
249+ filepack.Reset ();
250+ filepack.SetErrorBuffer (hsc3->errbuf );
223251#endif
224252 return 0 ;
225253}
@@ -231,10 +259,28 @@ EXPORT BOOL pack_view ( int p1, int p2, int p3, int p4 )
231259 // pack_view (type0)
232260 //
233261 int st;
262+ st = 0 ;
234263#ifdef DPM_SUPPORT
235264 st = dpmc_view ();
236- #else
237- st = 0 ;
265+ #endif
266+ #ifdef DPM2_SUPPORT
267+ char dpmname[HSP_MAX_PATH];
268+ strcpy (dpmname,fname);
269+ strcat (dpmname, " .dpm" );
270+ char tmp[1024 ];
271+
272+ if (p1 == 0 ) p1 = -1 ;
273+ int res = filepack.LoadPackFile (dpmname, p1);
274+ if (res<0 ) {
275+ sprintf (tmp," #Error %d in loading [%s]." ,res, dpmname);
276+ filepack.Print (tmp);
277+ st = 1 ;
278+ }
279+ else {
280+ sprintf (tmp, " #[%s] Loaded." , dpmname);
281+ filepack.Print (tmp);
282+ filepack.PrintFiles ();
283+ }
238284#endif
239285 return -st;
240286}
@@ -248,11 +294,22 @@ EXPORT BOOL pack_make ( int p1, int p2, int p3, int p4 )
248294 // key : (0=Default/other=New Seed)
249295 //
250296 int st;
297+ st = 0 ;
251298#ifdef DPM_SUPPORT
252299 if ( p2 != 0 ) dpmc_dpmkey ( p2 );
253300 st=dpmc_pack (p1);
301+ #endif
302+
303+ #ifdef DPM2_SUPPORT
304+ if (p2 == 0 ) p2 = -1 ;
305+ #ifdef HSPWIN
306+ p1 = (int )GetTickCount (); // Windowsの場合はtickをシード値とする
254307#else
255- st = 0 ;
308+ p1 = (int )time (0 ); // Windows以外のランダムシード値
309+ #endif
310+ if (filepack.SavePackFile (fname, PACKFILE, p1, p2) < 0 ) {
311+ st = 1 ;
312+ }
256313#endif
257314 return -st;
258315}
@@ -286,10 +343,9 @@ EXPORT BOOL pack_exe ( int p1, int p2, int p3, int p4 )
286343 // pack_exe mode (type0)
287344 //
288345 int st;
346+ st = 0 ;
289347#ifdef DPM_SUPPORT
290348 st=dpmc_mkexe (p1,hspexe,opt1,opt2,opt3);
291- #else
292- st = 0 ;
293349#endif
294350 return -st;
295351}
@@ -301,10 +357,14 @@ EXPORT BOOL pack_get ( BMSCR *bm, char *p1, int p2, int p3 )
301357 // pack_get "get-file" (type6)
302358 //
303359 int st;
360+ st = 0 ;
304361#ifdef DPM_SUPPORT
305362 st=dpmc_get (p1);
306- #else
307- st = 0 ;
363+ #endif
364+ #ifdef DPM2_SUPPORT
365+ if (filepack.ExtractFile (p1,NULL ,p2) < 0 ) {
366+ st = 1 ;
367+ }
308368#endif
309369 return -st;
310370}
@@ -374,15 +434,33 @@ EXPORT BOOL hsc3_make ( BMSCR *bm, char *p1, int p2, int p3 )
374434 hsc3->ClosePackfile ();
375435
376436 // exeを作成
437+ st = 0 ;
377438#ifdef DPM_SUPPORT
378439 dpmc_ini ( hsc3->errbuf , fname );
379440 st=dpmc_pack ( 0 );
380441 if ( st ) return -st;
381442 st=dpmc_mkexe ( type, hspexe, opt1, opt2, opt3 );
382443 strcat ( fname, " .dpm" );
383444 delfile ( fname );
445+ #endif
446+ #ifdef DPM2_SUPPORT
447+ int myseed1,myseed2;
448+ #ifdef HSPWIN
449+ myseed1 = (int )GetTickCount (); // Windowsの場合はtickをシード値とする
384450#else
385- st = 0 ;
451+ myseed1 = (int )time (0 ); // Windows以外のランダムシード値
452+ #endif
453+ myseed2 = hsp3_flength (PACKFILE);
454+
455+ filepack.Reset ();
456+ filepack.SetErrorBuffer (hsc3->errbuf );
457+ st = filepack.SavePackFile (fname, (char *)PACKFILE, myseed1, myseed2);
458+ if (st < 0 ) {
459+ return -1 ;
460+ }
461+ st = filepack.MakeEXEFile (type, hspexe, fname, myseed2, opt1, opt2, opt3);
462+ strcat (fname, " .dpm" );
463+ delfile ( fname );
386464#endif
387465 return -st;
388466}
0 commit comments