home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / SDLOAD.C < prev    next >
C/C++ Source or Header  |  1990-12-18  |  5KB  |  189 lines

  1. /*
  2.     sdload.c
  3.  
  4.     % sfile_LoadSed, sf_loadsed, sf_savesed
  5.  
  6.     C-scape 3.2
  7.     Copyright (c) 1988-1990 by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      8/21/89 jdc    added bord_Do(sed, BDM_SCROLL) fixes lights
  13.      8/31/89 jmd    removed long ifdefs
  14.  
  15.     10/25/89 jmd    added static to definition
  16.     11/06/89 jmd    removed DoRaw Macro
  17.     12/17/89 jdc    fixed attrs
  18.     12/19/89 jmd    fixed hilite attrs
  19.      1/23/90 jdc    added default defines
  20.      3/28/90 jmd    ansi-fied
  21.      4/16/90 jdc    renamed _bfile_gets to bf_gets
  22.      4/19/90 jdc    preened
  23.      5/02/90 jdc    preened one more time
  24.      5/11/90 jdc    added sed_ReallyGo default
  25.      5/20/90 jmd    added test for NULL gofuncname in sed_load
  26.      6/27/90 jdc    preened the GoFunc code
  27.      8/08/90 jdc    moved aux function down to window level
  28.      8/12/90 jdc    added opendata arg to sfile_LoadObj
  29.      9/24/90 jdc    removed gofunc code
  30.     11/01/90 ted    put (void) in arg list of sedwin_LoadInit.
  31.     12/12/90 jdc    fixed stripping aux funcs from 3.0, 3.1 files bug
  32.     12/15/90 jdc    fixed bob positioning
  33. */
  34.  
  35. #include "sed.h"
  36. #include "sfile.h"
  37. #include "sfilpriv.h"
  38. #include "sedwinod.h"
  39. #include "ufuncobj.h"
  40. #include "teddecl.h"
  41.  
  42. OSTATIC objreq_func (sdwinreq_load);
  43. OSTATIC VOID_FPTR null_funcptr = FNULL;
  44.  
  45. #define DEFAULT_MOVE        (move_method)null_funcptr;
  46. #define DEFAULT_SPEC        (spc_fptr)null_funcptr;
  47. #define DEFAULT_AUX            (aux_fptr)null_funcptr;
  48.  
  49. void sedwin_LoadInit(void)
  50. {
  51.     sdwinreq_loadfptr = sdwinreq_load;
  52.     win_LoadInit();
  53.     ufunc_LoadInit();
  54. }
  55.  
  56. sed_type sfile_LoadSed(sfile_type sfile, char *name, boolean allocate)
  57. {
  58.     sedwin_LoadInit();
  59.  
  60.     sfile->alloc = allocate;
  61.  
  62.     return(sfile_LoadObj(sfile, name, NULL));
  63. }
  64.  
  65. static int sdwinreq_load(VOID *objdata, int msg, VOID *indata, VOID *outdata)
  66. {
  67.     sed_type sed;
  68.     sfile_type sfile;
  69.  
  70.     oak_notused(outdata);
  71.     oak_notused(msg);
  72.  
  73.     sed = sedod_GetSelf((sedwin_od *)objdata);
  74.     sfile = (sfile_type)indata;
  75.  
  76.     if (!win_Class(&((sedwin_od *)objdata)->wd, msg, indata, outdata)
  77.     ||  !sed_Init(sed, sf_loadmenu(sfile)) 
  78.     ||  !sed_load(sfile, sed)) {
  79.  
  80.         sed_Close(sed);
  81.         return(FALSE);
  82.     }
  83.     return(TRUE);    
  84. }
  85.  
  86. int sed_load(sfile_type sfile, sed_type sed)
  87. {
  88.     int back, reg, sel, label, i, fld, frow, fcol;
  89.     int handle, is_lnf;
  90.     menu_type menu;
  91.     move_method move;
  92.     aux_fptr aux;
  93.     spc_fptr special;
  94.     bfile_type bfile;
  95.     char *sbuf;
  96.     int hireg = -1;
  97.     int hisel = -1;
  98.     bob_type bob;
  99.  
  100.     bfile = sfile->bfile;
  101.     sbuf = sfile->buf;
  102.     is_lnf = (sfile->oslist_array[FSYM_TY] == NULL) ? FALSE:TRUE;
  103.     menu = sed_GetMenu(sed);
  104.  
  105.     /* set the position of dependent bobs */
  106.     for (i = 0; i < menu_GetBobCount(menu); i++) {
  107.         if (bob_IsDepend(bob = menu_GetBob(menu, i))) {
  108.             fld = menu_GetBobFieldNo(menu, i);
  109.             frow = menu_GetFieldRow(menu, fld);
  110.             fcol = menu_GetFieldCol(menu, fld);
  111.             win_SetPosition(bob, 
  112.                 frow + win_GetTopRow(sed),
  113.                 fcol + win_GetLeftCol(sed));
  114.         }
  115.     }
  116.  
  117.     /* sed info:
  118.         label, back, reg, sel, hireg, hisel, move method, special, ox
  119.     */
  120.     if (bf_gets(bfile, sbuf, SFILE_BUFLEN, '\0') == 0) {
  121.         return(FALSE);
  122.     }
  123.     sscanf(sbuf, "%d %d %d %d %d %d", &label, &back, ®, &sel,
  124.         &hireg, &hisel);
  125.  
  126.     sed_SetColors(sed, (byte)reg, (byte)back, (byte)sel);
  127.     if (hireg != -1) {
  128.         sed_SetHiColors(sed, (byte)hireg, (byte)hisel);
  129.     }
  130.     sed_SetLabel(sed, label);
  131.  
  132.     /* move method */
  133.     if (bf_gets(bfile, sbuf, SFILE_BUFLEN, '\0') == 0) {
  134.         return(FALSE);
  135.     }
  136.     if ((move = sfile_FindMoveMethodFunc(sfile, sbuf, &handle)) == FNULL) {
  137.         move = DEFAULT_MOVE;
  138.     }
  139.     ted_SetMoveMethod(sed, move);
  140.     if (is_lnf) {
  141.         if (handle == -1) {
  142.             handle = sfile_PutMoveMethodFunc(sfile, sbuf, move);
  143.         }
  144.         menu_SetMoveMethodHandle(menu, handle);
  145.     }
  146.  
  147.     /* special */
  148.     if (bf_gets(bfile, sbuf, SFILE_BUFLEN, '\0') == 0) {
  149.         return(FALSE);
  150.     }
  151.     if ((special = sfile_FindSpecialFunc(sfile, sbuf, &handle)) == FNULL) {
  152.         special = DEFAULT_SPEC;
  153.     }
  154.     sed_SetSpecial(sed, special);
  155.     if (is_lnf) {
  156.         if (handle == -1) {
  157.             handle = sfile_PutSpecialFunc(sfile, sbuf, special);
  158.         }
  159.         menu_SetSpecialHandle(menu, handle);
  160.     }
  161.  
  162.     ted_GotoPosition(sed, sed_GetCRow(sed), sed_GetCCol(sed));
  163.  
  164.     /* send BDM_SCROLL to adjust border lights (suppressed in sf_loadwin) */
  165.     bord_Do(sed, BDM_SCROLL, NULL, NULL);
  166.  
  167.     if (sfile->alloc == SED_ALLOC && !sd_alloc(sed, FALSE)) {
  168.         return(FALSE);
  169.     }
  170.  
  171.     /* aux (moved to window level, use only in not "") */
  172.     if (bf_gets(bfile, sbuf, SFILE_BUFLEN, '\0') == 0) {
  173.         return(FALSE);
  174.     }
  175.     if (*sbuf != '\0') {
  176.         aux = sfile_FindAuxFunc(sfile, sbuf, &handle);
  177.         sed_SetAux(sed, aux);
  178.         if (is_lnf) {
  179.             if (handle == -1) {
  180.                 handle = sfile_PutAuxFunc(sfile, sbuf, aux);
  181.             }
  182.             win_SetAuxHandle(sed, handle);
  183.         }
  184.     }
  185.  
  186.     return(TRUE);    
  187. }
  188.  
  189.