home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_07 / ACS_PRO.LZH / ASC / UOEDIT / UEROTSTR.C < prev    next >
C/C++ Source or Header  |  1992-12-03  |  6KB  |  330 lines

  1. /*
  2.  *        (c) 1991 Stefan Bachert
  3.  *
  4.  *        ACS                            Application Construction System
  5.  *
  6.  *        MODULE:                    UEROTSTR
  7.  *
  8.  *        REVISION:                3 DEC 1992
  9.  *
  10.  *        DESCRIPTION:        Userobject Rotierter String
  11.  *                                        Editor dazu
  12.  *                                        
  13.  *                                        
  14.  *                                        
  15.  */
  16.  
  17. /*
  18.  * IMPORT / EXPORT Section
  19.  */
  20.  
  21. #        include        <stdio.h>
  22. #        include        <string.h>
  23. #        include        <acs.h>
  24. #        include        <UO_ACS.H>
  25. #        include        "UEROTSTR.H"
  26.  
  27. extern INT16 CDECL A_rotstr (PARMBLK* pb);
  28.  
  29. /*
  30.  *        Local Defines
  31.  */
  32.  
  33. /*
  34.  *        Local Types
  35.  */
  36.  
  37. /*
  38.  *        Local Prototypes
  39.  */
  40.  
  41.  
  42. static void replace (void);
  43. static void trans (void);
  44. static void rot_0 (void);
  45. static void rot_90 (void);
  46. static void rot_180 (void);
  47. static void rot_270 (void);
  48. static void ok (void);
  49. static void abort (void);
  50. static void update (void);
  51.  
  52. static OBJECT* object_tree (AUSER_DEF* aud, OBJECT* obdata);
  53. static void test_it (AUSER_DEF* aud, AUSERBLK* userblk);
  54. static void cleanup (OBJECT* tree);
  55. static void minsize (AUSERBLK* auser, INT16* x, INT16* y);
  56.  
  57. /*
  58.  *        Local Vars & exported const or initialize
  59.  */
  60.  
  61. #        include        "UEROTSTR.AH"
  62.  
  63. /*
  64.  *        Modul Initializiation/Termination
  65.  */
  66.  
  67. /*
  68.  *        Functions
  69.  */
  70.  
  71. static AUSERBLK rotstr =     {A_rotstr, 0x1, Auo_string, "ROT", NULL, NULL};
  72. static OBJECT visual =         {-1, -1, -1, G_USERDEF, NONE, OUTLINED, (long) &rotstr, 0, 0, 2, 2};
  73. static OBJECT logical =     {-1, -1, -1, G_USERDEF, NONE, NORMAL, 0L, 0, 0, 2, 2};
  74.  
  75.  
  76. static AUSER_DEF maud = {
  77.     "0x1L",
  78.     "Auo_string",
  79.     STR_PAR, "ROT", 0,
  80.     NONE_PAR, NULL, 0,
  81.     NONE_PAR, NULL, 0
  82. };
  83.  
  84.  
  85. static UODATAS data = {
  86.     "A_rotstr",                        /* Name */
  87.     object_tree,
  88.     test_it,
  89.     ok,
  90.     Aob_delete,
  91.     &visual,
  92.     &logical,
  93.     &maud,
  94.     minsize,
  95.     NULL,
  96.     title
  97. };
  98.  
  99.  
  100. static void minsize (AUSERBLK* auser, INT16* x, INT16* y)
  101.         /*
  102.          *    Berechne empfohlene Mindestgrö₧e
  103.          */
  104. {
  105.     INT16 len;
  106.  
  107.     if (auser-> ub_ptr1 != NULL) {
  108.         len = gl_wbox * (INT16) strlen (auser-> ub_ptr1);
  109.     } else {
  110.         len = 0;
  111.     };
  112.  
  113.     switch ((INT16) (auser-> ub_parm & 3)) {
  114.     case 2:        /* 180 */
  115.     case 0:        /* 0 */
  116.         *x = len; *y = gl_hbox;
  117.         break;
  118.     case 3:        /* 270 */
  119.     case 1:        /* 90 */
  120.         *x = gl_hbox; *y = len;
  121.         break;
  122.     }
  123. }
  124.  
  125.  
  126. void init_rotstr (Awindow *parts)
  127.     /*
  128.      *        Eintrag in das Teilefenster
  129.      */
  130. {
  131.     INT16 h, w;
  132.  
  133. /* test string ist 90 Grad, 3*1 Zeichen Hoch */
  134.  
  135.     w = (gl_hbox + gl_wbox - 1) / gl_wbox;
  136.     logical. ob_width = visual. ob_width = w;
  137.     h = (gl_wbox * 3 + gl_hbox - 1) / gl_hbox;
  138.     logical. ob_height = visual. ob_height = h;
  139.  
  140.     (parts-> service) (parts, AS_ACSADDPART, &data);
  141. }
  142.  
  143. static OBJECT* object_tree (AUSER_DEF* aud, OBJECT* obdata)
  144.         /*
  145.          *    gibt initialisierten Objectbaum zurück
  146.          */
  147. {
  148.     OBJECT* ob, *res, *wob;
  149.     long parm;
  150.     AUSERBLK* auser;
  151.  
  152.     ob = &ED_STRED;
  153.     res = Aob_create (ob);
  154.     if (res != NULL) {
  155.         wob = res + EXAMPLE;
  156.         wob-> ob_flags |= obdata-> ob_flags & (DEFAULT | EXIT | RBUTTON);
  157.         wob-> ob_state |= obdata-> ob_state & (SELECTED | DISABLED | CROSSED | CHECKED | OUTLINED | SHADOWED);
  158.         auser = (AUSERBLK *) wob-> ob_spec. userblk;
  159.         sscanf (aud-> parm, "0x%lxL", &parm);
  160.         auser-> ub_parm = parm;
  161.         if (aud-> type1 == STR_PAR) {
  162.             (auser-> ub_serv) (wob, AUO_SETVAL, aud-> data1);
  163.             strncpy (res [TEXT]. ob_spec. tedinfo-> te_ptext, aud-> data1, 15);
  164.         } else {
  165.             (auser-> ub_serv) (wob, AUO_SETVAL, "");
  166.             *res [TEXT]. ob_spec. tedinfo-> te_ptext = '\0';
  167.         }
  168.     }
  169.     return res;
  170. }
  171.  
  172. static void test_it (AUSER_DEF* aud, AUSERBLK* userblk)
  173.         /*
  174.          *    
  175.          */
  176. {
  177.     userblk-> ub_code = A_rotstr;
  178.     sscanf (aud-> parm, "0x%lxL", &userblk-> ub_parm);
  179.     userblk-> ub_serv = Auo_string;
  180.     if (aud-> type1 == STR_PAR) {
  181.         userblk-> ub_ptr1 =    aud-> data1;
  182.     } else {
  183.         userblk-> ub_ptr1 =    NULL;
  184.     }
  185.     userblk-> ub_ptr2 =    userblk-> ub_ptr3 = NULL;
  186. }
  187.  
  188.  
  189. static void abort (void)
  190.         /*
  191.          *        Überträgt die Modifizierten Werte
  192.          */
  193. {
  194.     (data. interface-> abort) ();
  195. }
  196.  
  197. static void ok (void)
  198.         /*
  199.          *        Überträgt die Modifizierten Werte
  200.          */
  201. {
  202.     static char parm [32];
  203.     OBJECT* work;
  204.     AUSERBLK* auser;
  205.     AUSER_DEF aud;
  206.     INT16 width, height, len;
  207.     char *p;
  208.  
  209.     work = ev_window-> work;
  210.  
  211.     auser = (AUSERBLK *) work [EXAMPLE]. ob_spec. userblk;
  212.  
  213.     sprintf (parm, "0x%lxL", auser-> ub_parm);
  214.     aud. parm = parm;
  215.     aud. serv = "Auo_string";
  216.     p = work [TEXT]. ob_spec. tedinfo-> te_ptext;
  217.     if (*p != '\0') {
  218.         aud. type1 = STR_PAR;
  219.         aud. data1 = p;
  220.         aud. len1    = 0;
  221.         len = gl_wbox * (INT16) strlen (p);
  222.     } else {
  223.         aud. type1 = NONE_PAR;
  224.         aud. data1 = NULL;
  225.         aud. len1    = 0;
  226.         len = 0;
  227.     }
  228.  
  229.     switch ((INT16) auser-> ub_parm & 3) {
  230.     case 2:        /* 180 */
  231.     case 0:        /* 0 */
  232.         width = len; height = gl_hbox;
  233.         break;
  234.     case 3:        /* 270 */
  235.     case 1:        /* 90 */
  236.         width = gl_hbox; height = len;
  237.         break;
  238.     }
  239.     aud. type2 = aud. type3 = NONE_PAR;
  240.     aud. data2 = aud. data3 = NULL;
  241.     aud. len2    = aud. len3 = 0;
  242.  
  243.     (data. interface-> set) (&aud, width, height);
  244.     abort ();
  245. }
  246.  
  247. static void trans (void)
  248.         /*
  249.          *    Transparent
  250.          */
  251. {
  252.     long* b;
  253.  
  254.     b = &ev_object [EXAMPLE]. ob_spec. userblk-> ub_parm;
  255.     *b &= 0xfffffffbL;
  256.     update ();
  257. }
  258.  
  259.  
  260. static void replace (void)
  261.         /*
  262.          *    Deckend
  263.          */
  264. {
  265.     long* b;
  266.  
  267.     b = &ev_object [EXAMPLE]. ob_spec. userblk-> ub_parm;
  268.     *b |= 0x4;
  269.     update ();
  270. }
  271.  
  272.  
  273. static void rot_0 (void)
  274.         /*
  275.          *    Rot 0 Grad
  276.          */
  277. {
  278.     long* b;
  279.  
  280.     b = &ev_object [EXAMPLE]. ob_spec. userblk-> ub_parm;
  281.     *b &= 0xfffffffcL;
  282.     update ();
  283. }
  284.  
  285. static void rot_90 (void)
  286.         /*
  287.          *    Rot 90 Grad
  288.          */
  289. {
  290.     long* b;
  291.  
  292.     b = &ev_object [EXAMPLE]. ob_spec. userblk-> ub_parm;
  293.     *b = (*b & 0xfffffffcL) | 1;
  294.     update ();
  295. }
  296.  
  297. static void rot_180 (void)
  298.         /*
  299.          *    Rot 180 Grad
  300.          */
  301. {
  302.     long* b;
  303.  
  304.     b = &ev_object [EXAMPLE]. ob_spec. userblk-> ub_parm;
  305.     *b = (*b & 0xfffffffcL) | 2;
  306.     update ();
  307. }
  308.  
  309. static void rot_270 (void)
  310.         /*
  311.          *    Rot 270 Grad
  312.          */
  313. {
  314.     long* b;
  315.  
  316.     b = &ev_object [EXAMPLE]. ob_spec. userblk-> ub_parm;
  317.     *b = (*b & 0xfffffffcL) | 3;
  318.     update ();
  319. }
  320.  
  321.  
  322. static void update (void)
  323. {
  324.     (ev_window-> obchange) (ev_window, UPDATE, -1);
  325. }
  326.  
  327. /*
  328.  *        This is the End my friend
  329.  */
  330.