home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / makeipf.zip / english / MakeIPF.INF (.txt) next >
OS/2 Help File  |  1996-02-16  |  90KB  |  2,911 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Introduction ΓòÉΓòÉΓòÉ
  3.  
  4.  
  5. With MakeIPF, you can easily create IPF files. Instead of editing the IPF files 
  6. directly, you enter a simpler ASCII source text. Links are created 
  7. automatically; windows of different headings levels can be shown simultaneusly 
  8. with only one command; at the end of a chapter, links to subchapters are 
  9. created automatically and a lot of more. 
  10.  
  11. The new version 2.0 has got new functions and some minor bugfixes. 
  12.  
  13. IPF, INF and HLP-files
  14.  
  15. The contents of IBM INF and HLP files are described in a language called IPF. 
  16. It is powerful and supports nearly everything one might want to do. However, it 
  17. is verbose and somewhat tedious to write. Hence, for example, people don't use 
  18. cross-references (links) as often as desirable. 
  19.  
  20. What MakeIPF does
  21.  
  22. MakeIPF helps you writing IBM INF * and HLP files * . MakeIPF generates IPF * 
  23. files from a special MakeIPF ASCII format. The automatically generated IPF file 
  24. is the source file for the IBM program IPFC * . 
  25.  
  26. When using MakeIPF, you have only to learn the much more easier MakeIPF source 
  27. format. You can write MakeIPF files with 
  28.  
  29. o an ASCII-editor 
  30. o or an old DOS WordStar Version 3.4 or 4 * . 
  31.  
  32.  
  33. MakeIPF has some powerful functions: 
  34.  
  35. o Automatic linking and indexing 
  36.   Marking a word or a phrase of several words with a special character will 
  37.   generate 
  38.  
  39.    - a link from all other occurrences of the word or phrase in the document to 
  40.      the marked position 
  41.    - an entry in the index. 
  42.  
  43. o Automatic generation of helptables 
  44.   In the MakeIPF source file you can directly enter ID constants like 
  45.   "ID_buttonOK" to associate chapters of your HLP file with buttons of your 
  46.   program. MakeIPF generates a helptable file you can include in your RC file. 
  47.  
  48. o Automatic Writing of links to subchapters 
  49.   At the end of a window of a higher heading level, links to all subchapters 
  50.   and to the next chapter of the same level will be created. 
  51.  
  52. o Automatic arrangement of several heading level windows 
  53.   With only one command, two or three heading levels are placed simultaneously 
  54.   on the screen. See window arrangement sample output. 
  55.  
  56. o Simple creation of footnotes 
  57.  
  58. o Automatic line drawing to generate boxes 
  59.  
  60. o Short commands 
  61.  
  62.    - for heading levels 
  63.    - for choosing fonts 
  64.    - to include bitmaps within a line of text 
  65.    - to generate unordered lists and ordered lists. 
  66.  
  67.  
  68. ΓòÉΓòÉΓòÉ 2. Writing a file in the MakeIPF format ΓòÉΓòÉΓòÉ
  69.  
  70.  
  71. subchapters: 
  72. Essentials 
  73. Beginning 
  74. Headings 
  75. Fonts 
  76. Unordered lists and ordered lists 
  77. Including Bitmaps 
  78. Linking and Indexing 
  79. Line drawing 
  80. Footnotes 
  81. Margins and Formatting 
  82. if-conditions 
  83.  
  84. next chapter: 
  85. Generating helptables and panel ID's 
  86.  
  87.  
  88. ΓòÉΓòÉΓòÉ 2.1. Essentials ΓòÉΓòÉΓòÉ
  89.  
  90.  
  91. subchapters: 
  92. Dot commands 
  93. Toggles 
  94. Handling of Returns 
  95.  
  96. next chapter: 
  97. Beginning 
  98.  
  99.  
  100. ΓòÉΓòÉΓòÉ 2.1.1. Dot commands ΓòÉΓòÉΓòÉ
  101.  
  102.  
  103. The MakeIPF format uses dot commands like old WordStar. A dot command is a 
  104. complete line beginning with a dot, for example 
  105.  
  106. .SF 
  107.  
  108. sets the standard font to default. Dot commands aren't case sensitive. A lot of 
  109. dot commands are expecting parameters, for example 
  110.  
  111. .LM10 
  112.  
  113. will change the left margin to 10. You may write a space between the dot 
  114. command and the parameter. 
  115.  
  116. The line 
  117.  
  118. ..comment 
  119.  
  120. will be ignored. 
  121.  
  122. .:ipfcommand. 
  123. .:ipfcommand. expression 
  124.  
  125. You can enter an IPF command directly (that will be an exception, because most 
  126. important functions are part of the much easier MakeIPF format). 
  127.  
  128. In this hypertext, you will find a dot command summary. 
  129.  
  130.  
  131. ΓòÉΓòÉΓòÉ 2.1.2. Toggles ΓòÉΓòÉΓòÉ
  132.  
  133.  
  134. In the ini file you can set some toggle chars. If you have chosen "*" for 
  135. "underlined" and "@" for italic, you can write: 
  136.  
  137. This *part of this sentence* is very important. 
  138.  
  139. And you will get: 
  140.  
  141. This part of this sentence is very important. 
  142.  
  143. You also can mix some toggles: 
  144.  
  145. This is *underlined and @also italic* and only italic@. 
  146.  
  147. And you will get: 
  148.  
  149. This is underlined and also italic and only italic. 
  150.  
  151. But be careful. You aren't allowed to use the toggle chars in another way. So 
  152. you have to think about chars you absolutely won't use in your text. 
  153.  
  154. A good choice will be the control chars below 32, if your editor supports them. 
  155.  
  156.  
  157. ΓòÉΓòÉΓòÉ 2.1.3. Handling of Returns ΓòÉΓòÉΓòÉ
  158.  
  159.  
  160. Writing a text by using an ASCII editor, you can choose between two kinds of 
  161. handling Returns. With the ASCIIHARDRET setting in the ini file, every Return 
  162. will be treated as a new line. Use this setting if your editor does not put 
  163. Returns in wrapped lines. The OS/2 E and EPM editors support this function. 
  164.  
  165. Use ASCIISOFTRET if your editor puts Returns on all line endings. This will 
  166. only treat a Return as a new line, if 
  167.  
  168. o there are two Returns behind each other (i. e. an empty line) 
  169. o the last character in the line is . ! ? : ; 
  170.  
  171.  
  172. Using DOS WordStar, such problems don't exist, because WordStar knows both soft 
  173. and hard Returns. 
  174.  
  175.  
  176. ΓòÉΓòÉΓòÉ 2.2. Beginning ΓòÉΓòÉΓòÉ
  177.  
  178.  
  179. Every document has one title. The title will be shown as title of the main 
  180. window and in the tasklist. 
  181.  
  182. .TI Documentation of my program 
  183.  
  184. sets the title in INF files. Every MakeIPF INF source text should begin with 
  185. the title dot command, before the first heading. 
  186.  
  187. In HLP files, the title is set in your program source code, see function 
  188. InitHelp. The TI dot command title is ignored. 
  189.  
  190. By default, HLP files don't have the Pushbuttons "Contents", "Back" and 
  191. "Forward" that INF files have. If you want to have the same Pushbuttons in HLP 
  192. files as in INF files, enter the dot command 
  193.  
  194. .<> 
  195.  
  196.  
  197. ΓòÉΓòÉΓòÉ 2.3. Headings ΓòÉΓòÉΓòÉ
  198.  
  199.  
  200. Starting an INF file, you will get the contents window where you can open and 
  201. close sub chapters like a directory tree. The text under every heading fills a 
  202. seperate window. You can arrange your text with heading levels like you would 
  203. in a scientific work: 
  204.  
  205. first heading 
  206.   first sub heading 
  207.   second sub heading 
  208.    first sub sub heading 
  209.    second sub sub heading 
  210.   third sub heading 
  211. second heading 
  212.  
  213. In the MakeIPF format, the headings are written like 
  214.  
  215. .1 
  216. first heading 
  217.  
  218. .2 
  219. first sub heading 
  220.  
  221. .2 
  222. second sub heading 
  223.  
  224. .3 
  225. first sub sub heading 
  226.  
  227. .3 
  228. second sub sub heading 
  229.  
  230. .2 
  231. third sub heading 
  232.  
  233. .1 
  234. second heading 
  235.  
  236. Below the dot command for the heading level, you can enter the text appearing 
  237. in the window with the specific heading. 
  238.  
  239. Heading text can be longer than one line. Using the ASCIISOFTRET source format, 
  240. you have to enter two Returns after writing a heading text; the text can be 
  241. longer than one line. 
  242.  
  243. In a normal document, you would use numeric headings: 
  244.  
  245. 1. first heading 
  246.   1.1 first sub heading 
  247.   1.2 second sub heading 
  248.    1.2.1 first sub sub heading 
  249.    1.2.2 second sub sub heading 
  250.   1.3 third sub heading 
  251. 2. second heading 
  252.  
  253. The Text behind a heading dot command is limited to approx. 200 chars * , but 
  254. you will see only 70 to 120 chars, dependent of the size of the INF window on 
  255. the screen. 
  256.  
  257. At the beginning of a document, normal text can only be written after using the 
  258. first heading dot command. * 
  259.  
  260. You are allowed to use up to 6 heading levels. 
  261.  
  262. When a chapter has got subchapters, links to subchapters and a link to the next 
  263. chapter with the same heading level are automatically created. 
  264.  
  265. subchapters: 
  266. Window arrangement 
  267. duplication of heading text 
  268.  
  269. next chapter: 
  270. Fonts 
  271.  
  272.  
  273. ΓòÉΓòÉΓòÉ 2.3.1. Window arrangement ΓòÉΓòÉΓòÉ
  274.  
  275.  
  276. With only one dot command, you are able to divide the hypertext screen into two 
  277. or three parts to show two or three heading levels simultaneously. 
  278.  
  279. Arranging two heading levels 
  280.  
  281. With the dot command Window Arrangement 
  282.  
  283. .WA verti 30 
  284.  
  285. followed by a normal heading level dot command, the main window is divided 
  286. vertically in a left window (30% of the main window) and a right window (the 
  287. remaining 70%). The left window contains the chapter with the heading level 
  288. entered behind the WA dot command (called the "main chapter" below). In the 
  289. right window the first sub chapter of the main chapter appears. 
  290.  
  291. Note the spaces between the parameters of the window arrangement dot command. 
  292.  
  293. When using window arrangement, I strongly recommend to leave the automatic link 
  294. to subchapters function turned on in the ini file. 
  295.  
  296. .WA hori 40 
  297.  
  298. divides the main window horizontally. The main chapter gets the top window (40% 
  299. of the main window), the subchapter the bottom window (the remaining 60%). 
  300.  
  301. It is allowed to enter percent values from 10 to 90. 
  302.  
  303. For a sample arrangement of two heading levels see dot command summary and ini 
  304. file. 
  305.  
  306. Arranging three heading levels 
  307.  
  308. In the same way, you are allowed to arrange three heading levels. Now you have 
  309. to enter a hori and a verti value simultaneously. 
  310.  
  311. .WA hori 40 verti 30 III 
  312.  
  313. The first hori/verti value divides the main window completely from left to 
  314. right / from top to bottom. The second hori/verti value divides again one of 
  315. the parts into two parts, so you will get three windows: two smaller windows 
  316. and a bigger window. You can choose which heading level gets the bigger window. 
  317. Possible settings are I and III . So you can choose between four kinds of 
  318. arrangements: 
  319.  
  320.  
  321.  
  322.             verti hori           hori verti
  323.  
  324.  
  325.         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓòÑΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  326.         Γöé     Γòæ   II     Γöé   Γöé       I        Γöé
  327.   I     Γöé  I  ΓòáΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòí   Γò₧ΓòÉΓòÉΓòÉΓòÉΓòÉΓòªΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòí
  328.         Γöé     Γòæ   III    Γöé   Γöé II  Γòæ   III    Γöé
  329.         Γöé     Γòæ          Γöé   Γöé     Γòæ          Γöé
  330.         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓò¿ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓò¿ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  331.  
  332.         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓòÑΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓòÑΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  333.         Γöé  I  Γòæ          Γöé   Γöé  I  Γòæ   II     Γöé
  334.         Γò₧ΓòÉΓòÉΓòÉΓòÉΓòÉΓòú          Γöé   Γò₧ΓòÉΓòÉΓòÉΓòÉΓòÉΓò⌐ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòí
  335.  III    Γöé     Γòæ   III    Γöé   Γöé                Γöé
  336.         Γöé II  Γòæ          Γöé   Γöé      III       Γöé
  337.         Γöé     Γòæ          Γöé   Γöé                Γöé
  338.         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓò¿ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  339.  
  340.  I is the main chapter, II the subchapter of the main chapter,  III the sub sub 
  341. chapter of the main chapter. 
  342.  
  343. The window arrangement dot command is active for one main chapter with its sub 
  344. and sub sub chapters. 
  345.  
  346. The window arrangement only works when the main chapter window is activated 
  347. directly. When linking from somewhere to the sub sub chapter or using the 
  348. contents window to get directly into the sub sub chapter ( III ), the screen 
  349. won't be divided. When linking to a II window, the III window also appears, but 
  350. the space for the I window will not be used. 
  351.  
  352. If you want to arrange three heading levels simultaneously, but not every 
  353. chapter contains sub chapters, the level I window should become the bigger 
  354. window. That means I and not III should be used in the WA dot command. Then the 
  355. window of level II also takes the room of the level III window, if the level 
  356. III does not exist. 
  357.  
  358. subchapters: 
  359. Sample Input 
  360. Sample Output 
  361.  
  362. next chapter: 
  363. duplication of heading text 
  364.  
  365.  
  366. ΓòÉΓòÉΓòÉ 2.3.1.1. Sample Input ΓòÉΓòÉΓòÉ
  367.  
  368.  
  369. .WA verti 50 hori 40 I 
  370. .4 
  371. Sample Output 
  372.  
  373. The main chapter with links to subchapters. 
  374.  
  375. .5 
  376. first sub chapter 
  377.  
  378. The first sub chapter with links to sub sub chapters. 
  379.  
  380. .6 
  381. first sub sub chapter 
  382.  
  383. The first sub sub chapter of the first sub chapter. 
  384.  
  385. .6 
  386. second sub sub chapter 
  387.  
  388. The second sub sub chapter of the first sub chapter. 
  389.  
  390. .5 
  391. second sub chapter 
  392.  
  393. The second sub chapter. 
  394.  
  395. .6 
  396. first sub sub chapter 
  397.  
  398. The first sub sub chapter of the second sub chapter. 
  399.  
  400. .6 
  401. second sub sub chapter 
  402.  
  403. The second sub sub chapter of the second sub chapter. 
  404.  
  405.  
  406. ΓòÉΓòÉΓòÉ 2.3.1.2. Sample Output ΓòÉΓòÉΓòÉ
  407.  
  408.  
  409. The main chapter with links to subchapters. 
  410.  
  411. subchapters: 
  412. first sub chapter 
  413. second sub chapter 
  414.  
  415. next chapter: 
  416. duplication of heading text 
  417.  
  418.  
  419. ΓòÉΓòÉΓòÉ 2.3.1.2.1. first sub chapter ΓòÉΓòÉΓòÉ
  420.  
  421.  
  422. The first sub chapter with links to sub sub chapters. 
  423.  
  424. subchapters: 
  425. first sub sub chapter 
  426. second sub sub chapter 
  427.  
  428. next chapter: 
  429. second sub chapter 
  430.  
  431.  
  432. ΓòÉΓòÉΓòÉ 2.3.1.2.1.1. first sub sub chapter ΓòÉΓòÉΓòÉ
  433.  
  434.  
  435. The first sub sub chapter of the first sub chapter. 
  436.  
  437.  
  438. ΓòÉΓòÉΓòÉ 2.3.1.2.1.2. second sub sub chapter ΓòÉΓòÉΓòÉ
  439.  
  440.  
  441. The second sub sub chapter of the first sub chapter. 
  442.  
  443.  
  444. ΓòÉΓòÉΓòÉ 2.3.1.2.2. second sub chapter ΓòÉΓòÉΓòÉ
  445.  
  446.  
  447. The second sub chapter. 
  448.  
  449. subchapters: 
  450. first sub sub chapter 
  451. second sub sub chapter 
  452.  
  453. next chapter: 
  454. duplication of heading text 
  455.  
  456.  
  457. ΓòÉΓòÉΓòÉ 2.3.1.2.2.1. first sub sub chapter ΓòÉΓòÉΓòÉ
  458.  
  459.  
  460. The first sub sub chapter of the second sub chapter. 
  461.  
  462.  
  463. ΓòÉΓòÉΓòÉ 2.3.1.2.2.2. second sub sub chapter ΓòÉΓòÉΓòÉ
  464.  
  465.  
  466. The second sub sub chapter of the second sub chapter. 
  467.  
  468.  
  469. ΓòÉΓòÉΓòÉ 2.3.2. duplication of heading text ΓòÉΓòÉΓòÉ
  470.  
  471.  
  472. It's often necessary to use the heading text as a link target, to place it into 
  473. the index and to duplicate the heading text in the text window with a bigger 
  474. font: 
  475.  
  476. .3 
  477. heading text 
  478.  
  479. .IN heading text 
  480. .snC 
  481. heading text 
  482. .sn 
  483.  
  484. You can abbreviate this tedious job: Using the new dot command DuPlicate 
  485.  
  486. .dp 
  487.  
  488. duplicates the heading text at the beginning of the text window, in all heading 
  489. levels. That's useful if you write long heading text, because in the titlebar 
  490. only the first 70 characters are shown on average. 
  491.  
  492. .dp34 
  493.  
  494. duplicates heading text only in heading level 3 and 4. 
  495.  
  496. .dpA 
  497.  
  498. uses font A for the duplication of heading text in the text window. 
  499.  
  500. .dp- 
  501.  
  502. deactivates the duplication of heading text for all heading levels. 
  503.  
  504. .dp-234 
  505.  
  506. deactivates the duplication functionality only in the heading levels 2, 3 and 
  507. 4. 
  508.  
  509. .dp# 
  510.  
  511. in addition to duplication of heading text at the beginning of the text window, 
  512. the heading text becomes a target link. Writing the heading text behind the IN 
  513. dot dommand is no more necessary. Instead of # you can also write the index 
  514. char you have chosen in the ini file. 
  515.  
  516. .dp## 
  517.  
  518. In addition to the last sample, the heading text is also listed in the index. 
  519. But be carful with this function, because you will get a redundancy of 
  520. information in the contents and the index. And a big index can dramatically 
  521. slow down a (very big) HLP or INF file! 
  522.  
  523. .dp3##, 
  524. .3 
  525. Smith, John 
  526.  
  527. in the text window, "John Smith" is shown, and that's also the link target. But 
  528. in the titlebar, the contents and the index, "Smith, John" is written. 
  529.  
  530. You can combinate any of these commands. 
  531.  
  532. subchapters: 
  533. Sample input 
  534. Sample output 
  535.  
  536. next chapter: 
  537. Fonts 
  538.  
  539.  
  540. ΓòÉΓòÉΓòÉ 2.3.2.1. Sample input ΓòÉΓòÉΓòÉ
  541.  
  542.  
  543. .fa verti 30 
  544. .dp5R#, 
  545. .4 
  546. Sample output 
  547.  
  548. german federal chancellors since 1949 
  549.  
  550. (CDU, SPD and chancellor are external links. Font R is defined in the ini 
  551. file.) 
  552.  
  553. .5 
  554. Adenauer, Konrad 
  555.  
  556. 1949-1963, CDU, first chancellor after the second world war. His successor was 
  557. Ludwig Erhard. 
  558.  
  559. .5 
  560. Erhard, Ludwig 
  561.  
  562. 1963-1966, CDU, Successor of Konrad Adenauer. Second chancellor of the Federal 
  563. Republic of Germany. He was predecessor of Kurt Georg Kiesinger. 
  564.  
  565. .5 
  566. Kiesinger, Kurt Georg 
  567.  
  568. 1966-1969, third chancellor of CDU, leader of the "big coalition" of the 
  569. parties CDU and SPD. Successor of Ludwig Erhard. 
  570.  
  571. .5 
  572. Brandt, Willy 
  573.  
  574. 1969-1974, first chancellor of the SPD. 
  575.  
  576. .5 
  577. Schmidt, Helmut 
  578.  
  579. 1974-1982, chancellor of the SPD. Successor of Willy Brandt. 
  580.  
  581. .5 
  582. Kohl, Helmut 
  583.  
  584. chancellor of the CDU since 1982 till yet. His predecessor was Helmut Schmidt. 
  585.  
  586.  
  587. ΓòÉΓòÉΓòÉ 2.3.2.2. Sample output ΓòÉΓòÉΓòÉ
  588.  
  589.  
  590. german federal chancellors since 1949 
  591.  
  592. (CDU, SPD and chancellor are external links. Font R is defined in the ini 
  593. file.) 
  594.  
  595. subchapters: 
  596. Adenauer, Konrad 
  597. Erhard, Ludwig 
  598. Kiesinger, Kurt Georg 
  599. Brandt, Willy 
  600. Schmidt, Helmut 
  601. Kohl, Helmut 
  602.  
  603. next chapter: 
  604. Fonts 
  605.  
  606.  
  607. ΓòÉΓòÉΓòÉ 2.3.2.2.1. Adenauer, Konrad ΓòÉΓòÉΓòÉ
  608.  
  609.  
  610. Konrad Adenauer 
  611.  
  612. 1949-1963, CDU, first chancellor after the second world war. His successor was 
  613. Ludwig Erhard. 
  614.  
  615.  
  616. ΓòÉΓòÉΓòÉ 2.3.2.2.2. Erhard, Ludwig ΓòÉΓòÉΓòÉ
  617.  
  618.  
  619. Ludwig Erhard 
  620.  
  621. 1963-1966, CDU, Successor of Konrad Adenauer. Second chancellor of the Federal 
  622. Republic of Germany. He was predecessor of Kurt Georg Kiesinger. 
  623.  
  624.  
  625. ΓòÉΓòÉΓòÉ 2.3.2.2.3. Kiesinger, Kurt Georg ΓòÉΓòÉΓòÉ
  626.  
  627.  
  628. Kurt Georg Kiesinger 
  629.  
  630. 1966-1969, third chancellor of CDU, leader of the "big coalition" of the 
  631. parties CDU and SPD. Successor of Ludwig Erhard. 
  632.  
  633.  
  634. ΓòÉΓòÉΓòÉ 2.3.2.2.4. Brandt, Willy ΓòÉΓòÉΓòÉ
  635.  
  636.  
  637. Willy Brandt 
  638.  
  639. 1969-1974, first chancellor of the SPD. 
  640.  
  641.  
  642. ΓòÉΓòÉΓòÉ 2.3.2.2.5. Schmidt, Helmut ΓòÉΓòÉΓòÉ
  643.  
  644.  
  645. Helmut Schmidt 
  646.  
  647. 1974-1982, chancellor of the SPD. Successor of Willy Brandt. 
  648.  
  649.  
  650. ΓòÉΓòÉΓòÉ 2.3.2.2.6. Kohl, Helmut ΓòÉΓòÉΓòÉ
  651.  
  652.  
  653. Helmut Kohl 
  654.  
  655. chancellor of the CDU since 1982 till yet. His predecessor was Helmut Schmidt. 
  656.  
  657.  
  658. ΓòÉΓòÉΓòÉ 2.4. Fonts ΓòÉΓòÉΓòÉ
  659.  
  660.  
  661. Standard Font 
  662.  
  663. You can choose a font with the dot command standard font 
  664.  
  665. .SFX 
  666.  
  667.  X is a font character from A to Z and from a to z (case sensitive!) which 
  668. represents a specific 
  669.  
  670. o font 
  671. o size 
  672. o codepage 
  673. o foreground color 
  674. o background color. 
  675.  
  676.  
  677. You can assign different fonts, sizes and colors to each of the 2 x 26 chars in 
  678. the ini file. 
  679.  
  680. There are two other font attributes (see ini file). OmitLinks is described in 
  681. linking, Omitting links; LineStandard in line drawing. 
  682.  
  683. To set the standard font to default, use the dot command without parameter: 
  684.  
  685. .SF 
  686.  
  687. Alternate font 
  688.  
  689. Like .SF you can use .AF alternate font. The alternate font will be activated 
  690. between two occurrences of the alternate toggle char, assigned in the ini file. 
  691.  
  692. So you can change font and color in one line: 
  693.  
  694. That d o e s n't l o o k very good. 
  695.  
  696. The IPFC compiler won't accept more than 14 fonts in one document. I recommend 
  697. using not more than 3 or 4 different fonts. I also recommend to use the default 
  698. font for normal text, because the default font is a proper font on every 
  699. screen. 
  700.  
  701. A font will be active till the next font dot command, even through headings. 
  702.  
  703. Alternate fonts should be only active within a paragraph. To write more than 
  704. one paragraph in another font, please use the .SF command. 
  705.  
  706. subchapters: 
  707. Font samples 
  708. Color samples 
  709.  
  710. next chapter: 
  711. Unordered lists and ordered lists 
  712.  
  713.  
  714. ΓòÉΓòÉΓòÉ 2.4.1. Font samples ΓòÉΓòÉΓòÉ
  715.  
  716. Tms_Rmn 12
  717. Tms_Rmn 15
  718. Tms_Rmn 25
  719.  
  720. Helv 12
  721. Helv 15
  722. Helv 25
  723.  
  724. Courier 12
  725. Courier 15
  726. Courier 25
  727.  
  728. System_VIO 12
  729. System_VIO 15
  730.  
  731.  
  732. ΓòÉΓòÉΓòÉ 2.4.2. Color samples ΓòÉΓòÉΓòÉ
  733.  
  734.  
  735. foreground 
  736.  
  737. default 
  738. blue 
  739. cyan 
  740. green 
  741. neutral 
  742. red 
  743. yellow 
  744. black 
  745.  
  746. background 
  747.  
  748. DEFAULT 
  749. BLUE 
  750. CYAN 
  751. GREEN 
  752. NEUTRAL 
  753. RED 
  754. YELLOW 
  755. BLACK 
  756.  
  757.  
  758. ΓòÉΓòÉΓòÉ 2.5. Unordered lists and ordered lists ΓòÉΓòÉΓòÉ
  759.  
  760.  
  761. The following text represents an unordered list: 
  762.  
  763. o Style 
  764.  
  765.    - font (default, Tms_Rmn, Helv, Courier, System_VIO) 
  766.    - size 
  767.  
  768. o Color 
  769.  
  770.    - foreground color (default, blue, cyan, green, neutral, red, yellow, black) 
  771.    - background color (same colors as foreground color). 
  772.  
  773.  
  774. Resize the window with your mouse and observe the formatting of the text. You 
  775. won't get this effect when using normal characters and spaces. 
  776.  
  777. You can't influence the list chars the IPFC compiler generates. 
  778.  
  779. Writing unordered lists depends on your source format. The input of ordered 
  780. lists is very similar to unordered lists. 
  781.  
  782. The IPF command "Definition List" is not supported directly. You can emulate it 
  783. with the MakeIPF auto margin command. 
  784.  
  785. subchapters: 
  786. Using DOS WordStar 
  787. Using an ASCII editor 
  788. Ordered lists 
  789.  
  790. next chapter: 
  791. Including Bitmaps 
  792.  
  793.  
  794. ΓòÉΓòÉΓòÉ 2.5.1. Using DOS WordStar ΓòÉΓòÉΓòÉ
  795.  
  796.  
  797. WordStar knows soft spaces Γûæ . Soft spaces can be created in WordStar with the 
  798. command ^OG. * 
  799.  
  800. There are no definitive list chars for the different list levels like using an 
  801. ASCII editor. Instead, using soft spaces is necessary.
  802.  
  803.  
  804.  
  805. ΓûáΓûæStyle
  806. ΓûæΓûæ-ΓûæΓûæfont (default, Tms_Rmn, Helv, Courier, System_VIO)
  807. ΓûæΓûæ-ΓûæΓûæsize
  808. ΓûáΓûæColor
  809. ΓûæΓûæ-ΓûæΓûæforeground color (default, blue, cyan, green,
  810. ΓûæΓûæΓûæΓûæΓûæneutral, red, yellow, black)
  811. ΓûæΓûæ-ΓûæΓûæbackground color (same colors as foreground color).
  812.  
  813. All list chars have to be between soft spaces; in the first list level, soft 
  814. space(s) have to follow the list char. Once position and character of a list 
  815. char is defined, you aren't allowed to change it. The following two examples 
  816. would create two error messages while running MakeIPF: 
  817.  
  818. ΓûáΓûæStyle 
  819. ΓûæΓûæ-ΓûæΓûæfont (default, Tms_Rmn, Helv, Courier, System_VIO) 
  820. ΓûæΓûæΓûæ-Γûæsize (wrong position) 
  821. ΓûáΓûæColor 
  822. ΓûæΓûæ-ΓûæΓûæforeground color (default, blue, cyan, green, 
  823. ΓûæΓûæΓûæΓûæΓûæneutral, red, yellow, black) 
  824. ΓûæΓûæ*ΓûæΓûæbackground color (wrong character) 
  825.  
  826. After writing a normal paragraph without list function, for the next unordered 
  827. list you can use other list char characters and positions. 
  828.  
  829.  
  830. ΓòÉΓòÉΓòÉ 2.5.2. Using an ASCII editor ΓòÉΓòÉΓòÉ
  831.  
  832.  
  833. In the ini file you can define list chars. List chars have to be at the 
  834. beginning of a line. To generate the list from the last page, you have to enter 
  835.  
  836. Γûá Style 
  837. ΓòÉ font (default, Tms_Rmn, Helv, Courier, System_VIO) 
  838. ΓòÉ size 
  839. Γûá Color 
  840. ΓòÉ foreground color (default, blue, cyan, green, 
  841. neutral, red, yellow, black) 
  842. ΓòÉ background color (same colors as foreground color). 
  843.  
  844. The standard list chars in the ini file are Γûá (Alt-254) for the first list 
  845. level, ΓòÉ (Alt-205) for the second and ΓöÇ (Alt-196) for the third level. You can 
  846. add list chars for further levels. 
  847.  
  848. To enter normal text after writing an unordered list, you have to enter a 
  849. paragraph. 
  850.  
  851. It's allowed to put more spaces behind and in front of the list char, they will 
  852. be ignored. The same result as above will be: 
  853.  
  854.  Γûá  Style 
  855.    ΓòÉ  font (default, Tms_Rmn, 
  856.      Helv, Courier, System_VIO) 
  857.    ΓòÉ  size 
  858.  
  859.  
  860. ΓòÉΓòÉΓòÉ 2.5.3. Ordered lists ΓòÉΓòÉΓòÉ
  861.  
  862.  
  863. An ordered list counts with 1., 2., 3., and, in the second list level, with a., 
  864. b., c. The third list level will be numeric again and so on. You can't 
  865. influence this. 
  866.  
  867. To create an ordered list, you first have to proceed like writing an unordered 
  868. list. With the dot commands ordered list and unordered list 
  869.  
  870. .OL 
  871. .UL 
  872.  
  873. you can switch between ordered and unorderd lists. So you can use this two 
  874. commands as brackets to get an ordered list. The default setting is unordered 
  875. list. 
  876.  
  877.  
  878. ΓòÉΓòÉΓòÉ 2.6. Including Bitmaps ΓòÉΓòÉΓòÉ
  879.  
  880.  
  881. To include a big bitmap centered, you can use the dot command bitmap 
  882.  
  883. .BM filename 
  884.  
  885. If you write the filename without extension, ".BMP" will be automatically 
  886. added. IPFC also supports OS/2-MET-files. * 
  887.  
  888. With the second dot command bitmap text, you can include bitmaps in text. 
  889.  
  890. .BTX filename 
  891.  
  892.  X represents a bitmap char, a special character you don't need in your text. 
  893. This character will be replaced in your text by the bitmap "filename". Note 
  894. that bitmaps  need more place than characters, so you will get a greater line 
  895. hight at the lines with included bitmaps, even if the bitmap is as small as a 
  896. character. Block chars like Γûê (Alt-219), Γûä (Alt-220), ΓûÇ (Alt-223) are useful 
  897. bitmap chars. 
  898.  
  899. You are allowed to define several bitmap chars simultaneously. 
  900.  
  901. To deactivate a character-bitmap definition, you can enter 
  902.  
  903. .BTX 
  904.  
  905. without a filename. 
  906.  
  907.  
  908. ΓòÉΓòÉΓòÉ 2.7. Linking and Indexing ΓòÉΓòÉΓòÉ
  909.  
  910.  
  911. Linking * is the most powerful function of MakeIPF. When writing an IPF file 
  912. directly, you have to create every link by yourself - so if you write a 
  913. document of 1 MB about workgroup computing and you have the occurrence of the 
  914. phrase "workgroup computing" one thousand times, it's your job to create one 
  915. thousand links... 
  916.  
  917. Automatic linking and indexing with MakeIPF 
  918.  
  919. With MakeIPF, your job is only to mark one occurrence of a single word or a 
  920. phrase of several words with a special character (index char). All other 
  921. occurrences will get a link to the marked occurrence (link target). 
  922. Simultaneously, it will be placed in the index. 
  923.  
  924. Note: Do not use index chars in headings, use automatic duplication of heading 
  925. text instead. 
  926.  
  927. subchapters: 
  928. Marking a single word, Changing the index char 
  929. Marking a phrase of several words in the running text 
  930. Marking a phrase outside the running text 
  931. Handling of endings, uppercase and lowercase letters 
  932. Marking a word several times 
  933. Omitting links 
  934. External links 
  935. Launching programs by links 
  936.  
  937. next chapter: 
  938. Line drawing 
  939.  
  940.  
  941. ΓòÉΓòÉΓòÉ 2.7.1. Marking a single word, Changing the index char ΓòÉΓòÉΓòÉ
  942.  
  943.  
  944. Marking a single word 
  945.  
  946. You can mark a single word for linking and indexing with the index char, 
  947. defined in the ini file. 
  948.  
  949. A #workgroup is a group of people... 
  950.  
  951. Changing the index char 
  952.  
  953. You also can change the index char in the text by using the dot command index 
  954. char 
  955.  
  956. .IC@ 
  957.  
  958. This will change the index char from the actual setting, for example # , to  @ 
  959.  
  960.  
  961. ΓòÉΓòÉΓòÉ 2.7.2. Marking a phrase of several words in the running text ΓòÉΓòÉΓòÉ
  962.  
  963.  
  964. When using the index char, only one word will be marked. A word ends with the 
  965. first character which is not a letter or "-". (Characters which have to be 
  966. handled like letters can be defined in the ini file, extended letters). 
  967.  
  968. To mark a phrase, you have to use ":" as brackets: 
  969.  
  970. Today, the #:security of computers: is... 
  971. ... 
  972. Nevertheless, the #:security of mainframes: can be... 
  973. ... 
  974. But the #:usability of computers; has to... 
  975.  
  976. In the index, it will appear 
  977.  
  978.  computers, usability of 
  979.  security 
  980.    of computers 
  981.    of mainframes 
  982.  
  983. Note the difference between the first/second and the third example: A "#:XXXX:" 
  984. will use the first word of the phrase as the leading word, a "#:XXXX;" the last 
  985. word. The leading word is the word which determines the alphabetic order in the 
  986. index. The leading word does not refer to the linking function. 
  987.  
  988. If there is only one occurrence of a leading word like 
  989.  
  990.  computers 
  991.    usability of 
  992.  
  993. the MakeIPF entry in the index will be: 
  994.  
  995.  computers, usability of 
  996.  
  997. You are allowed to use the "colon brackets" to crop endings: 
  998.  
  999. The importance of #:computer:s is growing... 
  1000.  
  1001. In the index "computer" will appear without "s", also the link target will be 
  1002. "computer" and not "computers". 
  1003.  
  1004.  
  1005. ΓòÉΓòÉΓòÉ 2.7.3. Marking a phrase outside the running text ΓòÉΓòÉΓòÉ
  1006.  
  1007.  
  1008. With the dot command INdex 
  1009.  
  1010. .IN phrase 
  1011.  
  1012. you can place a word or a phrase in the index and define it as a link target. 
  1013. Because it's a dot command, "phrase" won't be printed. You can use this 
  1014. command, when the phrase you want to place in the index and you want to link 
  1015. doesn't appear explicitly in the running text. 
  1016.  
  1017. Normally, the first word of the phrase will be the leading word. If you want to 
  1018. make the last word to the leading word like using the brackets colon-semicolon 
  1019. in running text, you can use the dot command index turned. 
  1020.  
  1021. .IT usability of computers 
  1022.  
  1023. When the phrase in the dot command IN or IT ends with a space, links won't be 
  1024. created, but the phrase is placed into the index. You can use this bug as a 
  1025. feature. 
  1026.  
  1027.  
  1028. ΓòÉΓòÉΓòÉ 2.7.4. Handling of endings, uppercase and lowercase letters ΓòÉΓòÉΓòÉ
  1029.  
  1030.  
  1031. Handling of endings 
  1032.  
  1033. What to do when the source link word is "computers" and the marked word is 
  1034. "computer" without "s"? In this case, MakeIPF will create the link 
  1035. nevertheless, because the ending "s" is defined in the ini file (see endings of 
  1036. words). Note when using other languages you have to edit the ini file with the 
  1037. correct endings. 
  1038.  
  1039. Marking a word with a ending is not recommended, because when the word occurs 
  1040. without the ending, the link won't be created. 
  1041.  
  1042. To find the correspondent word even in the case "query" "queries", MakeIPF 
  1043. crops the last letter of the word when it's a vocal letter * (in this case 
  1044. "y"). That's the correct method for the english and german language (and I hope 
  1045. it's okay in the other languages, too). 
  1046.  
  1047. Uppercase and lowercase letters 
  1048.  
  1049. Links are created, regardless of whether the first letter in the target link 
  1050. phrase is capitalised. If other chars than the first letter are different, the 
  1051. link won't be created. Sample: 
  1052.  
  1053. .IN Word 
  1054.  
  1055. Links are created to Word , word , but not to WORD . 
  1056.  
  1057.  
  1058. ΓòÉΓòÉΓòÉ 2.7.5. Marking a word several times ΓòÉΓòÉΓòÉ
  1059.  
  1060.  
  1061. MakeIPF expects that a word or a phrase is marked only one time. When marking 
  1062. it several times, it will appear several times in the index, and the link 
  1063. target will be the first marked phrase. * 
  1064.  
  1065.  
  1066. ΓòÉΓòÉΓòÉ 2.7.6. Omitting links ΓòÉΓòÉΓòÉ
  1067.  
  1068.  
  1069. Of course, links are omitted when the link would point to the same window 
  1070. (chapter). Links are also omitted when there is more than one occurrence of the 
  1071. target link phrase in the paragraph. For example dot command dot command dot 
  1072. command - only the first occurrence of "dot command" in the paragraph gets the 
  1073. link. 
  1074.  
  1075. If you want to omit several links of the same phrase in the whole window and 
  1076. not only in the same paragraph, you can edit the ini file, switch no more links 
  1077. in. 
  1078.  
  1079. Sometimes it can be useful to omit links font specific, for example in sample 
  1080. text. You can define fonts which omit links automatically with the Font switch, 
  1081. setting OmitLinks in the ini file. 
  1082.  
  1083. Of course you are allowed to define another font with identical parameters, but 
  1084. with the OmitLinks setting. So you can omit links without really changing the 
  1085. font. 
  1086.  
  1087.  
  1088. ΓòÉΓòÉΓòÉ 2.7.7. External links ΓòÉΓòÉΓòÉ
  1089.  
  1090.  
  1091. External links are links to chapters of other INF or HLP files. To create such 
  1092. external links, you have to edit 
  1093.  
  1094. o the ini file 
  1095. o the file which is shown when using the link (link target file) 
  1096. o the file from where the link is executed (link start file). 
  1097.  
  1098.  
  1099. External links are using the MakeIPF function panel ID. But you need not read 
  1100. the panel ID chapter. 
  1101.  
  1102. 1. Ini file 
  1103.  
  1104. Behind "Panel ID filename =" in the ini file, you have to enter a file 
  1105. extension beginning with *. like 
  1106.  
  1107. Panel ID filename = *.PAN 
  1108.  
  1109. Compiling the link target file with MakeIPF automatically generates a panel ID 
  1110. file with the file name of the source text file and the extension PAN. This 
  1111. panel ID file is used by MakeIPF when compiling the link start file. 
  1112.  
  1113. 2. Link target file 
  1114.  
  1115. When indexing headings, MakeIPF assigns numbers to the headings automatically 
  1116. beginning with 1. It would be tedious to remember a heading ID number like 237 
  1117. - and the number changes when a new heading is inserted - so instead of a ID 
  1118. number, you enter an easy to remember constant like Chapter_beginning. With the 
  1119. dot command 
  1120.  
  1121. .ID Chapter_beginning 
  1122.  
  1123. in the link target file, the chapter gets this ID name, e.g. 
  1124. "Chapter_beginning", where the dot command is placed, see file SAMPLE. All 
  1125. these ID names are placed in a file Sourcefilename.PAN, or with another 
  1126. extension, dependent of the entry in the ini file. This panel ID file is used 
  1127. by MakeIPF when compiling the link start file. 
  1128.  
  1129. 3. Link start file 
  1130.  
  1131. In the file where the external link is executed from, the ID dot command of the 
  1132. link target file has to be repeated. Then the dot commands for normal links .IN 
  1133. and .IT (index turned) are used as usual. These dot commands are placed between 
  1134. two new .EX dot commands. 
  1135.  
  1136. ^@.EX filename.inf 
  1137. ^@.ID Chapter_beginning 
  1138. ^@.IN expression 
  1139. ^@.EX 
  1140.  
  1141. Behind the EX dot command, you can enter the filename of the external hypertext 
  1142. file. Note that the extensions INF and HLP are allowed. All following ID, IN 
  1143. and IV dot commands are referenced to the external file until EX is entered 
  1144. with a new filename or without any parameters. You must not write normal text 
  1145. between the two EX commands. 
  1146.  
  1147. All expressions "expression" in the link start file are getting an external 
  1148. link to the chapter of the file filename.inf, marked with the ID dot command 
  1149. ".ID Chapter_beginning". 
  1150.  
  1151. It does not matter where the .EX - .EX block is placed in the link start file. 
  1152.  
  1153. Pascal programmers have to pay attention: the constant behind the ID dot 
  1154. command is case sensitive! 
  1155.  
  1156. Always take a look at the date of the IPF files: If you change the link target 
  1157. file, MAKEIPF has to compile this file before compiling the link start file - 
  1158. because of updating the panel ID file. 
  1159.  
  1160. When entering a filename 
  1161.  
  1162. .EX filename.inf 
  1163.  
  1164. you normally should not enter drive letters and directory names, because on 
  1165. several computers the file can be located at different drives and directories. 
  1166. You need not enter any directory names if the link target file is located in 
  1167. the same directory as the link source file. You won't have any problems too, if 
  1168. the directory is placed behind "SET BOOKSHELF" in the file CONFIG.SYS. If these 
  1169. two possibilities does not work, you should use environment variables. 
  1170.  
  1171. Try the sample external links or click to the expressions chancellor, SPD and 
  1172. CDU. While writing this hypertext (that's the link start file) I have entered 
  1173. somewhere the following commands: 
  1174.  
  1175. .EX sample.inf 
  1176. .ID chapter_chancellor 
  1177. .IN chancellor 
  1178. .ID chapter_political_parties 
  1179. .IN SPD 
  1180. .IN CDU 
  1181. .EX 
  1182.  
  1183. In the file SAMPLE which is the link target, you also can find the two ID dot 
  1184. commands in the specific chapters about chancellor and political parties. 
  1185.  
  1186.  
  1187. ΓòÉΓòÉΓòÉ 2.7.8. Launching programs by links ΓòÉΓòÉΓòÉ
  1188.  
  1189.  
  1190. Similar to external links, you can create links to external programs, that 
  1191. means launching programs. 
  1192.  
  1193. .EX mppm.exe c:\mmos2\movies\macaw.avi 
  1194. .IN parrot 
  1195. .EX E.EXE SAMPLE.TXT 
  1196. .IN file SAMPLE 
  1197. .EX 
  1198.  
  1199. The parrot is a bird. (The link "parrot" is only activated if you have 
  1200. installed multimedia.) With the link to the file SAMPLE the system editor is 
  1201. started - perhaps you already have noticed this in the last chapter. 
  1202.  
  1203. If the user clicks to "parrot" or "file SAMPLE", the external program is 
  1204. launched. In the EX dot command, the parameters behind the program filename are 
  1205. optional. Program name and parameter are divided by a space character. The 
  1206. extension .EXE has to be entered! You can also launch batch files with the 
  1207. extension .CMD or DOS programs with the suffix .BAT or .COM. 
  1208.  
  1209. If the files are not located in the same directory at different computers, you 
  1210. should use environment variables. 
  1211.  
  1212. You can enter several IN dot commands behind one EX command, for example to get 
  1213. links with the expression "parrot" and "bird movie". 
  1214.  
  1215. To use an expression like "CONFIG.SYS" or "bird (movie)" as a link target, the 
  1216. dot and the parenthesis have to be defined as extended letters. 
  1217.  
  1218. subchapters: 
  1219. Environment variables 
  1220.  
  1221. next chapter: 
  1222. Line drawing 
  1223.  
  1224.  
  1225. ΓòÉΓòÉΓòÉ 2.7.8.1. Environment variables ΓòÉΓòÉΓòÉ
  1226.  
  1227.  
  1228. When creating external links and when launching programs, environment variables 
  1229. can be useful and necessary. 
  1230.  
  1231. If you want to use an INF file on different computers, directory names should 
  1232. be substituted by environment variables, e.g. %MMVIDEO%. On every computer 
  1233. using your hypertext, the file CONFIG.SYS should have for example the following 
  1234. entry: 
  1235.  
  1236. SET MMVIDEO=C:\MMOS2\MOVIES 
  1237.  
  1238. In the MakeIPF source file, you can use this variable: 
  1239.  
  1240. .EX mppm.exe %MMVIDEO%\macaw.avi 
  1241. .IN parrot 
  1242. .EX 
  1243.  
  1244. OS/2 replaces the expression %MMVIDEO% with the drive and directory name listed 
  1245. in the CONFIG.SYS. 
  1246.  
  1247. In the same way you can create external links. 
  1248.  
  1249. But take care of the directory names ending with semicolon: 
  1250.  
  1251. SET MMBASE=C:\MMOS2; 
  1252.  
  1253. In this case the environment variable does not work and the link won't be 
  1254. created. 
  1255.  
  1256. For environment variables, take a look at chapter "SET" in the OS/2 commandline 
  1257. reference. 
  1258.  
  1259.  
  1260. ΓòÉΓòÉΓòÉ 2.8. Line drawing ΓòÉΓòÉΓòÉ
  1261.  
  1262.  
  1263. As creating boxes is usually a tedious job, a dot command has been defined to 
  1264. facilitate line drawing. The following example illustrates its use. 
  1265.  
  1266. .LIXYZ
  1267.  
  1268.  
  1269.  
  1270.    ZX              X
  1271.  
  1272.       Operating systems
  1273.  
  1274.    Y         ZY         X       X
  1275.       Novell     IBM        Hardware
  1276.    Y    Y              X       X
  1277.      DOS  Netware   OS/2
  1278.    X              X
  1279. .LI
  1280.  
  1281. The result will be: 
  1282.  
  1283.  
  1284.       ΓòöΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòù
  1285.       Γòæ                           Γòæ
  1286.       Γòæ     Operating systems     Γòæ
  1287.       Γòæ                           Γòæ
  1288.       ΓòƒΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓòó      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1289.       Γòæ      Novell     Γöé  IBM    Γòæ      Γöé  Hardware  Γöé
  1290.       ΓòƒΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓòó      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1291.       Γòæ  DOS  Γöé Netware Γöé  OS/2   Γòæ
  1292.       ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòºΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòºΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
  1293.  
  1294. In the dot command .LIXYZ , X represents a special character marking the 
  1295. corners of the box, Y a partition of the box. Z, placed in front of X or Y, 
  1296. generates double lines. 
  1297.  
  1298. You can change the standard font for line drawing in the ini file, font setting 
  1299. LineStandard. 
  1300.  
  1301. Mixed single/double line characters are only supported by Codepage 437. When 
  1302. using foreign language letters which aren't supported in Codepage 437, don't 
  1303. use double lines. 
  1304.  
  1305. subchapters: 
  1306. Line drawing and WordStar 
  1307.  
  1308. next chapter: 
  1309. Footnotes 
  1310.  
  1311.  
  1312. ΓòÉΓòÉΓòÉ 2.8.1. Line drawing and WordStar ΓòÉΓòÉΓòÉ
  1313.  
  1314.  
  1315. The Z char in the .LIXYZ command for producing double lines has to be a 
  1316. ^P-character like ^PE or ^PR. When using the ^OD toggle, you can make the 
  1317. ^P-characters invisible to check the correct orientation of the box. 
  1318.  
  1319.  
  1320. ΓòÉΓòÉΓòÉ 2.9. Footnotes ΓòÉΓòÉΓòÉ
  1321.  
  1322.  
  1323. Generating Footnotes with MakeIPF is very simple. For example, footnote text 
  1324. can be quoted in brackets like {This will be the content of the footnote} after 
  1325. entering the dot command footnote usage 
  1326.  
  1327. .FU{} 
  1328.  
  1329. Instead of the brackets and the footnote text, only a * appears where you can 
  1330. click with the mouse. 
  1331.  
  1332. Other useful footnote bracket chars are [ ], < > or Γûä (Alt-220) ΓûÇ (Alt-223). 
  1333.  
  1334. You can temporary deactivate the footnote function by using the footnote 
  1335. command without parameters: 
  1336.  
  1337. .FU 
  1338.  
  1339. or you can define other footnote chars. The default setting is no footnote 
  1340. chars. 
  1341.  
  1342. If you don't want to get a "*" as a link to the footnote window, you can change 
  1343. the text "*" with the dot command footnote text 
  1344.  
  1345. .FT XXX 
  1346.  
  1347. Instead of a "*", the text "XXX" will appear. You are allowed to use a bitmap 
  1348. instead of a character or a text: 
  1349.  
  1350. .BTΓûÇ blob.bmp 
  1351. .FTΓûÇ 
  1352.  
  1353. (see bitmap text.) 
  1354.  
  1355.  
  1356. ΓòÉΓòÉΓòÉ 2.10. Margins and Formatting ΓòÉΓòÉΓòÉ
  1357.  
  1358.  
  1359. subchapters: 
  1360. Changing the left margin 
  1361. Turning Formatting off and on 
  1362. Centered Text 
  1363. Auto Margin 
  1364.  
  1365. next chapter: 
  1366. if-conditions 
  1367.  
  1368.  
  1369. ΓòÉΓòÉΓòÉ 2.10.1. Changing the left margin ΓòÉΓòÉΓòÉ
  1370.  
  1371.  
  1372. This is a sample text with left margin 1. 
  1373.  
  1374.           This is a sample of left margin 10; note that the formatting will be 
  1375.           correct. 
  1376.  
  1377.                     This is a sample of left margin 20; note that the 
  1378.                     formatting will be correct. 
  1379.  
  1380.  You can change the left margin by using the dot command left margin 
  1381.  
  1382.  .LM n 
  1383.  
  1384.  n is a number from 1 to approx. 30. Default setting is 1. 
  1385.  
  1386.  If you enter the left margin dot command without a number, the standard 1 will 
  1387.  be active. 
  1388.  
  1389.  Using DOS WordStar, you have to use soft spaces instead. * 
  1390.  
  1391.  
  1392. ΓòÉΓòÉΓòÉ 2.10.2. Turning Formatting off and on ΓòÉΓòÉΓòÉ
  1393.  
  1394.  
  1395. With the dot commands Formatting off and Formatting on 
  1396.  
  1397. .FM off 
  1398. .FM on 
  1399.  
  1400. you can turn formatting off and on. The standard is Formatting on. The setting 
  1401. will be active till the next formatting dot command, even through headings. 
  1402.  
  1403. Between line drawing dot commands, formatting is automatically turned off. 
  1404.  
  1405. Don't use the index/linking function when formatting is off. * Don't use index 
  1406. chars, only use the index dot command, quoted in formatting dot commands: 
  1407.  
  1408. .fm on 
  1409. .in word1 
  1410. .in word2 
  1411. .fm off 
  1412.  
  1413.  
  1414. ΓòÉΓòÉΓòÉ 2.10.3. Centered Text ΓòÉΓòÉΓòÉ
  1415.  
  1416.  
  1417. In centered text, formatting will be off. You can turn centered text on and off 
  1418. with Output Centered on and Output Centered off dot command 
  1419.  
  1420. .OC on 
  1421. .OC off 
  1422.  
  1423.  
  1424. ΓòÉΓòÉΓòÉ 2.10.4. Auto Margin ΓòÉΓòÉΓòÉ
  1425.  
  1426.  
  1427. To write definition lists for example, * you can simply change the left margin 
  1428. by using spaces and the new dot command Auto Margin 
  1429.  
  1430.  
  1431. .AM on
  1432. *motherboard*
  1433.    The motherboard contents the main processor, the RAM
  1434.    memory and some other important parts of your computer.
  1435.  
  1436. *screen*
  1437.    Computer screens are available from 14 up to 21
  1438.    inches; You shouldn't save money with a cheap small
  1439.    screen.
  1440. .AM off
  1441.  
  1442. motherboard 
  1443.        The motherboard contents the main processor, the RAM memory and some 
  1444.        other important parts of your computer. 
  1445.  
  1446.  screen 
  1447.        Computer screens are available from 14 up to 21 inches; You shouldn't 
  1448.        save money with a cheap small screen. 
  1449.  
  1450.  You are allowed to turn the AM setting on for normal running text. Every 
  1451.  spaces at the beginning of a paragraph will change the left margin. You have 
  1452.  to turn it off, if you want to have a margin only at the first line of a 
  1453.  paragraph. The AM default setting ist off. 
  1454.  
  1455.  Using an ASCII editor with ASCIIHARDRET, spaces should only be at the 
  1456.  beginning of the first line; of course the following lines wrapped by the 
  1457.  editor should not have a margin. 
  1458.  
  1459.  WordStar files don't need the auto margin function. * 
  1460.  
  1461.  
  1462. ΓòÉΓòÉΓòÉ 2.11. if-conditions ΓòÉΓòÉΓòÉ
  1463.  
  1464.  
  1465. With if-conditions, you can create slightly different IPF files from the same 
  1466. source text. There are three new dot commands 
  1467.  
  1468. .IF CONDITION 
  1469. .ELSE 
  1470. .END 
  1471.  
  1472. The conditions are not case-sensitive. For compiling the source text, you have 
  1473. to enter in the command line: 
  1474.  
  1475. [C:\myProject] makeipf myDoc.txt #CONDITION 
  1476.  
  1477. You can enter more than one condition in the command line. Note the # 
  1478. character, there is no order of the parameters. 
  1479.  
  1480. Several conditions in the if-command, connected by AND or OR are not supported. 
  1481.  
  1482.  
  1483. ΓòÉΓòÉΓòÉ 3. Generating helptables and panel ID's ΓòÉΓòÉΓòÉ
  1484.  
  1485.  
  1486. The main difference between HLP and INF files is the connection of HLP files to 
  1487. a PM oriented program. The INF file is a "stand alone" solution, in the HLP 
  1488. file you can create links between windows or buttons of your program to 
  1489. chapters of your hypertext. Pushing a mouse button at your program with 
  1490. simultaneously pushing F1 will activate a chapter (a window) of the hypertext. 
  1491.  
  1492. There are two different kinds of links from a program to a HLP file: 
  1493.  
  1494.  o links by using helptables 
  1495.  o direct links by using panel ID's. 
  1496.  
  1497.  
  1498.  Links by using helptables are activated when pushing F1 together with a help 
  1499.  button; instead of pressing F1, there is the possibility to push a button with 
  1500.  the flags BS_HELP | BS_NOPOINTERFOCUS. In the helptable, button ID's are 
  1501.  related to chapters (windows) of the hypertext. 
  1502.  
  1503.  Direct links don't use a helptable, they use a function in your program source 
  1504.  code which is directly activating a help chapter (window). Direct links can 
  1505.  also be used in text oriented programs. 
  1506.  
  1507.  Without MakeIPF, you would have to write a helptable in the RC file * 
  1508.  specifying which window or button will be linked to which chapter of the 
  1509.  hypertext. For direct links, you would have to create a panel ID header file 
  1510.  with the IPF internal heading resource ID's, related to meaningful constant 
  1511.  identifiers like "Panel_Introduction". 
  1512.  
  1513.  subchapters: 
  1514.  Writing the MakeIPF source file 
  1515.  Writing your C program source file 
  1516.  Writing your Pascal program source file 
  1517.  Writing several HLP files of different languages 
  1518.  
  1519.  next chapter: 
  1520.  dot command summary 
  1521.  
  1522.  
  1523. ΓòÉΓòÉΓòÉ 3.1. Writing the MakeIPF source file ΓòÉΓòÉΓòÉ
  1524.  
  1525.  
  1526. In the MakeIPF file, there are two new dot commands: The command ressource 
  1527. connection 
  1528.  
  1529. .RC ID_window, ID_button_or_Menu_Item 
  1530.  
  1531. creates a connection between the help chapter and the button or menu item with 
  1532. the ID "ID_button_or_Menu_Item", located in the child window "ID_window": If 
  1533. the button/menu item is pressed with F1 simultaneously, the help chapter is 
  1534. activated where the RC command is located. 
  1535.  
  1536.  ID_window is the constant placed after MENU or DIALOG in your RC file. 
  1537.  
  1538. Note: ID_window is not the constant placed after DLGTEMPLATE. * 
  1539.  
  1540. And with panel ID 
  1541.  
  1542. .ID Chapter_Name 
  1543.  
  1544. the chapter where the ID command is located gets the label "Chapter_Name". With 
  1545. DisplayHelpPanel(Chapter_Name) in the program source text, you can activate 
  1546. this help chapter directly. 
  1547.  
  1548. Pascal programmers have to pay attention: the constant behind the ID dot 
  1549. command is case sensitive! 
  1550.  
  1551. You can place these dot commands somewhere in the chapter (window) which will 
  1552. be connected to the button or menu item. I recommend placing these dot commands 
  1553. very close to the related paragraph. So if you later create sub chapters and a 
  1554. button has to be linked to the new, special sub chapter, you need not change 
  1555. the position of ID and RC dot commands. 
  1556.  
  1557. Using the RC dot command, you normally have to enter two ID's: The first ID for 
  1558. the program window * containing the item (a menu item, button, entryfield 
  1559. etc.), and the second ID for the item itself. 
  1560.  
  1561. If you enter a lot of RC commands, you are allowed to use the shortcut 
  1562.  
  1563. .RC , ID_button_or_Menu_Item 
  1564.  
  1565. This will use the name of the last window ID. 
  1566.  
  1567. You are allowed to generate an INF file with IPFC when the MakeIPF source file 
  1568. includes HLP specific RC dot commands: The only effect of RC and ID dot 
  1569. commands is generating a helptable and a panel ID file, the IPF file won't be 
  1570. influenced. 
  1571.  
  1572. You should always use the RC command one time with only one parameter (the 
  1573. window ID). All items in this window which are not placed in the helptable will 
  1574. get a link to this chapter. If you don't do that, MakeIPF creates a warning. 
  1575.  
  1576. This sample MakeIPF source file has got ressource connection and Panel ID dot 
  1577. commands: 
  1578.  
  1579.  
  1580. .1
  1581. Introduction
  1582.  
  1583. .RC ID_childwindow
  1584. .ID PANEL_Introduction
  1585. This is the documentation of my prog.
  1586.  
  1587. .1
  1588. Usage of the OK button
  1589.  
  1590. .RC ID_childwindow, ID_OK
  1591. .ID PANEL_usage_OK
  1592. With the OK button - you'll be surprised - you can press OK.
  1593.  
  1594. .1
  1595. Usage of the Cancel button
  1596.  
  1597. .RC ID_childwindow, ID_Cancel
  1598. With the Cancel button, you can cancel the operation.
  1599.  
  1600.  
  1601. ΓòÉΓòÉΓòÉ 3.2. Writing your C program source file ΓòÉΓòÉΓòÉ
  1602.  
  1603.  
  1604. MakeIPF automatically creates a file HLPTABLE.RC:
  1605.  
  1606.  
  1607.  
  1608. #define SUBTABLE_ID_childwindow 7001
  1609.  
  1610. HELPTABLE HELP_TABLE {
  1611.  HELPITEM ID_childwindow, SUBTABLE_ID_childwindow, 1 /* Introduction */
  1612. }
  1613.  
  1614. HELPSUBTABLE SUBTABLE_ID_childwindow {
  1615.  HELPSUBITEM ID_OK, 2 /* Usage of the OK button */
  1616.  HELPSUBITEM ID_Cancel, 3 /* Usage of the Cancel button */
  1617. }
  1618.  
  1619. MakeIPF also creates a file PANELID.H:
  1620.  
  1621.  
  1622.  
  1623. /*****Panel ID's created by MakeIPF*****/
  1624.  
  1625. #define PANEL_Introduction  1
  1626. #define PANEL_usage_OK    2
  1627.  
  1628. The numbers 1, 2 and 3 are the IPF internal heading-ressource-id's. In the 
  1629. helptable file, MakeIPF automatically writes the heading text as comment, so 
  1630. you can read this file more easily while debugging. (Normally you don't have 
  1631. any reason to read the helptable and panel ID file.) 
  1632.  
  1633. You can change the Help Subtable Start ID value in the ini file, switch  Help 
  1634. Subtable Start ID , also you can change the filenames of the two created files. 
  1635.  
  1636. You can simply include the helptable file and the panel ID file into your 
  1637. program source by typing 
  1638.  
  1639. #include "HLPTABLE.RC" 
  1640.  
  1641. for example after a MENU or a DLGTEMPLATE block in your RC file and 
  1642.  
  1643. #include "PANELID.H" 
  1644.  
  1645. at the top of your program source file (a C or CPP file). 
  1646.  
  1647. In your main header file, you have to define a constant HELP_TABLE with an 
  1648. unused value, for example 
  1649.  
  1650. #define HELP_TABLE 7000 
  1651.  
  1652. which will be valid in the RC and in the C or CPP source file. 
  1653.  
  1654. In the C source file you need at least two functions like 
  1655.  
  1656.  void InitHelp (hwnd) /*initialize the help process*/ 
  1657.  void DestroyHelp () /*destroy the help instance*/ 
  1658.  
  1659. which uses the constant HELP_TABLE. 
  1660.  
  1661. The function InitHelp needs a parameter: the window handle of your program. Of 
  1662. course, this window handle has already to be valid. If your program is a 
  1663. standardwindow, you should place the function InitHelp between 
  1664. WinCreateStdWindow... and while WinGetMsg... and the function DestroyHelp after 
  1665. while WinGetMsg... . If your program is only a dialogbox, you won't have a 
  1666. WinCreateStdWindow function. In this case, you can place InitHelp into the 
  1667. WM_INITDLG and DestroyHelp into the WM_CLOSE section of your dialogbox message 
  1668. function. 
  1669.  
  1670. A third function 
  1671.  
  1672.  void DisplayHelpPanel (PanelID) 
  1673.  
  1674. is necessary to create a direct link from your program to a chapter of your 
  1675. hypertext. It's the complement for the panel ID dot command. 
  1676.  
  1677. I have written a very short version of these functions. To compile these 
  1678. functions, you have to enter * 
  1679.  
  1680. #define INCL_HELP 
  1681.  
  1682. subchapters: 
  1683. C source code with the three help functions 
  1684.  
  1685. next chapter: 
  1686. Writing your Pascal program source file 
  1687.  
  1688.  
  1689. ΓòÉΓòÉΓòÉ 3.2.1. C source code with the three help functions ΓòÉΓòÉΓòÉ
  1690.  
  1691. #define HelpFilename "FILENAME.HLP"
  1692. #define HelpWindowTitle "Title of the Hypertext window"
  1693.  
  1694. BOOL fHelpEnabled;
  1695. static HWND hwndHelpInstance;
  1696.  
  1697. #define InfoBox(st) WinMessageBox (HWND_DESKTOP, HWND_DESKTOP, st, "", 0, MB_OK | MB_ERROR)
  1698.  
  1699. /*to be placed in front of the main program message loop*/
  1700. VOID InitHelp (HWND hwndClientFrame) {
  1701.   HELPINIT hini;
  1702.   /* If we return because of an error, Help will be disabled */
  1703.   fHelpEnabled = FALSE;
  1704.   /* Initialize help init structure */
  1705.   hini.cb = sizeof(HELPINIT);
  1706.   hini.ulReturnCode = 0;
  1707.   /* If tutorial added, add name here */
  1708.   hini.pszTutorialName = (PSZ)NULL;
  1709.   hini.phtHelpTable = (PHELPTABLE)MAKELONG(HELP_TABLE, 0xFFFF);
  1710.   hini.hmodHelpTableModule = 0; hini.hmodAccelActionBarModule = 0;
  1711.   hini.idAccelTable = 0; hini.idActionBar = 0;
  1712.   hini.pszHelpWindowTitle = HelpWindowTitle;
  1713.   hini.fShowPanelId = CMIC_HIDE_PANEL_ID;
  1714.   hini.pszHelpLibraryName = HelpFilename;
  1715.   /* Creating help instance */
  1716.   hwndHelpInstance = WinCreateHelpInstance(hab, &hini);
  1717.   if(hwndHelpInstance == 0L || hini.ulReturnCode) {
  1718.    InfoBox("Failed to load help manager."); return;
  1719.   }
  1720.   /* Associate help instance with main frame */
  1721.   if(!WinAssociateHelpInstance(hwndHelpInstance, hwndClientFrame)) {
  1722.    InfoBox("Failed to load help manager."); return;
  1723.   }
  1724.   /* Help manager is successfully initialized so set flag to TRUE */
  1725.   fHelpEnabled = TRUE;
  1726.   return;
  1727. }
  1728.  
  1729. /*to be placed behind the main program message loop*/
  1730. VOID DestroyHelp (VOID) {
  1731.   if(hwndHelpInstance != 0L) WinDestroyHelpInstance(hwndHelpInstance);
  1732.   return;
  1733. }
  1734.  
  1735. /*
  1736.  some possible parameters:
  1737.  HM_HELP_INDEX   shows the index
  1738.  HM_HELP_CONTENTS, shows the contents
  1739.  HM_DISPLAY_HELP  shows help for help
  1740. */
  1741. VOID SendHelpMessage (LONG HelpMessage) {
  1742.   if(fHelpEnabled)
  1743.    if((LONG)WinSendMsg(hwndHelpInstance, HelpMessage, (MPARAM) 0, (MPARAM) 0))
  1744.   InfoBox ("Failed to display help panel.");
  1745. }
  1746.  
  1747. /*
  1748.  parameters are the Panel ID's, defined with ID dot commands
  1749.  in the MakeIPF source file
  1750. */
  1751. VOID DisplayHelpPanel (LONG PanelID) {
  1752.   if(fHelpEnabled)
  1753.    if((LONG)WinSendMsg(hwndHelpInstance, HM_DISPLAY_HELP,
  1754.      MPFROMLONG(MAKELONG(PanelID, NULL)),
  1755.      MPFROMSHORT(HM_RESOURCEID))) InfoBox ("Failed to display help panel.");
  1756. }
  1757.  
  1758.  
  1759. ΓòÉΓòÉΓòÉ 3.3. Writing your Pascal program source file ΓòÉΓòÉΓòÉ
  1760.  
  1761.  
  1762. MakeIPF automatically creates a file HLPTABLE.RC:
  1763.  
  1764.  
  1765.  
  1766. CONST
  1767.  SUBTABLE_ID_childwindow = 7001
  1768.  
  1769. HELPTABLE 1000
  1770. BEGIN
  1771.  HELPITEM ID_childwindow, SUBTABLE_ID_childwindow, 1 /* Introduction */
  1772. END
  1773.  
  1774. HELPSUBTABLE SUBTABLE_ID_childwindow
  1775. BEGIN
  1776.  HELPSUBITEM ID_OK, 2 /* Usage of the OK button */
  1777.  HELPSUBITEM ID_Cancel, 3 /* Usage of the Cancel button */
  1778. END
  1779.  
  1780. MakeIPF also creates a file PANELID.INC:
  1781.  
  1782.  
  1783.  
  1784. {   Panel ID's created by MakeIPF   }
  1785.  
  1786. const
  1787.  PANEL_Introduction = 1;
  1788.  PANEL_usage_OK = 2;
  1789.  
  1790. The numbers 1, 2 and 3 are the IPF internal heading-ressource-id's. In the 
  1791. helptable file, MakeIPF automatically writes the heading text as comment, so 
  1792. you can read this file more easily while debugging. (Normally you don't have 
  1793. any reason to read the helptable and panel ID file.) 
  1794.  
  1795. You can change the Help Subtable Start ID value in the ini file, switch  Help 
  1796. Subtable Start ID , also you can change the filenames of the two created files. 
  1797.  
  1798. You can simply include the helptable file and the panel ID file into your 
  1799. program source by typing 
  1800.  
  1801. {$I HLPTABLE.RC} 
  1802.  
  1803. for example after a MENU or a DLGTEMPLATE block in your RC file and 
  1804.  
  1805. {$I PANELID.INC} 
  1806.  
  1807. at the top of your program source file (a PAS file). 
  1808.  
  1809. First, there are two procedures to start the HLP file: 
  1810.  
  1811. DisplayHelpPanel (PanelID) 
  1812.  
  1813. is necessary to create a direct link from your program to a chapter of your 
  1814. hypertext. It's the complement for the panel ID dot command. 
  1815.  
  1816. SendHelpMessage (HM_HELP_CONTENTS) 
  1817.  
  1818. activates the contents of the HLP file directly. There are other HM_* 
  1819. constants, defined in the SpeedPascal PMHELP.PAS unit. 
  1820.  
  1821. The following depends on whether you want to use SpeedPascal 1.5 OPML or not. 
  1822.  
  1823. subchapters: 
  1824. Creating the help functionality with SpeedPascal OPML 
  1825. Creating the help functionality without OPML 
  1826.  
  1827. next chapter: 
  1828. Writing several HLP files of different languages 
  1829.  
  1830.  
  1831. ΓòÉΓòÉΓòÉ 3.3.1. Creating the help functionality with SpeedPascal OPML ΓòÉΓòÉΓòÉ
  1832.  
  1833.  
  1834. In the method 
  1835.  
  1836. TApplication.InitMainWindow 
  1837.  
  1838. you have to append the following line at the end: 
  1839.  
  1840. MainWindow^.InitWindowHelp ('MYPROG.HLP', 'help window title'); 
  1841.  
  1842. That's all. 
  1843.  
  1844.  
  1845. ΓòÉΓòÉΓòÉ 3.3.2. Creating the help functionality without OPML ΓòÉΓòÉΓòÉ
  1846.  
  1847.  
  1848. To create the connection between your EXE file and the HLP file, you need two 
  1849. procedures: 
  1850.  
  1851.  uses PMHELP; 
  1852.  
  1853.  InitHelp (hwnd); {initialize the help process} 
  1854.  DestroyHelp; {destroy the help instance} 
  1855.  
  1856. This procedures are defined in the PMHELP.PAS unit of SpeedPascal 1.5. 
  1857.  
  1858. The procedure InitHelp needs a parameter: the window handle of your program. Of 
  1859. course, this window handle has already to be valid. If your program is a 
  1860. standardwindow, you should place the function InitHelp between 
  1861. WinCreateStdWindow... and while WinGetMsg... and the function DestroyHelp after 
  1862. while WinGetMsg... . If your program is only a dialogbox, you won't have a 
  1863. WinCreateStdWindow function. In this case, you can place InitHelp into the 
  1864. WM_INITDLG and DestroyHelp into the WM_CLOSE section of your dialogbox message 
  1865. function. 
  1866.  
  1867. Immidiately before using the procedure "InitHelp" you have to set some values 
  1868. of variables: 
  1869.  
  1870.  HelpFilename := 'MYPROG.HLP'; 
  1871.  HelpWindowTitle := 'heading of the hypertext window'; 
  1872.  HELP_TABLE := 1000; 
  1873.  
  1874. The number 1000 is also used in the Helptable created by MakeIPF. 
  1875.  
  1876. If you do not use SpeedPascal 1.5 (or later), you will find the procedures and 
  1877. variables in the subchapter. 
  1878.  
  1879. subchapters: 
  1880. Pascal Help Source 
  1881.  
  1882. next chapter: 
  1883. Writing several HLP files of different languages 
  1884.  
  1885.  
  1886. ΓòÉΓòÉΓòÉ 3.3.2.1. Pascal Help Source ΓòÉΓòÉΓòÉ
  1887.  
  1888. {Help manager helpers}
  1889.  
  1890. FUNCTION InfoBox(st:STRING):LONGINT;
  1891. BEGIN
  1892.  result:=WinMessageBox (HWND_DESKTOP, HWND_DESKTOP, st,'', 0, MB_OK | MB_ERROR);
  1893. END;
  1894.  
  1895. {to be placed in front of the main program message loop}
  1896. PROCEDURE InitHelp (hwndClientFrame:HWND);
  1897. VAR
  1898.   hini:HELPINIT;
  1899.   { If we return because of an error, Help will be disabled }
  1900. BEGIN
  1901.    fHelpEnabled := FALSE;
  1902.    { Initialize help init structure }
  1903.    hini.cb := sizeof(HELPINIT);
  1904.    hini.ulReturnCode := 0;
  1905.    { If tutorial added, add name here }
  1906.    hini.pszTutorialName := NIL;
  1907.    hini.phtHelpTable := PHELPTABLE(MAKELONG(HELP_TABLE, $FFFF));
  1908.    hini.hmodHelpTableModule := 0;
  1909.    hini.hmodAccelActionBarModule := 0;
  1910.    hini.idAccelTable := 0;
  1911.    hini.idActionBar := 0;
  1912.    hini.pszHelpWindowTitle := @HelpWindowTitle;
  1913.    hini.fShowPanelId := CMIC_HIDE_PANEL_ID;
  1914.    hini.pszHelpLibraryName := @HelpFilename;
  1915.    { Creating help instance }
  1916.    hwndHelpInstance := WinCreateHelpInstance(AppHandle,hini);
  1917.    if ((hwndHelpInstance = 0 )OR(hini.ulReturnCode<>0)) THEN
  1918.    BEGIN
  1919.      InfoBox('Failed to load help manager.');
  1920.      exit;
  1921.    END;
  1922.  
  1923.    { Associate help instance with main frame }
  1924.    if not WinAssociateHelpInstance(hwndHelpInstance, hwndClientFrame) THEN
  1925.    BEGIN
  1926.      InfoBox('Failed to load help manager.');
  1927.      exit;
  1928.    END;
  1929.  
  1930.    { Help manager is successfully initialized so set flag to TRUE }
  1931.    fHelpEnabled := TRUE;
  1932. END;
  1933.  
  1934. {to be placed behind the main program message loop}
  1935. PROCEDURE DestroyHelp;
  1936. BEGIN
  1937.    IF hwndHelpInstance <> 0 THEN WinDestroyHelpInstance(hwndHelpInstance);
  1938. END;
  1939.  
  1940.  {
  1941.   some possible parameters:
  1942.   HM_HELP_INDEX   shows the index
  1943.   HM_HELP_CONTENTS, shows the contents
  1944.   HM_DISPLAY_HELP  shows help for help
  1945.  }
  1946. PROCEDURE SendHelpMessage (HelpMessage:LONG);
  1947. BEGIN
  1948.    if fHelpEnabled THEN
  1949.    if WinSendMsg(hwndHelpInstance, HelpMessage, 0, 0)<>0
  1950.     then InfoBox ('Failed to display help panel.');
  1951. END;
  1952.  
  1953.  {
  1954.   parameters are the Panel ID's, defined with ID dot commands
  1955.   in the MAKEIPF source file
  1956.  }
  1957. PROCEDURE DisplayHelpPanel (PanelID:LONG);
  1958. BEGIN
  1959.    if fHelpEnabled then
  1960.     if WinSendMsg(hwndHelpInstance, HM_DISPLAY_HELP,
  1961.      MPFROMLONG(MAKELONG(PanelID, 0)),
  1962.      MPFROMSHORT(HM_RESOURCEID))<>0
  1963.       then InfoBox ('Failed to display help panel.');
  1964. END;
  1965.  
  1966.  
  1967. ΓòÉΓòÉΓòÉ 3.4. Writing several HLP files of different languages ΓòÉΓòÉΓòÉ
  1968.  
  1969.  
  1970. If you are writing several HLP files of different languages and you have only 
  1971. one EXE file, it is adequate to enter the RC- and ID-dot commands only in one 
  1972. MakeIPF source file. There aren't any problems if you have got exactly the same 
  1973. heading level structure in every MakeIPF source file. MakeIPF simply enumerates 
  1974. the headings from the first heading (res ID 1) to the end. 
  1975.  
  1976.  
  1977. ΓòÉΓòÉΓòÉ 4. dot command summary ΓòÉΓòÉΓòÉ
  1978.  
  1979.  
  1980. Here you find a summary of all MakeIPF dot commands. You will find the same 
  1981. structure of subjects in Writing a MakeIPF file. 
  1982.  
  1983. Some dot commands have got synonyms in german language or WordStar synonyms, 
  1984. they are quoted in brackets and interpreted both. 
  1985.  
  1986. subchapters: 
  1987. Essentials 
  1988. Beginning 
  1989. Headings 
  1990. Fonts 
  1991. Lists 
  1992. Bitmaps 
  1993. Linking and Indexing 
  1994. Line drawing 
  1995. Footnotes 
  1996. Margins and Formatting 
  1997. if-conditions 
  1998. Helptables and Panel ID's 
  1999.  
  2000. next chapter: 
  2001. Ini file 
  2002.  
  2003.  
  2004. ΓòÉΓòÉΓòÉ 4.1. Essentials ΓòÉΓòÉΓòÉ
  2005.  
  2006.  
  2007.  ..comment 
  2008.  
  2009. "comment" is not interpreted. 
  2010.  
  2011. .:ipfcommand. 
  2012. .:ipfcommand. expression 
  2013.  
  2014. You can enter an IPF command directly. 
  2015.  
  2016.  
  2017. ΓòÉΓòÉΓòÉ 4.2. Beginning ΓòÉΓòÉΓòÉ
  2018.  
  2019.  
  2020.  .TI Title text 
  2021.  
  2022. sets the title of the hypertext in INF files. 
  2023.  
  2024. .<> 
  2025.  
  2026. creates pushbuttons "Contents", "Back" and "Forward" in HLP files, normally 
  2027. only INF files have. 
  2028.  
  2029.  
  2030. ΓòÉΓòÉΓòÉ 4.3. Headings ΓòÉΓòÉΓòÉ
  2031.  
  2032.  
  2033.  .1 up to .6 sets a heading level 
  2034.  
  2035.  .1 
  2036.  Main heading 
  2037.  
  2038. The title of the first heading level is "Main heading". 
  2039.  
  2040.  .WA ( .FA ) 
  2041.  .WA hori 30 
  2042.  .WA hori 30 verti 40 III 
  2043.  
  2044. Window arrangement enables showing two or three heading level windows 
  2045. simultaneously. It has to be placed above the first heading level dot command 
  2046. where the arrangement shall begin. 
  2047.  
  2048. Duplication of heading text 
  2049.  
  2050.  .dp34C 
  2051.  
  2052. Duplication of heading text at the beginning of the text window in heading 
  2053. level 3 and 4 with font C 
  2054.  
  2055.  .dp##C 
  2056.  
  2057. in all heading levels, headings are duplicated at the beginning of the text 
  2058. window, gets link target (first #) and is placed into the index (second #). 
  2059.  
  2060.  .dp-34 
  2061.  
  2062. deactivates heading duplication at the heading level 3 and 4. 
  2063.  
  2064.  
  2065. ΓòÉΓòÉΓòÉ 4.4. Fonts ΓòÉΓòÉΓòÉ
  2066.  
  2067.  
  2068.  .SFX ( .SNX ) 
  2069.  .AFX ( .SAX ) 
  2070.  
  2071. standard font and alternate font changes the font to the font X. X represents a 
  2072. character from A to Z and from a to z (case sensitive). The font chars are 
  2073. defined in the ini file. 
  2074.  
  2075. The alternate font is active between two alternate toggle chars, also defined 
  2076. in the ini file. 
  2077.  
  2078.  
  2079. ΓòÉΓòÉΓòÉ 4.5. Lists ΓòÉΓòÉΓòÉ
  2080.  
  2081.  
  2082.  .OL turns the ordered list setting on 
  2083.  .UL turns it off (default, "unordered list"). 
  2084.  
  2085.  
  2086. ΓòÉΓòÉΓòÉ 4.6. Bitmaps ΓòÉΓòÉΓòÉ
  2087.  
  2088.  
  2089.  .BM filename 
  2090.  
  2091. places a bitmap centered. 
  2092.  
  2093.  .BTX filename 
  2094.  
  2095. replaces all occurrences of the bitmap char X by the bitmap filename.bmp. 
  2096.  
  2097.  
  2098. ΓòÉΓòÉΓòÉ 4.7. Linking and Indexing ΓòÉΓòÉΓòÉ
  2099.  
  2100.  
  2101.  .ICX  ( .IZX ) 
  2102.  
  2103. sets the index char to X. 
  2104.  
  2105.  .IN phrase 
  2106.  
  2107. places "phrase" into the index; all occurrences of "phrase" will get a link to 
  2108. the chapter where the IN dot command is placed. 
  2109.  
  2110.  .IT phrase  ( .SV ) 
  2111.  
  2112. Index Turned: same as IN, but uses the last word as leading word. 
  2113.  
  2114. External links 
  2115.  
  2116.  .EX extern.inf 
  2117.  .ID chapter_beginning 
  2118.  .IN phrase 
  2119.  .EX 
  2120.  
  2121. All occurrences of "phrase" become an external link to the chapter of the file 
  2122. extern.inf which was labeled with the dot command 
  2123.  .ID chapter_beginning 
  2124.  
  2125. Launching programs 
  2126.  
  2127.  .EX programname.exe parameter 
  2128.  .IN phrase 
  2129.  .EX 
  2130.  
  2131. All occurrences of "phrase" become a link to the program "programname.exe", 
  2132. with the parameter "parameter". 
  2133.  
  2134.  
  2135. ΓòÉΓòÉΓòÉ 4.8. Line drawing ΓòÉΓòÉΓòÉ
  2136.  
  2137.  
  2138. .LIXYZ 
  2139. X  ZY  X        ΓöîΓöÇΓöÇΓöÇΓòÑΓöÇΓöÇΓöÇΓöÉ 
  2140.             Γöé  Γòæ  Γöé 
  2141. Y       result:   Γö£ΓöÇΓöÇΓöÇΓò½ΓöÇΓöÇΓöÇΓöñ 
  2142.             Γöé  Γòæ  Γöé 
  2143. X    X        ΓööΓöÇΓöÇΓöÇΓò¿ΓöÇΓöÇΓöÇΓöÿ 
  2144. .LI 
  2145.  
  2146. Line drawing generates a box (X are the corners), divided by Y. Z in front of X 
  2147. or Y uses double lines. 
  2148.  
  2149.  
  2150. ΓòÉΓòÉΓòÉ 4.9. Footnotes ΓòÉΓòÉΓòÉ
  2151.  
  2152.  
  2153.  .FU{} 
  2154.  
  2155. defines brackets to quote footnote text. If you enter 
  2156.  
  2157.  you will get {content of the footnote}. 
  2158.  
  2159. you will get * . 
  2160.  
  2161.  .FT XXX 
  2162.  
  2163. footnote text: writes "XXX" instead of the default "*". Bitmap chars are 
  2164. allowed. 
  2165.  
  2166.  
  2167. ΓòÉΓòÉΓòÉ 4.10. Margins and Formatting ΓòÉΓòÉΓòÉ
  2168.  
  2169.  
  2170.  .LM 10 
  2171.  
  2172. will set the left margin from default 1 to 10. 
  2173.  
  2174.  .FM off  ( .FM aus ) 
  2175.  .FM on  ( .FM an ) 
  2176.  
  2177. Formatting turns formatting off and on. Default is on. 
  2178.  
  2179.  .OC on  ( .OC an ) 
  2180.  .OC off  ( .OC aus ) 
  2181.  
  2182. turnes centered text on and off. 
  2183.  
  2184.  .AM off  ( .AM aus ) 
  2185.  .AM on  ( .AM an ) 
  2186.  
  2187. Auto Margin let you change the left margin by entering spaces at the beginning 
  2188. of a paragraph. 
  2189.  
  2190.  
  2191. ΓòÉΓòÉΓòÉ 4.11. if-conditions ΓòÉΓòÉΓòÉ
  2192.  
  2193.  
  2194. .IF CONDITION 
  2195. .ELSE 
  2196. .END 
  2197.  
  2198. is only compiling specific source text to IPF. The conditions are set by using 
  2199. the command line (not case-sensitive) 
  2200.  
  2201. [C:\myProject] makeipf myDoc.txt #CONDITION 
  2202.  
  2203.  
  2204. ΓòÉΓòÉΓòÉ 4.12. Helptables and Panel ID's ΓòÉΓòÉΓòÉ
  2205.  
  2206.  
  2207. .RC ID_window 
  2208. .RC ID_window, ID_button_or_Menu_Item 
  2209. .RC , ID_button_or_Menu_Item 
  2210.  
  2211. .ID PanelID 
  2212.  
  2213. RC dot commands create a helptable in the file HELPTABLE.RC, ID dot commands 
  2214. create a file PANELID.H. 
  2215.  
  2216.  
  2217. ΓòÉΓòÉΓòÉ 5. Ini file ΓòÉΓòÉΓòÉ
  2218.  
  2219.  
  2220. The ini file contains important settings. It's useful to create a seperate ini 
  2221. file for every project. You can edit the ini file with an ASCII editor like the 
  2222. OS/2 System Editor (do not use WordStar). The first line of the file won't be 
  2223. interpreted: 
  2224.  
  2225. Settings of MakeIPF 
  2226.  
  2227. In C++ manner, lines beginning with double slash // won't be interpreted, 
  2228. either. You can change the order of the switches, but all switches have to 
  2229. appear. With a few exceptions, the lines aren't interpreted case sensitive. 
  2230.  
  2231. You aren't allowed to change the text at the left side of the = (equal) 
  2232. character, because that's the name of the switch. At the right side, you can 
  2233. change the setting. 
  2234.  
  2235. Switches 
  2236.  
  2237. subchapters: 
  2238. Language 
  2239. Registration key 
  2240. Source format 
  2241. List chars 
  2242. Index char 
  2243. no more links in 
  2244. toggles 
  2245. Font 
  2246. endings of words 
  2247. Extended Letters 
  2248. Text for link to 
  2249. Help Subtable Start ID 
  2250. Filenames 
  2251.  
  2252. next chapter: 
  2253. Starting the MakeIPF compiler 
  2254.  
  2255.  
  2256. ΓòÉΓòÉΓòÉ 5.1. Language ΓòÉΓòÉΓòÉ
  2257.  
  2258.  
  2259. //possible settings: ENGLISH, GERMAN, C, PASCAL 
  2260. Language = ENGLISH C 
  2261.  
  2262. Native Language 
  2263.  
  2264. Actually, English and German are supported. This document is also available in 
  2265. German language. This switch won't have any effect to the output (the IPF 
  2266. file). It only sets the language of the (error) messages running MakeIPF. Some 
  2267. dot commands are different in the german documentation, but they are both 
  2268. interpreted. 
  2269.  
  2270. When choosing a native language, you also have to set the language specific 
  2271. settings endings of words and extended letters. 
  2272.  
  2273. Programming Language 
  2274.  
  2275. If you want to create Panel ID and Helptable files, MakeIPF has to know your 
  2276. programming language C or Pascal. 
  2277.  
  2278.  
  2279. ΓòÉΓòÉΓòÉ 5.2. Registration key ΓòÉΓòÉΓòÉ
  2280.  
  2281.  
  2282. Registration key = 0 
  2283.  
  2284. Here you have to enter your registration code, if you want to compiler bigger 
  2285. sources than 25 kB. 
  2286.  
  2287. see registration 
  2288.  
  2289.  
  2290. ΓòÉΓòÉΓòÉ 5.3. Source format ΓòÉΓòÉΓòÉ
  2291.  
  2292.  
  2293. //possible Settings: ASCIIHARDRET, ASCIISOFTRET, WORDSTAR4 
  2294. Source format = ASCIISOFTRET 
  2295.  
  2296. see handling of Returns 
  2297.  
  2298.  
  2299. ΓòÉΓòÉΓòÉ 5.4. List chars ΓòÉΓòÉΓòÉ
  2300.  
  2301.  
  2302. //only ASCII source 
  2303. List chars = ΓûáΓòÉΓöÇ 
  2304.  
  2305. List chars are necessary to create unordered lists with an ASCII editor. 
  2306.  
  2307.  
  2308. ΓòÉΓòÉΓòÉ 5.5. Index char ΓòÉΓòÉΓòÉ
  2309.  
  2310.  
  2311. Index char = # 
  2312.  
  2313. see linking and indexing 
  2314.  
  2315.  
  2316. ΓòÉΓòÉΓòÉ 5.6. no more links in ΓòÉΓòÉΓòÉ
  2317.  
  2318.  
  2319. //possible Settings: PARAGRAPH, WINDOW 
  2320. no more links in = PARAGRAPH 
  2321.  
  2322. see Linking, Omitting links 
  2323.  
  2324.  
  2325. ΓòÉΓòÉΓòÉ 5.7. toggles ΓòÉΓòÉΓòÉ
  2326.  
  2327.  
  2328. //highlighted char toggles 
  2329. //order: alternate italic bold underlined red cyan blue 
  2330. toggles = *#@Γäû|&┬ñ 
  2331.  
  2332. Here you can enter toggle chars. You always have to enter all seven toggle 
  2333. chars. Using WordStar, you have to enter the original ASCII characters. * 
  2334.  
  2335.  
  2336. ΓòÉΓòÉΓòÉ 5.8. Font ΓòÉΓòÉΓòÉ
  2337.  
  2338.  
  2339. //Font chars from A to Z and from a to z (case-sensitive!) 
  2340. //parameters: Font size codepage foregroundcolor BACKGROUNDCOLOR 
  2341. //       Linestandard OmitLinks 
  2342. Font A = 15 Courier 
  2343. Font b = Courier 12 black 437 LineStandard 
  2344. Font B = 30 Helv neutral 
  2345. Font Z = GREEN 30 Helv yellow 
  2346. Font G = 15 Helv black 
  2347. Font T = 18 Tms_Rmn 
  2348. Font C = black 
  2349. Font o = OmitLinks 
  2350.  
  2351. Here you can define font chars from A to Z and from a to z. Note that the font 
  2352. char is case sensitive. There is no order of the settings. 
  2353.  
  2354. The characteristics of the strings are: 
  2355.  
  2356.  o size: all numbers smaller than 200 
  2357.  o codepage: all numbers equal and bigger than 200 
  2358.  o foregroundcolor: all colors in lower case letters: default, blue, cyan, 
  2359.    green, neutral, red, yellow, black. 
  2360.  o backgroundcolor: all colors in capital letters: DEFAULT, BLUE, CYAN, GREEN, 
  2361.    NEUTRAL, RED, YELLOW, BLACK. 
  2362.  o Font: all strings which are not a color. Note that Fonts with two words have 
  2363.    to be connected with "_". 
  2364.  
  2365.  
  2366.  You only have to enter the settings which are different from default. The 
  2367.  default codepage is defined by the settings in your operating system or by a 
  2368.  parameter of IPFC. 
  2369.  
  2370.  See font samples and color samples. 
  2371.  
  2372.  With the LineStandard setting you can choose which font will be standard when 
  2373.  activating line drawing. Only one font should have the LineStandard setting, 
  2374.  and the font should be not a proportional font. 
  2375.  
  2376.  With the OmitLinks setting, you can omit the automatic linking function in 
  2377.  several specific fonts. That can be useful for example when writing sample 
  2378.  text. 
  2379.  
  2380.  
  2381. ΓòÉΓòÉΓòÉ 5.9. endings of words ΓòÉΓòÉΓòÉ
  2382.  
  2383.  
  2384. //endings in german words: n en s es 
  2385. ending of words = s es 's 
  2386.  
  2387. See Linking, Handling of endings 
  2388.  
  2389.  
  2390. ΓòÉΓòÉΓòÉ 5.10. Extended Letters ΓòÉΓòÉΓòÉ
  2391.  
  2392.  
  2393. //language specific letters besides A...Z, a...z, 0...9 
  2394. //english '- 
  2395. //german ╨ö╨ñ╨æ╤ü╨₧╨⌐╨¬ 
  2396. extended letters = '- 
  2397.  
  2398. In most languages besides english, there are letters other languages won't use. 
  2399. MakeIPF has to know these letters to distinguish from (possible) toggles. This 
  2400. has an effect on indexing/linking. So if you write 
  2401.  
  2402. This is a sample with a marked german word #Kinderg╨örten. 
  2403.  
  2404. (That's plural of Kindergarten.) If you haven't defined "╨ö" as an extended 
  2405. letter, the index entry and link target is only "Kinderg". 
  2406.  
  2407. To use an expression like "CONFIG.SYS" or "bird (movie)" as a link target, the 
  2408. dot and the parenthesis have to be defined as extended letters. If you do so, 
  2409. you have to pay attention when marking expressions with the index char, for 
  2410. example you enter (#Word). Not "Word" is the link target and placed in the 
  2411. index, it's "Word)." - that means most of the links you want are not created. 
  2412. Use (#:Word:). in this case. 
  2413.  
  2414.  
  2415. ΓòÉΓòÉΓòÉ 5.11. Text for link to ΓòÉΓòÉΓòÉ
  2416.  
  2417.  
  2418. Text for link to subchapters = @subchapters:@ 
  2419. Text for link to next chapter = @next chapter:@ 
  2420.  
  2421. MakeIPF will automatically generate links at the end of a heading to all 
  2422. subchapters and to the next chapter of the same (or higher) heading level. Here 
  2423. you can enter the input which will be shown immediately before the links will 
  2424. appear. You are allowed to use toggle chars or bitmaps using bitmap text. I 
  2425. recommend cyan toggle chars like in this document, because this color won't be 
  2426. used often. 
  2427.  
  2428. You can turn off this function by entering NO in capital letters: 
  2429.  
  2430. Text for link to subchapters = NO 
  2431. Text for link to next chapter = NO 
  2432.  
  2433.  
  2434. ΓòÉΓòÉΓòÉ 5.12. Help Subtable Start ID ΓòÉΓòÉΓòÉ
  2435.  
  2436.  
  2437. Help Subtable Start ID = 7000 
  2438.  
  2439. With the Help Subtable Start ID setting you can define a start ID value for 
  2440. Subtables in helptables created by MakeIPF. This setting won't be interesting 
  2441. unless you define constants in your (C) source file or header file with the 
  2442. same value (7001, 7002 etc.). 
  2443.  
  2444.  
  2445. ΓòÉΓòÉΓòÉ 5.13. Filenames ΓòÉΓòÉΓòÉ
  2446.  
  2447.  
  2448. //files will be overwritten without warning 
  2449. Helptable filename = HLPTABLE.RC 
  2450. Panel ID filename  = PANELID.H 
  2451.  
  2452. Here you can change the filenames of the helptable and panel ID file which will 
  2453. be automatically created by MakeIPF. If you enter the filename *.XYZ, the 
  2454. source file name with the extension XYZ is chosen. 
  2455.  
  2456. Note: This files will be overwritten without warning. 
  2457.  
  2458.  
  2459. ΓòÉΓòÉΓòÉ 6. Starting the MakeIPF compiler ΓòÉΓòÉΓòÉ
  2460.  
  2461.  
  2462. The MakeIPF program is a compiler started from the command line, like IPFC. 
  2463.  
  2464. Before using MakeIPF, you have to copy MakeIPF.EXE into a directory of your 
  2465. PATH statement (in the file CONFIG.SYS); The file KBDVIO32.DLL has to be placed 
  2466. into a directory of your LIBPATH statement. If the EXE file doesn't find the 
  2467. DLL, you will get a "runtime error 217". 
  2468.  
  2469. There are one or two parameters you have to enter: 
  2470.  
  2471. [C:\myProject] makeipf myDoc.txt my.ini 
  2472.  
  2473. There is no order of the parameters. You have to explicit enter the file 
  2474. extensions. You can enter any extension for the MakeIPF source file, but the 
  2475. extension of the ini file has to be ".INI". 
  2476.  
  2477. If the name of the ini- and text-file at the left side of the dot is identical 
  2478. like myDoc.txt and myDoc.ini, it is adequate to enter only the name of the text 
  2479. document - MakeIPF will search the ini file by itself: 
  2480.  
  2481. [C:\myProject] makeipf myDoc.txt 
  2482.  
  2483. The name of the output file will automatically be the entered source file name 
  2484. with the extension IPF. 
  2485.  
  2486. How MakeIPF works 
  2487.  
  2488. When running MakeIPF, there are six parts of compiling the source file: 
  2489.  
  2490.  o Reading ini file 
  2491.  o Reading source file 
  2492.    The source file is read in one part from the disk into the heap (thanks to 
  2493.    flat memory model of OS/2) 
  2494.  o Indexing headings 
  2495.    All headings will get an internal identification number 
  2496.  o Indexing links 
  2497.    All words or phrases marked with the index char or dot command will be 
  2498.    placed into a list in the heap 
  2499.  o Writing IPF file 
  2500.    At last, the IPF file will be written. That's the main work. Every word of 
  2501.    the text has to be compared with the index words in the heap. In this part 
  2502.    of compiling, the main interpreters of dot commands, toggles and helptable 
  2503.    generating are also working. 
  2504.  o Writing helptable file 
  2505.    When using .RC-dot commands in the MakeIPF source file, the accumulated 
  2506.    information in the heap about the helptable will be written into the 
  2507.    helptable file. 
  2508.  
  2509.  
  2510.  When indexing headings, indexing links and writing IPF file, every compiled 
  2511.  heading will appear as a dot on the screen. 
  2512.  
  2513.  If you hear a deep beep, MakeIPF could not create an IPF file because of a 
  2514.  serious error. 
  2515.  
  2516.  Writing batch files 
  2517.  
  2518.  Because the IPF format isn't interesting anymore, you can start MakeIPF and 
  2519.  IPFC in one batch file (with the extension ".CMD"). A useful batchfile for 
  2520.  running in the background can be: 
  2521.  
  2522.  
  2523.   @echo off
  2524.   rem Generating hypertext with MakeIPF and IPFC
  2525.   makeipf %1.txt %1.ini >makeipf_errors
  2526.   ipfc /inf %1.ipf >ipfc_errors
  2527.   echo 
  2528.  
  2529.  The last line has got two Alt-7-chars, that will create two beeps. 
  2530.  
  2531.  If you find an incorrect output, you can read the ASCII files makeipf_errors 
  2532.  and ipfc_errors (or, if using FAT file system, 8 char shortcuts.). 
  2533.  
  2534.  If you don't enter /inf behind ipfc, you'll get a HLP file instead of an INF 
  2535.  file. The IPF file generated by MakeIPF can be always used for generating HLP 
  2536.  and INF files, even you have used HLP specific ressource connection and Panel 
  2537.  ID dot commands. 
  2538.  
  2539.  If you are not familiar with batchfiles, take a look at the chapter 
  2540.  "OS/2-commands, batchfiles" in the OS/2 commandline reference. 
  2541.  
  2542.  Remember when making a backup on disks or streamer, you need not save the IPF 
  2543.  files, because you can reproduce them every time from the MakeIPF source file. 
  2544.  
  2545.  
  2546. ΓòÉΓòÉΓòÉ 7. About MakeIPF ΓòÉΓòÉΓòÉ
  2547.  
  2548.  
  2549. subchapters: 
  2550. Registration 
  2551. Contacting the author 
  2552. MakeIPF Versions 
  2553. History and Future plans 
  2554.  
  2555.  
  2556. ΓòÉΓòÉΓòÉ 7.1. Registration ΓòÉΓòÉΓòÉ
  2557.  
  2558.  
  2559. This program is shareware if you want to compile bigger source files than 25 
  2560. kB. You need a registration key to compile such bigger source files. When 
  2561. compiling smaller source files than 25 kB, it will be freeware. 
  2562.  
  2563. Why 25 kB? I think writing an INF or a HLP file for simple freeware programs 
  2564. should be possible without registering. So if you find errors and you are not 
  2565. registered, you also can send me a mail. 
  2566.  
  2567. The registration fee is 50 Dollars or 70 Deutsche Mark . 
  2568.  
  2569. When ordering more than one licenses, you will get a 30% discount for every 
  2570. additional license. 
  2571.  
  2572. You can register this software with Compuserve Software registration. Go  SWREG 
  2573. . The Registration ID is 9988 . 
  2574.  
  2575. It's a shame in the age of information superhighways, but the simplest way to 
  2576. send money - besides Compuserve SWREG - is to put banknotes into an envelope! 
  2577. If you would send foreign currency like Dollar to my bank account, I would have 
  2578. to pay 15 DM changing fee! If you can send Deutsche Mark (for example you live 
  2579. in Germany), my banking account Number is: 
  2580. Dresdner Bank Ottobrunn (Germany), Bank Code 700 800 00, Nr. 075 64 62 400 
  2581.  
  2582. If you register, you will get a receipt and the registration key. The 
  2583. registration key has to be placed in your MakeIPF ini files. 
  2584.  
  2585. Disclaimer 
  2586.  
  2587. pmCalc is provided as is and comes with no warranty of any kind, either 
  2588. expressed or implied. In no event will the author be liable for any damages 
  2589. resulting from the use of this software. 
  2590.  
  2591.  
  2592. ΓòÉΓòÉΓòÉ 7.2. Contacting the author ΓòÉΓòÉΓòÉ
  2593.  
  2594.  
  2595. Press image for information about my person. 
  2596.  
  2597. My mail address is: (use footnote and Ctrl-Ins) 
  2598.  
  2599. Compuserve 100661,626 * 
  2600. You can reach CIS from the Internet. * 
  2601.  
  2602. My postal address is: * 
  2603.  
  2604. Dr. Martin Vieregg 
  2605. Hubertusstr. 26 
  2606. D-85521 Ottobrunn 
  2607. Germany 
  2608.  
  2609.  
  2610. ΓòÉΓòÉΓòÉ 7.3. MakeIPF Versions ΓòÉΓòÉΓòÉ
  2611.  
  2612.  
  2613. Improvements and bugfixes since from beta 0.91 to 1.0: 
  2614.  
  2615.  o "access denied" no more occurs. Lower RAM memory demand. 
  2616.  o now compiled with final (non-beta) SpeedPascal compiler. (Using a file 
  2617.    instead of stdout now works.) 
  2618.  o auto margin .AM 
  2619.  o if-conditions 
  2620.  o improvement of automatic linking (especially endings of words) 
  2621.  o several bugfixes 
  2622.  
  2623.  
  2624.  bugfixes in 2.0: 
  2625.  
  2626.  o Error printing INF/HLP files (in non-proportional fonts, all letters are 
  2627.    printed at the same position of the page) 
  2628.  o wrong number of carriage returns when formatting is turned off. 
  2629.  
  2630.  
  2631.  Also, a lot of minor bugs were fixed. 
  2632.  
  2633.  new functions in 2.0: 
  2634.  
  2635.  o external links to separate HLP- and INF-files 
  2636.  o launching programs by hyperlinks 
  2637.  o automatic duplication of heading text in the text window, heading text gets 
  2638.    link target and is placed in the index 
  2639.  
  2640.  o more detailed error messages, so running IPFC will create fewer error 
  2641.    messages 
  2642.  o tabs are converted into a number of spaces like an editor does (use only 
  2643.    with non-proportional fonts) 
  2644.  o improved window arrangement (see last paragraph of that chapter) 
  2645.  o registering via Compuserve 
  2646.  o lower price 
  2647.  
  2648.  
  2649. ΓòÉΓòÉΓòÉ 7.4. History and Future plans ΓòÉΓòÉΓòÉ
  2650.  
  2651.  
  2652. Where you will find MakeIPF 
  2653.  
  2654. You will find the latest version of MakeIPF with the filename MakeIPF.ZIP in 
  2655. Compuserve OS2DF1 7 (development tools). In the internet, the addresses are 
  2656. os2.nmsu.edu, ftp.cdrom.com/pub/os2 and in germany ftp.leo.org/pub/comp/os/os2. 
  2657.  
  2658. Future plans: several platforms 
  2659.  
  2660. It is possible that there will be a Windows95 and a Windows NT version of 
  2661. MakeIPF if IPFC.EXE exists for this platforms. (A fully functional Win 3.1 INF 
  2662. viewer is part of the "Just add Warp" package.) 
  2663.  
  2664. Future plans: MAKEHTML ? 
  2665.  
  2666. The IPF and HTML * formats are very similar. So it's possible to extend MakeIPF 
  2667. to a combinated MakeIPF/MAKEHTML tool. If I get enough feedback, I will do it. 
  2668.  
  2669. Future plans: printing text 
  2670.  
  2671. From 1985 to 1988, I have written a WordStar extending tool "StarExtender" * 
  2672. with footnotes, line drawing, headings, indexing etc. The line drawing function 
  2673. of MakeIPF is completely recycled StarExtender code, most dot commands are 
  2674. identical. 
  2675.  
  2676. Now there is the possibility to port this program to OS/2 and from german to 
  2677. english language. Only the printer driver has to be programmed totally new in 
  2678. OS/2 presentation manager manner, but then you could print and preview - like 
  2679. "Tech". Of course, the source documents could also be written with any ASCII 
  2680. editor instead of WordStar. 
  2681.  
  2682. That would mean, for program documentation you have only to write one source 
  2683. text and you can automatically generate printed documentation and hypertext. 
  2684.  
  2685. What do you think about this? 
  2686.  
  2687. Do you have some ideas for new functions? 
  2688.  
  2689. Trademarks 
  2690.  
  2691. IBM and OS/2 is a registered trademark of International Business Machines Corp. 
  2692. WordStar is a trademark of Micro Pro. 
  2693. SpeedPascal is a trademark of SpeedSoft GmbH. 
  2694. TurboPascal is a trademark of Borland Corp. 
  2695.  
  2696. Postscriptum 
  2697.  
  2698. If you have already used MakeIPF.EXE, you will be astonished by the speed of 
  2699. MakeIPF (I was, too). And now the surprise: I haven't used a C compiler, I have 
  2700. used the TurboPascal compatible SpeedPascal * . 
  2701.  
  2702. Other OS/2 programs I have programmed (all programmed in C): 
  2703.  
  2704.  o PMCALC20 PmCalc 2.0, a PM calculator with automatic clipboard function, hex 
  2705.  and scientific functions (comes soon, freeware or shareware, I don't know yet) 
  2706.  
  2707.     o TINYALRM TinyAlarm 2.1, a clock, countdown with a slider from 1 to 60 and 
  2708.       an alarm by entering alarm time (freeware) 
  2709.     o ZIPSHELL Simple Zipshell, a handful tiny batchfiles for handling ZIP- and 
  2710.       ARJ-files with the WPS (freeware) 
  2711.     o CLEAR10E Clear 1.0 Creating file lists for deleting and backup. Works 
  2712.     together with Info-Zip (freeware) 
  2713.  
  2714.     o CD_SHORT CD Shortcut 2.0, instead of whole directory names you enter only 
  2715.     substrings (freeware) 
  2716.  
  2717.  I have placed them in Compuserve OS2USER 4 and you will find them in the 
  2718.  internet at ftp-os2.nmsu.edu, ftp.cdrom.com/pub/os2 and in germany at 
  2719.  ftp.leo.org/pub/comp/os/os2. 
  2720.  
  2721.  end of hypertext 
  2722.  
  2723.  
  2724. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2725.  
  2726. The IBM Information format is a Hypertext-Format, especially for program 
  2727. documentation. 
  2728.  
  2729.  
  2730. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2731.  
  2732. The HLP format is like the INF format, but enables links from the described 
  2733. program to the hypertext. HLP files are part of the program. 
  2734.  
  2735.  
  2736. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2737.  
  2738. The IPF format (Information Presentation Facility) is the Source format to 
  2739. generate INF or HLP files. 
  2740.  
  2741.  
  2742. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2743.  
  2744. IPFC generates INF- and HLP-files from the IPF source. IPFC.EXE is part of 
  2745. every Programming Language for OS/2. At my system, the necessary files are 
  2746. IPFC.EXE, IPFC20.INF and IPFCEXMP.INF; there's also a directory IPFC with 
  2747. language specific data. 
  2748.  
  2749.  
  2750. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2751.  
  2752. I have also written a converting tool from WordStar 5 and 6 to WordStar 4 with 
  2753. ^OZ heading conversion. Please let me know if you are interested in it. 
  2754.  
  2755.  
  2756. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2757.  
  2758. of course, without 0x0A, 0x0D, 0x1A (decimal 10, 13, 26) 
  2759.  
  2760.  
  2761. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2762.  
  2763. The IPFC compiler would create an error message when using more than 200 chars. 
  2764.  
  2765.  
  2766. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2767.  
  2768. Every heading represents a window. There cannot be written any text without 
  2769. creating a window. The IPFC compiler would create an error message. 
  2770.  
  2771.  
  2772. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2773.  
  2774. Soft spaces are shown in WordStar with "Γûæ" or a centered dot or another special 
  2775. char. If you reformat a Paragraph by pushing ^B, soft spaces will be deleted. 
  2776. Using Tab (^I) won't produce soft spaces. 
  2777.  
  2778.  
  2779. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2780.  
  2781. To convert from GIF to BMP, I recommend the freeware GIF2BMP (Graham Welland, 
  2782. September 1989, OS/2 16 bit) 
  2783.  
  2784.  
  2785. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2786.  
  2787. A link is a connection between two different windows. Clicking a word or a 
  2788. phrase marked as a link (at my screen lightblue color) will activate the 
  2789. associated window. 
  2790.  
  2791.  
  2792. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2793.  
  2794. letters a e i o u y 
  2795.  
  2796.  
  2797. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2798.  
  2799. I could program a footnote window where you can choose between the different 
  2800. headings under which the phrase is marked. Do you think it is necessary? If 
  2801. yes, let me know. 
  2802.  
  2803.  
  2804. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2805.  
  2806. This will be the content of the footnote 
  2807.  
  2808.  
  2809. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2810.  
  2811. The WordStar dot command left margin .LM will create soft spaces automatically. 
  2812. MakeIPF won't interpret the LM dot command directly, but the soft spaces, 
  2813. created by using the LM command. You also can set a Tab with ^OL and get soft 
  2814. spaces with ^OG, or while formatting, with ^OG ^B. 
  2815.  
  2816.  
  2817. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2818.  
  2819. Because of a bug in the IPFC 2.0 compiler. The entries in the index would get 
  2820. an ASCII 10 char at the end. 
  2821.  
  2822.  
  2823. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2824.  
  2825. It's only a simulation of the IPF definition list command by using the IPF left 
  2826. margin command. 
  2827.  
  2828.  
  2829. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2830.  
  2831. You can always use an auto margin function by using the ^OG command (soft 
  2832. spaces). 
  2833.  
  2834.  
  2835. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2836.  
  2837. Programmers should know what an RC file is, and if you don't know, you can skip 
  2838. this chapter because you need not create any HLP files. 
  2839.  
  2840.  
  2841. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2842.  
  2843. If the constant behind DIALOG and the constant behind DLGTEMPLATE are 
  2844. identical, it's okay. 
  2845.  
  2846.  
  2847. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2848.  
  2849. you have to use the constant you have entered in the RC file after MENU or 
  2850. DIALOG 
  2851.  
  2852.  
  2853. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2854.  
  2855. Perhaps that's compiler specific. I use Borland C 
  2856.  
  2857.  
  2858. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2859.  
  2860. content of the footnote 
  2861.  
  2862.  
  2863. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2864.  
  2865. For example, to enter ^PA, you have to enter Alt-1 in the ASCII editor. ^PB is 
  2866. Alt-2, ^PS is Alt-19 etc. 
  2867.  
  2868.  
  2869. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2870.  
  2871. Martin Vieregg, 30. I've studied economics. My main job is working in my own 
  2872. consulting company. Our special subject is public transport, especially 
  2873. railways. The title of my doctoral (PhD) thesis was "increasing efficiency of 
  2874. railway long-distance passenger traffic" (only german language, just for fun 
  2875. also in IBM INF format). 
  2876.  
  2877.  
  2878. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2879.  
  2880. Martin Vieregg, 100661,626 
  2881.  
  2882.  
  2883. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2884.  
  2885. Martin Vieregg, 100661.626@COMPUSERVE.COM 
  2886.  
  2887.  
  2888. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2889.  
  2890.  
  2891. Dr. Martin Vieregg 
  2892. Hubertusstr. 26 
  2893. D-85521 Ottobrunn 
  2894. Germany 
  2895.  
  2896.  
  2897. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2898.  
  2899. Hypertext Markup Language, used in the Internet World Wide Web 
  2900.  
  2901.  
  2902. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2903.  
  2904. I have sold StarExtender only in Germany. 
  2905.  
  2906.  
  2907. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  2908.  
  2909. Speedsoft, Chemnitz, Germany