Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
	________________________________________________________________
	* release of groffer 0.9.22

2005-22-04  Bernd Warken

	### `--whatis'

	Produce a `groff' output and allow wild cards on filespec
	parameters for `--whatis'.

	* groffer2.sh:
	- $_FILESPEC_ARG: New variable for storing the actual filespec
	parameter.
	- main_do_fileargs(): Set $_FILESPEC_ARG and add
	what_is_filespec().
        - main_parse_args(): Add --all to --whatis.
	- to_tmp_line(): New function to write the arguments to the
	temorary cat file.
	- whatis_filename(): Rename of what_is().  Construct a better
	printout using $_FILESPEC_ARG.  Repair the sed sequneces.
	- whatis_filespec(): New function to print the filespec once
	during the `whatis' process.
	- whatis_header(): New funtion for printing the header of the
	`whatis' output.

	* groffer.man: Revise the documentation of --whatis.

	### `--apropos*'

	Produce `groff' for `--apropos*'.  Allow `--sections' for
	`--apropos', ignore it  with `--apropos-*'.

	* groffer2.sh:
	- --apropos*: Make these options without argument.
	- $_APROPOS_PROG: New variable for the program that is is used for
	`apropos'.
	- $_APROPOS_SECTIONS: New variable to determine the sections that
	are filtered out of `apropos' output depending on `--apropos-*'.
	- apropos_filespec(): Handling of apropos at the filespec level.
	- apropos_run(): Remove it.
	- apropos_setup(): New function.
	- main_set_mode(): Remove handling of $_OPT_APROPOS*.

	* groffer.man:
	- Revise the documentation of `--apropos*'.
	- Split section 'options for GNU man' into two sections `options
	for man pages' and `long options taken over from GNU man'.
	- Move `--apropos*', `--whatis', `--man', and `--no-man' to
	section `options for man pages'.

	### special display (apropos and whatis)

	* groffer2.sh:
	- special_setup(): New function that chooses the setup between
	apropos and whatis.
	- special_filespec(): New function that does the output at the
	filespec level for apropos or whatis.

	### handle `--sections' for man page searching

	* groffer2.sh:
	- man_do_filespec(): Use $_OPT_SECTIONS of --sections instead of
	$_MAN_AUTO_SEC if non-empty.  If a section was given on the
	filespec parameter $_OPT_SECTIONS is ignored.  This differs from
	`man' which always uses the restricted sections of --sections.
	This function works for both normal man page search and whatis.
	- apropos_filespec(): Use --sections for --apropos, but not for
	--apropos-* because these provide already their own sections.

	### wildcards in filespec arguments

	* groffer2.sh: Wildcards are now accepted.  In `--apropos*' and
	`--whatis' they are interpreted as wildcard search elements; but
	in normal display they are only handled as their own character.

	### development; new option

	* groffer2.sh:
	- --print: New option that prints just its argument for parameter
	check.
	- usage(): Add new option.
	- $_OPT_DO_NOTHING: New variable for do_nothing().  Handle it at
	the end of main_parse_Args().

	* groffer.man: Add information on --print.

	### safe exit

	* groffer2.sh:
	- error(): Always exit with $_ERROR.
	- exit_test(): New function to exit when first exit was hidden by
	().  Call it after each $().

	### automatic shell determination

	* groffer.sh:
	- If no option --shell is given perform a test of several shells
	to automatically start some shell for groffer2.sh.  `ksh' is used
	first because it can be safely terminated by Ctrl-C.
	- This can be cancelled by providing --shell=''.
	- Add test on `sed' program.

	* groffer.man: Revise information on --shell.

	### trap

	* groffer2.sh:
	- trap_set(): Remove argument.  Instead of $_ALL_EXIT use only
	signal 0.
	- trap_unset(): Rename trap_clean().  Instead of $_ALL_EXIT use
	only signal 0.
	- $_ALL_EXIT: Remove this variable.
	- Replace all direct `trap' calls by trap_set().
	
	* README_SH: New section `Bugs' on `trap'..

	### user errors, error output without function stack

	* groffer2.sh:
	- error_user(): New function for user errors.
	- error(): Remove call of clean_up() because the trap will do it
	with the exit.  Remove the `kill' commands.  Create a temporary
	file `.error' that can be tested by exit_test() for a better exit
	test (especially for shell `ksh').
	- $_DEBUG_USER_WITH_STACK: New variable to enable function stack
	output in error_user().
	- list_from_cmdline(), list_single_from_abbrev(), main_set_mode():
	Use error_user().

	### test modes on X and tty

	* groffer2,sh:
	- is_X(), is_not_X(): New functions for checking on X Window.
	- $_VIEWER_HTML_TTY, $_VIEWER_HTML_X: New variables that split
	$_VIEWER_HTML.  Add `galeon'.
	- main_parse_args(): Allow mode change for graphical modes only
	when in X Window.
	- _do_display() of main_display(): Create a special run for
	viewers that run on the terminal; `lynx' is the only one so far.

	### add $GROFFER_MODE to command line

	* groffer.sh:
	- After the handling of the configuration files integrate
	$GROFFER_OPT to the command line.
	- This makes a `set' in the shell determination unnecessary.

	* groffer2.sh:
	- The debug test gets simpler because quotes are vanished without
	$GROFFER_OPT.
	- main_parse_MANOPT(): Prepend $mpm_list to the command line.
	- main_parse_args(): `set' is unnecessary.

	### debug; new options

	* groffer2.sh:
	- --debug-all, --debug-lm, --debug-params, --debug-shell,
	--debug-stacks, --debug-tmpdir, --debug-user: New options.
	- --debug: Enable all debug variables except $_DEBUG_STACKS and
	$_DEBUG_LM.  By the new options the smallest abbreviation is now
	`--debug'.
	- $_DEBUG_STACKS: Rename $_DEBUG.
	- $_DEBUG_PRINT_TMPDIR: New debug variable for printing the name
	of the temporary directory in main_init().
	- $_OPT_DEBUG: Remove this variable because debug is handled at
	the early part of the script.
	- clean_up(): Enlarge $_DEBUG_KEEP_FILES to not deleting the
	temporary directory.
	- usage(): Move all development options on a section of its own.
	- Move the test of rudimentary shell functionality at the
	beginning of the script.  Add test on `sed'.
	- Follow this by the debug section.  The determination of all
	--debug* options can be done without a function.

	* groffer.man: Revise information on --debug and add new options.

	### variables

	* groffer.sh:
	- $_ERROR: Move the definition of this variable here.
	- $_GROFF_VERSION: New variable, is set over @...@ construct.
	- $_OUTPUT_FILE_NAME: Move this variable to groffer2.sh.

	* groffer2.sh:
	- $_MAN_AUTO_SEC_LIST: Rename $_MAN_AUTO_SEC because it represents
	a list.
	- $_MAN_AUTO_SEC_CHARS: New read-only variable for storing
	$_MAN_AUTO_SEC_LIST in [] construct.  Use it in man_do_filespec()
	and whatis_filename().
	- $_SPACE_CASE: New read-only variable with [] on space characters
	with \ for `case' patterns.  Use it in several functions.
	- $_SPACE_SED: New read-only variable with [] on space characters
	for `sed'.  Use it in several functions.

	### options and display

	* groffer2.sh:
	- list_from_cmdline(): Add test whether the same abbreviation is
	part of long options with and without arguments.  Give handling of
	`=' a `case' pattern of its own.
	- main_display(): Remove unnecessary calls of `clean_up' in order
	to use `mozilla' without problems.  In _do_display(): Fix -X by
	providing a different process when $_DISPLAY_PROG is empty.
	- main_set_mode(): Accept options for viewers as is, without check
	for program.  Add test whether no program is given for a mode.
	This avoids unnecessary empty $_DISPLAY_PROG in main_display().

	### viewer programs that run on the terminal (tty); new options

	* groffer2.sh:
	- $_VIEWER_TERMINAL: New variable that stores whether a viewer was
	supposed to run on tty.
	- --dvi-viewer-tty, --html-viewer-tty, --pdf-viewer-tty,
	--ps-viewer-tty, --tty-viewer-tty, --X-viewer-tty, --x-viewer-tty,
	--www-viewer-tty: New options for viewers that run on a terminal.
	- main_parse_args(), _do_display() of main_display(): Use the new
	options and the new variable.
	- usage(): Add the new options.

	* groffer.man: Add information on options --*-viewer-tty.

	### other fixes

	* groffer2.sh:
	- _do_display() of main_display(): Bear errors of `groff' run.
	- is_not_file: Fix to have exactly one argument.
	- is_not_prog(): Handle no arguments.
	- list_has_not(): Fix.
	- main_do_fileargs(): Remove $mdfa_exitcode.
	- register_title(): Limit title to 4 elements.
	- version(): Print the version information to standard output just
	like `groff' does.
	- --no-special: New option to disable former calls of `--all',
	`--apropos*', and `whatis.
	- --title: Make it an option with argument.

2005-08-07  Keith Marshall  <keith.d.marshall@ntlworld.com>

	* contrib/groffer/Makefile.sub (install): Reference groffer2.sh
	as $(srcdir)/groffer2.sh, so it will install when building in a
	different directory from the source.

	________________________________________________________________
	* release of groffer 0.9.21

2005-08-02  Bernd Warken

	### @...@ constructs

	* groffer.sh:
	- $_AT: New variable for `@'.
	- @...@: Replace the @...@ constructs by variables _AT_..._AT.
	These constructs are transformed by `make' to useful information.
	Keep all of these constructs in the first part of groffer.sh.  For
	a run before a `make' call, the script sets these variables to
	special values for testing purpose.
	- $_GROFFER_LIBDIR: Variable pointing to the groffer library
	directory @libdir@/groff/groffer.

	### Configuration files

	* groffer.sh:
	- Add test for `$()' construct.
	- Read and transform the configuration files and execute the
	emerging commands.  The `sed' script was heavily enlarged to
	handle line with spaces and quotes.  The emerging script is now
	called by `eval', so no temporary file is needed.
	- $_CONF_FILE_ETC, $_CONF_FILE_HOME: New variables for the config
	files.
	- $_SQ, $_SP: Move variables for characters before the handling of
	the configuration files.  Rename $_SQUOTE to $_SQ and $_SPACE to
	$_SP.
	- $GROFFER_OPT: Remove cleaning of this variable before the
	reading of the configuration files.

	* groffer2.sh:
	- main_init(): Remove the getting of the configuration files.

	### Rewrite the shell determination

	* groffer.sh:
	- Get rid of all functions in `groffer.sh'.  Rewrite the shell
	determination with `` and $().
	- --shell: Shortest abbreviation is `--sh'.  Allow arguments for
	the shell name.
	- Allow an empty argument for --shell as shell name to overwrite a
	specified shell; an empty shell name gets back to the default
	shell.
	- The shell determination now inludes the full handling of the
	config files.  The `--shell' option needs no longer a line
	starting with `-'.

	### Test of unset

	* groffer.sh:
	- Remove test of `unset'.
	- Remove all calls of `unset'.
	- Use one character names for all variables that are meant to be
	local in this script.

	* groffer2.sh:
	- Move the test of `unset' to the testing of rudimentary shell
	functionality without change.

        ### Allow abbreviations for long options

	* groffer2.sh:
	- list_has_abbrev(): New function for checking a list having an
	element with a given abbreviation.
	- list_get_single_from_abbrev(): New function to retrieve the
	element having a given abbreviation.
	- list_from_cmd_line(): For an option abbreviation determine the
	corresponding long option.
	- From the man option lists remove the elements that are also in
	a groffer list.
	- Allow abbreviation for the early test of --debug.

	* groffer.sh: Allow abbreviation for the early test on --shell.
	- get_opt_shell(): Rewrite _get_opt_shell() and the shell test
	around it.
	- test_on_shell(): Rename function _test_on_shell().
	- $_SHELL: global variable for the shell to run groffer2.sh.

	### Get rid of `sh -c'

	* groffer2.sh:
	- main_display(), _do_display(): Remove the `sh -c' calls.  Make
	the cleanup working without it.
	- _do_display(): Extend _do_display() such that	it can be used for
	the pdf mode as well.
	- _make_pdf(): New subfunction of main_display() for running the
	additional parts of pdf mode in _do_display().
	- rm_file(), rm_file_with_debug(), rm_tree(): New functions for
	removing files and directories.

	### Change directory

	* groffer2.sh:
	- $_START_DIR: New variable to store the directory at the starting
	time of the script.
	- main_display(): Go to the groffer temporary directory to be able
	to process internal `groff' data like pictures.
	- clean_up(): Get back to the starting directory.

	### Compatibility with strange shells

	* groffer2.sh:
	- clean_up(): `zsh' and `posh' had difficulties with `eval'.
	- is_*(): Add test on empty argument.  Some shells return true on
	`test -d' etc. with empty argument, while most shells return
	false.
	- echo1(); New function to print single line `cat <<EOF'.  Replace
	all `echo x' by `echo1'.
	- list_has_abbrev(), list_from_cmdline(): Correction.
	- main_parse_MANOPT(): Repair and revise.
	- --do-nothing: New option without output (for development).
	- Rewrite rudimentary shell functionality near the beginning of
	the script.

	* groffer.sh, groffer2.sh:
	- Remove `;' after the commands `if', `while', and `until'.

	### Debugging information

	* groffer2.sh:
	- $_DEBUG_PRINT_PARAMS: New variable for printing all parameters
	from the config files, $GROFFER_OPT, and command line after they
	have been transformed.
	- $_DEBUG_PRINT_SHELL: New variable for printing the name of the
	shell found in groff.sh.
	- main(): Move the landmarks of main-*() into main().

	### Further checks and additions

	* groffer.sh, groffer2.sh:
	- $_PROGRAM_NAME: Replace this variable by `groffer'.  The program
	name is now stable.
	- $_GROFFER_RUN: Remove this variable.  As `groffer.sh' or
	`groffer' is no longer rerun, this variable is not necessary any
	more.

	* groffer2.sh:
	- main_set_resources(): Make the default viewers capable to use
	arguments in the list.
	- leave(): Add an argument for given exit code.  Use it where
	suitable in main_*().
	- do_filearg(): Add error messages for non-existing files and man
	pages.
	- _do_opt_V(): New subfunction of main_display() to handle the
	output for option `-V'.  `groff -V' is greatly enlarged by
	`groffer' specific information.
	- register_title(): Handle file names with spaces.  Replace spaces
	by `_'.
	- is_existing(): Add `test -c' for special files.
	- usage(): Add `=arg' to the options with an argument.  Add option
	`--tty-viewer'.
	- kghostview: In the default viewer list, add option
	`--scale=1.45'.
	- $_OPTS_CMDLINE_SHORT_NA: Correct a lacking space.

	* Makefile.sub: Repair the installation instructions for
	groffer2.sh.

	* groffer.man:
	- Add paragraph on option handling.
	- Add option `--do-nothing'.
	- Reorder option for development and `groff'.
	- Rewrite documentation for option `-V'.
	- Expand `--shell'.
	- Reformulate sections CONFIGURATION FILES, COMPATIBILITY and SEE
	ALSO.
	- Make `man' italic where possible.
	- .copyleft: Adjust the fonts.

	* README: Update sections `Output' and `Compatibility'.

	* README_SH:
	- Add `mksh' as compatible shell.
	- Add information on the scripts after the split.

	* TODO: Remove some fulfilled parts.

	* ChangeLog: Remove final spaces.

	________________________________________________________________
	* release of groffer 0.9.20

2005-07-30  Bernd Warken

	### Split groffer.sh into two files groffer.sh and groffer2.sh.

	* groffer.sh:
	- Remove the second part of this script.  It is now in
	groffer2.sh.
	- $_GROFFER2_SH: New variable to point to the installed position
	of `groffer2.sh'.  This position is presented using @libdir@.

	* groffer2.sh: New script containing the second part of
	groffer.sh. This script will be installed in the groffer library
	directory @libdir@/groff/groffer, this might be
	/usr/local/lib/groff/groffer/groffer2.sh for example.

	* Makefile.sub:
	- `groffer': Add replacement of @libdir@.
	- `install_data': Add the installation of the groffer library
	directory and groffer2.sh.
	- `uninstall_sub': Delete the installed `groffer2.sh' and the
	groffer library directory.

	* README_SH:
	- Remove the function list.
	- Add argument options to the list of used commands.
	- Documentation of the splitting of the script.
	- Document the possible abbreviation of options.

	________________________________________________________________
	* release of groffer 0.9.19

2005-07-07  Bernd Warken

	* groffer.sh: extensions
	- `mode x': Mode for the equivalent options `--x', `--mode x',
	`--X' `--mode X', and the default mode.  The default assumes a
	resolution of 75 dpi.  The default device for a resolution of 75
	dpi is `X75-12', the default device for a resolution of 100 dpi is
	`X100'.  The default geometry for the resolution of 100 dpi is set
	to the width 800 dpi.
	- `mode X': New mode for option -X only.
	- `-V': Extent the `groff' output of -V by `groffer' specific
	information (in main_display()).
	- register_file(): Replace title `-' by `stdin'.
	- $_DEBUG_KEEP_FILES: If set to `yes' the files in the temporary
	directory are not deleted before the end trap.

	* groffer.sh: get `zsh' to work as well
	- tmp_create(): Use `: >file' for generating an empty file.
	- rmdir: Replace `rmdir' by `rm -f -r'.
	- eval: Add `eval' to many commands with variable arguments.

	* groffer.sh: repair `debug'
	- Print all debug output to stderr.
	- $_FUNC_STACK: Built function call stack even when $_DEBUG is not
	set.  Now the arguments are not added.
	- $_DEBUG: If set to `yes' print 3 call stack events: the function
	that is added with its arguments is printed with `+++ '
	(func_push()); the call stack after the addition is printed with
	`>>> ' (func_push()); the call stack after the removing is printed
	with `<<< ' (func_pop()).
	- error(): Always print the function call stack on errors.

	* groffer.sh: Corrections
	- $_groffer_run: Rename to $_GROFFER_RUN.
	- $unset: Rename to $_UNSET.
	- Repair test of `unset'.
	- Repair test for `--shell'.  The script is now rerun under the
	shell specified in the option argument.  This can increase the
	speed.

	* README_SH: `zsh' now works.

	* groffer.man:
	- Reformulate the information for the `groffer' specific details
	of option `-V'.
	- Add information on the debug process.
	- Add information on the default devices in `x mode'.
	- Minor corrections.

	________________________________________________________________
	* release of groffer 0.9.18

2005-07-01  Bernd Warken

	* groffer.sh: further shell compatibility
	- `echo': Remove options and possible options of `echo' by
	preceding the argument with a character `x' that is removed by
	`sed' or replace `echo' by `cat <<EOF'.  `echo -n' seems to be not
	portable, so it is omitted.
	- `for': Remove `;' from within `for' (because of ksh).
	- `ls': Old UNIX systems echoed the error message to standard
	output.  So handle the output with `sed'.  If the output contains
	`not found' map it to an empty string.
	- `true': Replace `true' by command `:'.  Remove test of `true'
	(because `ash' refuses the redefinition of builtins even in an
	unreachable `if' branch).
	- `false': Remove test of `false'; it isn't used any more.
	- `test': As `test -e' does not exist in Solaris 2.5 replace it by
	`test -f || test -d'.
	- `unset': `unset' is said to be not portable.  As `ash' protests
	against the definition of the function `unset()' in the test of
	`unset' replace the test by defining `$unset' to `unset' if it
	exists and to `:' otherwise.  Use `eval $unset' instead of the
	direct command `unset'.
	- _get_opt_shell(): Replace `for' loop with `shift' by `while'.
	- man_search_section(): Replace `for f in filename*' by a test on
	the existence of `filename*'.
	- `zsh' interprets `$...'  as `"$..."'.  So `eval' must be called;
	This cannot be used in `for i in $f', so it must be rewritten as
	`for i in $(eval set x $f; shift; echo "$@")'

	* groffer.sh:
	- `--X', `--x', `--mode=X', `--mode=x': Make these options
	equivalent to choosing an X device by setting `-TX75-12'.  `-X' is
	still equivalent to `groff -X'.
	- main_init(): Choose the name of the temporary file by adding a
	number using `expr' if it exists and cannot be removed.
	- main_parse_args():Repair some options by replacing `$mpa_mode'
	by `$_OPT_MODE'.
	- catz(): Rename it to cat_z() to avoid problem with existing
	programs.
	- where(): Rename to where_is().
	- $_CONFFILES: Rename to $_CONF_FILES.
	- $_HAS_BZIP: export and preset it.

	* groffer.man:
	- Document the `X mode' changes.
	- Add `@g@' to `troff'.

	* README, README_SH, TODO:
	- Add date line `Latest update:'.
	- Add `...' quoting to essential terms.
	- Add Emacs mode at the end.

	* README_SH:
	- Add documentation on the above compatibility changes.
	- Add documentation on used commands.
	- Mention the tested shells.

	* Makefile.sub:
	Readd `@g@'.

	________________________________________________________________
	* release of groffer 0.9.17

2005-06-23  Bernd Warken

	* groffer.sh: get rid of `local' in functions (it is not POSIX)
	- Replace local variables by variable names with a special prefix
	that is an abbreviation of the corresponding function name (quasi-
	local variables).
	- Unset the quasi-local function variables before returning.
	- _t_e_s_t_f_u_n_c_(): Remove tests for local and global
	variables.
	- Add quasi-local variables for saving the content of
	single-character variables.
	- Remove some unused local and global variables.
	- Several variables were forgotten to make local.  They are now
	made quasi-local.

	* groffer.sh: other corrections
	- $return_var: New function (after `eval') for an arbitrary
	return value.
	- obj*(): Add return modes.
	- Rewrite tests for `true' and `false'.
	- Add function names to error calls where it was forgotten.
	- `for': Replace `for x in "$@"' by `for x'.
	- `set': Replace `set -- ...' by `set x ...; shift'.
	- `sed': Replace `\|.*|s|...|...|' by `s|...|...|'.

	* README_SH:
	- Add information on the removing of `local'.
	- New section for non-POSIX shell restrictions.

2005-06-20 Keith Marshall

	* README-SH: Information of `Portable shells' in info autoconf.

	________________________________________________________________
	* release of groffer 0.9.16

2005-06-19  Bernd Warken

	* groffer.sh: Place each `then', `else', and `do' on a line of its
	own because some shells do not support the mixture mode.

	* groffer.man: Add section `BUGS'.

	* README_SH:
	- Add compatibility information.
	- Correct documentation for function arguments.

2005-06-18  Keith Marshall

	* groffer.sh: $_NULL_DEV: Replace /dev/null by $_NULL_DEV which is
	either /dev/null or NUL if /dev/null does not exist.

2005-06-17  Zvezdan Petkovic

	* Makefile.sub: $(RM): Define it to `rm -f' because not all `make'
	programs have it predefined.

2005-06-16  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.15

	* Makefile.sub:
	- Use `$(RM)'.
	- Use `sed -f $(SH_DEPS_SED_SCRIPT)'.

2005-05-20  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.14

	* groffer.man: correction of non-hyphenation

2005-05-17  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.13

	* groffer.sh:
	- $_VIEWER_DVI: Add `kdvi'.
	- $_VIEWER_PDF: Add `kghostview', `ggv', and `kpdf'.
	- $_VIEWER_PS: Add `kghostview' and `ggv'.
	- $_modefile: For the output file name, add extension .ps for ps
	mode and .dvi for dvi mode.  This exists already for the html and
	pdf modes.
	- Update some parts of the documentation.

	* README, README_SH:
	- Move some parts on usage from README_SH to README.
	- Reformulate several parts of both files.

	* groffer.man: update

2005-05-14  Keith Marshall

	* groffer.sh:
	- first line: Add space to `#! /bin/sh'.

2004-11-15  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.12

	* groffer.sh:
	- main_init(): Rewriting of the creation of the temporary
	directory to ensure that it cannot be made writable apart from the
	user.  If the directory already exists and cannot be removed then
	append `X' to the directory name.
	- is_non_empty_file(): fix it to use POSIX `test -s'.
	- is_existing(): new function.
	- POSIX `rm -f -r': use this in `clean_up()' and `main_init()'.
	- `--macro-file': remove this unused long option.
	- `-V', `--source', `--device': move these from groff options
	to groffer options.
	- `$_TMP_DIR_SUB': remove this unused variable.

2004-06-15  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.11

	* groffer.sh:
	- To the search of the `--apropos-*' options, add man pages with a
	subsection in their apropos output.

2004-06-02  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.10

	* groffer.sh:
	- Remove automatic call of `ash' due to inconsistencies of
	different ash versions.
	- In the first run, add recognition of `--shell' lines in the
	groffer configuration files.  To configure an external shell in
	a configuration file, a line starting with `--shell' is
	necessary.
	- list_from_cmdline(): Simplify the arguments.
	- As $POSIXLY_CORRECT is internally set to `y' by some GNU
	`/bin/sh' shells the following 2 fixes are necessary:
	-- `sed': Empty patterns are not allowed with $POSIXLY_CORRECT
	set; so move the address information before the `s' command to the
	pattern after the command, and write `.*' to the address field.
	-- list_from_cmdline(): Remove the strange $POSIXLY_CORRECT style
	to finish the option processing after the first non-option
	argument; use the flexible GNU mixing of options and file names
	instead.

	* groffer.man:
	- Remove any hints on `ash'.
	- Add minus line behavior of `--shell' for configuration and add a
	corresponding example.
	- Update the information on $POSIXLY_CORRECT.

2004-05-29  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.9

	* groffer.sh:
	Fix first run section to allow the starting shell to go on if
	`ash' is not available.

	* groffer.man:
	Remove unnecessary information on groffer version.

2004-05-12  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.8

	* groffer.sh:
	Fix problems of `test' by adding subs to arguments.

	* groffer.man:
	Write the file license as macros that are called in sections
	AUTHOR and COPYING.

	* .cvsignore:
	Restore this file.

2004-04-30  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.7

	* groffer.sh:
	- obj(), obj_data(), obj_from_output(), obj_set(): New object
	oriented functions to minimize complicated `eval' commands.
	- list_*(): Corrections.
	- usage(): Streamlining.

	* groffer.man, README_SH:
	Corrections.

2004-04-27  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.6

	This version replaces the license of all files except ChangeLog of
	the groffer source to the GNU General Public License (GPL) of the
	version described in files COPYING and LICENSE in the groff top
	source directory.

	* groffer.man:
	Changement from the GNU Free Documentation License (FDL) to
	the GNU General Public License (GPL).

	* README, README_SH, TODO:
	Add license GNU General Public License (GPL).

	* Makefile.sub, groffer.sh:
	Keep the GNU General Public License (GPL), but refer to the
	COPYING and LICENSE files.

	* ChangeLog: Add a license in the style of Emacs ChangeLog file,
	which is weaker than the GPL, but has its flavor.

2004-04-24  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.5

	This version is a rewrite of groffer in many parts, but it is kept
	in the old single script style.

	Overview of new options:
	--text, --mode text, --tty-viewer,
	--X, --mode X, --X-viewer, --html, --mode html, --html-view,
	--apropos-data, --apropos-devel, --apropos-progs

	New file:
	<groffer-source>/README_SH


	******* Extension of the `apropos' handling

        The output of man's `apropos' has grown immensely meanwhile, so it
	has become inefficient.  Now `groffer' provides new options to get
	the a selected information from this output.

	* groffer.sh:
        `--apropos-progs': new option for displaying only information
        on programs (man page sections 1, 6, and 8)
        `--apropos-data': new option for displaying only information
        on documented data (man page sections 4, 5 and 7)
        `--apropos-devel': new option for displaying only information
        on development documentation (man page sections 2, 3 and 9)
        `--apropos': still displays just the output of man's `apropos'
	program.
	- Specify all of these options as a single argument option; that
	makes groffer's `--apropos' option slightly different because
	the corresponding `man' option does not have arguments,	but takes
	all file arguments as apropos targets.  So just ignore the `man'
	options `-k' and `--apropos' in the parsing of $MANOPT.
	- Exit after processing one `apropos' call.


	******* Quasi object oriented function arguments

	An object is the name of an environment variable.  The value of
	this variable contains the object's content.  This allows to
	specify function arguments and the calling syntax in a simpler way
	by letting the first argument be a variable name, usable for input
	or output.

	Such an object type is `list', the string value of a shell
	variable arranged in space-separated single-quoted elements, such
	as $GROFFER_OPT internally.

	* groffer.sh:
	- Remove list_from_args(), list_element_from_arg()
	list_from_lists(), list_length(), and list_prepend().
	They can be replaced by list_append().
	- All list*() functions are rearranged such that the first
	argument is a list object, the name of a variable.


	******* Simplification of configuration files

	The new syntax of the groffer configuration files is
	- all lines starting with a `-' character are interpreted as
	command line options for all calls of groffer; they are collected
	and prepended to the actual value of $GROFFER_OPT; optional
	spaces at the beginning.of the line are omitted.
	- all other lines are interpreted as a shell command and executed
	in the current shell of the groffer call.

	Precedence:
	- The command line and the external environment variables such as
	$GROFFER_OPT of the groffer call have the highest precedence.
	- This is overwritten by the configuration file in the user's home
	directory.
	- The system configuration file in /etc has the lowest
	precedence.

	* groffer.sh:
	The configuration files are now called after the determination of
	the temporary files in main_init().


	******* Script file name

	The file name of the script is needed for the several calls during
	the search for the optimal shell.

	* groffer.sh:
	- $_GROFFER_SH: replace $_this by $_GROFFER_SH and use $0 for
	determining the file name of the script for the following calls,
	instead of the cumbersome @BINDIR@ construction.
	- Force the script to be called as an executable file, so $0 must
	contain the program name.


	******* Improved temporary file names

	Just like groff, groffer mixes all file parameters into a single
	output file.  Its name is now constructed as a comma-separated
	list built from the file name arguments without a leading comma.
	So a leading comma can be used for the internal temporary file
	names.

	* groffer.sh:
	- $_OUTPUT_FILE_NAME: new global variable as basis for the output
	file name; it is set in main_set_resources().
        - tmp_create(): use `,name' for temporary files different from
	output file because the output file name does not start with a
	comma.  `$$' is not needed anymore.
	- main_display(): simplification of $_modefile in _do_display()
	and single display modes.
	- Add extension `.html' to output file name in html mode.
	- base_name(): correction for strange positions of `/'.


	******* Mode fixes

	* groffer.sh:
	- Set the main default mode to `x' with groff's	X Window viewer
	`gxditview'.
	- Allow 'x' and 'X' in `--mode' for the X Window mode; the same
	for `--x' and `X', `--x-viewer' and `--X-viewer'.
	- Make groff's `-X' equivalent to `mode X'.
	- Fix `--auto', `--mode auto',  and `--default-modes'.
	- `html' mode: new mode equivalent to `www', add `konqueror' and
	`lynx' as viewers.
	- `pdf' mode: fix zoom options for pdf-viewer `xpdf' in
	main_set_resources(); in main_display() fix the display structure.
	- Set default X Window resolution to 75dpi.  This is not optimal,
	but with a higher value the options and resources for some viewers
	must be optimized.
	`--text' and `--mode text': new option for text output without a
	pager.
	- `--tty-viewer': new option equivalent to `--pager'.
	- Correct the pagers for `tty' mode.
	- Fix `groff' mode in main_set_resources() and main_display().
	- Harmonize `--mode arg' with the equivalent options `--arg'.


	******* Fixes for command line options

	* groffer.sh:
	- list_from_cmdline(): fix the parsing of options with arguments.
	- Rename $_OPT_TTY_DEVICE to $_OPT_TEXT_DEVICE.
	- $_OPTS_X_*: new variables for the inhereted X Window variables.
	- Improve the distribution of the command line options into
	$_OPTS_GROFFER_*, $_OPTS_GROFF_*, $_OPTS_X_*, and $_OPTS_MAN_*.
	- $_OPTS_MANOPT_*: new variables for the parsing of $MANOPT.
	- Correct $_OPTS_CMDLINE_*.
	- Remove some unused $_OPTS_*.
	- `--iconic': new option from `-iconic' of the X Window toolkit.
	- Correct `--rv' to an option without argument.
	- Minor fixes of other  X Window toolkit options.


	******* Other fixes

	* groffer.sh:
	- is_prog(): allow 0 arguments.
	- is_not_writable(): new function.
	- is_*(): fix trailing return codes.
        - Replace most `test' calls by is_*() functions.
	- man_setup(): due to bugs in `manpath', prefer
	manpath_set_from_path() for the determination of the man page path.
	- man_search_section(): correction of some `for' loops.
	- Remove export of external non-groffer variables.


	******* Documentation

	* groffer.man:
	- Reorder the option details according to the option origin as
	groffer, groff, X, and man options.
	- Add the programming changes information mentioned above.
	- Support man pages with a dot in their name

	* README_SH: new file
	Move large parts of the documentation in `groffer.sh' into this
	file.

	* groffer.sh: usage():
	- Change the output for `--help' to standard output.
	- Restructure the information for this help output.


	******* Removement of the author's email address

	Because of the extreme spam attacks, the author removed all
	occurencies of his email address in every file of the groffer
	source.

2003-01-22  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.4

	* groffer.sh: corrections for some restrictive shells
	- Possible exit codes in actual `ash' are between 0 and 63.  To
	handle even deeper restrictions, use 7 as maximal code instead
	of 255 as replacement for error -1.
	- Remove variables $_BAD2 and $_BAD3.
	- Replace `trap' argument `EXIT' by 0 and write new fuctions
	`trap_clean' and `trap_set' to handle the restrictions of `trap'
	for some shells.
	- Correct wrong $MANPATH to $_MAN_PATH in function
	`man_do_filespec'.
	- Test existence of directory before deleting it in the
	`clean_up' definitions.
	- Correct help output in `usage' (called by `--help').

	* TODO:
	Remove mention of `shoop' and `apropos'.

2002-10-21  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.3

	* groffer.sh: new temporary subdirectory
	- Generate temporary subdirectory for storing temporary files
	with better names in future groffer versions (name:
	"groffer$$" in usual temporary directory).
	- Use `umask 000' for temporary files to allow cleaning up
	for everyone after a system break.
	- Change both clean_up() functions (for normal shell and
	for main_display() subshell) to handle the new subdirectory.
	- clean_up_secondary() and $_TMP_PREFIX are unnecessary now, so
	they were removed.

	* Makefile.sub: `sed' commands for "groffer:"
	- Remove "@g@" entry (not used in "groffer.sh").
	- Add global replace for "@BINDIR@" and "@VERSION@" for future
	usage.

	* TODO: think about...
	- writing part of groffer in C/C++.
	- handling several files with different macro packages.

2002-10-17  Bernd Warken
	________________________________________________________________
	* fixes of groffer 0.9.2

	* groffer.sh:
	Terminate main_parse_MANOPT() if $MANOPT is empty or consists
	of space characters only.

	* groffer.man: some fixes in "GROFFER OPTIONS"
	- New macro ".Header_CB" for CB font in .TP headers; used for
	definition of variables in option --mode.
	- Fix some option references to refer to long options.

	* README:
	New file for general information on the groffer source; it is
	not installed.

2002-10-14  Bernd Warken

	* Makefile.sub:
	add replacement "@BINDIR@" to "$(bindir)" for "groffer:"

	* groffer.sh:
	Define $_this as "@BINDIR@/${_PROGRAM_NAME}" to save the right
	installation position of groffer for the special shell calling.

	* groffer.man:
	Remove double definition of filespec parameters.

2002-10-13  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.2

	* groffer.sh: fixes
	- Fix some 'sed' functions: two in func_stack_dump(), one in
	  base_name(), add 'sed' command in list_from_cmdline().
	- Finish main_parse_MANOPT() if $MANOPT is empty.
	- Sort $_OPTS_GROFF_SHORT_NA like groff short options (but
	  unchanged).
	- Fix some comments.

	* groffer.man: make it more readable (but no additions)
	- A shortened section "SYNOPSIS" is followed by a simplified
	  section "DESCRIPTION".
	- The options from "SYNOPSIS" go to new section "OPTION
	  OVERVIEW" with all groffer options in a single subsection.
	- The details of all groffer options are described in section
	  "GROFFER OPTIONS".
	- New macro for file names ".File_name".
	- "Option Parsing" is moved to section "COMPATIBILITY".
	- Fix some "EXAMPLES".

2002-09-30  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.1

	* TODO: remove done entries
	- Remove request for different shells.
	- Remove the 'sed' complaints.

2002-07-15  Bernd Warken

	* groffer.sh: replace `sed' interface by direct `sed'
	- This improves the performance of the shell programming parts
	  and shortens the groffer script by about 5%.
	- Remove functions: string_del_append(), string_del_leading(),
	  string_del_trailing(), string_flatten(), string_get_before(),
	  string_get_leading(), string_replace_all(), string_sed_s(),
	  and their auxiliary functions.
	- Replace all calls of these functions by direct `sed' commands.
	- Define variables for special characters to ease `sed' calls.
	- Remove `$APPEND'.
	- Restrict list_from_string() to single character separators.
	- Correct list_check() and base_name().
	- Add comments to all calls of `sed'.

	* groffer.sh: add run-time support for several shells
	- New option `--shell': stop execution and rerun groffer under
	  the shell specified in the argument of `--shell'.
	- If no shell was specified at run-time, `ash' is tried first;
	  if `ash' is not available continue with the shell with which
	  groffer was called from the command line, or with the shell
	  name in the first line of the script, actually `/bin/sh'.

2002-07-12  Bernd Warken
	________________________________________________________________
	* fixes for groffer 0.9.0

	* groffer.sh: enhance version information
	`groffer -v|--version' now print:
	- groffer's version number and date
	- the string `is part of '
	- groff's version information (version number and copyright),
	  but not groff's `called subprograms' information.

	* groffer.sh: minor fixes
	- Fix the argument parser to process argument `-' correctly.
	- Some display programs have trouble with empty input; feed a
	  line consisting of a single space character in this case for
	  all display modes (not for source or groff modes).

	* TODO:
	fix entry `shoop' (not 'shopt').

2002-06-28  Bernd Warken
	________________________________________________________________
	* release of groffer 0.9.0

	* groffer.sh: new mode `pdf'
	- PDF (Portable Document Format):
	  -> Transform groff `ps' output into pdf using `gs'.
	  -> Pro: PDF viewers provide text searching (!).
	  -> Con: the transformation is quite slow.
	  -> Not suitable as an auto mode.
	- New options `--pdf', `--pdf-viewer', `--mode pdf'.
	- Standard pdf viewers `xpdf' and `acroread'.
	- For `xpdf', choose zoom `z 3' for 100 dpi, `z 2' for 75 dpi.

	* groffer.sh: support bzip2 decompression
	- add test for `bzip2' with necessary options
	- extend functions `catz()' and `save_stdin()'.

	* TODO
	remove entry on `bzip' decompression (done).

	* groffer.man:
	- Document new `pdf' features.
	- Document new `bzip2' decompression.
	- Fix documentation for `--auto-modes'.

	* groffer.sh: minor fixes
	- Improve device tests in `tty' and `dvi' modes.
	- Internally, map mode `auto' to '' to facilitate tests.
	- Fix auto mode sequence to: `ps,x,tty' as was intended.

2002-06-25  Bernd Warken

	* groffer.sh:
	Fix `source' mode.

	* groffer.man:
	Fix some indentations.

2002-06-23  Bernd Warken
	________________________________________________________________
	* release of groffer 0.8

	* Makefile.sub: add copyright section

	* groffer.man:
	- Document the new options.
	- Revise the documentation of the modes.
	- Document the configuration files in new section `FILES'.
	- Redesign section `EXAMPLES'.
	- Remove documentation for `-W'.

	* groffer.sh: new debugging features
	- Disabled by default; enabled by environment variables.
	- Add landmark() to catch typos with quotes.
	- Add a function call stack for suitable functions; implemented
	  as within the argument checker func_check().
	- This implies the need to provide `return' with some clean-up
	  facility; implemented as `eval "$_return_..."'.
	- Add option `--debug' to enable debugging at run-time.
	- Actually, the groffer script uses only shell builtins found
	  in `ash' (a subset of POSIX) and POSIX `sed' as the only
	  external shell utility.

	* groffer.sh: customization of viewers
	- In `groff' mode, the groffer viewing facilities are disabled.
	- The postprocessor option `-P' costumizes the viewer only in
	  some situations in the `groff' mode, so a new infrastructure
	  for viewer customization is necessary.
	- Allow to specify arguments to the viewer programs specified
	  in `--*-viewer()'.
	- Implement some of the essential X Toolkit resource options in
	  groffer, but with use a leading double minus.
	  -> `--bd': set border color.
	  -> `--bg', `--background': set background color.
	  -> `--bw': set border width.
	  -> `--display': set X display.
	  -> `--geometry': set size and position of viewer window.
	  -> `--fg', `--foreground': set foreground color.
	  -> `--ft', `--font': set font.
	  -> `--resolution': set X resolution in dpi.
	  -> `--title': set viewer window title.
	  -> `--xrm': set X resource.
	- Remove misnamed option `--xrdb'.

	* groffer.sh: new mode structure
	- New Postcript mode `ps' (`--ps'):
	  -> default viewers: gv,ghostview,gs_x11,gs;
	  -> `--ps-viewer' sets the Postscript viewer.
	- New mode `www' (`--www') for displaying in a web browser:
	  -> default browsers: mozilla,netscape,opera,amaya,arena;
	  -> `--www-viewer' sets the web browser.
	- New dvi mode (`--dvi'); default viewer `xdvi':
	  -> default viewers: xdvi,dvilx;
	  -> `--dvi-viewer' sets the dvi viewer.
	- New mode `auto':
	  -> active if no other mode is given or by new option `--auto';
	  -> selects from a sequence of modes that are tested until one
	    of them succeeds.
	  -> the default mode sequence is actually `ps', `x', `tty'.
	  -> `--default-modes' sets this mode sequence as a comma
	     separated string of program names, optionally each one
	     with arguments).
	- New mode `groff':
	  -> process input like groff, ignore viewing options.
	  -> activated by new option `--groff'.
	  -> automatically active with one of `-V', `-X', `-Z'.
	- Revise `tty' mode:
	  -> allow several text devices.
	  ->
	- Reorganize the mode management:
	  -> new mode setting option `--mode'.
	  -> logically separate source, groff, and display modes.
	  -> intermediate output mode is now part of mode groff; remove
	     any special features around `-Z'.
	- Update usage() to reflect the new option structure.

	* groffer.sh: add configuration files
	- `/etc/groff/groffer.conf' system-wide configuration.
	- `${HOME}/.groff/groffer.conf' user configuration.
	- The configuration file are shell scripts for now; later
	  implementations can identify this from the `#! /bin/sh' line.

	* groffer.sh: new data structure `list':
	- Implement a `list' data structure as a string consisting of
	  single-quoted elements, separated by a space character;
	  embedded single-quotes are escaped.

	* groffer.sh: new option parser based on `list':
	- Write new option parser based on `list', compatible to both
	  POSIX getopts() and GNU getopt().
	- Long options are now available on GNU and non-GNU systems.
	- Get rid of POSIX getopts() and GNU getopt().
	- the `-W--longopt' construct is now obsolete; remove it.
	- add test/function for `unset'.
	- Option strings are now implemented as `list's in order to
	  allow unusual characters in options.
	- Parse $MANOPT first; translate essential arguments into
	  groffer options.

	* groffer.man:
	- determine prompt length for `.Shell_cmd'* dynamically.
	- naming scheme for static strings and registers changed to
	  `namespace:macro.variable'.


2002-06-16  Werner Lemberg  <wl@gnu.org>

	* groffer.sh:
	Implement man option `--ascii' by `-mtty-char'.


2002-05-31  Werner LEMBERG  <wl@gnu.org>

        * groffer.man (@.Shell_cmd_width):
	Increase to 4m (we use `sh#' as the prompt).


2002-05-31  Bernd Warken
	________________________________________________________________
	* release of groffer 0.7

	* groffer.sh: remove incompatibilities with the `ash' shell:
	- do not use `!command':
          -> use `else'
	  -> write `_not_' equivalents for some functions
	- do not use `[^]' in `case':
	  ->  restructure some functions.
	- only single-character names for loop variables:
	  -> spoils the paradigm of leading `_' for local variables.
	- spurious trouble with `for i in ${var}':
	  -> use `eval set -- ${var}' and `for i in "$@"'
	- do not change or use $IFS:
	  -> define new functions string_split() and `path_split()'.
	  -> result must be processed by `eval set --'.
	  -> solve conflicts with existing positional parameters.
	- trouble with exporting external `$GROFF_*' variables:
	  -> hope that they were exported in the calling shell.
	- not smart about additional blanks:
	  -> remove unnecessary white space.

	* groffer.sh: improve run-time speed:
	- `ash' more than doubles the speed of `bash'.
	- speed-up `man_setup()'.


2002-05-30  Werner Lemberg  <wl@gnu.org>

	* groffer.man:
	- remove some wrong `\:'.
	- rename macro names that start with a `[' (clashes with refer).
	- fix TP_header.


2002-05-28  Bernd Warken
	________________________________________________________________
	* release of groffer 0.6

	This is almost a complete rewrite since groffer 0.5 .
	________________________________________________________________
	* Documentation

	* groffer.man:
   	- Apply the changes done in www.tmac (.URL and .MTO)
	- Replace \fP by \f[].
	- Redesign and rewrite most macros.
	- Include the documentation for the new features.
	- Greatly enlarge section ENVIRONMENT
	- Add examples.

	* TODO:
	- Start a TODO file with several sections.

	* ChangeLog:
	Due to the many changes, shorten and rearrange the entries
	since groffer 0.5 .
	________________________________________________________________
	* Shell compatibility

	* groffer.sh:
	- Due to possible conflicts in old BSD versions, `[]' was
	  replaced by `test'; the `test' options `-a' and `-o' were
	  replaced by multiple calls of `test'.
	- Write interface to the `sed' command `s' to become
	  independent of the delimiter character.  Rewrite all text
	  manipulating function to use this new scheme.  The new
	  functions are named `string_*'.
	- `tr' is not needed any longer, replaced by `sed'.
	- `grep' is not needed any longer, mostly replaced by `case'.
	- Revision of test for `getopt'.
	- Remove `set -a'; explicitly export variables.
	- The only external programs used are POSIX `sed' and the
	  fallback to `apropos'.  All other program calls were
	  replaced by shell builtins and functions.

	________________________________________________________________
	* Cosmetics

	* groffer.sh:
	- Implement a prefix based naming scheme for local variables
	  and functions (OOP-like).
	- Introduce variables for white space (better readability with
	  $IFS).
	- Store the names of the processed filespecs into a variable
	  instead of a temporary file.
	- Error-prone shell constructions were replaced by functions
	  with a simple interface.
	- To avoid too long pipes, replace supercat() by do_fileargs();
	  every input file is handled independently.

	________________________________________________________________
	* New features:
	- Add support for more X devices (e.g. X75-12 and X100-12).
	- Add long option `--intermediate_output' to `-Z'.
	- Make the options for mode selection clobber each other.
	- Add option `--mode' with an argument having the following
	  values:
	  `X': force displaying in X, same as options `-X';
	  `tty': display with a pager on text terminal; same as `--tty';
	  `source', `default', `auto', etc.
	- Make the handling of the X mode like in groff (e.g. -X -Tps).
	- Make resolution for gxditview behave like groff (default
	  75 dpi).
	- Add environment variable $GROFFER_OPT to preset groffer
	  options.

	________________________________________________________________
	* implement most of the functionality of GNU `man'.

	- Add all `man' long options to groffer.
	- Add all `man' environment variables.
	- Parse and use content of `$MANOPT'.
	- The precedence of the options and environment variables
	  is regulated like in GNU `man'.
	- Force the option `--manpath' to have a colon-separated
	  argument like GNU `man'.
	- Support `man section name' calling convention.
	- Remove all dependencies on `man -w'.

	* groffer.sh:
	- Add the new features above.
	- Rewrite the search algorithm for man pages.
	- Remove searching with `man -w' (problems with space
	  characters in file names).
	- Fix and complement usage().
	- The filespec parsers gets a function of its own do_manpage().


2002-01-08  Bernd Warken

	* groffer 0.5 (beta) released

	* groffer.man:
	- Fix hyphenation problems with macros describing options.
	- Fix the handling of some `-' characters.
	- Examples of shell commands now print in font CR instead of CB.
	- Remove documentation for option `-X'.
	- Add documentation for option `--dpi'.

	* groffer.sh:
	- New method for creating temporary files, based on process
	  IDs.  This is reliable enough and suitable for GNU and POSIX.
	- Run gxditview in a new shell instantiation for having a clean
    	  handling of the temporary files when running in the
	  background.
	- Revision of the retrieving method for the window title.
	- Empty input is now tolerated.
	- Export the variables that are set before the call of `set -a'.
	- Function usage() corrected and updated.
	- Unnecessary stuff removed.
	- Comments adjusted.
	- Pass option `-X' to groff, i.e. force X output with 75 dpi.
	- Implement option `--dpi' for setting the resolution for the X
	  viewer, which had already been documented in earlier versions.

2002-01-07  Bernd Warken

	* groffer 0.4 (beta) released (as groff `contrib')

	* groffer.man:
	- New features documented.
	- Macros stream-lined.
	- Section EXAMPLES added.

	* groffer.sh:
	- System tests added/optimized.
	- Speed/memory optimizations by defining some shell functions
	  alternatively depending on the text results.
	- Use `gzip' for decompression instead of `zcat'.
	- Signal handling added for clean exiting by `trap'.
	- Temporary files exist only as long as necessary.
	- Setup of path for man-pages moved after the option parsing.
	- Fixed a bug in determining the path for man-pages.
	- Fixed a bug in the handling of non-groffer options.

	* New features:
	- New option --tty for forcing paging on text terminal.
	- New option --no-man for disabling the man-page feature.
	- Implement reserved POSIX -W feature to simulate long options.
	- gxditview is now run as a background process.

2002-01-05  Werner LEMBERG  <wl@gnu.org>

        * Integrate groffer into groff's `contrib' tree.

        * Makefile: Replaced by...
        Makefile.sub: New file.

        * groffer: Replaced by...
        groffer.sh: New file.

        * groffer.man (OptDef): Add missing backslashes.
        Update copyright.

2001-12-15  Bernd Warken

	* groffer 0.3 (alpha) released (still stand-alone package).

	* GNU and POSIX are supported (POSIX without long options).

	* New options : --man, --mandb, --title, --xrdb

	* Support for command line arguments with embedded single space
	characters (GNU only) .

	* Several search methods for man-pages when no `man -w' is
	available ($MANPATH, mandb, a default path).

	* Language support for man-pages.

	* Recognize the following filespecs as man-page parameters:
	  man:name(section), man:name, name.section, name.

2001-12-03  Bernd Warken

	* Stand-alone package for groffer 0.2 (alpha) created
	Files: groffer, groffer.man, Makefile, TODO, ChangeLog

2001-12-02  Bernd Warken

	* groffer 0.2 (alpha) program released.

	* Name changed from `groffview' to `groffer'.

	* Comments added.

	* Name changed from `groffview' to `groffer'.

	* Options harmonized with groff.
	New options : -Q --source, -T --device, -X .
	Other options known from groff are passed unchanged.

	* 100 dpi as default, 75 dpi only in emergency situations.

	* Bugs with temporary files fixed.

	* Code restructured and comments added.

2001-11-28  Bernd Warken

	***** groffview 0.1 (experimental) and groffview.man released
	(predecessor of groffer, shell script)

	* Options : -h --help, -v --version

	* Search for man-pages based on $MANPATH

	* development of `groffview' shell script started

2001-11-28  Bernd Warken

	________________________________________________________________
	License

	Copyright (C) 2001,2002,2003,2004,2005
	Free Software Foundation, Inc.
	Written by Bernd Warken

	Copying and distribution of this file, with or without
	modification, are permitted provided the copyright notice and this
	notice are preserved.

	This file is part of `groffer', which is part of the `groff'
	project.