/*********************************************************************/ /* SAMPLE .WNX APPLICATION SKELETON */ /* portions borrowed from: */ /* started 5/28/85 R.Z. Copyright ATARI Corp. 1985 */ /*********************************************************************/ /*********************************************************************/ /* INCLUDE FILES */ /*********************************************************************/ #include #include #include #include #include #include /*********************************************************************/ /* DEFINES */ /*********************************************************************/ #define TRUE 1 #define FALSE 0 #define ACCNAME " File Converter " #define WI_KIND (SIZER|MOVER|FULLER|CLOSER|NAME) #define NO_WINDOW (-1) #define MIN_WIDTH (2*gl_wbox) #define MIN_HEIGHT (3*gl_hbox) /*********************************************************************/ /* EXTERNALS */ /*********************************************************************/ extern int gl_apid,_app,errno; extern long base,stksize,stack; extern struct __c { int *cb_pcontrol; int *cb_pglobal; int *cb_pintin; int *cb_pintout; long *cb_padrin; long *cb_padrout; } _c, *_ad_c; extern int control[], global[]; extern int_in[], int_out[]; extern long addr_in[], addr_out[]; /*********************************************************************/ /* GLOBAL VARIABLES */ /*********************************************************************/ long oldstack; int gl_hchar; int gl_wchar; int gl_wbox; int gl_hbox; /* system sizes */ int phys_handle; /* physical workstation handle */ int handle; /* virtual workstation handle */ int wi_handle; /* window handle */ int top_window; /* handle of topped window */ int xdesk,ydesk,hdesk,wdesk; int xold,yold,hold,wold; int xwork,ywork,hwork,wwork; /* desktop and work areas */ int msgbuff[8]; /* event message buffer */ int keycode; /* keycode returned by event-keyboard */ int mx,my; /* mouse x and y pos. */ int butdown; /* button state tested for, UP/DOWN */ int ret; /* dummy return variable */ int hidden; /* current state of cursor */ int fulled; /* current state of window */ int contrl[12]; int intin[128]; int ptsin[128]; int intout[128]; int ptsout[128]; /* storage wasted for idiotic bindings */ int work_in[11]; /* Input to GSX parameter array */ int work_out[57]; /* Output from GSX parameter array */ int pxyarray[10]; /* input point array */ int menu_id; xesparmblk xparmblk; int current_type=0; /* Defaults to C code */ OBJECT *treeptr; typedef struct{ char dta_res[21]; char dta_attrib[1]; int dta_time[1]; int dta_date[1]; long dta_size[1]; char dta_name[14]; }newdta; #include "D:\\WNX_DEV\\WERCS\\CONVERT.H" #include "D:\\WNX_DEV\\WERCS\\CONVERT.C" void wnx_button() { /* Finds out what was clicked on and does what's necessary */ xes_xformdo(-1,treeptr,xparmblk.WNX_out[5],&xparmblk); switch(xparmblk.WNX_out[5]){ case _C: { current_type=0; break; } case _devpac: { current_type=1; break; } case _list: { current_type=2; break; } case convertit: { program(); treeptr[convertit].ob_state &= ~SELECTED; xes_draw(convertit,1,&xparmblk); break; } } } open_vwork() { int i; for(i=0;i<10;work_in[i++]=1); work_in[10]=2; handle=phys_handle; v_opnvwk(work_in,&handle,work_out); } void prg_acc_startup() { appl_init(); phys_handle=graf_handle(&gl_wchar,&gl_hchar,&gl_wbox,&gl_hbox); open_vwork(); } multi() { int event; while (TRUE) { /* currently only messages... could change this to an evnt_mesag call, but I like to keep it open... */ event = evnt_multi(MU_MESAG, 1,1,1, 0,0,0,0,0, 0,0,0,0,0, msgbuff,0,0,&mx,&my,&ret,&ret,&keycode,&ret); switch(msgbuff[0]){ case AC_OPEN: program(); break; } } } fix_path_name(p_ptr,n_ptr,f_ptr) register char *p_ptr,*n_ptr,*f_ptr; { while (*p_ptr) { *f_ptr=*p_ptr; ++f_ptr; ++p_ptr; } while (*f_ptr!='\\') --f_ptr; ++f_ptr; while (*n_ptr) { *f_ptr=*n_ptr; ++n_ptr; ++f_ptr; } *f_ptr=0; } stopme() { if (_app==-1){ xparmblk.WNX_tcount=10; xes_submit(&xparmblk); } } uc2str(in,begin1) unsigned char *in,begin1[]; { int i; unsigned char c[4]; sprintf(c,"%d",*in); strcat(begin1,c); } convert2C(f_name,name,size) char *f_name; char *name[14]; long size; { char *in; char filename[144],arrayname[11]; if (in=(char *)Malloc(size)){ /* Do the conversion here */ int i,j,inhandle,outhandle; long temp1,temp2,fseekptr=0; char begin1[80],begin2[80],begin3[80],begin4[80]; inhandle = Fopen(f_name,0); if (inhandle<0) return FALSE; temp1 = Fread(inhandle,size,in); if (temp1!=size) return FALSE; Fclose(inhandle); strcpy(filename,f_name); i=0; while (filename[i]) i++; while (filename[i]!='\\') i--; while (filename[i]!='.' & filename[i]!=0) i++; if (filename[i+1]!='C' & (current_type==0)){ filename[i+1]='C'; filename[i+2]=0; } else if(filename[i+1]!='S' & (current_type==1)){ filename[i+1]='S'; filename[i+2]=0; } else{ filename[i+1]='O'; filename[i+2]='O'; filename[i+3]='P'; filename[i+4]=0; } outhandle = Fcreate(filename,0); if (outhandle<0) return FALSE; /* fix the array name up... */ strcpy(arrayname,name); i=0; while (arrayname[i]!='.' & arrayname[i]!=0) i++; arrayname[i]=0; switch (current_type){ case 0:{ /* C Declaration */ strcpy(begin1,"/* This is a C code representation of the file:\n"); strcpy(begin2," "); strcat(begin2,f_name); strcat(begin2,"\n"); strcpy(begin3," ...as an array of unsigned character (bytes) */\n\n"); strcpy(begin4,"unsigned char "); strcat(begin4,arrayname); strcat(begin4,"[] = {"); break; } case 1:{ /* Assembler (DevPac ST) */ strcpy(begin1,"; This is an assembler representation of the file:\n"); strcpy(begin2,"; "); strcat(begin2,f_name); strcat(begin2,"\n"); strcpy(begin3,"; ...as an array of bytes.\n\n"); strcpy(begin4,arrayname); strcat(begin4,":"); break; } case 3:{ begin1[0]=0; begin2[0]=0; begin3[0]=0; begin4[0]=0; break; } } temp2=(long)strlen(begin1); if (temp2!=(Fwrite(outhandle,temp2,begin1))) return FALSE; Fclose(outhandle); fseekptr += temp2; outhandle = Fopen(filename,2); if (outhandle<0) return FALSE; temp2=(long)strlen(begin2); Fseek(fseekptr,outhandle,0); Fwrite(outhandle,temp2,begin2); Fclose(outhandle); fseekptr += temp2; outhandle = Fopen(filename,2); if (outhandle<0) return FALSE; temp2=(long)strlen(begin3); Fseek(fseekptr,outhandle,0); Fwrite(outhandle,temp2,begin3); Fclose(outhandle); fseekptr += temp2; outhandle = Fopen(filename,2); if (outhandle<0) return FALSE; temp2=(long)strlen(begin4); Fseek(fseekptr,outhandle,0); Fwrite(outhandle,temp2,begin4); Fclose(outhandle); fseekptr += temp2; j=0; for(i=0;idta_size); xparmblk.WNX_flags=XES_LINK|XES_TIMER; convert2C(fullname,name,size); xparmblk.WNX_flags=XES_BUTTON; /* If not a program, don't keep looping like this */ if (_app!=1) button = FALSE; } } } } /****************************************************************/ /* Accessory Init. Until First Event_Multi */ /****************************************************************/ main() { switch(_app) { case -1: { /* WNX */ strcpy(xparmblk.WNX_idname,"File Converter"); xes_init(&xparmblk); /* A .WNX doesn't have the variable __c, which is its AES parameter block, fixed up during an appl_init, so I have to do it myself. */ _c.cb_pcontrol=control; _c.cb_pglobal=global; _c.cb_pintin=int_in; _c.cb_pintout=int_out; _c.cb_padrin=addr_in; _c.cb_padrout=addr_out; _ad_c=&_c; xes_genv(&xparmblk); xes_pwindow(&xparmblk); xes_rsrcinit(-1,2,CONVERT,&xparmblk); treeptr=*(OBJECT **)&xparmblk.WNX_out[1]; treeptr[_C].ob_state = SELECTED; phys_handle=xparmblk.WNX_grafhandle; xparmblk.WNX_flags=XES_BUTTON; /* button events only */ xparmblk.WNX_broutine=wnx_button; xes_submit(&xparmblk); break; } #ifdef LASERC default: { _app=1; prg_acc_startup(); program(); } #else case 1: { /* PROGRAM */ prg_acc_startup(); program(); break; } case 0: { /* ACCESSORY */ prg_acc_startup(); menu_id=menu_register(gl_apid,ACCNAME); multi(); break; } #endif } }