home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 74 / af074a.adf / archives / af74a3.lzx / Typeface / Source / typeface.h < prev    next >
C/C++ Source or Header  |  1995-06-08  |  7KB  |  264 lines

  1. #include <stdarg.h>
  2. #include <string.h>
  3. #include <clib/alib_protos.h>
  4. #include <clib/asl_protos.h>
  5. #include <clib/bgui_protos.h>
  6. #include <clib/diskfont_protos.h>
  7. #include <clib/dos_protos.h>
  8. #include <clib/exec_protos.h>
  9. #include <clib/graphics_protos.h>
  10. #include <clib/intuition_protos.h>
  11. #include <clib/utility_protos.h>
  12. #include <exec/exec.h>
  13. #include <graphics/gfxbase.h>
  14. #include <graphics/gfxmacros.h>
  15. #include <intuition/icclass.h>
  16. #include <intuition/intuitionbase.h>
  17. #include <libraries/bgui_macros.h>
  18.  
  19. #define PROJECT_MENU \
  20.   Title("Project"), \
  21.     Item("Open Font...","O",ID_OPEN), \
  22.     Item("Save Font...","S",ID_SAVE), \
  23.     Item("Change Dir...","D",ID_CHANGEDIR), \
  24.     ItemBar, \
  25.     Item("Edit Font...","E",ID_EDITFONT), \
  26.     ItemBar, \
  27.     Item("Preferences...","P",ID_PREFS), \
  28.     Item("About...","?",ID_ABOUT), \
  29.     ItemBar, \
  30.     Item("Quit","Q",ID_QUIT)
  31. #define CHARACTER_MENU \
  32.   Title("Character"), \
  33.     Item("Copy","C",ID_COPY), \
  34.     Item("Paste","V",ID_PASTE), \
  35.     ItemBar, \
  36.     Item("Move Left",NULL,ID_MOVEL), \
  37.     Item("Move Right",NULL,ID_MOVER), \
  38.     Item("Move Up",NULL,ID_MOVEU), \
  39.     Item("Move Down",NULL,ID_MOVED), \
  40.     ItemBar, \
  41.     Item("Change Width...","W",ID_WIDTHC), \
  42.     Item("Kerning...","K",ID_KERNING)
  43.  
  44. #define NAME "Typeface"
  45. #define MAX(a,b) (((a) > (b)) ? (a) : (b))
  46. #define MIN(a,b) (((a) < (b)) ? (a) : (b))
  47.  
  48. struct Character
  49. {
  50.   UWORD chr_Width,chr_Height;
  51.   UBYTE *chr_Data;
  52. };
  53.  
  54. struct Preferences
  55. {
  56.   UWORD Version;
  57.   ULONG Flags, ScrModeID, ScrDepth;
  58.   ULONG VecHeight, PixelX, PixelY;
  59.   ULONG SaveTo;
  60. };
  61.  
  62. #define PREFS_CUSTOMSCREEN    (1<<0)
  63. #define PREFS_PIXELBORDER    (1<<1)
  64.  
  65. /* typeface.c */
  66.  
  67. enum id { ID_OPEN = 1,
  68.       ID_SAVE,
  69.       ID_CHANGEDIR,
  70.       ID_EDITFONT,
  71.       ID_PREFS,
  72.       ID_ABOUT,
  73.       ID_QUIT,
  74.       ID_CHARS,
  75.       ID_CHARSCROLL,
  76.       ID_EDIT,
  77.       ID_WIDTHL,
  78.       ID_WIDTHR,
  79.       ID_WIDTHC,
  80.       ID_MOVEL,
  81.       ID_MOVER,
  82.       ID_MOVEU,
  83.       ID_MOVED,
  84.       ID_KERNING,
  85.       ID_COPY,
  86.       ID_PASTE,
  87.       ID_ACCEPT,
  88.       ID_CANCEL,
  89.       ID_PROP,
  90.       ID_HEIGHT,
  91.       ID_WIDTH,
  92.       ID_BASELINE,
  93.       ID_SMEAR,
  94.       ID_NORMAL,
  95.       ID_BOLD,
  96.       ID_ITALIC,
  97.       ID_ULINE,
  98.       ID_EXTEND,
  99.       ID_REVERSE,
  100.       ID_ASPECT,
  101.       ID_VECHEIGHT,
  102.       ID_PIXELWIDTH,
  103.       ID_PIXELHEIGHT,
  104.       ID_PIXELBORDER,
  105.       ID_ASSIGNSTR,
  106.       ID_ASSIGNPATH,
  107.       ID_ASSIGN,
  108.       ID_ASSIGNADD,
  109.       ID_CHARWIDTH,
  110.       ID_WIDTHPOS,
  111.       ID_SPACE,
  112.       ID_KERN,
  113.       ID_CUSTOM,
  114.       ID_CHOOSE,
  115.       ID_SAVETO,
  116.       ID_USE,
  117.       ID_FONTNAME,
  118.       ID_GETSAVEDIR,
  119.       ID_FIRST,
  120.       ID_LAST,
  121.       ID_KERNTABLE,
  122.       ID_SAVEDIR,
  123.       ID_BLANK };
  124.  
  125. enum scroll { GADG_HORIZ,
  126.           GADG_VERT,
  127.           GADG_LEFT,
  128.           GADG_RIGHT,
  129.           GADG_UP,
  130.           GADG_DOWN,
  131.           GADG_NONE };
  132.  
  133. #define GETBIT(buffer,offset) \
  134.   ((((*((UBYTE *)(buffer)+((offset)>>3)))&(128>>((offset)&7))) != 0) \
  135.   ? 1 : 0)
  136.  
  137. struct charDef
  138. {
  139.   WORD charOffset,charBitWidth;
  140. };
  141.  
  142. void Setup(void);
  143. void SetupScreen(void);
  144. void Quit(void);
  145. void QuitScreen(void);
  146. void MsgLoop(void);
  147. ULONG CheckObjMsg(struct Window *wnd, Object *obj);
  148. void CheckOpenCharWin(ULONG pressed);
  149. void SharedMsgs(ULONG code,struct CharNode *node);
  150. void Error(char *message);
  151. void ShowReq(char *text,char *gadgets,...);
  152. void ClrDisposeObject(Object **obj);
  153. void ClrWindowClose(Object **obj,struct Window **wnd);
  154. void SleepWindows(void);
  155. void WakeWindows(void);
  156. void LoadFont(struct TextAttr *font);
  157. BOOL UnpackChar(struct Character *chr,struct TextFont *font,ULONG i);
  158. void KernTables(ULONG to, ULONG from);
  159. void ClearCurrentFont(void);
  160. void OpenEditFontWnd(void);
  161. void CloseEditFontWnd(BOOL obj);
  162. void OpenPrefsWnd(void);
  163. void ClosePrefsWnd(BOOL obj);
  164. void OpenAssignWnd(void);
  165. void CloseAssignWnd(BOOL obj);
  166. void OpenWidthWnd(struct CharNode *node);
  167. void CloseWidthWnd(BOOL obj);
  168. void OpenKernWnd(struct CharNode *node);
  169. void CloseKernWnd(BOOL obj);
  170. void OpenSaveWnd(void);
  171. void CloseSaveWnd(BOOL obj);
  172. void PutPositive(struct Window *wnd,char *name,LONG value,LONG min,
  173.   LONG *dest);
  174. void NewHeights(void);
  175. void NewWidths(void);
  176. void ChangeCharWidth(struct Character *chr, ULONG width, ULONG newoffset,
  177.   ULONG oldoffset);
  178. void CheckWidthKern(struct Character *chr);
  179. void SavePrefs(char *filename);
  180. void LoadPrefs(void);
  181. void CopyChar(struct CharNode *node);
  182. void PasteChar(struct CharNode *node);
  183. void SaveFont(BOOL tables);
  184. ULONG SaveShowReq(char *text,char *gadgets,...);
  185. void WriteCharData(struct charDef *cd, UBYTE *fontdataptr, ULONG dest,
  186.   ULONG src, ULONG *off, ULONG mod);
  187. void FlushAllFonts(void);
  188.  
  189. /* char.c */
  190.  
  191. #define DATA(i,j) *(chr->chr_Data+((j)*chr->chr_Width)+(i))
  192.  
  193. struct CharNode
  194. {
  195.   struct Node chln_Node;
  196.   Object *chln_Object;
  197.   struct Window *chln_Window;
  198.   char *chln_Title;
  199.   Object *chln_HorizGadg, *chln_VertGadg;
  200.   Object *chln_LeftGadg, *chln_RightGadg;
  201.   Object *chln_UpGadg, *chln_DownGadg;
  202.   struct Hook *chln_Hook;
  203.   Object *chln_EditGadg;
  204.   struct Character *chln_Character;
  205.   ULONG chln_Number;
  206.   Object *chln_WidthLObj, *chln_WidthRObj, *chln_KernObj;
  207. };
  208.  
  209. struct CharNode *OpenCharWin(ULONG charnum,struct IBox size);
  210. void CloseCharWin(struct CharNode *node);
  211. Object *CreateSysImage(ULONG which,struct DrawInfo *dri);
  212. Object *CreatePropGadg(ULONG freedom,Tag tag1,...);
  213. Object *CreateButtonGadg(Object *image,Tag tag1,...);
  214. __geta4 void CharHook(__a0 struct Hook *hook, __a2 Object *o,
  215.   __a1 struct IntuiMessage *msg);
  216. void ForceResizeChar(struct CharNode *node);
  217. void SetScrollers(struct CharNode *node);
  218. void RedrawEdit(struct CharNode *node);
  219. void MoveLeft(struct CharNode *node);
  220. void MoveRight(struct CharNode *node);
  221. void MoveUp(struct CharNode *node);
  222. void MoveDown(struct CharNode *node);
  223.  
  224. /* node.c */
  225.  
  226. struct List *GetNewList(struct List **list);
  227. struct Node *CreateNode(ULONG size,struct List *list);
  228. void RemoveList(struct List **list,BOOL all,(*hook)());
  229.  
  230. /* gadget.c */
  231.  
  232. #define CG_TAGBASE    (TAG_USER+1000)
  233. #define CG_Pos        (CG_TAGBASE+0)
  234. #define CG_Pressed    (CG_TAGBASE+1)
  235.  
  236. Class *InitCharGadgClass(void);
  237. BOOL FreeCharGadgClass(Class *cl);
  238. ULONG GetCharGadgWidth(void);
  239. ULONG GetCharGadgHeight(void);
  240.  
  241. #define EG_XOFFSET 4
  242. #define EG_YOFFSET 2
  243.  
  244. #define EG_TAGBASE    (TAG_USER+1000)
  245. #define EG_PixelX    (EG_TAGBASE+1)
  246. #define EG_PixelY    (EG_TAGBASE+2)
  247. #define EG_CharStruct    (EG_TAGBASE+3)
  248. #define EG_Update    (EG_TAGBASE+4)
  249. #define EG_Width    (EG_TAGBASE+5)
  250. #define EG_Height    (EG_TAGBASE+6)
  251. #define EG_XOffset    (EG_TAGBASE+7)
  252. #define EG_YOffset    (EG_TAGBASE+8)
  253. #define EG_CharNode    (EG_TAGBASE+9)
  254. #define EG_PixelBorder    (EG_TAGBASE+10)
  255.  
  256. Class *InitEditGadgClass(void);
  257. BOOL FreeEditGadgClass(Class *cl);
  258.  
  259. #define SCRL_TAGBASE    (TAG_USER+1000)
  260. #define SCRL_Right    (SCRL_TAGBASE+1)
  261.  
  262. Class *InitSlideGadgClass(void);
  263. BOOL FreeSlideGadgClass(Class *cl);
  264.