>>>>>>>>>>>>>>>>>>>>>>>>>> Sample C output file from RCS <<<<<<<<<<<<<<<<<<<< /* (Comments added) */ BYTE *rs_strings[] = { /* ASCII data */ "Title String", "Exit", "Centered Text", "", "", "Butt", "Tokyo", "", "Time: __:__:__", "999999", "", "Time: __:__:__ ", "999999", "New York"}; WORD IMAG0[] = { /* Bitmap for G_IMAGE */ 0x7FF, 0xFFFF, 0xFF80, 0xC00, 0x0, 0xC0, 0x183F, 0xF03F, 0xF060, 0x187F, 0xF860, 0x1860, 0x187F, 0xF860, 0x1860, 0x187F, 0xF860, 0x1860, 0x187F, 0xF860, 0x1860, 0x187F, 0xF860, 0x1860, 0x187F, 0xF860, 0x1860, 0x187F, 0xF860, 0x1860, 0x187F, 0xF860, 0x1860, 0x187F, 0xF860, 0x1860, 0x187F, 0xF860, 0x1860, 0x187F, 0xF860, 0x1860, 0x183F, 0xF03F, 0xF060, 0xC00, 0x0, 0xC0, 0x7FF, 0xFFFF, 0xFF80, 0x0, 0x0, 0x0, 0x3F30, 0xC787, 0x8FE0, 0xC39, 0xCCCC, 0xCC00, 0xC36, 0xCFCC, 0xF80, 0xC30, 0xCCCD, 0xCC00, 0x3F30, 0xCCC7, 0xCFE0, 0x0, 0x0, 0x0}; WORD IMAG1[] = { /* Mask for first icon */ 0x0, 0x0, 0x0, 0x0, 0x7FFE, 0x0, 0x1F, 0xFFFF, 0xFC00, 0xFF, 0xFFFF, 0xFF00, 0x3FF, 0xFFFF, 0xFFC0, 0xFFF, 0xFFFF, 0xFFF0, 0x3FFF, 0xFFFF, 0xFFFC, 0x7FFF, 0xFFFF, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7FFF, 0xFFFF, 0xFFFE, 0x3FFF, 0xFFFF, 0xFFFC, 0xFFF, 0xFFFF, 0xFFF0, 0x3FF, 0xFFFF, 0xFFC0, 0xFF, 0xFFFF, 0xFF00, 0x1F, 0xFFFF, 0xF800, 0x0, 0x7FFE, 0x0}; WORD IMAG2[] = { /* Data for first icon */ 0x0, 0x0, 0x0, 0x0, 0x3FFC, 0x0, 0xF, 0xC003, 0xF000, 0x78, 0x180, 0x1E00, 0x180, 0x180, 0x180, 0x603, 0x180, 0xC060, 0x1C00, 0x6, 0x38, 0x3000, 0x18C, 0xC, 0x60C0, 0x198, 0x306, 0x6000, 0x1B0, 0x6, 0x4000, 0x1E0, 0x2, 0xC000, 0x1C0, 0x3, 0xCFC0, 0x180, 0x3F3, 0xC000, 0x0, 0x3, 0x4000, 0x0, 0x2, 0x6000, 0x0, 0x6, 0x60C0, 0x0, 0x306, 0x3000, 0x0, 0xC, 0x1C00, 0x0, 0x38, 0x603, 0x180, 0xC060, 0x180, 0x180, 0x180, 0x78, 0x180, 0x1E00, 0xF, 0xC003, 0xF000, 0x0, 0x3FFC, 0x0}; WORD IMAG3[] = { /* Mask for second icon */ 0x0, 0x0, 0x0, 0x0, 0x7FFE, 0x0, 0x1F, 0xFFFF, 0xFC00, 0xFF, 0xFFFF, 0xFF00, 0x3FF, 0xFFFF, 0xFFC0, 0xFFF, 0xFFFF, 0xFFF0, 0x3FFF, 0xFFFF, 0xFFFC, 0x7FFF, 0xFFFF, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7FFF, 0xFFFF, 0xFFFE, 0x3FFF, 0xFFFF, 0xFFFC, 0xFFF, 0xFFFF, 0xFFF0, 0x3FF, 0xFFFF, 0xFFC0, 0xFF, 0xFFFF, 0xFF00, 0x1F, 0xFFFF, 0xF800, 0x0, 0x7FFE, 0x0}; WORD IMAG4[] = { /* Data for second icon */ 0x0, 0x0, 0x0, 0x0, 0x3FFC, 0x0, 0xF, 0xC003, 0xF000, 0x78, 0x180, 0x1E00, 0x180, 0x180, 0x180, 0x603, 0x180, 0xC060, 0x1C00, 0x6, 0x38, 0x3000, 0x18C, 0xC, 0x60C0, 0x198, 0x306, 0x6000, 0x1B0, 0x6, 0x4000, 0x1E0, 0x2, 0xC000, 0x1C0, 0x3, 0xCFC0, 0x180, 0x3F3, 0xC000, 0x0, 0x3, 0x4000, 0x0, 0x2, 0x6000, 0x0, 0x6, 0x60C0, 0x0, 0x306, 0x3000, 0x0, 0xC, 0x1C00, 0x0, 0x38, 0x603, 0x180, 0xC060, 0x180, 0x180, 0x180, 0x78, 0x180, 0x1E00, 0xF, 0xC003, 0xF000, 0x0, 0x3FFC, 0x0}; LONG rs_frstr[] = { /* Free string index - unused */ 0}; BITBLK rs_bitblk[] = { /* First entry is index to image data */ 0L, 6, 24, 0, 0, 0}; LONG rs_frimg[] = { /* Free image index - unused */ 0}; ICONBLK rs_iconblk[] = { 1L, 2L, 10L, 4096,0,0, 0,0,48,24, 9,24,30,8, /* First pointer is mask */ 3L, 4L, 17L, 4864,0,0, 0,0,48,24, 0,24,48,8}; /* Second is data, third */ /* is to title string */ TEDINFO rs_tedinfo[] = { 2L, 3L, 4L, 3, 6, 2, 0x1180, 0x0, -1, 14,1, /* First pointer is text */ 7L, 8L, 9L, 3, 6, 2, 0x2072, 0x0, -3, 11,1, /* Second is template */ 11L, 12L, 13L, 3, 6, 0, 0x1180, 0x0, -1, 1,15, /* Third is validation */ 14L, 15L, 16L, 3, 6, 1, 0x1173, 0x0, 0, 1,17}; OBJECT rs_object[] = { -1, 1, 3, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 18,12, /* Pointers are to: */ 2, -1, -1, G_STRING, NONE, NORMAL, 0x0L, 3,1, 12,1, /* rs_strings */ 3, -1, -1, G_BUTTON, 0x7, NORMAL, 0x1L, 5,9, 8,1, /* rs_strings */ 0, 4, 4, G_BOX, NONE, NORMAL, 0xFF1172L, 3,3, 12,5, 3, -1, -1, G_IMAGE, LASTOB, NORMAL, 0x0L, 3,1, 6,3, /* rs_bitblk */ -1, 1, 6, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 23,12, 2, -1, -1, G_TEXT, NONE, NORMAL, 0x0L, 0,1, 23,1, /* rs_tedinfo */ 6, 3, 5, G_IBOX, NONE, NORMAL, 0x1100L, 6,3, 11,5, 4, -1, -1, G_BUTTON, 0x11, NORMAL, 0x5L, 0,0, 11,1, /* rs_strings */ 5, -1, -1, G_BUTTON, 0x11, NORMAL, 0x6L, 0,2, 11,1, /* rs_strings */ 2, -1, -1, G_BOXCHAR, 0x11, NORMAL, 0x43FF1400L, 0,4, 11,1, 0, -1, -1, G_BOXTEXT, 0x27, NORMAL, 0x1L, 5,9, 13,1, /* rs_tedinfo */ -1, 1, 3, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 32,11, 2, -1, -1, G_ICON, NONE, NORMAL, 0x0L, 4,1, 6,4, /* rs_iconblk */ 3, -1, -1, G_FTEXT, EDITABLE, NORMAL, 0x2L, 12,2, 14,1, /* rs_tedinfo */ 0, 4, 4, G_FBOXTEXT, 0xE, NORMAL, 0x3L, 3,5, 25,4, /* rs_tedinfo */ 3, -1, -1, G_ICON, LASTOB, NORMAL, 0x1L, 1,0, 6,4}; /* rs_iconblk */ LONG rs_trindex[] = { /* Points to start of trees in */ 0L, /* rs_object */ 5L, 12L}; struct foobar { /* Temporary structure used by */ WORD dummy; /* RSCREATE when setting up image */ WORD *image; /* pointers. */ } rs_imdope[] = { 0, &IMAG0[0], 0, &IMAG1[0], 0, &IMAG2[0], 0, &IMAG3[0], 0, &IMAG4[0]}; /* Counts of structures defined */ #define NUM_STRINGS 18 #define NUM_FRSTR 0 #define NUM_IMAGES 5 #define NUM_BB 1 #define NUM_FRIMG 0 #define NUM_IB 2 #define NUM_TI 4 #define NUM_OBS 17 #define NUM_TREE 3 BYTE pname[] = "DEMO.RSC"; >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Title change utility <<<<<<<<<<<<<<<<<<<<< VOID set_text(tree, obj, str) LONG tree, str; WORD obj; { LONG obspec; obspec = LLGET(OB_SPEC(obj)); /* Get TEDINFO address */ LLSET(TE_PTEXT(obspec), str); /* Set new text pointer */ LWSET(TE_TXTLEN(obspec), LSTRLEN(str)); /* Set new length */ } >>>>>>>>>>>>>>>>>>>>>> Text edit code segment <<<<<<<<<<<<<<<<<<<<<<<<<< LONG tree, obspec; BYTE text[41]; rsrc_gaddr(R_TREE, DIALOG, &tree); /* Get tree address */ obspec = LLGET(OB_SPEC(EDITOBJ)); /* Get TEDINFO address */ LLSET(TE_PTEXT(obspec), ADDR(str)); /* Set new text pointer */ LWSET(TE_TXTLEN(obspec), 41); /* Set max length */ text[0] = '\0'; /* Make empty string */ >>>>>>>>>>>>>>>>>>>> Sample 68K only source code <<<<<<<<<<<<<<<<<<<<<< VOID set_text(tree, obj, str) OBJECT *tree; WORD obj; BYTE *str; { TEDINFO *obspec; obspec = (TEDINFO *) (tree + obj)->ob_spec; /* Get TEDINFO address */ obspec->te_ptext = str; /* Set new text pointer */ obspec->te_txtlen = strlen(str); /* Set new length */ } >>>>>>>>>>>>>>>>>>>>>>>>>>>> Symbol definitions <<<<<<<<<<<<<<<<<<<<<<<<< /* Window parts */ #define NAME 0x0001 #define CLOSER 0x0002 #define FULLER 0x0004 #define MOVER 0x0008 #define INFO 0x0010 #define SIZER 0x0020 #define UPARROW 0x0040 #define DNARROW 0x0080 #define VSLIDE 0x0100 #define LFARROW 0x0200 #define RTARROW 0x0400 #define HSLIDE 0x0800 #define WF_KIND 1 /* wind_get/set parameters */ #define WF_NAME 2 #define WF_INFO 3 #define WF_WXYWH 4 #define WF_CXYWH 5 #define WF_PXYWH 6 #define WF_FXYWH 7 #define WF_HSLIDE 8 #define WF_VSLIDE 9 #define WF_TOP 10 #define WF_FIRSTXYWH 11 #define WF_NEXTXYWH 12 #define WF_NEWDESK 14 #define WF_HSLSIZ 15 #define WF_VSLSIZ 16 /* window messages */ #define WM_REDRAW 20 #define WM_TOPPED 21 #define WM_CLOSED 22 #define WM_FULLED 23 #define WM_ARROWED 24 #define WM_HSLID 25 #define WM_VSLID 26 #define WM_SIZED 27 #define WM_MOVED 28 #define WM_NEWTOP 29 /* arrow messages */ #define WA_UPPAGE 0 #define WA_DNPAGE 1 #define WA_UPLINE 2 #define WA_DNLINE 3 #define WA_LFPAGE 4 #define WA_RTPAGE 5 #define WA_LFLINE 6 #define WA_RTLINE 7 #define R_TREE 0 /* Redraw definitions */ #define ROOT 0 #define MAX_DEPTH 8 /* update flags */ #define END_UPDATE 0 #define BEG_UPDATE 1 #define END_MCTRL 2 #define BEG_MCTRL 3 /* Mouse state changes */ #define M_OFF 256 #define M_ON 257 /* Object flags */ #define NONE 0x0 #define SELECTABLE 0x1 #define DEFAULT 0x2 #define EXIT 0x4 #define EDITABLE 0x8 #define RBUTTON 0x10 /* Object states */ #define SELECTED 0x1 #define CROSSED 0x2 #define CHECKED 0x4 #define DISABLED 0x8 #define OUTLINED 0x10 #define SHADOWED 0x20 #define G_BOX 20 #define G_TEXT 21 #define G_BOXTEXT 22 #define G_IMAGE 23 #define G_IBOX 25 #define G_BUTTON 26 #define G_BOXCHAR 27 #define G_STRING 28 #define G_FTEXT 29 #define G_FBOXTEXT 30 #define G_ICON 31 #define G_TITLE 32 /* Data structures */ typedef struct grect { int g_x; int g_y; int g_w; int g_h; } GRECT; typedef struct object { int ob_next; /* -> object's next sibling */ int ob_head; /* -> head of object's children */ int ob_tail; /* -> tail of object's children */ unsigned int ob_type; /* type of object- BOX, CHAR,...*/ unsigned int ob_flags; /* flags */ unsigned int ob_state; /* state- SELECTED, OPEN, ... */ long ob_spec; /* "out"- -> anything else */ int ob_x; /* upper left corner of object */ int ob_y; /* upper left corner of object */ int ob_width; /* width of obj */ int ob_height; /* height of obj */ } OBJECT; typedef struct text_edinfo { long te_ptext; /* ptr to text (must be 1st) */ long te_ptmplt; /* ptr to template */ long te_pvalid; /* ptr to validation chrs. */ int te_font; /* font */ int te_junk1; /* junk word */ int te_just; /* justification- left, right...*/ int te_color; /* color information word */ int te_junk2; /* junk word */ int te_thickness; /* border thickness */ int te_txtlen; /* length of text string */ int te_tmplen; /* length of template string */ } TEDINFO; /* "Portable" data definitions */ #define OB_NEXT(x) (tree + (x) * sizeof(OBJECT) + 0) #define OB_HEAD(x) (tree + (x) * sizeof(OBJECT) + 2) #define OB_TAIL(x) (tree + (x) * sizeof(OBJECT) + 4) #define OB_TYPE(x) (tree + (x) * sizeof(OBJECT) + 6) #define OB_FLAGS(x) (tree + (x) * sizeof(OBJECT) + 8) #define OB_STATE(x) (tree + (x) * sizeof(OBJECT) + 10) #define OB_SPEC(x) (tree + (x) * sizeof(OBJECT) + 12) #define OB_X(x) (tree + (x) * sizeof(OBJECT) + 16) #define OB_Y(x) (tree + (x) * sizeof(OBJECT) + 18) #define OB_WIDTH(x) (tree + (x) * sizeof(OBJECT) + 20) #define OB_HEIGHT(x) (tree + (x) * sizeof(OBJECT) + 22) #define TE_PTEXT(x) (x) #define TE_TXTLEN(x) (x + 24)