/************************************************************/ /* Windows Write, Copyright 1985-1992 Microsoft Corporation */ /************************************************************/ #define NOCLIPBOARD #define NOGDICAPMASKS #define NOCTLMGR #define NOVIRTUALKEYCODES #define NOWINMESSAGES #define NOWINSTYLES #define NOSYSMETRICS #define NOMENUS #define NOKEYSTATE #define NOGDI #define NORASTEROPS #define NOSYSCOMMANDS #define NOSHOWWINDOW #define NOCOLOR #define NOATOM #define NOBITMAP #define NOICON #define NOBRUSH #define NOCREATESTRUCT #define NOMB #define NOFONT #define NOMSG #define NOOPENFILE #define NOPEN #define NOPOINT #define NOREGION #define NOSCROLL #define NOSOUND #define NOWH #define NOWINOFFSETS #define NOWNDCLASS #define NOCOMM #include /*#include "toolbox.h"*/ #include "mw.h" #include "cmddefs.h" #include "dispdefs.h" #include "wwdefs.h" #include "docdefs.h" #include "editdefs.h" #include "filedefs.h" #include "str.h" #include "propdefs.h" #include "fkpdefs.h" #include "printdef.h" /* printdefs.h */ #include "debug.h" extern int docMode; extern struct FCB (**hpfnfcb)[]; int **HAllocate(); #ifdef CASHMERE /* Only if we support multiple sections */ AddSects(docDest, cpDest, docSrc, cpFirst, cpLim, hsetbSrc) int docDest, docSrc; typeCP cpDest, cpFirst, cpLim; struct SETB **hsetbSrc; { /* Add SED's to correspond with inserted section marks */ /* Called after inserting docSrc[cpFirst:cpLim) into docDest@cpDest */ struct SETB *psetbSrc, **hsetbDest, *psetbDest; struct SED *psedSrc, *psedDest; int csedDest, isedSrc, csedIns, isedDest; psedSrc = &(psetbSrc = *hsetbSrc)->rgsed[0]; psedSrc += (isedSrc = IcpSearch(cpFirst + 1, psedSrc, cchSED, bcpSED, psetbSrc->csed)); /* Find all section marks in inserted area. */ for (csedIns = 0; psedSrc->cp <= cpLim; psedSrc++, csedIns++) ; if (csedIns != 0) { /* Insert sed's. */ /* Ensure destination setb large enough */ /* HEAP MOVEMENT */ if (FNoHeap(hsetbDest = HsetbEnsure(docDest, csedIns))) return; psedDest = &(psetbDest = *hsetbDest)->rgsed[0]; /* Find ised to insert new sed's */ psedDest += (isedDest = IcpSearch(cpDest + 1, psedDest, cchSED, bcpSED, csedDest = psetbDest->csed)); /* Insert new sed's */ psedSrc = &(psetbSrc = *hsetbSrc)->rgsed[isedSrc]; psetbDest->csed += csedIns; /* Update sed count */ blt(psedDest, psedDest + csedIns, cwSED * (csedDest - isedDest)); /* Open up setb */ blt(psedSrc, psedDest, cwSED * csedIns); while (csedIns--) (psedDest++)->cp = cpDest + (psedSrc++)->cp - cpFirst; } } /* end of A d d S e c t s */ #endif /* CASHMERE */ #ifdef CASHMERE /* Only if we support separate sections */ RemoveDelSeds(doc, cpFirst, cpLim, hsetb) int doc; typeCP cpFirst, cpLim; struct SETB **hsetb; { struct SETB *psetb; struct SED *psed, *psedT; int ised, csed, csedDel; { psetb = *hsetb; psed = &psetb->rgsed[0]; psed += (ised = IcpSearch(cpFirst + 1, psed, cchSED, bcpSED, csed = psetb->csed)); /* Find all section marks in deleted area. */ for (psedT = psed, csedDel = 0; psedT->cp <= cpLim; psedT++, csedDel++) ; Assert(ised + csedDel < csed); if (csedDel != 0) { /* Close up setb. */ blt(psedT, psed, cwSED * ((csed -= csedDel) - ised)); (*hsetb)->csed = csed; docMode = docNil; } } } /* end of R e m o v e D e l S e d s */ #endif /* CASHMERE */ #ifdef CASHMERE /* This loads a complete section table */ struct SETB **HsetbCreate(fn) int fn; { /* Create a section table from a formatted file */ struct SETB *psetbFile; typePN pn; int cchT; int csed, ised; struct SETB **hsetb; int *pwSetb; int cw; struct SED *psed; Assert(fn != fnNil && (**hpfnfcb)[fn].fFormatted); if ((pn = (**hpfnfcb)[fn].pnSetb) == (**hpfnfcb)[fn].pnBftb) return (struct SETB **) 0; psetbFile = (struct SETB *) PchGetPn(fn, pn, &cchT, false); if ((csed = psetbFile->csed) == 0) return (struct SETB **)0; hsetb = (struct SETB **) HAllocate(cw = cwSETBBase + csed * cwSED); if (FNoHeap(hsetb)) return (struct SETB **)hOverflow; pwSetb = (int *) *hsetb; blt(psetbFile, pwSetb, min(cwSector, cw)); while ((cw -= cwSector) > 0) { /* Copy the sed's to heap */ blt(PchGetPn(fn, ++pn, &cchT, false), pwSetb += cwSector, min(cwSector, cw)); } for (ised = 0, psed = &(**hsetb).rgsed[0]; ised < csed; ised++, psed++) psed->fn = fn; (**hsetb).csedMax = csed; return hsetb; } /* end of H s e t b C r e a t e */ #endif /* CASHMERE */