DSPFILES.MOD 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. IMPLEMENTATION MODULE DspFiles;
  2. (*
  3. * REPERTOIRE
  4. * Release 1.6
  5. * By Charles Bradford and Cole Brecheen
  6. * (c) Copyright 1985-1992 PMI
  7. * Green Bay, Wisconsin
  8. * All rights reserved
  9. * (414) 468-6040
  10. *
  11. * $Header: D:/logfiles/mods/dspfiles.mov 1.7 10 Mar 1991 15:26:32 coleb $
  12. *
  13. *)
  14. (*EntryDiag:
  15. IMPORT Diagnostics;
  16. :EntryDiag*)
  17. IMPORT ErrorManager;
  18. IMPORT ErrorNames;
  19. IMPORT HandleIO;
  20. IMPORT GenLists;
  21. IMPORT M2Strings;
  22. IMPORT MsColors;
  23. IMPORT NdxBones;
  24. IMPORT NdxTypes;
  25. IMPORT PosUtils;
  26. IMPORT ScrnTypes;
  27. IMPORT ScrnUtl1;
  28. IMPORT StrEdit;
  29. IMPORT StringIO;
  30. IMPORT SYSTEM;
  31. IMPORT VStorage;
  32. IMPORT VWindows;
  33. VAR
  34. Initialized : BOOLEAN;
  35. PROCEDURE Init();
  36. BEGIN
  37. IF Initialized THEN
  38. RETURN;
  39. ELSE
  40. Initialized := TRUE;
  41. END;
  42. (*EntryDiag:
  43. Diagnostics.Init();
  44. :EntryDiag*)
  45. ErrorManager.Init();
  46. ErrorNames.Init();
  47. HandleIO.Init();
  48. GenLists.Init();
  49. M2Strings.Init();
  50. MsColors.Init();
  51. NdxTypes.Init();
  52. NdxBones.Init();
  53. PosUtils.Init();
  54. ScrnTypes.Init();
  55. ScrnUtl1.Init();
  56. StrEdit.Init();
  57. StringIO.Init();
  58. VStorage.Init();
  59. VWindows.Init();
  60. (*EntryDiag:
  61. Diagnostics.diagS( 'Entering DspFiles', '' );
  62. :EntryDiag*)
  63. MainFrame := NIL;
  64. (*EntryDiag:
  65. Diagnostics.diagS( 'Exiting DspFiles', '' );
  66. :EntryDiag*)
  67. END Init;
  68. PROCEDURE ReMapCol( TheFrame: ScrnTypes.DisplayFrame;
  69. DspFileCol: CARDINAL ): CARDINAL;
  70. VAR
  71. diff: CARDINAL;
  72. BEGIN
  73. IF DspFileCol > VWindows.EndCol(TheFrame^.WindowHandle) THEN
  74. IF DspFileCol <= 128 THEN
  75. RETURN VWindows.EndCol(TheFrame^.WindowHandle) - 1;
  76. ELSIF DspFileCol <= 256 THEN
  77. diff := 256 - DspFileCol;
  78. IF diff <= VWindows.EndCol(TheFrame^.WindowHandle) THEN
  79. RETURN VWindows.EndCol(TheFrame^.WindowHandle) - diff - 1;
  80. END;
  81. END;
  82. ErrorNames.WarningName( 'InvCrd' );
  83. END;
  84. RETURN DspFileCol;
  85. END ReMapCol;
  86. PROCEDURE ReMapRow( TheFrame: ScrnTypes.DisplayFrame;
  87. DspFileRow: CARDINAL ): CARDINAL;
  88. VAR
  89. diff: CARDINAL;
  90. BEGIN
  91. IF DspFileRow > VWindows.EndRow(TheFrame^.WindowHandle) THEN
  92. IF DspFileRow <= 128 THEN
  93. (* Some sort of mistake. Force it into acceptable range. *)
  94. RETURN VWindows.EndRow(TheFrame^.WindowHandle) - 1;
  95. ELSIF DspFileRow <= 256 THEN
  96. (* They're trying to tell us to use EndRow, whatever it
  97. happens to be. *)
  98. diff := 256 - DspFileRow;
  99. IF diff <= VWindows.EndRow(TheFrame^.WindowHandle) THEN
  100. RETURN VWindows.EndRow(TheFrame^.WindowHandle) - diff - 1;
  101. END;
  102. END;
  103. ErrorNames.WarningName( 'InvCrd' );
  104. END;
  105. RETURN DspFileRow;
  106. END ReMapRow;
  107. PROCEDURE OpenDisplayFile(VAR TheDspFile : ScrnTypes.DisplayFile;
  108. fname : ARRAY OF CHAR): BOOLEAN;
  109. VAR
  110. tmpstr: ScrnTypes.AFrameName;
  111. RightVersion : BOOLEAN;
  112. TypeCode: CARDINAL;
  113. BEGIN (*OpenDisplayFile*)
  114. IF (MainFrame = NIL) THEN
  115. ScrnTypes.InitDisplayFrame( MainFrame, VWindows.CurrentWindow );
  116. END;
  117. (* find and open the file if it exists *)
  118. IF NOT NdxBones.OpenNdxFile( TheDspFile, fname ) THEN
  119. RETURN FALSE;
  120. END;
  121. IF NdxBones.InitBuffer( TheDspFile, 'RepVers' ) THEN
  122. GenLists.GetElmt( TheDspFile^.ListBuf, 1, tmpstr, TypeCode );
  123. IF PosUtils.Equal( '1.5c', tmpstr ) THEN
  124. RightVersion := TRUE;
  125. ELSE
  126. RightVersion := FALSE;
  127. END;
  128. ELSE
  129. RightVersion := FALSE;
  130. END;
  131. IF NOT RightVersion THEN
  132. ErrorNames.WarningName( 'RecompileDsp' );
  133. END;
  134. IF (MainFrame^.FromFile = NIL) THEN
  135. MainFrame^.FromFile := TheDspFile;
  136. END;
  137. RETURN TRUE;
  138. END OpenDisplayFile;
  139. PROCEDURE CloseDisplayFile(VAR TheDspFile : ScrnTypes.DisplayFile);
  140. BEGIN
  141. IF TheDspFile # NIL THEN
  142. WITH TheDspFile^ DO
  143. (*Note that we don't call CloseNdxFile here because it
  144. pulls in code that updates the file's ndx if it's been
  145. changed. Since we don't write to NdxFile's in the
  146. basic screen system, we can avoid linking all that code
  147. in by doing a few extra deallocations here.*)
  148. GenLists.DisposeList( ListBuf);
  149. GenLists.DisposeList( StructLst);
  150. GenLists.DisposeList( Ndx );
  151. GenLists.DisposeList( AltKeys );
  152. (*Note that we don't dispose of the FileBufPtr because
  153. it should always have been absorbed into the ListBuf.*)
  154. IF handle # 0 THEN
  155. (*handle may be 0 if the NdxFile record was initialized
  156. but never passed to OpenNdxFile.*)
  157. StringIO.PrintMessage( HandleIO.CloseHandle( handle) );
  158. END;
  159. END;
  160. VStorage.DosDealloc( TheDspFile, SYSTEM.TSIZE(NdxTypes.NdxRecord) );
  161. END;
  162. END CloseDisplayFile;
  163. PROCEDURE UnPackFrame( PackedRec: ScrnTypes.PackedFrame; VAR FrameRec:
  164. ScrnTypes.DisplayFrame);
  165. BEGIN
  166. WITH FrameRec^ DO
  167. (*
  168. PushedFrame := NIL;
  169. DO NOT set PushedFrame to NIL because we have to preserve
  170. FrameRec's linked to any frames that may be pushed underneath
  171. it.
  172. *)
  173. CurrentField := 1;
  174. RowsScrolled := 0;
  175. ColsScrolled := 0;
  176. FrameChanged := FALSE;
  177. ClearFirst := PackedRec^.ClearFirst;
  178. ClearAfter := PackedRec^.ClearAfter;
  179. EntryBox := PackedRec^.EntryBox;
  180. ExitBox := PackedRec^.ExitBox;
  181. M2Strings.Assign( PackedRec^.Caption, Caption );
  182. VirtualWidth := PackedRec^.VirtualWidth;
  183. VirtualHeight := PackedRec^.VirtualHeight;
  184. headline := PackedRec^.headline;
  185. startcol := PackedRec^.startcol;
  186. endcol := ReMapCol( FrameRec, PackedRec^.endcol );
  187. startrow := PackedRec^.startrow;
  188. endrow := ReMapRow( FrameRec, PackedRec^.endrow );
  189. action := PackedRec^.action;
  190. pbfor := PackedRec^.pbfor;
  191. pbbak := PackedRec^.pbbak;
  192. selfor := PackedRec^.selfor;
  193. selbak := PackedRec^.selbak;
  194. normfor := PackedRec^.normfor;
  195. normbak := PackedRec^.normbak;
  196. bordfor := PackedRec^.bordfor;
  197. bordbak := PackedRec^.bordbak;
  198. msgfor := PackedRec^.msgfor;
  199. msgbak := PackedRec^.msgbak;
  200. promfor := PackedRec^.promfor;
  201. prombak := PackedRec^.prombak;
  202. pbatrb := PackedRec^.pbatrb;
  203. selatrb := PackedRec^.selatrb;
  204. normatrb := PackedRec^.normatrb;
  205. bordatrb := PackedRec^.bordatrb;
  206. msgatrb := PackedRec^.msgatrb;
  207. promatrb := PackedRec^.promatrb;
  208. END;
  209. END UnPackFrame;
  210. PROCEDURE GetFrameFromList( TheList: GenLists.GenList;
  211. VAR FrameRec: ScrnTypes.DisplayFrame );
  212. VAR
  213. TypeCode, size: CARDINAL;
  214. PackedRec: ScrnTypes.PackedFrame;
  215. BEGIN
  216. FrameRec^.self := TheList;
  217. GenLists.GetElmt( FrameRec^.self, 1, FrameRec^.HelpFrame, TypeCode );
  218. GenLists.GetElmt( FrameRec^.self, 2, FrameRec^.parent, TypeCode );
  219. GenLists.GetElmt( FrameRec^.self, 3, FrameRec^.normlnext, TypeCode );
  220. GenLists.GetElmtAdr( FrameRec^.self, 4, PackedRec, size, TypeCode );
  221. UnPackFrame( PackedRec, FrameRec);
  222. ScrnUtl1.GetFrameLists( FrameRec );
  223. END GetFrameFromList;
  224. PROCEDURE InitEdFields( VAR TheFrame: ScrnTypes.DisplayFrame );
  225. VAR
  226. ListEnd, cnt: CARDINAL;
  227. TmpList1, TmpList2: GenLists.GenList;
  228. BEGIN
  229. IF NOT GenLists.Initialized( TheFrame^.FieldList ) THEN
  230. RETURN;
  231. END;
  232. ListEnd := GenLists.ListLength( TheFrame^.FieldList );
  233. FOR cnt := 1 TO ListEnd DO
  234. IF ScrnUtl1.FieldType( TheFrame, cnt ) = ScrnTypes.EditorCode THEN
  235. IF ScrnUtl1.GetFieldDataList( TheFrame, cnt, TmpList1 ) THEN
  236. GenLists.CopyList( TmpList1, TmpList2 );
  237. IF NOT ScrnUtl1.ListToEdField( TmpList2, TheFrame, cnt ) THEN
  238. (* no response *)
  239. END;
  240. END;
  241. END;
  242. END;
  243. END InitEdFields;
  244. PROCEDURE ReadFrame(VAR TheDspFile: ScrnTypes.DisplayFile;
  245. VAR FrameRec: ScrnTypes.DisplayFrame; FrameName: ARRAY OF
  246. CHAR );
  247. (* Reads screen FrameName from TheDspFile, into frame record
  248. FrameRec. Differs from ReadFrameFast in that it
  249. disconnects FrameRec's lists from TheDspFile, so they will not
  250. be disposed of the next time something is read from
  251. TheDspFile. They will be disposed of the next time we call
  252. ReadFrame, or when the frame is closed. Safer, but a
  253. little slower, than ReadFrameFast.*)
  254. VAR
  255. TmpMsg: ARRAY [0..79] OF CHAR;
  256. BEGIN
  257. (* ReadFrame *)
  258. IF (TheDspFile = NIL) OR
  259. (TheDspFile^.InitCheck # 46102) THEN
  260. (* Temporary measure -- NdxTypes needs to export a version of
  261. CheckInit that returns a boolean so we don't have to know
  262. what the private InitKey value is. *)
  263. ErrorManager.WARN( "Attempt to use unopened .DSP file" );
  264. END;
  265. StrEdit.SetLength( TheDspFile^.BufRecName, 0 );
  266. IF NOT NdxBones.InitBuffer( TheDspFile, FrameName ) THEN
  267. StrEdit.AssignStr( 'Unable to load frame ', TmpMsg );
  268. StrEdit.Append( TmpMsg, FrameName );
  269. StrEdit.Append( TmpMsg, ' from file ' );
  270. StrEdit.Append( TmpMsg, TheDspFile^.name );
  271. ErrorManager.WARN( TmpMsg );
  272. END;
  273. M2Strings.Assign( FrameName, FrameRec^.ThisFrame );
  274. IF NOT FrameRec^.SelfSharedWithFile THEN
  275. GenLists.DisposeList( FrameRec^.self );
  276. ELSE
  277. GenLists.NilList( FrameRec^.self );
  278. (* Useless, but it gives us something to look for in
  279. the RTD. *)
  280. END;
  281. GenLists.CopyList( TheDspFile^.ListBuf, FrameRec^.self );
  282. GetFrameFromList( FrameRec^.self, FrameRec );
  283. FrameRec^.FromFile := TheDspFile;
  284. FrameRec^.SelfSharedWithFile := FALSE;
  285. InitEdFields( FrameRec );
  286. END ReadFrame;
  287. PROCEDURE ReadDisplayFrame(VAR TheDspFile: ScrnTypes.DisplayFile;
  288. VAR FrameRec: ScrnTypes.DisplayFrame; FrameName: ARRAY OF
  289. CHAR );
  290. BEGIN
  291. ReadFrame( TheDspFile, FrameRec, FrameName );
  292. END ReadDisplayFrame;
  293. PROCEDURE ReadFrameFast(VAR TheDspFile: ScrnTypes.DisplayFile;
  294. VAR FrameRec: ScrnTypes.DisplayFrame; FrameName: ARRAY OF
  295. CHAR );
  296. (* Reads screen FrameName from TheDspFile, into frame record
  297. FrameRec.*)
  298. VAR
  299. TmpMsg: ARRAY [0..79] OF CHAR;
  300. BEGIN
  301. (* ReadFrameFast *)
  302. IF (TheDspFile = NIL) OR
  303. (TheDspFile^.InitCheck # 46102) THEN
  304. (* Temporary measure -- NdxTypes needs to export a version of
  305. CheckInit that returns a boolean so we don't have to know
  306. what the private InitKey value is. *)
  307. ErrorManager.WARN( "Attempt to use unopened .DSP file" );
  308. END;
  309. StrEdit.SetLength( TheDspFile^.BufRecName, 0 );
  310. (*Makes sure repeated reads of same frame dispose of old
  311. frame each time.*)
  312. IF NOT NdxBones.InitBuffer( TheDspFile, FrameName ) THEN
  313. StrEdit.AssignStr( 'Unable to load frame ', TmpMsg );
  314. StrEdit.Append( TmpMsg, FrameName );
  315. StrEdit.Append( TmpMsg, ' from file ' );
  316. StrEdit.Append( TmpMsg, TheDspFile^.name );
  317. ErrorManager.WARN( TmpMsg );
  318. END;
  319. M2Strings.Assign( FrameName, FrameRec^.ThisFrame );
  320. IF NOT FrameRec^.SelfSharedWithFile THEN
  321. GenLists.DisposeList( FrameRec^.self );
  322. END;
  323. GetFrameFromList( TheDspFile^.ListBuf, FrameRec );
  324. FrameRec^.FromFile := TheDspFile;
  325. FrameRec^.SelfSharedWithFile := TRUE;
  326. END ReadFrameFast;
  327. BEGIN
  328. Initialized := FALSE;
  329. Init();
  330. END DspFiles.