/* * $Id: handle.h 814 2007-11-14 18:39:28Z hubert@u.washington.edu $ * * ======================================================================== * Copyright 2013-2022 Eduardo Chappa * Copyright 2006-2007 University of Washington * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * ======================================================================== */ #ifndef PITH_HANDLE_INCLUDED #define PITH_HANDLE_INCLUDED #include "../pith/context.h" #include "../pith/msgno.h" #include "../pith/atttype.h" #include "../pith/util.h" #include "../pith/icaltype.h" typedef struct screen_position_list { Pos where; struct screen_position_list *next; } POSLIST_S; /* * Struct to help manage embedded urls (and anythin' else we might embed) */ typedef struct handle_s { int key; /* tag number embedded in text */ enum {URL, iCal, Attach, Folder, Function, IMG, imgData} type; unsigned force_display:1; /* Don't ask before launching */ unsigned using_is_used:1; /* bit below is being used */ unsigned is_used:1; /* if not, remove it from list */ unsigned color_unseen:1; /* we're coloring folders with unseen */ unsigned color_folder:1; /* and just folders for that matter... */ unsigned is_dual_do_open:1; /* choosing this handle means open */ union { struct { /* URL corresponding to this handle */ char *path, /* Actual url string */ *tool, /* displaying application */ *name; /* URL's NAME attribute */ } url; /* stuff to describe URL handle */ struct { char *src, /* src of image [cid:, data:] */ *alt, /* image alternate text */ *tool; /* program to display data: */ } img; /* stuff to describe img */ ATTACH_S *attach; /* Attachment struct for this handle */ struct { ATTACH_S *attach; /* full Calendar entry */ int depth; /* which event to display */ } ical; struct { int index; /* folder's place in context's list */ CONTEXT_S *context; /* description of folders */ } f; /* stuff to describe Folder handle */ struct { struct { /* function and args to pass it */ MAILSTREAM *stream; MSGNO_S *msgmap; long msgno; } args; void (*f)(MAILSTREAM *, MSGNO_S *, long); } func; } h; POSLIST_S *loc; /* list of places it exists in text */ struct handle_s *next, *prev; /* next and previous in the list */ } HANDLE_S ; /* * Function used to dispatch locally handled URL's */ typedef int (*url_tool_t)(char *); /* exported prototypes */ HANDLE_S *get_handle(HANDLE_S *, int); void init_handles(HANDLE_S **); HANDLE_S *new_handle(HANDLE_S **); void delete_unused_handles(HANDLE_S **); void free_handle(HANDLE_S **); void free_handles(HANDLE_S **); void free_handle_locations(POSLIST_S **); #endif /* PITH_HANDLE_INCLUDED */