#include #include #include #include GLREF_D VOID *DatCommandPtr; LOCAL_D VOID *fcb; /* handle of resource file */ LOCAL_D UWORD resoff; /* offset to resource file within .img file */ LOCAL_D UWORD ixpos; /* offset to index table within resource file */ LOCAL_D TEXT buf[80]; /* scratch buffer used for resources loaded */ LOCAL_C VOID SeekToPos(UWORD roff) /* Position to offset roff within the resource file */ { LONG ioff; /* offset within image file */ ioff=resoff+roff; p_seek(fcb,P_FABS,&ioff); } LOCAL_C VOID InitRsc(VOID) /* Open resource file at add-file slot 2 inside own .img file. Set up the values of fcb, resoff, and ixpos */ { ImgHeader head; p_open(&fcb,DatCommandPtr,P_FRANDOM|P_FSTREAM|P_FSHARE); p_read(fcb,&head,sizeof(head)); resoff=head.Add[1].offset; SeekToPos(0); p_read(fcb,&ixpos,2); } LOCAL_C TEXT *ReadRsc(INT i) /* Returns pointer to buffer containing resource i. Note that the static buffer buf[] is used in every case. */ { UWORD tmp[2]; /* section of index table */ SeekToPos(ixpos+((i-1)*2)); /* position into index table */ p_read(fcb,&tmp[0],4); SeekToPos(tmp[0]); p_read(fcb,&buf[0],tmp[1]-tmp[0]); return(&buf[0]); } GLDEF_C INT main(VOID) { InitRsc(); p_printf("Resource 1 is %s",ReadRsc(1)); p_printf("Resource 2 is %s",ReadRsc(2)); p_printf("Press any key to exit"); p_getch(); return(0); }