|
|
1.1 root 1: #include "cardfile.h"
2:
3: /*********************************************************************/
4: /* Windows/PM Cardfile Shared Code */
5: /* */
6: /* (c) Copyright Microsoft Corp. 1987,1988 - All Rights Reserved */
7: /*********************************************************************/
8:
9: /*********************************************************************/
10: /* The following shared code was developed from the original */
11: /* Cardfile application. This code can be compiled to run under */
12: /* either the Windows or the PM manager environment. All */
13: /* functionality associated with bitmaps or printing has been */
14: /* deleted. Some comments refering to these functions may still be */
15: /* present in the code and should be disregarded. jw. */
16: /*********************************************************************/
17:
18:
19: /*********************************************************************/
20: /* DoMerge - */
21: /* Merge cardfile on disk to existing cardfile in memory. */
22: /* */
23: /* Same in Windows and PM. */
24: /*********************************************************************/
25:
26: void DoMerge()
27: {
28: char *pchBuf;
29: OFSTRUCT ofStruct;
30:
31: if(!fReadOnly && (pchBuf = (char *)PutUpDB(DTMERGE)))
32: {
33: /* check the name that the user specifies */
34: if (OpenFile((LPSTR)pchBuf, (LPOFSTRUCT)&ofStruct, OF_PARSE))
35: {
36: /* not a valid file name */
37: CardfileOkError(IDS_EINVALIDFILE);
38: LocalFree((HANDLE)pchBuf);
39: return;
40: }
41:
42: /* save current data */
43: if (CardPhone == IDM_PHONEBOOK || SaveCurrentCard(iFirstCard))
44: {
45: /* merge the files */
46: if(MergeCardFile(pchBuf))
47: {
48: /* successful, reset information */
49: iTopCard = iFirstCard = 0;
50: SetScrRangeAndPos();
51: if (CardPhone == IDM_CARDFILE)
52: SetCurCard(iFirstCard);
53: InvalidateRect(hCardfileWnd, (LPRECT)NULL, TRUE);
54: }
55: }
56: LocalFree((HANDLE)pchBuf);
57: }
58: }
59:
60:
61: /*********************************************************************/
62: /* DoOpen - */
63: /* Open specified cardfile, checking file name for validity. */
64: /* */
65: /* Same in Windows and PM. */
66: /*********************************************************************/
67:
68: BOOL FAR DoOpen(pchBuf)
69: char *pchBuf;
70: {
71: int result = FALSE;
72: OFSTRUCT ofStruct;
73:
74: /* check the filename the user specified */
75: if (OpenFile((LPSTR)pchBuf, (LPOFSTRUCT)&ofStruct, OF_PARSE))
76: {
77: /* not a valid filename */
78: CardfileOkError(IDS_EINVALIDFILE);
79: LocalFree((HANDLE)pchBuf);
80: return(0);
81: }
82:
83: /* read the file */
84: if(ReadCardFile(pchBuf))
85: {
86: /* successful, update caption and tempfile */
87: SetCaption();
88: Fdelete(TmpFile);
89: MakeTmpFile();
90:
91: /* reset scroll bars */
92: iTopCard = iFirstCard = 0;
93: SetScrRangeAndPos();
94:
95: /* get card's data */
96: if (CardPhone == IDM_CARDFILE);
97: SetCurCard(iFirstCard);
98:
99: CurCardHead.flags = 0;
100: InvalidateRect(hCardfileWnd, (LPRECT)NULL, TRUE);
101: result = TRUE;
102: }
103: return(result);
104: }
105:
106:
107: /*********************************************************************/
108: /* MaybeSaveFile - */
109: /* Prompt user to see if changes should be saved or if current */
110: /* operation should be cancelled. */
111: /* */
112: /* Same in Windows and PM. */
113: /*********************************************************************/
114:
115: BOOL MaybeSaveFile()
116: {
117: char *pchFile;
118: int result;
119: char *pch;
120: OFSTRUCT ofStruct;
121:
122: /* put up a message box that says "Do you wish to save your edits?" */
123: /* if so, save 'em */
124: /* if returns FALSE, means it couldn't save, and whatever is happening */
125: /* should not continue */
126:
127: /* If file needs to be saved */
128: if (fFileDirty || (CurCardHead.flags & FDIRTY) ||
129: SendMessage(hCardWnd, EM_GETMODIFY, 0, 0L))
130: {
131: if (CurIFile[0])
132: {
133: /* get to the end of the file */
134: for (pch = CurIFile ; *pch; ++pch)
135: ;
136: /* scan backwards to beginning of filename */
137: while (pch > CurIFile && *pch != '\\')
138: pch = (PSTR)AnsiPrev(CurIFile, pch);
139: if (*pch == '\\')
140: pch++;
141:
142: AnsiUpper((LPSTR)pch);
143: }
144: else
145: pch = rgchUntitled;
146:
147: /* put up the message, merging in filename */
148: result = MyMessageBox(IDS_OKTOSAVE, pch,
149: MB_YESNOCANCEL | MB_ICONQUESTION);
150:
151: /* if user wants to save */
152: if (result == IDYES)
153: {
154: /* save the current information */
155: if (SaveCurrentCard(iFirstCard))
156: {
157: /* if unnamed, need to get a filename */
158: if (!CurIFile[0])
159: {
160: if (GetNewFileName(&ofStruct))
161: pchFile = ofStruct.szPathName;
162: else
163: {
164: SetCurCard(iFirstCard);
165: return(FALSE); /* cancelled */
166: }
167: }
168: else
169: pchFile = CurIFile;
170:
171: /* save file, if can't save don't continue */
172: if (!WriteCardFile(pchFile))
173: return(FALSE);
174: }
175: else
176: return(FALSE);
177: }
178: else if (result == IDCANCEL)
179: return(FALSE);
180: }
181:
182: return(TRUE);
183: }
184:
185:
186: /*********************************************************************/
187: /* GetNewFileName -
188: /* Asks user for a filename.
189: /*
190: /* Same in Windows and PM.
191: /*********************************************************************/
192:
193: BOOL GetNewFileName(pOFStruct)
194: POFSTRUCT pOFStruct;
195: {
196: PSTR pchBuf;
197: BOOL fDone;
198: int fh;
199:
200: fDone = FALSE;
201: while (!fDone)
202: {
203: if(pchBuf = PutUpDB(DTSAVE))
204: {
205: /* check for valid filename */
206: if (OpenFile((LPSTR)pchBuf, (LPOFSTRUCT)pOFStruct, OF_PARSE))
207: {
208: CardfileOkError(IDS_EINVALIDFILE);
209: }
210:
211: /* check to see if file already exists */
212: else if ((fh = MyOpen((LPSTR)pchBuf, READ)) > -1)
213: {
214: /* it does, close it and as if user wants to overwrite */
215: MyClose(fh);
216: AnsiUpper((LPSTR)pchBuf);
217: if (MyMessageBox(IDS_EFILEEXISTS,
218: pchBuf,
219: MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2)
220: == IDYES)
221: {
222: /* does, done */
223: fDone = TRUE;
224: }
225: }
226: else
227: /* file does not exist, done */
228: fDone = TRUE;
229:
230: /* free up the response buffer */
231: LocalFree((HANDLE)pchBuf);
232: }
233: else
234: /* cancelled save as dialog box */
235: return(FALSE);
236: }
237: return(TRUE);
238: }
239:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.