home *** CD-ROM | disk | FTP | other *** search
- /*------------------------------*/
- /* includes */
- /*------------------------------*/
-
- #include "portab.h" /* portable coding conv */
- #include "machine.h" /* machine depndnt conv */
- #include "obdefs.h" /* object definitions */
- #include "gembind.h" /* gem binding structs */
- #include "osbind.h" /* BDOS definitions */
- #include "gemdefs.h"
- #include "rsconv.h"
-
-
- /*------------------------------*/
- /* defines */
- /*------------------------------*/
-
- #define NIL -1
- #define DESK 0
- #define ARROW 0
- #define HOUR_GLASS 2
- #define END_UPDATE 0
- #define BEG_UPDATE 1
-
- typedef struct memform
- {
- WORD *mp;
- WORD fwp;
- WORD fh;
- WORD fww;
- WORD ff;
- WORD np;
- WORD r1;
- WORD r2;
- WORD r3;
- } MFDB;
-
- /*------------------------------*/
- /* Global */
- /*------------------------------*/
- GLOBAL WORD gl_apid;
-
- GLOBAL WORD contrl[11]; /* control inputs */
- GLOBAL WORD intin[80]; /* max string length */
- GLOBAL WORD ptsin[256]; /* polygon fill points */
- GLOBAL WORD intout[45]; /* open workstation output */
- GLOBAL WORD ptsout[12];
-
- GLOBAL WORD gl_wchar; /* character width */
- GLOBAL WORD gl_hchar; /* character height */
- GLOBAL WORD gl_wbox; /* box (cell) width */
- GLOBAL WORD gl_hbox; /* box (cell) height */
- GLOBAL WORD gem_handle; /* GEM handle */
- GLOBAL WORD vdi_handle; /* VDI handle */
- GLOBAL WORD work_out[57]; /* open virt workstation values */
- GLOBAL GRECT scrn_area; /* scrn area */
- GLOBAL MFDB scrn_mfdb; /* scrn memory def'n for blt */
- GLOBAL GRECT full; /* desktop size */
-
- /*------------------------------*/
- /* External */
- /*------------------------------*/
-
- EXTERN WORD desel_obj();
-
- /*------------------------------*/
- /* Local */
- /*------------------------------*/
-
- MLOCAL WORD native_in = TRUE; /* TRUE: input .RSC is native */
- /* FALSE: input .RSC is foreign */
- MLOCAL WORD conv_def = TRUE; /* TRUE: convert .DEF also */
- MLOCAL WORD new_dfn = FALSE; /* TRUE: use new symbol fmt */
- MLOCAL BYTE old_rsc[4] = "RSC"; /* new resource file extent */
- MLOCAL BYTE new_rsc[4] = "RS2"; /* new resource file extent */
- MLOCAL BYTE old_def[4] = "DEF"; /* new definition file extend */
- MLOCAL BYTE new_def[4] = "DF2"; /* new definition file extend */
- MLOCAL BYTE r_file[81]; /* resource file name */
- MLOCAL BYTE d_file[81]; /* definition file name */
- MLOCAL BYTE r2_file[81]; /* output resource name */
- MLOCAL BYTE d2_file[81]; /* output definition name */
- MLOCAL WORD r_hndl = -1; /* resource file handle */
- MLOCAL WORD d_hndl = -1; /* definition file handle */
- MLOCAL WORD r2_hndl = -1; /* output resource handle */
- MLOCAL WORD d2_hndl = -1; /* output definition handle */
-
- MLOCAL LONG f_err; /* file error */
- MLOCAL BYTE *head; /* location of buffer */
- MLOCAL LONG buff_size; /* size of buffer */
- MLOCAL BYTE buff[20]; /* def file work area */
- MLOCAL UWORD img_offset, addr; /* for image fixup */
- MLOCAL WORD img_odd; /* image fixup needed? */
- MLOCAL GRECT prog_rect; /* rectangle for prog indicator */
-
- /*------------------------------*/
- /* swap_bytes */
- /*------------------------------*/
- VOID
- swap_bytes(where, len)
- BYTE *where;
- WORD len;
- {
- BYTE swap;
-
- for (; len > 0; len -= 2)
- {
- swap = *where;
- *where = *(where + 1);
- *(where + 1) = swap;
- where += 2;
- }
- }
-
- /*------------------------------*/
- /* swap_words */
- /*------------------------------*/
- VOID
- swap_words(where, len)
- WORD *where;
- WORD len;
- {
- UWORD swap;
-
- for (; len > 0; len -= 4)
- {
- swap = *where;
- *where = *(where + 1);
- *(where + 1) = swap;
- where += 2;
- }
- }
-
- /*------------------------------*/
- /* swap_images */
- /*------------------------------*/
- VOID
- swap_images()
- {
- BITBLK *where;
- ICONBLK *where2;
- BYTE *taddr;
- WORD num;
- WORD wb, hl;
-
- where = (BITBLK *) (head + ((RSHDR *) head)->rsh_bitblk);
- num = ((RSHDR *) head)->rsh_nbb;
- for (; num--; where++)
- {
- taddr = where->bi_pdata;
- wb = where->bi_wb;
- hl = where->bi_hl;
- if ((LONG) taddr != -1L)
- {
- if (img_odd)
- where->bi_pdata = ++taddr;
- swap_bytes(head + taddr, wb * hl);
- }
- }
-
- where2 = (ICONBLK *) (head + ((RSHDR *) head)->rsh_iconblk);
- num = ((RSHDR *) head)->rsh_nib;
- for (; num--; where2++)
- {
- wb = (where2->ib_wicon + 7) >> 3;
- hl = where2->ib_hicon;
- taddr = where2->ib_pdata;
- if ((LONG) taddr != -1L)
- {
- if (img_odd)
- where2->ib_pdata = ++taddr;
- swap_bytes(head + taddr, wb * hl);
- }
- taddr = where2->ib_pmask;
- if ((LONG) taddr != -1L)
- {
- if (img_odd)
- where2->ib_pmask = ++taddr;
- swap_bytes(head + taddr, wb * hl);
- }
- }
- }
-
- /*------------------------------*/
- /* swap_trees */
- /*------------------------------*/
- VOID
- swap_trees()
- {
- BYTE *where;
- WORD size;
-
- where = head + ((RSHDR *) head)->rsh_trindex;
- size = ((RSHDR *) head)->rsh_ntree * sizeof(LONG);
- swap_bytes(where, size);
- swap_words((WORD *) where, size);
- }
-
- /*------------------------------*/
- /* swap_objs */
- /*------------------------------*/
- VOID
- swap_objs()
- {
- OBJECT *where;
- WORD num;
-
- where = (OBJECT *) (head + ((RSHDR *) head)->rsh_object);
- num = ((RSHDR *) head)->rsh_nobs;
- swap_bytes((BYTE *) where, num * sizeof(OBJECT));
- for (; num--; where++)
- swap_words((WORD *) &where->ob_spec, sizeof(LONG));
- }
-
- /*------------------------------*/
- /* swap_teds */
- /*------------------------------*/
- VOID
- swap_teds()
- {
- TEDINFO *where;
- WORD num;
-
- where = (TEDINFO *) (head + ((RSHDR *) head)->rsh_tedinfo);
- num = ((RSHDR *) head)->rsh_nted;
- swap_bytes((BYTE *) where, num * sizeof(TEDINFO));
- for (; num--; where++)
- {
- swap_words((WORD *) &where->te_ptext, sizeof(LONG));
- swap_words((WORD *) &where->te_ptmplt, sizeof(LONG));
- swap_words((WORD *) &where->te_pvalid, sizeof(LONG));
- }
- }
-
- /*------------------------------*/
- /* swap_ibs */
- /*------------------------------*/
- VOID
- swap_ibs()
- {
- ICONBLK *where;
- WORD num;
-
- where = (ICONBLK *) (head + ((RSHDR *) head)->rsh_iconblk);
- num = ((RSHDR *) head)->rsh_nib;
- swap_bytes((BYTE *) where, num * sizeof(ICONBLK));
- for (; num--; where++)
- {
- swap_words((WORD *) &where->ib_pdata, sizeof(LONG));
- swap_words((WORD *) &where->ib_pmask, sizeof(LONG));
- swap_words((WORD *) &where->ib_ptext, sizeof(LONG));
- }
- }
-
- /*------------------------------*/
- /* swap_bbs */
- /*------------------------------*/
- VOID
- swap_bbs()
- {
- BITBLK *where;
- WORD num;
-
- where = (BITBLK *) (head + ((RSHDR *) head)->rsh_bitblk);
- num = ((RSHDR *) head)->rsh_nbb;
- swap_bytes((BYTE *) where, num * sizeof(BITBLK));
- for (; num--; where++)
- swap_words((WORD *) &where->bi_pdata, sizeof(LONG));
- }
-
- /*------------------------------*/
- /* swap_fstr */
- /*------------------------------*/
- VOID
- swap_fstr()
- {
- BYTE *where;
- WORD size;
-
- where = head + ((RSHDR *) head)->rsh_frstr;
- size = ((RSHDR *) head)->rsh_nstring * sizeof(LONG);
- swap_bytes(where, size);
- swap_words((WORD *) where, size);
- }
-
- /*------------------------------*/
- /* swap_fimg */
- /*------------------------------*/
- VOID
- swap_fimg()
- {
- LONG where;
- WORD size;
-
- where = head + ((RSHDR *) head)->rsh_frimg;
- size = ((RSHDR *) head)->rsh_nimages * sizeof(LONG);
- swap_bytes(where, size);
- swap_words((WORD *) where, size);
- }
-
- /*------------------------------*/
- /* close_files */
- /*------------------------------*/
- VOID
- close_files()
- {
- if (r_hndl != -1)
- Fclose(r_hndl);
- if (d_hndl != -1)
- Fclose(d_hndl);
- if (r2_hndl != -1)
- Fclose(r2_hndl);
- if (d2_hndl != -1)
- Fclose(d2_hndl);
- r_hndl = d_hndl = r2_hndl = d2_hndl = -1;
- }
-
- /*------------------------------*/
- /* do_conv */
- /*------------------------------*/
- WORD
- do_conv()
- {
- BYTE *str;
- LONG size;
- WORD reply, nsym;
-
- r_file[0] = '\0';
-
- if (!get_file(old_rsc, r_file))
- return;
- if ((r_hndl = open_file(r_file)) == -1)
- return;
- if (conv_def)
- {
- new_ext(r_file, d_file, old_def);
- FOREVER {
- d_hndl = (WORD) Fopen(d_file, 0);
- if (d_hndl >= 0)
- break;
- rsrc_gaddr(R_STRING, NODEF, &str);
- reply = form_alert(1, str);
- if (reply == 3)
- {
- close_files();
- return;
- }
- if (reply == 1)
- {
- conv_def = FALSE;
- break;
- }
- /* if (reply == 2) */
- if (!get_file(old_def, d_file))
- break;
- }
- }
-
- graf_mouse(HOUR_GLASS, 0x0L);
- beg_prog(&prog_rect);
- set_prog(RSCREAD);
-
- f_err = Fread(r_hndl, (LONG) sizeof(RSHDR), head);
- if ( f_err < 0)
- {
- dos_error((WORD) f_err);
- return;
- }
-
- if (!native_in)
- swap_bytes(head, sizeof(RSHDR));
-
- size = ((RSHDR *) head)->rsh_rssize;
-
- if (buff_size < size)
- {
- graf_mouse(ARROW, 0x0L); /* Before alert */
- rsrc_gaddr(R_STRING, NOMEM, &str);
- form_alert(1, str);
- close_files();
- return;
- }
-
- f_err = Fread(r_hndl, size - sizeof(RSHDR), head + sizeof(RSHDR));
- if ( f_err < 0)
- {
- dos_error((WORD) f_err);
- return;
- }
-
- img_offset = ((RSHDR *) head)->rsh_imdata;
- if ( (img_odd = img_offset & 0x0001) )
- {
- set_prog(IMGALIGN);
- ((RSHDR *) head)->rsh_rssize = img_offset + 1;
- for (addr = ((RSHDR *) head)->rsh_frstr; --addr > img_offset; )
- *(head + addr) = *(head + addr - 1);
- }
-
- set_prog(BYTESWAP);
- if (native_in)
- swap_images();
-
- swap_trees();
- swap_objs();
- swap_teds();
- swap_ibs();
- swap_bbs();
- swap_fstr();
- swap_fimg();
-
- if (native_in)
- swap_bytes(head, sizeof(RSHDR));
- else
- swap_images();
-
- set_prog(RSCWRITE);
- new_ext(r_file, r2_file, new_rsc);
- if ( (r2_hndl = create_file(r2_file)) == -1)
- {
- close_files();
- return;
- }
- graf_mouse(HOUR_GLASS, 0x0L); /* Create_file could reset */
-
- f_err = Fwrite(r2_hndl, size, head);
- if ( f_err < 0)
- {
- dos_error((WORD) f_err);
- return;
- }
-
- if (!conv_def)
- {
- close_files();
- end_prog(&prog_rect);
- return;
- }
-
- set_prog(DEFREAD);
- new_ext(r_file, d2_file, new_def);
- if ( (d2_hndl = create_file(d2_file)) == -1)
- {
- close_files();
- return;
- }
-
- f_err = Fread(d_hndl, (LONG) sizeof(WORD), &nsym);
- if ( f_err < 0)
- {
- dos_error((WORD) f_err);
- return;
- }
-
-
- set_prog(BYTESWAP);
- reply = nsym;
- swap_bytes(&reply, 2);
-
- f_err = Fwrite(d2_hndl, (LONG) sizeof(WORD), new_dfn? &nsym: &reply);
- if ( f_err < 0)
- {
- dos_error((WORD) f_err);
- return;
- }
-
- if (!native_in || new_dfn)
- nsym = reply;
-
- for (; nsym--; )
- {
- if (!new_dfn) /* Spare words only if */
- /* using old format */
- if (!native_in)
- { /* insert spare word */
- reply = 0;
- f_err = Fwrite(d2_hndl, (LONG) sizeof(WORD), &reply);
- if ( f_err < 0)
- {
- dos_error((WORD) f_err);
- return;
- }
- }
- else
- { /* delete extra word */
- f_err = Fread(d_hndl, (LONG) sizeof(WORD), buff);
- if ( f_err < 0)
- {
- dos_error((WORD) f_err);
- return;
- }
- }
-
- f_err = Fread(d_hndl, (LONG) sizeof(WORD), buff);
- if ( f_err < 0)
- {
- dos_error((WORD) f_err);
- return;
- }
-
- if (!new_dfn) /* Just copy for new fmt */
- swap_bytes(buff, 2);
-
- f_err = Fwrite(d2_hndl, (LONG) sizeof(WORD), buff);
- if ( f_err < 0)
- {
- dos_error((WORD) f_err);
- return;
- }
- f_err = Fread(d_hndl, (LONG) (sizeof(WORD) + 10), buff);
- if ( f_err < 0)
- {
- dos_error((WORD) f_err);
- return;
- }
-
- if (!new_dfn)
- swap_bytes(buff, 2); /* only swap value */
-
- f_err = Fwrite(d2_hndl, (LONG) (sizeof(WORD) + 10), buff);
- if ( f_err < 0)
- {
- dos_error((WORD) f_err);
- return;
- }
- }
-
- set_prog(DEFWRITE);
- close_files();
- end_prog(&prog_rect);
- }
-
- /*------------------------------*/
- /* do_help */
- /*------------------------------*/
- VOID
- do_help()
- {
- OBJECT *tree;
- WORD obj;
-
- rsrc_gaddr(R_TREE, HELP, &tree);
- obj = hndl_dial(tree, 0, 0, 0, 0, 0);
- desel_obj(tree, obj);
- }
-
- /*------------------------------*/
- /* do_mode */
- /*------------------------------*/
- WORD
- do_mode()
- {
- OBJECT *tree;
- WORD obj;
- WORD xdial, ydial, wdial, hdial;
-
- rsrc_gaddr(R_TREE, MODE, &tree);
-
- sel_obj(tree, native_in? N2F: F2N);
- if (!conv_def)
- sel_obj(tree, DEFNO);
- else if (!new_dfn)
- sel_obj(tree, DEFYES);
- else
- sel_obj(tree, DFNYES);
- set_text(tree, RSC1, old_rsc, 4);
- set_text(tree, RSC2, new_rsc, 4);
- set_text(tree, DEF1, old_def, 4);
- set_text(tree, DEF2, new_def, 4);
-
- form_center(tree, &xdial, &ydial, &wdial, &hdial);
- form_dial(0, 0, 0, 0, 0, xdial, ydial, wdial, hdial);
- form_dial(1, 0, 0, 0, 0, xdial, ydial, wdial, hdial);
- objc_draw(tree, ROOT, MAX_DEPTH, xdial, ydial, wdial, hdial);
-
- while (TRUE)
- {
- obj = form_do(tree, 0) & 0x7FFF;
- if (obj == DEFYES)
- {
- if (strcmp(old_def, "DFN") == 0)
- {
- strcpy(old_def, "DEF");
- disp_obj(tree, DEF1);
- }
- }
- else if (obj == DFNYES)
- {
- if (strcmp(old_def, "DEF") == 0)
- {
- strcpy(old_def, "DFN");
- disp_obj(tree, DEF1);
- }
- }
- else
- break;
- }
-
- form_dial(2, 0, 0, 0, 0, xdial, ydial, wdial, hdial);
- form_dial(3, 0, 0, 0, 0, xdial, ydial, wdial, hdial);
-
- native_in = selected(tree, N2F);
- conv_def = !selected(tree, DEFNO);
- new_dfn = selected(tree, DFNYES);
-
- map_tree(tree, ROOT, NIL, desel_obj);
- return (obj);
- }
-
- /*------------------------------*/
- /* rscv_run */
- /*------------------------------*/
- WORD
- rscv_run()
- {
- WORD obj;
-
- FOREVER {
- obj = do_mode();
- if (obj == HELPMODE)
- do_help();
- else if (obj == CONVMODE)
- {
- do_conv();
- graf_mouse(ARROW, 0x0L);
- }
- else
- break;
- }
- }
-
- /*------------------------------*/
- /* rscv_term */
- /*------------------------------*/
- VOID
- rscv_term(term_type)
- WORD term_type;
- {
- switch (term_type) /* NOTE: all cases fall through */
- {
- case (0 /* normal termination */):
- Mfree(head);
- case (2):
- v_clsvwk( vdi_handle );
- case (3):
- rsrc_free();
- case (4):
- if (term_type)
- wind_update(END_UPDATE);
- appl_exit();
- case (5):
- break;
- }
- }
-
- /*------------------------------*/
- /* rscv_init */
- /*------------------------------*/
- WORD
- rscv_init()
- {
- WORD i;
- WORD work_in[11];
- LONG tree;
-
- appl_init(); /* initialize libraries */
- if (gl_apid == -1)
- return (5); /* No handles ! */
- graf_mouse(HOUR_GLASS, 0x0L);
- wind_update(BEG_UPDATE);
- if (!rsrc_load( "RSCONV.RSC" ))
- {
- graf_mouse(ARROW, 0x0L);
- form_alert(1,
- "[3][Fatal Error !|RSCONV.RSC|File Not Found][ Abort ]" );
- return(4); /* Can't find resource */
- }
-
- for (i=0; i<10; i++)
- {
- work_in[i]=1;
- }
- work_in[10]=2;
- gem_handle = graf_handle(&gl_wchar,&gl_hchar,&gl_wbox,&gl_hbox);
- vdi_handle = gem_handle;
- v_opnvwk(work_in,&vdi_handle,work_out); /* open virtual work stn*/
- if (vdi_handle == 0)
- return (3);
-
- vqt_attributes (vdi_handle, work_in);
-
- scrn_area.g_x = 0;
- scrn_area.g_y = 0;
- scrn_area.g_w = work_out[0] + 1;
- scrn_area.g_h = work_out[1] + 1;
-
- scrn_mfdb.np = work_out[4];
- scrn_mfdb.mp = 0x0L;
-
- wind_get(DESK, WF_WXYWH, &full.g_x, &full.g_y, &full.g_w, &full.g_h);
-
- vst_height(vdi_handle, work_in[7],
- &gl_wchar, &gl_hchar, &gl_wbox, &gl_hbox);
-
- buff_size = Malloc(-1L);
- head = Malloc(buff_size - 4000L);
-
- graf_mouse(ARROW,0x0L);
- wind_update(END_UPDATE);
- return(0);
- }
-
- /*------------------------------*/
- /* main */
- /*------------------------------*/
- main()
- {
- WORD rscv_code;
-
- if ( !(rscv_code = rscv_init()) ) /* initialization */
- rscv_run();
- rscv_term(rscv_code); /* termination */
- }
-