libcm is a C development framework with an emphasis on audio signal processing applications.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

cmUiDrvr.c 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. //| Copyright: (C) 2009-2020 Kevin Larke <contact AT larke DOT org>
  2. //| License: GNU GPL version 3.0 or above. See the accompanying LICENSE file.
  3. #include "cmGlobal.h"
  4. #include "cmRtSysMsg.h"
  5. #include "cmUiDrvr.h"
  6. void cmUiDriverArgSetup( cmUiDriverArg_t* a,
  7. unsigned rtSubIdx,
  8. unsigned selId,
  9. cmUiDId_t dId,
  10. unsigned appId,
  11. unsigned usrId,
  12. unsigned panelId,
  13. cmUiCId_t cId,
  14. unsigned flags,
  15. int ival,
  16. double fval,
  17. const cmChar_t* sval,
  18. int x,
  19. int y,
  20. int w,
  21. int h
  22. )
  23. {
  24. flags = cmEnaFlag(flags,kSvalUiFl,sval!=NULL);
  25. a->hdr.rtSubIdx= rtSubIdx;
  26. a->hdr.selId = selId;
  27. a->dId = dId;
  28. a->appId = appId;
  29. a->usrId = usrId;
  30. a->panelId = panelId;
  31. a->cId = cId;
  32. a->flags = flags;
  33. a->ival = ival;
  34. a->fval = fval;
  35. a->sval = sval;
  36. a->x = x;
  37. a->y = y;
  38. a->w = w;
  39. a->h = h;
  40. }
  41. unsigned cmUiDriverArgSerializeBufByteCount( const cmUiDriverArg_t* a )
  42. {
  43. unsigned n = sizeof(*a);
  44. if( cmIsFlag(a->flags,kSvalUiFl) && a->sval != NULL )
  45. n += strlen(a->sval) + 1;
  46. return n;
  47. }
  48. cmUiRC_t cmUiDriverArgSerialize( const cmUiDriverArg_t* a, void* buf, unsigned bufByteCnt )
  49. {
  50. if( bufByteCnt < cmUiDriverArgSerializeBufByteCount(a))
  51. return kBufTooSmallUiRC;
  52. memcpy(buf,a,sizeof(*a));
  53. if( cmIsFlag(a->flags,kSvalUiFl) && a->sval != NULL )
  54. strcpy( (char*)buf + sizeof(*a), a->sval );
  55. return kOkUiRC;
  56. }
  57. cmUiRC_t cmUiDriverArgDeserialize( cmUiDriverArg_t* a, const void* buf, unsigned bufByteCnt )
  58. {
  59. bool fl = bufByteCnt >= sizeof(*a);
  60. assert( fl );
  61. if( !fl )
  62. return kBufTooSmallUiRC;
  63. memcpy(a,buf,sizeof(*a));
  64. fl = a->cId < kMaxUiCId && a->dId < kMaxDId;
  65. assert(fl );
  66. if( !fl )
  67. return kBufCorruptUiRC;
  68. if( cmIsFlag(a->flags,kSvalUiFl) && a->sval != NULL )
  69. a->sval = (char*)buf + sizeof(*a);
  70. return kOkUiRC;
  71. }
  72. int cmUiDriverArgGetInt( const cmUiDriverArg_t* a )
  73. {
  74. if( a->flags & kIvalUiFl )
  75. return a->ival;
  76. if( a->flags & kFvalUiFl )
  77. return round(a->fval);
  78. assert(0);
  79. return -1;
  80. }
  81. double cmUiDriverArgGetDouble( const cmUiDriverArg_t* a )
  82. {
  83. if( a->flags & kIvalUiFl )
  84. return a->ival;
  85. if( a->flags & kFvalUiFl )
  86. return a->fval;
  87. assert(0);
  88. return -1;
  89. }
  90. const cmChar_t* cmUiDriverArgGetString( const cmUiDriverArg_t* a )
  91. {
  92. return a->flags & kSvalUiFl ? a->sval : NULL;
  93. }