home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / nicol / sti_vm / sti_vptr.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1979-12-31  |  13.0 KB  |  535 lines

  1. Unit STI_VPTR;
  2. {$V-}
  3.  
  4. interface
  5.  
  6. Const
  7.   NUMPAGES      = 50;
  8.  
  9. Type
  10.   STI_VPointer  = function : pointer;
  11.  
  12. procedure STI_VPGetMem(Var Point : STI_VPointer);
  13. procedure STI_VPFreeMem(Point : pointer);
  14. Procedure STI_VPInitialise(Name : string; Pages,SizePage : word);
  15. procedure STI_VPClose;
  16.  
  17. implementation
  18.  
  19. Var
  20.   VMCallArray : array[1..50] of STI_VPointer;
  21.   VMFlags     : array[1..50] of byte;       
  22.   PageNumber  : word;
  23.   PageSize    : word;
  24.   Point       : pointer;
  25.   SwapFile    : File;
  26.  
  27. {---------------------------------------------------------------------------}
  28.  
  29. procedure PutPage;
  30.  
  31. begin
  32.   Seek(SwapFile,PageNumber);
  33.   BlockWrite(SwapFile,Point^,1);
  34.   if VMFlags[PageNumber] > 200 then
  35.     Dec(VMFlags[PageNumber],200);
  36. end;
  37.  
  38. {---------------------------------------------------------------------------}
  39.  
  40. function GetPage(PageNum : word) : pointer;
  41.  
  42. begin
  43.   if PageNum <> PageNumber then
  44.     PutPage;
  45.   if (PageNum < FileSize(SwapFile)) and (VMFlags[PageNum] < 200) then
  46.     begin
  47.       Seek(SwapFile,PageNum);
  48.       BlockRead(SwapFile,Point^,1);
  49.       Inc(VMFlags[PageNum],200);
  50.     end; 
  51.   PageNumber := PageNum;
  52.   GetPage := Point;
  53. end;
  54.  
  55. {---------------------------------------------------------------------------}
  56.  
  57. procedure STI_VPGetMem(Var Point : STI_VPointer);
  58.  
  59. Var
  60.   Loop   : word;
  61.   Dummy1 : pointer absolute Point;
  62.   Dummy2 : array[1..NUMPAGES] of pointer absolute VMCallArray;
  63.  
  64. begin
  65.   for Loop := 1 to NUMPAGES do
  66.     begin
  67.       if VMFlags[Loop] < 1 then
  68.         begin
  69.           Dummy1 := Dummy2[Loop];
  70.           VMFlags[Loop] := 1;
  71.           Exit;
  72.         end;
  73.     end;
  74.   WriteLn('Virtual Memory OverFlow');
  75.   Halt;
  76. end;
  77.  
  78. {---------------------------------------------------------------------------}
  79.  
  80. procedure STI_VPFreeMem(Point : pointer);
  81.  
  82. Var
  83.   Loop   : word;
  84.   Dummy1 : pointer absolute Point;
  85.   Dummy2 : array[1..NUMPAGES] of pointer absolute VMCallArray;
  86.  
  87. begin
  88.   for Loop := 1 to NUMPAGES do
  89.     begin
  90.       if Dummy1 = Dummy2[Loop] then
  91.         begin
  92.           VMFlags[Loop] := 0;
  93.           Exit;
  94.         end;
  95.     end;
  96. end;
  97.  
  98. {---------------------------------------------------------------------------}
  99. {$F+}
  100. function PageCall1 : Pointer;
  101. {$F-}
  102. begin
  103.   PageCall1 := GetPage(1);
  104. end;
  105. {---------------------------------------------------------------------------}
  106. {$F+}
  107. function PageCall2 : Pointer;
  108. {$F-}
  109. begin
  110.   PageCall2 := GetPage(2);
  111. end;
  112. {---------------------------------------------------------------------------}
  113. {$F+}
  114. function PageCall3 : Pointer;
  115. {$F-}
  116. begin
  117.   PageCall3 := GetPage(3);
  118. end;
  119. {---------------------------------------------------------------------------}
  120. {$F+}
  121. function PageCall4 : Pointer;
  122. {$F-}
  123. begin
  124.   PageCall4 := GetPage(4);
  125. end;
  126. {---------------------------------------------------------------------------}
  127. {$F+}
  128. function PageCall5 : Pointer;
  129. {$F-}
  130. begin
  131.   PageCall5 := GetPage(5);
  132. end;
  133. {---------------------------------------------------------------------------}
  134. {$F+}
  135. function PageCall6 : Pointer;
  136. {$F-}
  137. begin
  138.   PageCall6 := GetPage(6);
  139. end;
  140. {---------------------------------------------------------------------------}
  141. {$F+}
  142. function PageCall7 : Pointer;
  143. {$F-}
  144. begin
  145.   PageCall7 := GetPage(7);
  146. end;
  147. {---------------------------------------------------------------------------}
  148. {$F+}
  149. function PageCall8 : Pointer;
  150. {$F-}
  151. begin
  152.   PageCall8 := GetPage(8);
  153. end;
  154. {---------------------------------------------------------------------------}
  155. {$F+}
  156. function PageCall9 : Pointer;
  157. {$F-}
  158. begin
  159.   PageCall9 := GetPage(9);
  160. end;
  161. {---------------------------------------------------------------------------}
  162. {$F+}
  163. function PageCall10 : Pointer;
  164. {$F-}
  165. begin
  166.   PageCall10 := GetPage(10);
  167. end;
  168. {---------------------------------------------------------------------------}
  169. {$F+}
  170. function PageCall11 : Pointer;
  171. {$F-}
  172. begin
  173.   PageCall11 := GetPage(11);
  174. end;
  175. {---------------------------------------------------------------------------}
  176. {$F+}
  177. function PageCall12 : Pointer;
  178. {$F-}
  179. begin
  180.   PageCall12 := GetPage(12);
  181. end;
  182. {---------------------------------------------------------------------------}
  183. {$F+}
  184. function PageCall13 : Pointer;
  185. {$F-}
  186. begin
  187.   PageCall13 := GetPage(13);
  188. end;
  189. {---------------------------------------------------------------------------}
  190. {$F+}
  191. function PageCall14 : Pointer;
  192. {$F-}
  193. begin
  194.   PageCall14 := GetPage(14);
  195. end;
  196. {---------------------------------------------------------------------------}
  197. {$F+}
  198. function PageCall15 : Pointer;
  199. {$F-}
  200. begin
  201.   PageCall15 := GetPage(15);
  202. end;
  203. {---------------------------------------------------------------------------}
  204. {$F+}
  205. function PageCall16 : Pointer;
  206. {$F-}
  207. begin
  208.   PageCall16 := GetPage(16);
  209. end;
  210. {---------------------------------------------------------------------------}
  211. {$F+}
  212. function PageCall17 : Pointer;
  213. {$F-}
  214. begin
  215.   PageCall17 := GetPage(17);
  216. end;
  217. {---------------------------------------------------------------------------}
  218. {$F+}
  219. function PageCall18 : Pointer;
  220. {$F-}
  221. begin
  222.   PageCall18 := GetPage(18);
  223. end;
  224. {---------------------------------------------------------------------------}
  225. {$F+}
  226. function PageCall19 : Pointer;
  227. {$F-}
  228. begin
  229.   PageCall19 := GetPage(19);
  230. end;
  231. {---------------------------------------------------------------------------}
  232. {$F+}
  233. function PageCall20 : Pointer;
  234. {$F-}
  235. begin
  236.   PageCall20 := GetPage(20);
  237. end;
  238. {---------------------------------------------------------------------------}
  239. {$F+}
  240. function PageCall21 : Pointer;
  241. {$F-}
  242. begin
  243.   PageCall21 := GetPage(21);
  244. end;
  245. {---------------------------------------------------------------------------}
  246. {$F+}
  247. function PageCall22 : Pointer;
  248. {$F-}
  249. begin
  250.   PageCall22 := GetPage(22);
  251. end;
  252. {---------------------------------------------------------------------------}
  253. {$F+}
  254. function PageCall23 : Pointer;
  255. {$F-}
  256. begin
  257.   PageCall23 := GetPage(23);
  258. end;
  259. {---------------------------------------------------------------------------}
  260. {$F+}
  261. function PageCall24 : Pointer;
  262. {$F-}
  263. begin
  264.   PageCall24 := GetPage(24);
  265. end;
  266. {---------------------------------------------------------------------------}
  267. {$F+}
  268. function PageCall25 : Pointer;
  269. {$F-}
  270. begin
  271.   PageCall25 := GetPage(25);
  272. end;
  273. {---------------------------------------------------------------------------}
  274. {$F+}
  275. function PageCall26 : Pointer;
  276. {$F-}
  277. begin
  278.   PageCall26 := GetPage(26);
  279. end;
  280. {---------------------------------------------------------------------------}
  281. {$F+}
  282. function PageCall27 : Pointer;
  283. {$F-}
  284. begin
  285.   PageCall27 := GetPage(27);
  286. end;
  287. {---------------------------------------------------------------------------}
  288. {$F+}
  289. function PageCall28 : Pointer;
  290. {$F-}
  291. begin
  292.   PageCall28 := GetPage(28);
  293. end;
  294. {---------------------------------------------------------------------------}
  295. {$F+}
  296. function PageCall29 : Pointer;
  297. {$F-}
  298. begin
  299.   PageCall29 := GetPage(29);
  300. end;
  301. {---------------------------------------------------------------------------}
  302. {$F+}
  303. function PageCall30 : Pointer;
  304. {$F-}
  305. begin
  306.   PageCall30 := GetPage(30);
  307. end;
  308. {---------------------------------------------------------------------------}
  309. {$F+}
  310. function PageCall31 : Pointer;
  311. {$F-}
  312. begin
  313.   PageCall31 := GetPage(31);
  314. end;
  315. {---------------------------------------------------------------------------}
  316. {$F+}
  317. function PageCall32 : Pointer;
  318. {$F-}
  319. begin
  320.   PageCall32 := GetPage(32);
  321. end;
  322. {---------------------------------------------------------------------------}
  323. {$F+}
  324. function PageCall33 : Pointer;
  325. {$F-}
  326. begin
  327.   PageCall33 := GetPage(33);
  328. end;
  329. {---------------------------------------------------------------------------}
  330. {$F+}
  331. function PageCall34 : Pointer;
  332. {$F-}
  333. begin
  334.   PageCall34 := GetPage(34);
  335. end;
  336. {---------------------------------------------------------------------------}
  337. {$F+}
  338. function PageCall35 : Pointer;
  339. {$F-}
  340. begin
  341.   PageCall35 := GetPage(35);
  342. end;
  343. {---------------------------------------------------------------------------}
  344. {$F+}
  345. function PageCall36 : Pointer;
  346. {$F-}
  347. begin
  348.   PageCall36 := GetPage(36);
  349. end;
  350. {---------------------------------------------------------------------------}
  351. {$F+}
  352. function PageCall37 : Pointer;
  353. {$F-}
  354. begin
  355.   PageCall37 := GetPage(37);
  356. end;
  357. {---------------------------------------------------------------------------}
  358. {$F+}
  359. function PageCall38 : Pointer;
  360. {$F-}
  361. begin
  362.   PageCall38 := GetPage(38);
  363. end;
  364. {---------------------------------------------------------------------------}
  365. {$F+}
  366. function PageCall39 : Pointer;
  367. {$F-}
  368. begin
  369.   PageCall39 := GetPage(39);
  370. end;
  371. {---------------------------------------------------------------------------}
  372. {$F+}
  373. function PageCall40 : Pointer;
  374. {$F-}
  375. begin
  376.   PageCall40 := GetPage(40);
  377. end;
  378. {---------------------------------------------------------------------------}
  379. {$F+}
  380. function PageCall41 : Pointer;
  381. {$F-}
  382. begin
  383.   PageCall41 := GetPage(41);
  384. end;
  385. {---------------------------------------------------------------------------}
  386. {$F+}
  387. function PageCall42 : Pointer;
  388. {$F-}
  389. begin
  390.   PageCall42 := GetPage(42);
  391. end;
  392. {---------------------------------------------------------------------------}
  393. {$F+}
  394. function PageCall43 : Pointer;
  395. {$F-}
  396. begin
  397.   PageCall43 := GetPage(43);
  398. end;
  399. {---------------------------------------------------------------------------}
  400. {$F+}
  401. function PageCall44 : Pointer;
  402. {$F-}
  403. begin
  404.   PageCall44 := GetPage(44);
  405. end;
  406. {---------------------------------------------------------------------------}
  407. {$F+}
  408. function PageCall45 : Pointer;
  409. {$F-}
  410. begin
  411.   PageCall45 := GetPage(45);
  412. end;
  413. {---------------------------------------------------------------------------}
  414. {$F+}
  415. function PageCall46 : Pointer;
  416. {$F-}
  417. begin
  418.   PageCall46 := GetPage(46);
  419. end;
  420. {---------------------------------------------------------------------------}
  421. {$F+}
  422. function PageCall47 : Pointer;
  423. {$F-}
  424. begin
  425.   PageCall47 := GetPage(47);
  426. end;
  427. {---------------------------------------------------------------------------}
  428. {$F+}
  429. function PageCall48 : Pointer;
  430. {$F-}
  431. begin
  432.   PageCall48 := GetPage(48);
  433. end;
  434. {---------------------------------------------------------------------------}
  435. {$F+}
  436. function PageCall49 : Pointer;
  437. {$F-}
  438. begin
  439.   PageCall49 := GetPage(49);
  440. end;
  441. {---------------------------------------------------------------------------}
  442. {$F+}
  443. function PageCall50 : Pointer;
  444. {$F-}
  445. begin
  446.   PageCall50 := GetPage(50);
  447. end;
  448. {---------------------------------------------------------------------------}
  449. Procedure STI_VPInitialise(Name : string; Pages,SizePage : word);
  450.  
  451. Var
  452.   Dummy : string;
  453.   Loop  : word;
  454.  
  455. begin
  456.   VMCallArray[    1]  := PageCall1;
  457.   VMCallArray[    2]  := PageCall2;
  458.   VMCallArray[    3]  := PageCall3;
  459.   VMCallArray[    4]  := PageCall4;
  460.   VMCallArray[    5]  := PageCall5;
  461.   VMCallArray[    6]  := PageCall6;
  462.   VMCallArray[    7]  := PageCall7;
  463.   VMCallArray[    8]  := PageCall8;
  464.   VMCallArray[    9]  := PageCall9;
  465.   VMCallArray[   10]  := PageCall10;
  466.   VMCallArray[   11]  := PageCall11;
  467.   VMCallArray[   12]  := PageCall12;
  468.   VMCallArray[   13]  := PageCall13;
  469.   VMCallArray[   14]  := PageCall14;
  470.   VMCallArray[   15]  := PageCall15;
  471.   VMCallArray[   16]  := PageCall16;
  472.   VMCallArray[   17]  := PageCall17;
  473.   VMCallArray[   18]  := PageCall18;
  474.   VMCallArray[   19]  := PageCall19;
  475.   VMCallArray[   20]  := PageCall20;
  476.   VMCallArray[   21]  := PageCall21;
  477.   VMCallArray[   22]  := PageCall22;
  478.   VMCallArray[   23]  := PageCall23;
  479.   VMCallArray[   24]  := PageCall24;
  480.   VMCallArray[   25]  := PageCall25;
  481.   VMCallArray[   26]  := PageCall26;
  482.   VMCallArray[   27]  := PageCall27;
  483.   VMCallArray[   28]  := PageCall28;
  484.   VMCallArray[   29]  := PageCall29;
  485.   VMCallArray[   30]  := PageCall30;
  486.   VMCallArray[   31]  := PageCall31;
  487.   VMCallArray[   32]  := PageCall32;
  488.   VMCallArray[   33]  := PageCall33;
  489.   VMCallArray[   34]  := PageCall34;
  490.   VMCallArray[   35]  := PageCall35;
  491.   VMCallArray[   36]  := PageCall36;
  492.   VMCallArray[   37]  := PageCall37;
  493.   VMCallArray[   38]  := PageCall38;
  494.   VMCallArray[   39]  := PageCall39;
  495.   VMCallArray[   40]  := PageCall40;
  496.   VMCallArray[   41]  := PageCall41;
  497.   VMCallArray[   42]  := PageCall42;
  498.   VMCallArray[   43]  := PageCall43;
  499.   VMCallArray[   44]  := PageCall44;
  500.   VMCallArray[   45]  := PageCall45;
  501.   VMCallArray[   46]  := PageCall46;
  502.   VMCallArray[   47]  := PageCall47;
  503.   VMCallArray[   48]  := PageCall48;
  504.   VMCallArray[   49]  := PageCall49;
  505.   VMCallArray[   50]  := PageCall50;
  506.   For Loop := 1 to NUMPAGES do
  507.     begin
  508.       VMFlags[Loop] := 0;
  509.     end;
  510.   PageNumber := 1;
  511.   PageSize   := SizePage;
  512.   Assign(SwapFile,Name);
  513.   Rewrite(SwapFile,SizePage);
  514.   GetMem(Point,SizePage);
  515.   FillChar(Point^,SizePage,#32);
  516.   Dummy := 'STIVPTR'+#26+'Virtual Memory Management System Copyright (C) 1990,1991 by STI';
  517.   Seek(SwapFile,0);
  518.   BlockWrite(SwapFile,Dummy[1],0);
  519. end;
  520.  
  521. {---------------------------------------------------------------------------}
  522.  
  523. procedure STI_VPClose;
  524.  
  525. begin
  526.   Close(SwapFile);
  527.   Erase(SwapFile);
  528.   FreeMem(Point,PageSize);
  529. end;
  530.  
  531. {---------------------------------------------------------------------------}
  532.  
  533. begin
  534. end.
  535.