home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / MSYSDO.C < prev    next >
C/C++ Source or Header  |  1990-03-28  |  2KB  |  88 lines

  1. /* 
  2.     msysdo.c
  3.  
  4.     % msys_do
  5.  
  6.     C-scape 3.2
  7.     Copyright (c) 1988, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      11/25/88 jdc    created
  13.      6/01/89 jdc    added MSYS_GETBOB message
  14.      7/15/89 ted    Moved cast to right side in 'data = sed_GetFieldBob'.
  15.      7/26/89 jmd    LOCK message is now passed a (byte *)
  16.  
  17.     12/12/89 jmd    Added msys_Lock() function.
  18.      3/28/90 jmd    ansi-fied
  19. */
  20.  
  21. #include <stdio.h>
  22. #include <ctype.h>
  23.  
  24. #include "cscape.h"
  25. #include "oaktag.h"                /* For IDs in msys.h */
  26. #include "msys.h"
  27.  
  28. /* -------------------------------------------------------------------------- */
  29.  
  30. boolean msys_Lock(sed_type sed, int *code, byte attr)
  31. /*
  32.     "lock" a menu choice.
  33. */
  34. {
  35.     return(msys_do(sed, code, MSYS_LOCK, (VOID *) &attr));
  36. }
  37. /* -------------------------------------------------------------------------- */
  38.  
  39. boolean msys_do(sed_type sed, int *code, int msg, VOID *data)
  40. /*
  41.     Find the nested menu field specified by the string of field numbers in
  42.     'code', and perform an operation on it specified by 'msg'.
  43.     The 'code' string must be terminated by a -1.
  44. */
  45. {
  46.     int i;
  47.     bob_type bob;
  48.     boolean ret = TRUE;
  49.     
  50.     if (code[0] == -1) {
  51.         return(FALSE);
  52.     }
  53.     /* Trace the tree down to the specified bob and field */
  54.     for (i = 0; code[i+1] != -1; i++) {
  55.         bob = sed_GetFieldBob(sed, code[i]);
  56.         if (bob == NULL || !bob_IsSed(bob)) {
  57.             return(FALSE);
  58.         }
  59.     }
  60.     if (code[i] >= sed_GetFieldCount(bob)) {
  61.         return(FALSE);
  62.     }
  63.     switch (msg) {
  64.     case MSYS_LOCK:
  65.         sed_ProtectField(bob, code[i]);
  66.         sed_MarkField(bob, code[i], *((byte *) data), *((byte *) data));
  67.         sed_UpdateField(bob, code[i]);
  68.         break;
  69.     case MSYS_UNLOCK:
  70.         sed_UnProtectField(bob, code[i]);
  71.         sed_UnMarkField(bob, code[i]);
  72.         sed_UpdateField(bob, code[i]);
  73.         break;
  74.     case MSYS_ISLOCKED:
  75.         ret = sed_IsProtectedField(bob, code[i]);
  76.         break;
  77.     case MSYS_SETBOB:
  78.         sed_SetFieldBob(bob, code[i], (bob_type)data);
  79.         break;    
  80.     case MSYS_GETBOB:
  81.         data = (VOID *) sed_GetFieldBob(bob, code[i]);
  82.         break;    
  83.     }
  84.     return(ret);
  85. /* -------------------------------------------------------------------------- */
  86.  
  87.