aboutsummaryrefslogblamecommitdiffstats
path: root/debian/patches/020_debian.patch
blob: 13b49aa94804098bbb34f93ed0515dfc1b0fbf41 (plain) (tree)
1
2
3
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555
8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
8606
8607
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
8759
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
8793
8794
8795
8796
8797
8798
8799
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816
8817
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
8840
8841
8842
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
8937
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
8952
8953
8954
8955
8956
8957
8958
8959
8960
8961
8962
8963
8964
8965
8966
8967
8968
8969
8970
8971
8972
8973
8974
8975
8976
8977
8978
8979
8980
8981
8982
8983
8984
8985
8986
8987
8988
8989
8990
8991
8992
8993
8994
8995
8996
8997
8998
8999
9000
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9016
9017
9018
9019
9020
9021
9022
9023
9024
9025
9026
9027
9028
9029
9030
9031
9032
9033
9034
9035
9036
9037
9038
9039
9040
9041
9042
9043
9044
9045
9046
9047
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
9058
9059
9060
9061
9062
9063
9064
9065
9066
9067
9068
9069
9070
9071
9072
9073
9074
9075
9076
9077
9078
9079
9080
9081
9082
9083
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9706
9707
9708
9709
9710
9711
9712
9713
9714
9715
9716
9717
9718
9719
9720
9721
9722
9723
9724
9725
9726
9727
9728
9729
9730
9731
9732
9733
9734
9735
9736
9737
9738
9739
9740
9741
9742
9743
9744
9745
9746
9747
9748
9749
9750
9751
9752
9753
9754
9755
9756
9757
9758
9759
9760
9761
9762
9763
9764
9765
9766
9767
9768
9769
9770
9771
9772
9773
9774
9775
9776
9777
9778
9779
9780
9781
9782
9783
9784
9785
9786
9787
9788
9789
9790
9791
9792
9793
9794
9795
9796
9797
9798
9799
9800
9801
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
9812
9813
9814
9815
9816
9817
9818
9819
9820
9821
9822
9823
9824
9825
9826
9827
9828
9829
9830
9831
9832
9833
9834
9835
9836
9837
9838
9839
9840
9841
9842
9843
9844
9845
9846
9847
9848
9849
9850
9851
9852
9853
9854
9855
9856
9857
9858
9859
9860
9861
9862
9863
9864
9865
9866
9867
9868
9869
9870
9871
9872
9873
9874
9875
9876
9877
9878
9879
9880
9881
9882
9883
9884
9885
9886
9887
9888
9889
9890
9891
9892
9893
9894
9895
9896
9897
9898
9899
9900
9901
9902
9903
9904
9905
9906
9907
9908
9909
9910
9911
9912
9913
9914
9915
9916
9917
9918
9919
9920
9921
9922
9923
9924
9925
9926
9927
9928
9929
9930
9931
9932
9933
9934
9935
9936
9937
9938
9939
9940
9941
9942
9943
9944
9945
9946
9947
9948
9949
9950
9951
9952
9953
9954
9955
9956
9957
9958
9959
9960
9961
9962
9963
9964
9965
9966
9967
9968
9969
9970
9971
9972
9973
9974
9975
9976
9977
9978
9979
9980
9981
9982
9983
9984
9985
9986
9987
9988
9989
9990
9991
9992
9993
9994
9995
9996
9997
9998
9999
10000
10001
10002
10003
10004
10005
10006
10007
10008
10009
10010
10011
10012
10013
10014
10015
10016
10017
10018
10019
10020
10021
10022
10023
10024
10025
10026
10027
10028
10029
10030
10031
10032
10033
10034
10035
10036
10037
10038
10039
10040
10041
10042
10043
10044
10045
10046
10047
10048
10049
10050
10051
10052
10053
10054
10055
10056
10057
10058
10059
10060
10061
10062
10063
10064
10065
10066
10067
10068
10069
10070
10071
10072
10073
10074
10075
10076
10077
10078
10079
10080
10081
10082
10083
10084
10085
10086
10087
10088
10089
10090
10091
10092
10093
10094
10095
10096
10097
10098
10099
10100
10101
10102
10103
10104
10105
10106
10107
10108
10109
10110
10111
10112
10113
10114
10115
10116
10117
10118
10119
10120
10121
10122
10123
10124
10125
10126
11950
11951
11952
11953
11954
11955
11956
11957
11958
11959
11960
11961
11962
11963
11964
11965
11966
11967
11968
11969
11970
11971
11972
11973
11974
11975
11976
11977
11978
11979
11980
11981
11982
11983
11984
11985
11986
11987
11988
11989
11990
11991
11992
11993
11994
11995
11996
11997
11998
11999
12000
12001
12002
12003
12004
12005
12006
12007
12008
12009
12010
12011
12012
12013
12014
12015
12016
12017
12018
12019
12020
12021
12022
12023
12024
12025
12026
12027
12028
12029
12030
12031
12032
12033
12034
12035
12036
12037
12038
12039
12040
12041
12042
12043
12044
12045
12046
12047
12048
12049
12050
12051
12052
12053
12054
12055
12056
12057
12058
12059
12060
12061
12062
12063
12064
12065
12066
12067
12068
12069
12070
12071
12072
12073
12074
12075
12076
12077
12078
12079
12080
12081
12082
12083
12084
12085
12086
12087
12088
12089
12090
12091
12092
12093
12094
12095
12096
12097
12098
12099
12100
12101
12102
12103
12104
12105
12106
12107
12108
12109
12110
12111
12112
12113
12114
12115
12116
12117
12118
12119
12120
12121
12122
12123
12124
12125
12126
12127
12128
12129
12130
12131
12132
12133
12134
12135
12136
12137
12138
12139
12140
12141
12142
12143
12144
12145
12146
12147
12148
12149
12150
12151
12152
12153
12154
12155
12156
12157
12158
12159
12160
12161
12162
12163
12164
12165
12166
12167
12168
12169
12170
12171
12172
12173
12174
12175
12176
12177
12178
12179
12180
12181
12182
12183
12184
12185
12186
12187
12188
12189
12190
12191
12192
12193
12194
12195
12196
12197
12198
12199
12200
12201
12202
12203
12204
12205
12206
12207
12208
12209
12210
12211
12212
12213
12214
12215
12216
12217
12218
12219
12220
12221
12222
12223
12224
12225
12226
12227
12228
12229
12230
12231
12232
12233
12234
12235
12236
12237
12238
12239
12240
12241
12242
12243
12244
12245
12246
12247
12248
12249
12250
12251
12252
12253
12254
12255
12256
12257
12258
12259
12260
12261
12262
12263
12264
12265
12266
12267
12268
12269
12270
12271
12272
12273
12274
12275
12276
12277
12278
12279
12280
12281
12282
12283
12284
12285
12286
12287
12288
12289
12290
12291
12292
12293
12294
12295
12296
12297
12298
12299
12300
12301
12302
12303
12304
12305
12306
12307
12308
12309
12310
12311
12312
12313
12314
12315
12316
12317
12318
12319
12320
12321
12322
12323
12324
12325
12326
12327
12328
12329
12330
12331
12332
12333
12334
12335
12336
12337
12338
12339
12340
12341
12342
12343
12344
12345
12346
12347
12348
12349
12350
12351
12352
12353
12354
12355
12356
12357
12358
12359
12360
12361
12362
12363
12364
12365
12366
12367
12368
12369
12370
12371
12372
12373
12374
12375
12376
12377
12378
12379
12380
12381
12382
12383
12384
12385
12386
12387
12388
12389
12390
12391
12392
12393
12394
12395
12396
12397
12398
12399
12400
12401
12402
12403
12404
12405
12406
12407
12408
12409
12410
12411
12412
12413
12414
12415
12416
12417
12418
12419
12420
12421
12422
12423
12424
12425
12426
12427
12428
12429
12430
12431
12432
12433
12434
12435
12436
12437
12438
12439
12440
12441
12442
12443
12444
12445
12446
12447
12448
12449
12450
12451
12452
12453
12454
12455
12456
12457
12458
12459
12460
12461
12462
12463
12464
12465
12466
12467
12468
12469
12470
12471
12472
12473
12474
12475
12476
12477
12478
12479
12480
12481
12482
12483
12484
12485
12486
12487
12488
12489
12490
12491
12492
12493
12494
12495
12496
12497
12498
12499
12500
12501
12502
12503
12504
12505
12506
12507
12508
12509
12510
12511
12512
12513
12514
12515
12516
12517
12518
12519
12520
12521
12522
12523
12524
12525
12526
12527
12528
12529
12530
12531
12532
12533
12534
12535
12536
12537
12538
12539
12540
12541
12542
12543
12544
12545
12546
12547
12548
12549
12550
12551
12552
12553
12554
12555
12556
12557
12558
12559
12560
12561
12562
12563
12564
12565
12566
12567
12568
12569
12570
12571
12572
12573
12574
12575
12576
12577
12578
12579
12580
12581
12582
12583
12584
12585
12586
12587
12588
12589
12590
12591
12592
12593
12594
12595
12596
12597
12599
12600
12601
12602
12603
12604
12605
12606
12607
12608
12609
12610
12611
12612
12613
12614
12615
12616
12617
12618
12619
12620
12621
12622
12623
12624
12625
12626
12627
12628
12629
12630
12631
12632
12633
12634
12635
12636
12637
12638
12639
12640
12641
12642
12643
12644
12645
12646
12647
12648
12649
12650
12651
12652
12653
12654
12655
12656
12657
12658
12659
12660
12661
12662
12663
12664
12665
12666
12667
12668
12669
12670
12671
12672
12673
12674
12675
12676
12677
12678
12679
12680
12681
12682
12683
12684
12685
12686
12687
12688
12689
12690
12691
12692
12693
12694
12695
12696
12697
12698
12699
12700
12701
12702
12703
12704
12705
12706
12707
12708
12709
12710
12711
12712
12713
12714
12715
12716
12717
12718
12719
12720
12721
12722
12723
12724
12725
12726
12727
12728
12729
12730
12731
12732
12733
12734
12735
12736
12737
12738
12739
12740
12741
12742
12743
12744
12745
12746
12747
12748
12749
12750
12751
12752
12753
12754
12755
12756
12757
12758
12759
12760
12761
12762
12763
12764
12765
12766
12767
12768
12769
12770
12771
12772
12773
12774
12775
12776
12777
12778
12779
12780
12781
12782
12783
12784
12785
12786
12787
12788
12789
12790
12791
12792
12793
12794
12795
12796
12797
12798
12799
12800
12801
12802
12803
12804
12805
12806
12807
12808
12809
12810
12811
12812
12813
12814
12815
12816
12817
12818
12819
12820
12821
12822
12823
12824
12825
12826
12827
12828
12829
12830
12831
12832
12833
12834
12835
12836
12837
12838
12839
12840
12841
12842
12843
12844
12845
12846
12847
12848
12849
12850
12851
12852
12853
12854
12855
12856
12857
12858
12859
12860
12861
12862
12863
12864
12865
12866
12867
12868
12869
12870
12871
12872
12873
12874
12875
12876
12877
12878
12879
12880
12881
12882
12883
12884
12885
12886
12887
12888
12889
12890
12891
12892
12893
12894
12895
12896
12897
12898
12899
12900
12901
12902
12903
12904
12905
12906
12907
19290
19291
19292
19293
19294
19295
19296
19297
19298
19299
19300
19301
19302
19303
19304
19305
19306
19307
19308
19309
19310
19311
19312
19313
19314
19315
19316
19317
19318
19319
19320
19321
19322
19323
19324
19325
19326
19327
19328
19329
19330
19331
19332
19333
19334
19335
19336
19337
19338
19339
19340
19341
19342
19343
19344
19345
19346
19347
19348
19349
19350
19351
19352
19353
19354
19355
19356
19357
19358
19359
19360
19361
19362
19363
19364
19365
19366
19367
19368
19369
19370
19371
19372
19373
19374
19375
19376
19377
19378
19379
19380
19381
19382
19383
19384
19385
19386
19387
19388
19389
19390
19391
19392
19393
19394
19395
19396
19397
19398
19399
19400
19401
19402
19403
19404
19405
19406
19407
19408
19409
19410
19411
19412
19413
19414
19415
19416
19417
19418
19419
19420
19421
19422
19423
19424
19425
19426
19427
19428
19429
19430
19431
19432
19433
19434
19435
19436
19437
19438
19439
19440
19441
19442
19443
19444
19445
19446
19447
19448
19449
19450
19451
19452
19453
19454
19455
19456
19457
19458
19459
19460
19461
19462
19463
19464
19465
19466
19467
19468
19469
19470
19471
19472
19473
19474
19475
19476
19477
19478
19479
19480
19481
19482
19483
19484
19485
19486
19487
19488
19489
19490
19491
19492
19493
19494
19495
19496
19497
19498
19499
19500
19501
19502
19503
19504
19505
19506
19507
19508
19509
19510
19511
19512
19513
19514
19515
19516
19517
19518
19519
19520
19521
19522
19523
19524
19525
19526
19527
19528
19529
19530
19531
19532
19533
19534
19535
19536
19537
19538
19539
19540
19541
19542
19543
19544
19545
19546
19547
19548
19549
19550
19551
19552
19553
19554
19555
19556
19557
19558
19559
19560
19561
19562
19563
19564
19565
19566
19567
19568
19569
19570
19571
19572
19573
19574
19575
19576
19577
19578
19579
19580
19581
19582
19583
19584
19585
19586
19587
19588
19589
20212
20213
20214
20215
20216
20217
20218
20219
20220
20221
20222
20223
20224
20225
20226
20227
20228
20229
20230
20231
20232
20233
20234
20235
20236
20237
20238
20239
20240
20241
20242
20243
20244
20245
20246
20247
20248
20249
20250
20251
20252
20253
20254
20255
20256
20257
20258
20259
20260
20261
20262
20263
20264
20265
20266
20267
20268
20269
20270
20271
20272
20273
20274
20275
20276
20277
20278
20279
20280
20281
20282
20283
20284
20285
20286
20287
20288
20289
20290
20291
20292
20293
20294
20295
20296
20297
20298
20299
20300
20301
20302
20303
20304
20305
20306
20307
20308
20309
20310
20311
20312
20313
20314
20315
20316
20317
20318
20319
20320
20321
20322
20323
20324
20325
20326
20327
20328
20329
20330
20331
20332
20333
20334
20335
20336
20337
20338
20339
20340
20341
20342
20343
20344
20345
20346
20347
20348
20349
20350
20351
20352
20353
20354
20355
20356
20357
20358
20359
20360
20361
20362
20363
20364
20365
20366
20367
20368
20369
20370
20371
20372
20373
20374
20375
20376
20377
20378
20379
20380
20381
20382
20383
20384
20385
20386
20387
20388
20389
20390
20391
20392
20393
20394
20395
20396
20397
20398
20399
20400
20401
20402
20403
20404
20405
20406
20407
20408
20409
20410
20411
20412
20413
20414
20415
20416
20417
20418
20419
20420
20421
20422
20423
20424
20425
20426
20427
20428
20429
20430
20431
20432
20433
20434
20435
20436
20437
20438
20439
20440
20441
20442
20443
20444
20445
20446
20447
20448
20449
20450
20451
20452
20453
20454
20455
20456
20457
20458
20459
20460
20461
20462
20463
20464
20465
20466
20467
20468
20469
20470
20471
20472
20473
20474
20475
20476
20477
20478
20479
20480
20481
20482
20483
20484
20485
20486
20487
20488
20489
20490
20491
20492
20493
20494
20495
20496
20497
20498
20499
20500
20501
20502
20503
20504
20505
20506
20507
20508
20509
20510
20511
22101
22102
22103
22104
22105
22106
22107
22108
22109
22110
22111
22112
22113
22114
22115
22116
22117
22118
22119
22120
22121
22122
22123
22124
22125
22126
22127
22128
22129
22130
22131
22132
22133
22134
22135
22136
22137
22138
22139
22140
22141
22142
22143
22144
22145
22146
22147
22148
22149
22150
22151
22152
22153
22154
22155
22156
22157
22158
22159
22160
22161
22162
22163
22164
22165
22166
22167
22168
22169
22170
22171
22172
22173
22174
22175
22176
22177
22178
22179
22180
22181
22182
22183
22184
22185
22186
22187
22188
22189
22190
22191
22192
22193
22194
22195
22196
22197
22198
22199
22200
22201
22202
22203
22204
22205
22206
22207
22208
22209
22210
22211
22212
22213
22214
22215
22216
22217
22218
22219
22220
22221
22222
22223
22224
22225
22226
22227
22228
22229
22230
22231
22232
22233
22234
22235
22236
22237
22238
22239
22240
22241
22242
22243
22244
22245
22246
22247
22248
22249
22250
22251
22252
22253
22254
22255
22256
22257
22258
22259
22260
22261
22262
22263
22264
22265
22266
22267
22268
22269
22270
22271
22272
22273
22274
22275
22276
22277
22278
22279
22280
22281
22282
22283
22284
22285
22286
22287
22288
22289
22290
22291
22292
22293
22294
22295
22296
22297
22298
22299
22300
22301
22302
22303
22304
22305
22306
22307
22308
22309
22310
22311
22312
22313
22314
22315
22316
22317
22318
22319
22320
22321
22322
22323
22324
22325
22326
22327
22328
22329
22330
22331
22332
22333
22334
22335
22336
22337
22338
22339
22340
22341
22342
22343
22344
22345
22346
22347
22348
22349
22350
22351
22352
22353
                                              
                                                            
 

























































                                                                               
                                  
                             

               


















































                                                                            





















































































































                                                                                                             





































                                                                                                   





























                                                                           



























                                                                                                                                            










































































































                                                                                          
                                                                              









                                                      
















                                                                            




                                                                        











                                                      
                                                  













                                                                        
                                                  
 









                                                                      































































































































































































































































































                                                                                                                                          
                                       






















































                                                                                                            
                                                                   





                                                                                                    
                                              






                                                                                
                                                 


                                                           
                                                        

                                                                       
                                                           


























                                                                               
                                                            





                                                                              
                                           



















                                                                            
                                                    






















































                                                                           
                                                                                




                                                                              
                                                                             










                                                                            
                                                              



                                                             
                                                           























                                                                            
                                                                       





                                                                   
                                         


                                                      


                                              
                                                            



                                                                 
                                                   




                                                                            
                                                      





                                                                                                                                             
                                       






                                                                                                                                    
                                                              












                                                                              
                                                                       




                                                                           
                                                                         









                                                                          
                                                           



                                                                            
                                                                             

























                                                                                    
                        
                             

          
                











                                                        
                                                    

                                            
                                     






                                                                   




                                                                         
                                   









                                                                     













                                                                       
                          
                             

           






























































                                                          










                                                                               







































































                                                          
                                        
                             











                                                                                                                                                                                                        












                                                                     







































































































































                                                                                                      
                             








































                                                                                            
















                                                                 







                                                                               
                                                







                                                                           
                                                  

















                                                                             
                                                  




















                                                                           
























                                                                         
                                        
                             






                                                                  
                                                       

                       
                       



























                                                                             
                                                                            




                                                                        
                                                                               


                                                                  
                                                   









                                                                         
                                                   






































































                                                                                                                 











                                                                                                  



                                           




                                                                                     


                                                                          



                                                      






                                                                                          
                                                                                                 




                         






                                                                 


                        
                                                                                                  







                                                                                     

                                                           
                                         













































                                                    
                                               










                                                                  



                                                                     















                                                              


                                            










                                                                      



















































                                                                                                               

                                                                 
                                                                                                                                                  



                         
                                                                                                                                              




















































                                                                              
                                                                                                  





































                                                                                    
                     


                                                                             
                                                         
                                                                             
                                                              

                                             
                               













                                                                              
                                                                                                  










                                                                                     





                                                                                                  











                                                                      
                                                                                                  

























































                                                                       
                                                                                                  
















































                                                                              
                         





































                                                                            
                       







                                                                 
                         






















                                                                                               








                                                                     



































                                                                      
                         










                                                                                 


                                                                  

                                                                                

                                                              

                                                                


                                                                


































































                                                                     

                                                                                                
                                                      
                     
            

                                      














                                                                                      
                                                                           

                                

                                  
                

                                












                                                                 
                           




























































































                                                                             
                                                                                              



                                                                                                                

                                                                                                           







                                                                                                                             

                                                                                                                        



















































































































                                                                                                                                                    
                                                                                                                                                                






















                                                                         
                                                  

































                                                                    


                                                   













                                                   


                                                   






































































































































































































                                                                                           
                                              






















































                                                                       
                           


















                                                                                         
                           













                                                                             
                                                                             

































































































                                                                                                                                                                                                  
                             

























































































                                                                        


                                              


















                                                                         
                                                             
                                                                                  
                                                                  





















                                                                      


                                                

































                                                                        




                                        
















































                                                                                          
                                                                                 









                                         


                                 


























































































































































                                                                                
                                                                                    



                                                                
                                                                               
    
                                                                             



































                                                               
                             






                                                                  
                                                       

                       
                       







































                                                                         
                                                   






                                                                              
                                                                             



                                                            










                                                                       




                                                                         
                                                   


                                                                             
                                                            













                                      
                                          







                                                     
                          






                                                                                              
                                                   











                                                                           
                                 













                                                                               
                                 



















                                                                 
                                









                                                                 
                                











                                                                 
                                             











                                                                                     
              




                                       

                                    
















































                                                                                  
                                                                                                                










                                                                                            
                  

















                                                    


                                                  


























                                                                          
                                            













                                                                           
                




                                                    
                   
                                                        
                           




















































                                                                           
                                 







                                                                                                  
                                                                           







                                                                          
                    














                                                                              
                                          







                                            
                                           






                                         
              

                                           


                                        
                                            


































                                                                              
                                            





















                                           
                                           













                                           
                                          






                                                                
                                           


                                      


                                                                         










                                                                            
                                            





















                                               
                                           









                                                                                      
                                            




























                                                                          
                                           













                                        
                                          









                                          
                                           













                                                                            
                                           











                                                                            
                                            











                                                                               
                                            













                                          
                                            









                                                    
                                           








                                           
                                           








                                                                           
                                            



















                                                    
                                             















                                                                          
                                             









                                         
                                            








                                        
                                              














                                                                           
                           













                                                                    
                                   









                                                                                       
                                                        



                                                                                 
                                                                  


















                                                                                              

                                                                         


                                                                              
                                 







                                                                                 
                                 







                               
                                 







                         
                                  











                         

                  


                  
                           











                                             
                                             


























                                                
                                              















                                                                            
                                             














                            
                                            







                                          
                                            








                                                 
                             

               





                                                                  











































































                                                                                                           








                                                                                                 

















                                                                                                      








                                                             









                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              












                                                             
                                
                             

              





















                                                                 
                                                







                                                                                









                                                                  







                                                                  




















                                                                               







                                                                    
                                        













































                                                            










































































                                                                                           

                                                    
                      

                        


















































































































































                                                                                               












                                                                                                               
                                                    
                             




























                                                                 























                                                                           
























                                                                                                                                   
                             













                                                                      









                                    
                                                    
                             

                        








                                                            







                                                                            















                                                                          

                                                            
                      























                                                                     

                                             




































                                                                           












                                                    
                                        
                             

                  






                                   






























                                                             

















                                                       
                                        
                             

                  




































































































































































































































































































































































































































































































































































































































































                                                                                                                                                               
                                                                            

































































































































































































                                                                                  
      




































































































































































                                                                                                                                                          


















































                                                                     
                             

                     











































































































































                                                                                                                                                                                                                                                   





                                             






















































































































                                                                                                                                                                         
       























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































                                                                                                                                         

                                                                                                                                    


































































































































                                                                              


























                                                                     
                                              
                             

                     

                                             
                                   
                                            
                            

                                             
                         

                                                                         

                                    

                                         
                                                           
                                 

                                                                    






                                                                      



                                                                        


                                                                               



                                                             
                                    
                                            












                                                        
                            

                                    
                                  

                                  
                                           
                                             


                                                      












                                                              

                                           



                                           


                                       
                                         
                                                            
                               
                          









                                                       












                                                                            
                                                              





                                                                                  
                                   


                                                   


                                 

                                                              
                                

                                                 
                                 
                                  































                                                                    






                                              





                                                
                                              

























                                                                              
                                        




                                                

                                             

                                  
                                              



                                      


                               


                                            


                                           




                                          

                                        
                                                        

                                  

                                                      


                                                  



                                                    
                                        






                                                              
                                         

                                            
                                               
                                  
                                              
                                
                             
                          

                                       




                                                      
                              
                                                



























                                                                             
                      






















                                                                              

                                             






































































                                                                         












                                                 











                                                            
                                  
                             

               
                 


                

                                   










                                                               
                                                               




































































































































































































































































































































































































































                                                                                                                     
          















                                                           
















































                                                                                                                                                  
                             

            









                                                                        













                                                
                                          






                                                                            
                                               



























                                                                            
                                                                  



























                                                     
                                                                                    






                                                                       
                                                                                            






                                                                          
                                                                                              











                                                                                                    
                                                        















                                                                        
                                                                                              





















                                                                   
                                                                                             







                                                       
                                                                                             







                                                                        
                                                                                              









                                                             
                                                                                              



















                                                                             
                                                                                               

















































                                                                               
                                                                                               












                                                                               
                                                                             






                                                           
                                                                 






                                                           
                                                                                                     



                                                                           
                                                                 


                     
                                                                                                      











                                                                             
                                                                                                     







                                             
                                                                                                      

















                                                                                                
                                                                    







                                                                              
                                                                     











                                                                              
                                                                     















                                                                            
                                                                      




























                                                                         
                                                                     












                                                           






















































                                                                                 










































                                                           
                                             










                                                                        
                                              






                                       
                                                                       






                                                                        
                                                                      

















                                                                      
                                                                                            


































                                                                 
                                                                                           







                                                                               
                                                                                            















                                           
                                                                                             












                                                      
                                                                                 












                                                                 
                                                                                  




















                                                                       
                                                                                







                                                                             
                                                                                







                                                                       
                                                                                 




















                                                                               
                                                                                









                                                                  
                                                                                  















                                                                  
                                                                                









                                                                            
                                                                                









                                                                              
                                                                                







                                                                   
                                                                  








                                                                         
                                                                                          











                                                        
                                                                                                   














                                                         
                                                                                          







                                      
                                                                                          








                                                                  
                                                                                            







                                                                              




                                                 











                                                       
                                                


















                                                             
                                              






                                             
                                                                                 







                                                                            
                                                                      






                                              
                                                                  






                                                               
                                                                    






















                                                                       
                                                                  






                                                   
                                                                 











                                             
                                                                  















                                                                         
                                                                







                                        
                                                      







                                                             
                                                        









































                                                                       
                                                                                   







                                                                         
                                                                                     
















                                                                      
                                                                                     

















                                                                            
                                                         








                                    
                                                           
















                                                             








                                                                         
                                                                  



























                                                                            
                                                 







                        
                        
                             












































































                                                                                                








                                                             

















                                                                    










                                                                           






                                                      








                                                       
                                                                    







                                                    




                                                       
                                                      











                                          
                                                              







                                                
                                                                 



















































































































                                                                                                
                             































                                                                                              



















































                                                                                 










































































































                                                                             
                             










                                                                       




















                                                       
























































                                                                               
                             

            
                 
















                                                        

                                                                             

                                          
                  







































































































































































































































































































































































































































































































































































































































































                                                                                                                                                        
                             




















































































































































































































































































































                                                                                       









                                                                      






                           
                                                                 















                                                             
                                                        






                              
                                 






















































































































































                                                                                        












                                                                            
















































































                                                                       












                                                                            





































































































































































                                                                                        




















































































































































































                                                                    













                                                                  













                                                           
                             









                                                             




















































































































                                                                    
                                
                             

              
























                                          







                                               
                                 








                                              
                             









                                             








                                                                             





























                                                                                           









                                                                    
                                                                                            









                                                        
                 
                                                                                   


                       
                    




                       







                                                        
                                                                                            











                                                         
                 
       













                                                                  
                            
                             

            








                                                         








                                                       
                                                  







                                                                      
                                               











                                                                 









                                                                               






                                                                                                
                                                                  
       
                                                                  

                                                                        
                                                                               
                                                         












                                                                                      
                                                             






                                                                    
                                                                             
                            


                         


                                                                                 
                                                             









                                                                    
                                                              













                                                           
                                                             











                                                   
                                                             










                                                       
                                                             














                                                                    
                                                             





























                                                                     
                                                             


                                
                                                                             







                                                             
                                                              



















                                                                            
                                                             









                                                                            
                                                             







                                                                               
















                                              











                                                                            
                                            





























                                                                             


















                                                                         



                                                                              
                                                          




                                                                        
                                                        




                                                                         








                                                       
  



























                                                                           









                                                                    
















































































































































                                                                                           







                                                       









































                                                                           



                                                           
                                                            


                 








































































                                                                                           















                                                                           
                                                                                         







                                                                                                    
                                             

  
                       
                                                
                                                                      




                 
                                                                     






                                        


                                     
                        

                                                      










                                        
                                      






                           
                                             






                                         
                                             






                                                                    


















                                                                     






























                                                                             

                                                      
  























                                                                      



                                                  
                                                           





                                                                  
                                                                         





                                                    
                                                             





                                                                        
                                                                               





                                                      
                                                               





                                                  
                                                           


               



































                                                                                              






                                  
                                                         












                                                          
                                                         












                                                                              
                                                          




























                                                                              
                                                         













                                                              















                                                                           















                                                              
                                                                                  



                                              
                                                       


                                                               









                                                                      







                                                     
                                                                         



                                                   
                                                     


                                    


                                                                         
                                                                    



                               
                                 
                                                               
                                                                               


                                








                                                                 



                                              
                                                


                                                                  


























                                                                                       



                                                            
                                                    


                
                                            








                                                                 
                                              



                                           
                                                 





                                           
                                               


                 
                                      



                                                   
                                            


                         
                                                             







                                                          













































                                                                                    
                               

  
                                                            
                                                                 





                                                         
                                                              


                    
                                                  



                                                                    
                                                                         








                                               
                                                     


                 
                                                























                                                         



























                                                                                             







                                                          
                                                             






















                                                           












                                  
                  












                                 
                  








                                                     









                                                                                                



                                                                           
                                                          


                                 

























                                                                                                



                                                                     
                                                                   


                           
                                          







                                                                      
                                                     







                                                                              
                                    














                                                                             









                                                                                                   
  





                                                    
 




                                                                         
                                                                  
                                                                                             


                























































































                                                                            

























































































































                                                                                             
                             

            


































































































                                                                     


























                                                                 
                                                      



                                                     









                                                                            









                                                     









                                                                            
                                             










                                                                
                                                 






                                               
                                            






                                               









































































































































                                                            





















                                                       












                                                      
                             




                              
                  




















                                                                                                 












                                                                                

                                
                      

              
                 
                            
                                                





                                                                      


                                                         







                                                                
              


                                   
              


                                   
              


                                   
              


                                  
              


                                  
              


                                  
              


                                  
                                    


                                  
              


                                   
              


                                  
              


                                  
              


                                  
              


                                  
              


                                  
              


                                  
              


                                  
              


                                  
              


                                  
           


                                                     
           


                                    
           


                                     
           


                                                      
           


                                                    

                                                          


                                                                       
           


                               
           


                                    
           


                               
           


                                          
           


                                                          
           


                                                  
           
                                                         


                                                                         
 
           


                                               
           


                                               
           


                              
           


                                     
           


                                        
           


                                      
           


                                                                           
           


                                                  
           


                                                                          
           


                                           
           


                                     
           


                                             
           


                                                              
           


                                                  
           


                                                              
           


                                                       
           

                                                        

           


                                                            
           


                                                       
           


                           
           


                                  
           


                                      
           


                                         
            


                                             
            


                                           
            


                                          
            


                                             
            


                                   
            


                            
            

                               
 

                                       


                         
            


                                  
            


                                   
            


                                    
            


                                 
            


                                                      
            
                                         

                                                                          
 
            


                                          
            


                     
            


                                
            


                                
            


                                           
            


                                                     
            


                                          
            


                                                         
            


                                                       
            


                                                                       
            

                                            
 

                                                    


                                        
            


                                                    
            


                                                        
            


                                                         
            


                                         
            


                                
            


                              
            


                                      
            


                                   
            


                                                       
            


                
            


                       
                                                                    
            


                                                        
            

                          
 
            

                                  
 
            

























                                   
 

                                                                              
            


                                                                       
            


                        
            


                                                          
            
                                           
                                                        
 
            


                                                                
            


                                                 
            


                                         
            


                                   
            


                          
            


                                   
            


                                                                       
            


                                      
            


                                                              
            


                                                                        
                                                          
            


                                                                   
            


                                                               
            


                                                                      
            


                                                          
            


                                                   
            


                                                 
            


                                                       
            


                                       
            


                                                           
            


                                             
            


                                                                              
            


                                             
            


                         
            


                                                  
            


                                       
            


                                              
            


                                      
            


                                                          
            


                                         
            


                                                           
            


                            
            


                                               
            


                                                   
            


                                                          
            


                                                                    
            


                                                           
            


                                                                          
            


                                        
            


                                                
            


                             
            


                                             
            


                                                
            


                                                  
                                                                            
            


                                                          
            



                                                        
            


                                              
            


                                                
            


                       
            


                                      
            


                                                  
            


                                                                   
            


                                      
            


                                                                     

                                                                               
            


                                                         
                                                         
            


                                                 
            


                                       
            


                                                           
            


                                       
            


                                             
            


                                              
            


                                                                        
            


                                                             
            


                                                      
            


                                                      
            


                                                     
            


                                       
            


                                                        
            


                                             
            


                                    
            


                                                           
            


                                 
            


                                 
            


                 
            


             
            


               
            


               
            


              
            


                 
            


              
            


               
            


                      
            


                
            


                      
            


                  
            


                 
            


                    
            


                       
            


                                    
            


                                  
            


                            
            


                    
            


                    
            


                  
            


                   
            


                   
            


                  
            


                    

                                                              
            


                                    

                                                              
            


                                                

                                                              
            


                            
            


             
            


                      
            


            
                                                                  
            


               

                                                                  
            


                               
                                                                  
            


                             
            


                                   
            


                           
            


                               
            


                                   
            


                                              
            


                                
            


                             
            


                           
            


                              
            







                                                                       
             


                                
                             

              







                                                                      
                            



                                             

                                                        

                                             
                                                         





                                            
                                        
 



                            
 



























































































                                     











































































































































                                                                          

                                                              




























































































































































































































                                                                                              
                         
            
                         


                            
                                
            
                             


                                   
                               
            
                             



                                   























                                   



                                                                                     
            



                                     
            
                                         

                                                             
            
            


                                           
            


                                                                        
            
            

                                                                      
 
            
            



                                         
            



                                        
            



                                                       
            



                                                 
            



                                                                      
            



                            
            



                                                  
            



                                                                                     
            



                                                             
            



                                                                   
            



                                                                   
            



                                                    
            



                                                 
            



                                         
            



                                                                 
            



                                                                
            



                                              
            



                                                    
            



                                                                      
            



                                                          
            



                            
            



                                                       
            



                                                          
            



                                                        
            



                                              
            



                                                                         
            



                                                 
            



                                                                
            



                           
            



                                        
            



                                                                   
            



                                                                   
            



                                                                                        
            



                                                                
            



                                                                              
            



                                     
            



                                                                               
            



                                        
            



                                                          
            



                                                       
            



                                                    
            



                                                            
            



                                           
            



                                              
            



                                                   
            



                            
            



                                  
            



                                           
            



                                                                            
            



                                        
            



                                                                              
            



                                                                 
            



                                           
            



                                 
            



                                                     
            



                                          
            



                                             
            



                                                                   
            



                                                                   
            



                                                 
            



                                                                
            



                                                    
            



                                                           
            



                                       
            



                                                 
            



                                            
            



                                               
            



                                                                 
            



                                  
            



                            
            



              
            



             
            



              
            



               
            



             
            



                
            



                
            



              
            



                 
            



                
            



                      
            



                            
            



                      
            



                         
            



                      
            



                                    
            



                           
            



                         
            



                    
            



                    
            



                    
            



                    
            



                      
            



                         
            



                      
            



                                    
            



                                                
            



                             
            



                
            



                         
            



                
            



               
            



                               
            



                             
            



                         
            



                       
            



                               
            



                                  
            



                                  
            



                                     
            



                               
            



                      
            



                               
            


                                  
                                                     



                                                       
             


                                    
                             

                
               

                                    
                                                                          
                                                
                                                                      

                                      
         




                                             
                                             


                                               


























































































                                              





















































































































































                                                                          
                                                      





























































































































































































































                                                         
                         
            
                         


            
                                
            
                             


            
                               
            
                             



            























                             



                                           
            



                      
            



                                         
            


                                           
            



                                                       
            



                                                 
            



                                         
            



                               
            



                      
            



                               
            



                                                     
            



                    
            



                                                  
            



                                                                  
            



                                                  
            



                                              
            



                                                   
            



                                         
            



                                             
            



                                         
            



                                                 
            



                                   
            



                                             
            



                                           
            



                                                     
            



                                       
            



                     
            



                                                  
            



                                       
            



                                          
            



                                  
            



                                           
            



                                   
            



                                  
            



                     
            



                                        
            



                                               
            



                                               
            



                                                              
            



                                                           
            



                                                                    
            



                                 
            



                                                
            



                       
            



                                             
            



                                       
            



                                       
            



                                                
            



                                         
            



                                              
            



                                       
            



                       
            



                        
            



                                 
            



                                              
            



                       
            



                                                
            



                                             
            



                                    
            



                                 
            



                                                     
            



                                  
            



                                             
            



                                        
            



                                                  
            



                                            
            



                                                      
            



                                             
            



                                            
            



                                
            



                                                 
            



                                      
            



                                 
            



                                                  
            



                              
            



                    
            



              
            



            
            



              
            



               
            



             
            



                
            



             
            



              
            



                 
            



             
            



                    
            



                 
            



               
            



                
            



                
            



                                    
            



                      
            



                    
            



                   
            



                   
            



                  
            



                   
            



                
            



               
            



            
            



                                    
            



                                                
            



                            
            



            
            



                      
            



            
            



              
            



                         
            



                             
            



                         
            



                       
            



                               
            



                           
            



                                  
            



                         
            



                       
            



                     
            



                        
            


                         
                             



                                                       
             

                 

                                      
                      

                 
                 












                                                                      


                                                         






                                                     
 
              


                              
              


                                 
              


                                
              


                                
              


                                
              


                                
              


                                
                                    


                            
              


                                
              


                                
              


                                
              


                                
              


                                
              


                                
              


                              
              


                              
              


                              
              











































































































































































































































































































                                                                           
                         


                         

                               

            
                             


                               























                               


                                           
            


                      
            


                                         
            


                                           
            


                                                       
            


                                                 
            


                                         
            


                                                  
            


                                
            


                                                  
            


                                                                  
            


                            
            


                                                               
            


                                                                  
            


                                                    
            


                                              
            


                                                   
            


                                         
            


                                             
            


                                         
            


                                                   
            


                                   
            


                                             
            


                                           
            


                                                                                       
            


                                       
            


                      
            


                                                  
            


                                       
            


                                                    
            


                                    
            


                                           
            


                                     
            


                                  
            


                         
            


                                        
            


                                               
            


                                               
            


                                                              
            


                                                           
            


                                                                     
            


                                 
            


                                                      
            


                        
            


                                             
            


                                       
            


                                       
            


                                                
            


                                         
            


                                              
            


                                         
            


                       
            


                         
            


                                 
            


                                                 
            


                         
            


                                                             
            


                                              
            


                                    
            


                                 
            


                                                     
            


                                     
            


                                                    
            


                                           
            


                                                  
            


                                            
            


                                                      
            


                                                       
            


                                                
            


                                     
            


                                                 
            


                                          
            


                                  
            


                                                         
            


                               
            


                            
            


                
            


                
            


                
            


                
            


                
            


                
            


                
            


                
            


                 
            


             
            


                    
            


                    
            


                
            


                      
            


                
            


                                    
            


                        
            


                    
            


                   
            


                   
            


                  
            


                   
            


                
            


                
            


                
            


                                     
            


                                                
            


                                 
            


             
            


                      
            


             
            


               
            


                         
            


                             
            


                         
            


                       
            


                               
            


                           
            


                                  
            


                         
            


                       
            


                     
            


                        
            







                                                                       
             



                                                        
                      

                 
                 












                                                                      


                                                         







                                                           
              


                              
              


                                 
              


                                
              


                                
              


                                
              


                                
              


                                
                                    


                            
              


                                
              


                                
              


                                
              


                                
              


                                
              


                                
              


                              
              


                              
              


                              
              











































































































































































































































































































                                                                           
                         


                         

                               

            
                             


                               























                               


                                           
            


                      
            


                                         
            


                                           
            


                                                       
            


                                                 
            


                                         
            


                                                  
            


                                
            


                                                  
            


                                                                  
            


                            
            


                                                               
            


                                                                  
            


                                                    
            


                                              
            


                                                   
            


                                         
            


                                             
            


                                         
            


                                                   
            


                                   
            


                                             
            


                                           
            


                                                                                       
            


                                       
            


                      
            


                                                  
            


                                       
            


                                                    
            


                                    
            


                                           
            


                                     
            


                                  
            


                         
            


                                        
            


                                               
            


                                               
            


                                                              
            


                                                           
            


                                                                     
            


                                 
            


                                                      
            


                        
            


                                             
            


                                       
            


                                       
            


                                                
            


                                         
            


                                              
            


                                         
            


                       
            


                         
            


                                 
            


                                                 
            


                         
            


                                                             
            


                                              
            


                                    
            


                                 
            


                                                     
            


                                     
            


                                                    
            


                                           
            


                                                  
            


                                            
            


                                                      
            


                                                       
            


                                                
            


                                     
            


                                                 
            


                                          
            


                                  
            


                                                            
            


                               
            


                            
            


                
            


                
            


                
            


                
            


                
            


                
            


                
            


                
            


                 
            


             
            


                    
            


                    
            


                
            


                      
            


                
            


                                    
            


                        
            


                    
            


                   
            


                   
            


                  
            


                   
            


                
            


                
            


                
            


                                     
            


                                                
            


                                 
            


             
            


                      
            


             
            


               
            


                         
            


                             
            


                         
            


                       
            


                               
            


                           
            


                                  
            


                         
            


                       
            


                     
            


                        
            







                                                                       
             


                                                         
                             












































































































                                                                                        








                                                   







                                                                       
                                              





                        
                             



















                                                                             















                                                                                 






                                                                                        
                                                  







                                                                      



















                                                                               







                                                                                
                                                







                                                                          
                        







                        
                                                          







                                                          
                                            






                                                     





























                                                                          


                                                                             






















































































































































































































                                                                          
                             










                                             























                                                                                                                                                                                                      
                      








                                       



                                                    


                       












                                                                   


                   















                                                        


           














                                                                       


   







































































                                                                                  
                                                                                  
                             

                                       
















                                                     

                                   














                                                        


   
                                                            
                             










                                                      









                                                             
                                            














                                                                        




































































                                                                              



                                
                                        







                                                                           
                                


                                                                             




































































































                                                                                                                                            
                             

             

















                                                          

















                                                                                                  













                                           







                                                                                            

























                                                                           
                             




























                                                                         
                                       


                                                                   
                 




























































































































































































































































                                                                                                               
                                               



                                                                  
                                   








                                                    



























                                                           










                                                                                   
                             













                                                                          
                                                                   













































































































                                                                                
                    

                                      
                







                                                                         








                                                                               


























































                                                                                      
                                                                    













                                                                                      









































                                                                                                     







                                                                           
                                                                             


















                                                                             
                                                                           








                                                                               
                                                                           







                                                                              
                                                                           








                                                                               








                                                                
                                                












































































                                                                            





































                                                                                                                                                                           
                                          
                             

                   








                                                                                          







                                                              











                                                                               







































































































































                                                                                                                                           











                                                                               
















                                                                       
                             














































































































                                                                                          
                                  






























































                                                                                                    

             



                                                      
                                 






                                                         
                                  

                                                                              
      





                                                                        
      
       

                                                                        

                                   










                                            
                                                                                              


















                                                                              
                                   










                                
                                    










                                 
                                                                              










                                                       
                                                                               

















                                                                       
                                                              




















                                                                             
                                        






























                                                                           
                                       












                                                  
                                         

























































































                                                                           

             















                                                                  

             






















                                                                 

             





























                                                                        

             




                                 

                
















































                                                     
                                                           
























































                                                    
                                                                 















                                                                               
                                                                         








































                                                                          
                                                                           






                                                         
                                                                               













                                                                      
                                                                              





































































































                                                                                           
                             










                                             
                                                



















                                         
                               


                      



                                                                      







                                                                  


















                                                                            
                  






                                                         



                                                                         
                            


















































































                                                                                                 


                                     



                                                                                                           












                                                                                

                                                        
                        























                                                                                                










                                              
                                    








                                                             
                                    






                              














                                                                     
Description: Git master branch of Debian's w3m
Origin: https://anonscm.debian.org/cgit/collab-maint/w3m.git

diff --git a/Bonus/goodict.cgi b/Bonus/goodict.cgi
index 8f443c1..5fb6581 100755
--- a/Bonus/goodict.cgi
+++ b/Bonus/goodict.cgi
@@ -1,14 +1,20 @@
 #!/usr/bin/perl
 
 # ~/.w3m/urimethodmap
-# e:      file:/cgi-bin/goodict.cgi?%s
-# w:      file:/cgi-bin/goodict.cgi?%s
-# j:      file:/cgi-bin/goodict.cgi?%s
+# e:      file:/cgi-bin/goodict.cgi?%s    Englich-Japanese
+# w:      file:/cgi-bin/goodict.cgi?%s    Japanese-English
+# j:      file:/cgi-bin/goodict.cgi?%s    Japanese
+# a:      file:/cgi-bin/goodict.cgi?%s    All
+#
+# e:0:word  start with word
+# e:1:word  perfect match
+# e:2:word  end with word
+# e:3:word  search body text
+# e:6:word  search title
+# e:word    perfect match
 
-use NKF;
-#$mode = 0; # substring
-$mode = 1;  # perfect match
-#$mode = 3; # search body text
+use Encode;
+use Encode::Guess qw/euc-jp utf8/;
 $url = "http://dictionary.goo.ne.jp";
 $_ = $ENV{"QUERY_STRING"};
 if (/^e:/) {
@@ -17,14 +23,22 @@ if (/^e:/) {
     $kind = 'je';
 } elsif (/^j:/) {
     $kind = 'jn';
+} elsif (/^a:/) {
+    $kind = 'all'
+}
+s@^[ewja]:@@ && s@^//@@ && s@/$@@;
+if (/^([01236]):/) {
+    $mode=$1;
+    s/^[01236]://;
+}else{
+    $mode="1";
 }
-s@^[ewjs]:@@ && s@^//@@ && s@/$@@;
 if ($_) {
 	s/\+/ /g;
 	s/%([\da-f][\da-f])/pack('C', hex($1))/egi;
-	$_ = nkf("-e", $_);
+	$_ = encode("utf8", decode("Guess", $_));
 	s/[\000-\040\+:#?&%<>"\177-\377]/sprintf('%%%02X', unpack('C', $&))/eg;
-	$url .= "/search.php?MT=$_&kind=$kind&mode=$mode";
+	$url .= "/srch/$kind/$_/m$mode"."u/";
 } else {
 	$input = "w3m-control: GOTO_LINK";
 }
diff --git a/ChangeLog b/ChangeLog
index 88358ef..f7f9a06 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,1050 @@
+2016-07-18  Tatsuya Kinoshita  <tats@debian.org>
+
+	* NEWS: Update NEWS.
+
+	* fm.h: Set default_url to 1 by default.
+
+2016-06-20  Tatsuya Kinoshita  <tats@debian.org>
+
+	* doc-de/README.func, scripts/w3mhelp-funcdesc.de.pl.in:
+	Trim trailing spaces.
+
+2016-06-20  Markus Hiereth  <post@hiereth.de>
+
+	* doc-de/README.func, scripts/w3mhelp-funcdesc.de.pl.in:
+	Update German help messages.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=765682#47
+
+2016-06-19  Tatsuya Kinoshita  <tats@debian.org>
+
+	* doc-de/README.func, scripts/w3mhelp-funcdesc.de.pl.in:
+	Convert German help messages to UTF-8.
+
+	* main.c: Update description of SOURCE and VIEW.
+
+2016-06-19  Markus Hiereth  <post@hiereth.de>
+
+	* doc-de/README.func, doc/README.func:
+	Update description of SOURCE and VIEW.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=765682#37
+
+2016-06-19  Tatsuya Kinoshita  <tats@debian.org>
+
+	* NEWS: Update NEWS.
+
+	* doc-de/README.func: Update German messages.
+
+	* doc/README.func, main.c, menu.c: Update English messages.
+
+	* doc-jp/README.func, scripts/w3mhelp-funcdesc.ja.pl.in:
+	Update Japanese help messages.
+
+2016-06-19  Markus Hiereth  <post@hiereth.de>
+
+	* doc-de/README.func, scripts/w3mhelp-funcdesc.de.pl.in:
+	Update German help messages.
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=765682
+
+	* doc/README.func, scripts/w3mhelp-funcdesc.en.pl.in:
+	* scripts/w3mhelp.cgi.in: Update English help messages.
+
+2016-05-11  Tatsuya Kinoshita  <tats@debian.org>
+
+	* config.guess, config.sub:
+	Update config.* with autotools-dev 20160430.1.
+
+2016-04-14  Tatsuya Kinoshita  <tats@debian.org>
+
+	* doc-de/README.func, doc-jp/README.func, doc/README.func:
+	* w3m-doc/sample/keymap.cgi: Cleanup obsolete INIT_MAILCAP.
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=820902
+
+	* NEWS: Update NEWS.
+
+2016-04-08  Tatsuya Kinoshita  <tats@debian.org>
+
+	* libwc/johab.c: Fix segfault on bogus text for wc_N_to_johab1.
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=820373
+
+2016-04-07  Tatsuya Kinoshita  <tats@debian.org>
+
+	* libwc/map/big5_ucs.map, libwc/map/cns11643_ucs.map:
+	* libwc/map/gb12345_ucs.map, libwc/map/gb2312_ucs.map:
+	* libwc/map/gbk_ucs.map, libwc/map/hkscs_ucs.map:
+	* libwc/map/jisx0208x0212x0213_ucs.map, libwc/map/ksx1001_ucs.map:
+	* libwc/map/sjis_ext_ucs.map, libwc/map/uhc_ucs.map, libwc/ucs.c:
+	* libwc/ucs.map: Fix segfault on bogus text for wc_any_to_ucs.
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=820162
+
+2016-04-03  Tatsuya Kinoshita  <tats@debian.org>
+
+	* doc/FAQ.html, doc/MANUAL.html: Update English documents.
+
+2016-04-03  Markus Hiereth  <markus.hiereth@freenet.de>
+
+	* doc/FAQ.html, doc/MANUAL.html: Update English documents.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=772341#25
+
+2016-04-02  Tatsuya Kinoshita  <tats@debian.org>
+
+	* configure, configure.ac, doc-de/README.func, scripts/Makefile.in:
+	* scripts/w3mhelp-funcdesc.de.pl.in, scripts/w3mhelp.cgi.in:
+	Support German translated help messages (translation is in progress).
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=765682
+
+	* doc-jp/w3m.1, doc/w3m.1: Update manpage footers to w3m 0.5.3.
+
+	* doc-jp/MANUAL.html, doc-jp/w3m.1, w3m-doc/outline.html.in:
+	* w3mhelp-lynx_ja.html.in, w3mhelp-w3m_ja.html.in:
+	Update Japanese documents for extbrowser4..9.
+
+2016-04-02  Justin B Rye  <justin.byam.rye@gmail.com>
+
+	* doc/FAQ.html, doc/MANUAL.html, doc/README.func, doc/menu.submenu:
+	* main.c, menu.c, scripts/w3mhelp-funcdesc.ja.pl.in:
+	* scripts/w3mhelp.cgi.in, w3mhelp-lynx_en.html.in:
+	* w3mhelp-w3m_en.html.in: English fixes.
+	cf. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=772341#15
+	Origin: https://lists.debian.org/debian-l10n-english/2014/12/msg00002.html
+	Origin: https://lists.debian.org/debian-l10n-english/2014/12/msg00030.html
+	Origin: https://lists.debian.org/debian-l10n-english/2015/02/msg00011.html
+
+2016-03-30  Leo Famulari  <leo@famulari.name>
+
+	* url.c: Disable RC4.
+	Origin: http://git.savannah.gnu.org/cgit/guix.git/commit/?id=62339e2d493bf87a3aabe12e45458581e9705d83
+
+2016-03-29  Tatsuya Kinoshita  <tats@debian.org>
+
+	* url.c: Fix variable is reassigned a value before the old one has
+	been used.
+
+	* regex.c: Fix printf format specifier mismatch when REGEX_DEBUG.
+
+	* w3mimg/fb/fb.c: Fix invalid braces when not Linux or FreeBSD.
+
+	* local.c: Fix uninitialized variable when not HAVE_PUTENV.
+
+	* w3mimgdisplay.c: Fix realloc mistake for DrawImage.
+
+	* file.c: Fix mistake of unescape spaces for _doFileCopy.
+	cf. [w3m-dev-en 00751], [w3m-dev-en 00752] on 2002-06-09
+
+	* url.c: Fix style of array index is used before limits check.
+	Bug: https://sourceforge.net/p/w3m/feature-requests/25/
+
+2016-03-22  Tatsuya Kinoshita  <tats@debian.org>
+
+	* menu.c, proto.h: Fix build failure when not USE_MOUSE for sgrmouse.
+	cf. https://twitter.com/naota344/status/711541592167854081
+
+2016-03-20  Tatsuya Kinoshita  <tats@debian.org>
+
+	* rc.c: Fix reverse ordered config parameters.
+
+2016-03-19  Tatsuya Kinoshita  <tats@debian.org>
+
+	* doc/FAQ.html: Update FAQ for extbrowser.
+
+2016-03-14  Tatsuya Kinoshita  <tats@debian.org>
+
+	* po/de.po, po/ja.po, po/w3m.pot, po/zh_CN.po, po/zh_TW.po, rc.c:
+	Update PO strings for extbrowser2..9.
+
+2016-03-13  Tatsuya Kinoshita  <tats@debian.org>
+
+	* acinclude.m4, configure:
+	Set firefox instead of mozilla to default browser.
+
+	* po/Makefile.in.in, po/de.po, po/ja.po, po/w3m.pot, po/zh_CN.po:
+	* po/zh_TW.po: Update PO strings for extbrowser4..9.
+
+	* doc-jp/MANUAL.html, doc/MANUAL.html, fm.h, main.c, rc.c:
+	Add extbrowser4, extbrowser5, ..., and extbrowser9.
+	e.g.
+	- extbrowser8 url=%s && printf %s "$url" | xsel && printf %s "$url" | xsel -b
+	- extbrowser9 mpv %s &
+	cf. https://github.com/spcmd/w3m
+
+2016-02-28  Tatsuya Kinoshita  <tats@debian.org>
+
+	* menu.c: Fix SIGFPE for ACCESSKEY.
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=779092
+
+	* doc/README.func, main.c: Typo fix for ACCESSKEY.
+	cf. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=779092#5
+
+2015-12-20  Franz Thoma  <franz.thoma@tngtech.com>
+
+	* w3mimg/x11/x11_w3mimg.c: Fix semi-transparent artifacts in w3m-img
+	when used with 32-bit color (e.g. urxvt).
+	imlib_render_image_on_drawable_at_size() tended to leave nasty
+	semi-transparent artifacts in 32-bit mode.  Apparently, resizing an
+	image in 32-bit mode affects the alpha channel even if there is no
+	transparency in the image.  With this patch, resizing is done in
+	24-bit mode (or whatever depth the original image has) before
+	converting the image to 32-bit and rendering it on the display.
+	Origin: https://gist.github.com/fmthoma/f76a1b44e00d5ca972bb
+	cf. https://github.com/hut/ranger/issues/86#issuecomment-166027119
+
+2015-12-17  Tatsuya Kinoshita  <tats@debian.org>
+
+	* w3mimg/x11/x11_w3mimg.c:
+	Wrap render_pixbuf_to_pixmap_32() in USE_GTK2.
+
+2015-12-17  Araki Ken  <arakiken@users.sf.net>
+
+	* w3mimg/x11/x11_w3mimg.c:
+	w3mimgdisplay supports 32 bit depth screen. (e.g. gnome-terminal)
+	Origin: https://bitbucket.org/arakiken/w3m/commits/f9c22db8cfd1aaba9bb7301ef9ba51ed88d8bb40
+
+2015-12-17  Tatsuya Kinoshita  <tats@debian.org>
+
+	* w3mimg/x11/x11_w3mimg.c:
+	Revert "Fix handling visuals and colormaps incorrectly".
+	This reverts commit e24b4064daf3e022e370788a8c7267db40c37dda.
+
+2015-11-19  Tatsuya Kinoshita  <tats@debian.org>
+
+	* fm.h: Accept cookies by default.
+
+	* fm.h: Set argv_is_url to 1 by default.
+	Bug-Arch: https://bugs.archlinux.org/task/47102
+
+2015-11-18  Tatsuya Kinoshita  <tats@debian.org>
+
+	* config.guess, config.sub:
+	Update config.* with autotools-dev 20150820.1.
+
+2015-11-11  Mingye Wang (Arthur2e5)  <arthur200126@gmail.com>
+
+	* po/LINGUAS, po/zh_CN.po, po/zh_TW.po:
+	Add zh_CN and zh_TW translations.
+	Please note that the zh_TW translation is machine-converted using
+	OpenCC from zh_CN, and needs to be further polished by actual zh_TW
+	speakers.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=804732#10
+
+2015-10-24  BwackNinja  <BwackNinja@gmail.com>
+
+	* w3mimg/x11/x11_w3mimg.c:
+	Fix handling visuals and colormaps incorrectly.
+	cf. https://github.com/hut/ranger/issues/86
+	Origin: https://gist.github.com/BwackNinja/60a344730170f9ce2163
+	Bug-Arch: https://bugs.archlinux.org/task/46836
+	Bug: https://sourceforge.net/p/w3m/patches/72/
+
+2015-10-10  Tatsuya Kinoshita  <tats@debian.org>
+
+	* cookie.c: Remove incomplete special_domain tests.
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=385702
+
+2015-10-04  Gaetan Bisson  <bisson@archlinux.org>
+
+	* scripts/w3mhelp.cgi.in: Do not use defined(%hash).
+	Origin: https://projects.archlinux.org/svntogit/packages.git/commit/trunk?h=packages/w3m&id=d9e0a4f0b461c9e2177cd9e64a10581386650503
+	Bug-Arch: https://bugs.archlinux.org/task/45608
+
+2015-09-06  Tatsuya Kinoshita  <tats@debian.org>
+
+	* file.c: Do not use C99-style comments.
+
+2015-09-06  David Crosby  <dave@dafyddcrosby.com>
+
+	* file.c: Mitigate issue #16 found by @kcwu.
+	* table.c: Fix stack overflow found by @kcwu.
+	Origin: https://github.com/dafyddcrosby/sw3m
+	Bug-sw3m: https://github.com/dafyddcrosby/sw3m/issues/16
+
+2015-08-21  Tatsuya Kinoshita  <tats@debian.org>
+
+	* doc-jp/keymap.lynx, doc/keymap.lynx: Fix unknown key.
+	Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/265144
+	Bug: https://sourceforge.net/p/w3m/bugs/48/
+
+2015-08-11  David Crosby  <dave@dafyddcrosby.com>
+
+	Fix resource leaks, dead assignments, divide-by-zero, and so on.
+	Origin: https://github.com/dafyddcrosby/sw3m
+
+	* buffer.c: Check for presence of prevl before using.
+
+	* html.h: Adjust UFclose to remove false positive of CWE-481.
+
+	* ftp.c: Move sockent for splint.
+
+	* cookie.c: Use unsigned int for max_count.
+
+	* libwc/iso2022.c: Add missing comparision that made if always true.
+
+	* Str.c: Use fgetc in while loops, use int instead of char.
+
+	* mailcap.c: Adjust len to size_t.
+
+	* history.c: Check return value of rename.
+
+	* main.c: Adjust while loop.
+
+	* news.c: Check dup call for errors.
+
+	* file.c: Remove unused value.
+
+	* ftp.c: dup can give a negative value.
+
+	* main.c: Use int for c.
+
+	* table.c: Initialize new_tabwidth at declaration.
+
+	* local.c: Remove overflow on readlink.
+
+	* anchor.c, file.c, istream.c, main.c, menu.c, rc.c, table.c, terms.c:
+	* url.c: Remove dead assignments flagged by Clang static analysis.
+
+	* w3mbookmark.c:
+	Move fclose to fix dereference after null check (Coverity).
+
+	* file.c: Fix resource leak in AuthDigestCred.
+
+	* buffer.c: Fix resource leak in readBufferCache.
+
+	* cookie.c: Fix resource leak in load_cookies.
+
+	* frame.c: Fix resource leak.
+
+	* w3mhelperpanel.c: Fix resource leak.
+
+	* w3mbookmark.c: Fix resource leak and a null return value dereference.
+
+	* linein.c: Fix a divide-by-zero.
+
+	* cookie.c: Change total_dot_number to unsigned int.
+
+	* cookie.c: Free tmp.
+
+	* local.c: Remove unreachable return.
+
+2015-08-10  Alan Grow  <alangrow@gmail.com>
+
+	* url.c (HTTPrequest):
+	- Use Content-Type instead of Content-type.
+	- Use Content-Length instead of Content-length.
+	Origin: https://github.com/acg/w3m/commit/5946c2784d4eae46ec06e52390e43a874b3395fc
+
+2015-08-09  Egmont Koblinger  <egmont@users.sourceforge.net>
+
+	* terms.c: Support sgrmouse for skip_escseq.
+	* menu.c: Adjust comments for keymaps.
+	Origin: https://sourceforge.net/p/w3m/patches/65/#e2aa
+
+2015-08-09  Tatsuya Kinoshita  <tats@debian.org>
+
+	* keybind_lynx.c: Support sgrmouse for Lynx-like key binding.
+	cf. https://sourceforge.net/p/w3m/patches/65/
+
+2015-08-09  IWAMOTO Kouichi  <sue@iwmt.org>
+
+	* menu.c: Support SGR style mouse handler for menu.
+	cf. https://github.com/tats/w3m/issues/5
+	Origin: https://gist.github.com/ttdoda/83fbcf676a21da28432b
+	Bug: https://sourceforge.net/p/w3m/patches/65/
+
+2015-08-06  Richard Quirk  <richard@quirk.es>
+
+	Fix problems reported by cppcheck, clang --analyze and gcc warnings.
+	Origin: https://github.com/tats/w3m/pull/6
+
+	* Str.c, Str.h: Strnew_charp and co do not modify the char* input.
+
+	* local.c: Close temp file if pipe open fails.
+
+	* rc.c: Avoid passing null to strlen.
+
+	* file.c: Initialise hidden_input to NULL.
+	This prevents a possible use of garbage value on line 3017.
+
+	* file.c: Use pclose for pipe.
+
+2015-08-05  IWAMOTO Kouichi  <sue@iwmt.org>
+
+	* main.c: Fix that SGR style mouse handler has off-by-one problem.
+	cf. https://github.com/tats/w3m/issues/5
+	Origin: https://gist.github.com/ttdoda/30c189a63d483beeb207
+	Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/1390768
+	Bug: https://sourceforge.net/p/w3m/patches/65/
+
+2015-07-31  yshl  <yshl@takechiyo.net>
+
+	* Bonus/goodict.cgi:
+	- Use Encode.pm instead of NKF.
+	- Update to the current URL.
+	- Enable to select search mode.
+	Origin: https://github.com/tats/w3m/pull/4
+
+2015-07-20  Tatsuya Kinoshita  <tats@debian.org>
+
+	* README: Add short description.
+
+	* doc-jp/FAQ.html, doc/FAQ.html: Mention GOPHER_PROXY and FTP_PROXY.
+
+2015-07-05  Tatsuya Kinoshita  <tats@debian.org>
+
+	* doc-jp/FAQ.html, doc/FAQ.html: Mention HTTPS_PROXY.
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=791425
+
+2015-06-27  yshl  <yshl@takechiyo.net>
+
+	* doc-jp/README.SSL: Modify certdata2pem.rb to assume the encoding
+	of the certdata.txt to be UTF-8.
+	Origin: https://github.com/tats/w3m/pull/3
+
+2015-06-23  Daniel Schepler  <dschepler@gmail.com>
+
+	* terms.c: Wrap the functions used by image.c in USE_IMAGE.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=789539
+
+2015-05-09  Tatsuya Kinoshita  <tats@debian.org>
+
+	* doc-jp/README.siteconf, doc/README.siteconf:
+	Update examples of siteconf for twitter.com.
+
+2015-05-03  Tatsuya Kinoshita  <tats@debian.org>
+
+	* main.c: Correct GC version confirmation.
+
+2015-05-02  yshl  <yshl@takechiyo.net>
+
+	* main.c: Correct GC version confirmation.
+	Origin: https://github.com/tats/w3m/pull/2
+
+2015-04-29  Markus Hiereth  <post@hiereth.de>
+
+	* po/de.po: Update German translation.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=783383
+
+2015-04-29  Tatsuya Kinoshita  <tats@debian.org>
+
+	* po/Makevars, po/de.po, po/ja.po, po/w3m.pot, rc.c:
+	Update PO strings for display_borders.
+
+2015-04-26  yshl  <yshl@takechiyo.net>
+
+	* main.c: Use GC_oom_fn instead of GC_set_oom_fn for gc-7.1.
+	Origin: https://github.com/tats/w3m/pull/1
+
+2015-02-03  Tatsuya Kinoshita  <tats@debian.org>
+
+	* po/de.po, po/ja.po, po/w3m.pot: Update PO.
+
+2015-02-02  Tatsuya Kinoshita  <tats@debian.org>
+
+	* file.c, fm.h, rc.c:
+	New option "display_borders" to display 0 pixel table borders.
+	cf. http://d.hatena.ne.jp/rubikitch/20101120
+
+2015-01-24  Tatsuya Kinoshita  <tats@debian.org>
+
+	* acinclude.m4, configure, version.c.in:
+	Update to 0.5.3+gitYYYYMMDD (generate from ChangeLog).
+
+2015-01-15  Tatsuya Kinoshita  <tats@debian.org>
+
+	* alloc.h, main.c: Drop C99 features.
+
+2015-01-15  Scarlett  <scarlett@xavin.net>
+
+	Add overflow detection.
+	Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2
+	* main.c: Call exit(1) when out of memory to avoid dereferencing null
+	pointers when gc's malloc fails.
+	* alloc.h: Replacements for w3m's allocation macros which add
+	overflow detection and concentrate the macros in one file.
+	* indep.h, libwc/charset.c, libwc/status.c, matrix.c: Use the
+	overflow-detecting allocation macros from alloc.h.
+
+2015-01-15  Tatsuya Kinoshita  <tats@debian.org>
+
+	* Str.c, cookie.c, map.c:
+	Do not use C99 printf format specifiers and asprintf.
+
+2015-01-15  Scarlett  <scarlett@xavin.net>
+
+	Correct printf arguments and use asprintf.
+	Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2
+	* Str.c: Use asprintf() instead of rolling our own printf string
+	length detection.
+	* cookie.c: Pass the char pointer in the string struct to printf %s
+	instead of the string struct itself.
+	Print time_t using %lld instead of %ld to allow for 64-bit time_t.
+	* main.c: Print a long int using the correct format specifier.
+	* map.c: Print size_t using the correct format specifier.
+
+2014-12-06  Araki Ken  <arakiken@users.sf.net>
+
+	Support OSC 5379 remote imaging and sixel graphics.
+	Origin: https://bitbucket.org/arakiken/w3m/branch/remoteimg (2014-11-16)
+
+	* doc/README.sixel, terms.c: Add README.sixel.  W3M_IMG2SIXEL
+	environmental variable enables to specify options of img2sixel.
+
+	* image.c, terms.c:
+	Add n_terminal_image argument to put_image_{sixel|osc5379}().
+	Use struct winsize to calculate ppc and ppl.
+
+	* terms.c: If SCREEN_VARIANT=sixel on GNU screen, exec img2sixel
+	without -P option.
+
+	* terms.c: ttymode_set() -> ttymode_reset().
+
+	* terms.c: Fix.
+
+	* terms.c: Support GNU screen.
+
+	* terms.c: Show GIF (except animation GIF) correctly.
+
+	* main.c, terms.c: img2sixel exits by Ctrl+C. Enable GIF Animation if
+	'I' is pressed to show it.
+
+	* image.c: Add declaration of get_pixel_per_cell().
+
+	* terms.c: Show the first frame of animation gif files.
+
+	* terms.c: system() -> fork()&execvp()
+
+	* display.c: Draw underline on anchor which contains cboth text and
+	images.
+
+	* etc.c: Remove close_tty() from setup_child() because close_tty()
+	sometimes interrupts loadGeneralFile() in loadImage() and corrupt
+	image data can be cached in ~/.w3m.
+
+	* image.c: Minor fix.
+
+	* image.c: Cache image files if at all possible and convert them to
+	sixel when -sixel option is specified.
+
+	* image.c: Init pixel_per_{char|line}_i if get_pixel_per_cell() fails.
+
+	* display.c, file.c, fm.h, image.c, main.c, terms.c:
+	Add -sixel option which supports image processing by img2sixel.
+
+	* image.c: Don't download image files whose size is specified in
+	<img> tag.
+
+	* image.c: Minor fixes of parseImageHeader().
+
+	* image.c: Determine the format of an image file by its header data
+	not by its file name suffix.
+
+	* image.c: Read width and height from jpeg, png and gif files directly
+	instead of executing w3mimgdisplay -size.
+
+	* display.c: display.c: Draw underline on anchor text which is not
+	overlapped with any image.
+
+	* terms.c: Clear fd_set by FD_ZERO() before select().
+
+	* file.c: nw and ni are rounded up instead of rounded off to show
+	every corner of images.
+
+	* terms.c: Change time to wait for the response of "\x1b[14t\x1b[18t"
+	from 0.1 sec to 0.5 sec.
+
+	* image.c:
+	- clearImage() works.
+	- Use cached image files created by w3m in getImage().
+
+	* file.c: Hack for alignment.
+
+	* fm.h, image.c, terms.c:
+	- Adjust the image size to the terminal cell size.
+	- If the image size is specified in html source, skip to load the image.
+
+	* display.c, fm.h, image.c, main.c, terms.c, w3mimg/x11/x11_w3mimg.c:
+	Support remote image by OSC 5379 show_picture sequence.
+
+2014-12-06  Olaf Hering  <olh@suse.de>
+
+	* parsetagx.c: Fix crash in parse_tag() during every start.
+	Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-parsetagx-crash.patch?expand=1
+
+	* fm.h: Change the default to alt_entity=0.
+	Change the default for the option "Use ASCII equivalents to
+	display entities" from YES to NO.
+	Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.5.1-no-ASCII-equivalents-by-default.patch?expand=1
+	Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=247397
+
+	* anchor.c, libwc/gb18030.c, libwc/ucs.c, regex.c:
+	Fix a few harmless uninitialized variables.
+	Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-uninitialized.patch?expand=1
+
+2014-12-06  Peter Poeml  <poeml@suse.de>
+
+	* terms.c: Prevent segfault when editing a textarea field with vi.
+	Add fix for segfault that can occur when editing a textarea field
+	with vi, and returning to w3m (it seems to happen if the terminal
+	is not writable, as when using w3m after 'su - some_user')
+	Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.4.1-textarea-segfault.dif?expand=1
+
+2014-12-04  Tatsuya Kinoshita  <tats@debian.org>
+
+	* acinclude.m4: Follow updated configure.
+
+2014-12-03  Yusuke Baba  <babayaga1@y8.dion.ne.jp>
+
+	* configure, w3mimg/fb/fb.c, w3mimg/fb/fb.h, w3mimg/fb/fb_w3mimg.c:
+	Support FreeBSD framebuffer.
+	Origin: http://www.ac.auone-net.jp/~baba/w3m-img/index.html
+	Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=122673
+
+2014-12-02  Naohiro Aota  <naota@gentoo.org>
+
+	* acinclude.m4, configure, w3mimg/fb/fb_gdkpixbuf.c:
+	* w3mimg/x11/x11_w3mimg.c:
+	Depend on gdk-pixbuf instead of gtk when gtk2.
+	Origin: http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-gdk-pixbuf.patch?revision=1.1
+
+2014-12-02  Jeroen Roovers  <jer@gentoo.org>
+
+	* acinclude.m4, configure: Add tinfo to with_termlib.
+	Fix building against sys-libs/ncurses[tinfo].
+	Origin: https://504588.bugs.gentoo.org/attachment.cgi?id=372650
+	Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=504588
+
+2014-12-01  OBATA Akio  <obache@netbsd.org>
+
+	* acinclude.m4, configure:
+	Assume defined PKG_CONFIG points right location when gtk2.
+	Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-aa?rev=1.13&content-type=text/x-cvsweb-markup
+	Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-ak?rev=1.1&content-type=text/x-cvsweb-markup
+
+2014-12-01  Vsevolod Stakhov  <vsevolod@FreeBSD.org>
+
+	* config.h.in: Disable USE_EGD for LibreSSL.
+	Disable use of RAND_egd as it is absent in FreeBSD.
+	This also fixes build error with LibreSSL.
+	Origin: https://bz-attachments.freebsd.org/attachment.cgi?id=144635
+	Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191852
+	Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191956
+
+2014-12-01  zimous  <zimous@matfyz.cz>
+
+	* po/ja.po: Set Language tag properly for Japanese translation.
+	Origin: https://512722.bugs.gentoo.org/attachment.cgi?id=378452
+	Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=512722
+
+2014-11-30  Tatsuya Kinoshita  <tats@debian.org>
+
+	* doc/w3m.1: Typo fix.
+
+2014-11-30  Markus Hiereth  <post@hiereth.de>
+
+	* doc/w3m.1: Miscellaneous changes to improve English manpage.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
+
+2014-11-29  Markus Hiereth  <post@hiereth.de>
+
+	* doc/w3m.1: Improve FILES.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=403634
+
+	* doc/w3m.1: Improve EXAMPLES.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=380560
+
+	* doc/w3m.1: Improve explanation about option -N.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=345084
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=530468
+
+	* doc/w3m.1: Note that -cols only affects when HTML is rendered.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=285251
+
+	* doc/w3m.1: Add more info on configuration.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=268211
+
+2014-11-29  Justin B Rye  <justin.byam.rye@gmail.com>
+
+	* scripts/w3mman/w3mman.1.in: Tweak for W3MMAN_W3M.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771003#5
+
+	* scripts/w3mman/w3mman.1.in: English fixes.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#25
+
+2014-11-29  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-19+.
+
+2014-11-29  Justin B Rye  <justin.byam.rye@gmail.com>
+
+	* scripts/w3mman/w3mman2html.cgi.in: Fix Perl warnings.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771004
+
+2014-10-21  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-19
+
+	* po/LINGUAS: Correct LINGUAS to a whitespace separated list
+
+2014-10-21  Markus Hiereth  <markus.hiereth@freenet.de>
+
+	* po/LINGUAS, po/de.po: Add German translation
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763964
+
+2014-10-15  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-18
+
+	* doc-jp/README.SSL: Update README.SSL to follow default values
+
+	* config.sub: Update config.sub with autotools-dev 20140911.1
+
+	* fm.h: Disable SSLv3 by default [CVE-2014-3566]
+	cf. https://blog.mozilla.org/security/2014/10/14/the-poodle-attack-and-the-end-of-ssl-3-0/
+
+2014-10-15  Ludwig Nussel  <ludwig.nussel@suse.de>
+
+	* fm.h: Force ssl_verify_server on and disable SSLv2 support
+	Origin: http://www.openwall.com/lists/oss-security/2010/06/14/4
+
+2014-10-13  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-17+
+
+2014-10-04  Tatsuya Kinoshita  <tats@debian.org>
+
+	* libwc/ambwidth_map.awk, libwc/map/ucs_ambwidth.map:
+	Fix incorrect generation of ucs_ambwidth_map
+
+2014-08-22  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-17
+
+	* config.guess:
+	Update config.guess to 2014-03-23 with autotools-dev 20140510.1
+
+	* config.sub:
+	Update config.sub to 2014-05-01 with autotools-dev 20140510.1
+
+2014-08-22  Micah Cowan  <micah@addictivecode.org>
+
+	* main.c: Support Boehm GC 7.2.
+	Replace Gentoo's patch to prevent segfaults due to infinite recursion.
+	Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=080_gc72.patch;att=1;bug=758831
+	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758831
+	Bug-Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=555467
+	Bug: http://sourceforge.net/p/w3m/patches/63/
+	Bug: http://sourceforge.net/p/w3m/patches/59/
+
+2014-08-22  Tatsuya Kinoshita  <tats@debian.org>
+
+	* main.c:
+	Revert "Support Boehm GC 7.2" (w3m-0.5.2-gc72.patch from Gentoo)
+	This reverts commit 4331db3e3e673ac4dbfe8e9f2b42a8e0478dc98a.
+
+2014-06-23  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-16
+
+	* url.c: Disable ciphers that use keys smaller than 128 bits
+	Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/1325674
+
+2014-01-04  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-15
+
+2014-01-03  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-14
+
+	* acinclude.m4, configure: Use pkg-config to build with imlib2 1.4.6
+
+	* doc/HISTORY, doc/README.cookie, doc/README.m17n:
+	Prefer US-ASCII rathar than Japanese encodings in English documents
+
+2013-12-27  Tatsuya Kinoshita  <tats@debian.org>
+
+	* doc-jp/MANUAL.html, doc/MANUAL.html:
+	Cleanup unusable links in MANUAL.html
+	Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=517315
+
+	* version.c.in: Update to 0.5.3+debian-13+
+
+2013-12-17  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-13
+
+2013-12-14  Tatsuya Kinoshita  <tats@debian.org>
+
+	* config.guess:
+	Update config.guess to 2013-06-10 with autotools-dev 20130810.1
+
+	* config.sub:
+	Update config.sub to 2013-08-10 with autotools-dev 20130810.1
+
+2013-12-07  Reinhard Max  <max@suse.de>
+
+	* local.c: Fix a directory descriptor leak in loadLocalDir.
+	Patch from openSUSE on 2009-09-07.
+	Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-closedir.patch
+	Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=531675
+
+2013-12-07  AIDA Shinra  <shinra@j10n.org>
+
+	* main.c: Fix crash after SEARCH_NEXT.
+	Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-search-next.patch>,
+	[w3m-dev:04473] on 2013-12-07.
+
+2013-11-11  Paul Boekholt  <p.boekholt@gmail.com>
+
+	* file.c: Add support for single quoted meta refresh URL
+	Bug: https://sourceforge.net/p/w3m/patches/53/
+	Bug-NetBSD: http://gnats.netbsd.org/42400
+
+2013-11-07  Cristian Rodriguez  <crrodriguez@opensuse.org>
+
+	* url.c: Use SSL_OP_NO_COMPRESSION if available.
+	Due to the "CRIME attack" (CVE-2012-4929) HTTPS clients that
+	negotiate TLS-level compression can be abused for MITM attacks.
+	* url.c: Use SSL_MODE_RELEASE_BUFFERS if available.
+	Patch from openSUSE on 2012-11-12:
+	https://build.opensuse.org/request/show/141054
+
+2013-10-15  Tatsuya Kinoshita  <tats@debian.org>
+
+	* Makefile.in:
+	Depend on funcname.tab to fix parallel make issue of scripts
+	Bug: https://sourceforge.net/p/w3m/patches/64/
+	Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=362249
+
+	* w3mimg/Makefile.in:
+	Avoid prerequisite $(IMGOBJS) to fix parallel make issue of w3mimg
+	Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=726188
+
+	* acinclude.m4, configure:
+	Explicitly add -lX11 to IMGX11LDFLAGS only when gtk2
+	Bug: https://sourceforge.net/p/w3m/patches/57/
+
+	* w3mimg/Makefile.in: Revert "Fix parallel make issue"
+	This reverts commit aa6f871c6dcc108118142bcc786e4a6ac3d46867.
+
+	* Makefile.in:
+	Revert "Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5"
+	This reverts commit 7410954066d68ac2ad6aea638801714447321fec.
+
+2013-10-14  AIDA Shinra  <shinra@j10n.org>
+
+	* url.c: Define schemeNumToName() to fix scheme bug.
+	Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-schemebug.patch>,
+	[w3m-dev:04470] on 2013-10-14.
+	Bug: https://sourceforge.net/p/w3m/patches/60/
+
+	* config.h.in, file.c, fm.h, html.h, image.c, indep.c, indep.h:
+	* istream.c, istream.h, local.c, main.c, mimehead.c, proto.h:
+	Workaround of GC crash on Cygwin64.
+	Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-win64gc.patch>,
+	[w3m-dev:04469] on 2013-10-14.
+
+2013-10-14  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-12+
+
+2013-10-14  Jarek Czekalski  <jarekczek@poczta.onet.pl>
+
+	* terms.c: Fix paren in check_cygwin_console()
+	Bug: https://sourceforge.net/p/w3m/patches/66/
+
+2013-10-13  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-12
+
+	* doc-jp/MANUAL.html, doc-jp/w3m.1, doc/MANUAL.html, doc/w3m.1:
+	Update document for the -s option change
+	Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=75527
+
+	* terms.c: Do not fail when LANG is not set.
+	Check whether the value of LC_ALL, LC_CTYPE or LANG is not NULL in
+	check_cygwin_console().
+	Bug: https://sourceforge.net/p/w3m/patches/66/
+
+2013-10-12  Tatsuya Kinoshita  <tats@debian.org>
+
+	* table.h: Bump MAXCOL to 256
+	Bug: https://sourceforge.net/p/w3m/feature-requests/24/
+
+2013-10-12  Laurence Richert  <laurencerichert@yahoo.de>
+
+	* main.c, proto.h: vim/-perator like handling
+	- half page scrolling
+	- jumping to elements numbered by getLinkNumberStr() from Karsten
+	  Schoelzel
+	Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=724028
+
+2013-10-12  Tatsuya Kinoshita  <tats@debian.org>
+
+	* doc-jp/README, doc/README:
+	Mention project page rather than unavailable mailing lists
+
+2013-10-09  Rafael Laboissiere  <rafael@laboissiere.net>
+
+	* doc/README.img: Fix typo
+	Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=725892
+
+2013-08-12  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-11+
+
+	* ChangeLog: Update ChangeLog to use contributor's name
+
+2013-08-08  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-11
+
+2013-08-04  Tatsuya Kinoshita  <tats@debian.org>
+
+	* Str.c: Check length for Strchop()
+
+	* main.c: Fix potentially segfault of execdict()
+
+	* version.c.in: Update to 0.5.3+debian-10+
+
+	* file.c: Fix segfault of loadGeneralFile()
+	Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=718612
+
+2013-08-02  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-10
+
+2013-08-02  Piotr P. Karwasz <piotr.p@karwasz.org>
+
+	* scripts/w3mman/w3mman2html.cgi.in:
+	Correct underline processing and more UTF-8 support for w3mman2html.cgi.
+	Patch from <https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/680202>
+	on 2010-11-23.
+
+2013-08-01  Hilko Bengen  <bengen@debian.org>
+
+	* entity.c: Ignore SOFT HYPHEN to prevent drawing hyphens everywhere.
+	Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441934>
+	on 2011-03-01.
+
+2013-08-01  Tatsuya Kinoshita  <tats@debian.org>
+
+	* doc-jp/README, doc/README: Update contact list in README
+	Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=696209
+
+2013-07-30  Tatsuya Kinoshita  <tats@debian.org>
+
+	* config.guess, config.sub:
+	Update config.guess and config.sub to supprot aarch64.
+	Updated with Debian autotools-dev version 20130515.1.
+
+2013-07-30  Conrad J.C. Hughes  <debbugs@xrad.org>
+
+	* main.c: Sort anchors by sequence number in -dump.
+	Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657666>
+	on 2012-01-27.
+
+2013-07-30  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update to 0.5.3+debian-9+
+
+2013-07-29  Tatsuya Kinoshita  <tats@debian.org>
+
+	* version.c.in: Update version to w3m/0.5.3+debian-9
+
+	* version.c.in: Set CURRENT_VERSION to debian version
+
+2013-07-28  Tatsuya Kinoshita  <tats@debian.org>
+
+	* file.c: Fix segfault of process_button()
+
+2013-04-08  AIDA Shinra  <shinra@j10n.org>
+
+	* file.c: One more patch for siteconf from [w3m-dev 04464]
+
+	* anchor.c, config.h.in, display.c, doc-jp/README.siteconf:
+	* doc/README.siteconf, file.c, fm.h, form.c, frame.c, func.c:
+	* history.c, indep.c, indep.h, linein.c, main.c, map.c, menu.c:
+	* po/ja.po, proto.h, rc.c, url.c: Support the siteconf feature.
+	Patch to support the siteconf feature, from [w3m-dev 04463]
+	on 2012-06-27.
+
+2013-04-08  Hayaki Saito  <user@zuse.jp>
+
+	* keybind.c, main.c, proto.h, terms.c:
+	Support SGR 1006 mouse reporting.
+	cf. [w3m-dev 04466] on 2012-07-15
+	Origin: https://gist.github.com/3114255
+	Bug: https://sourceforge.net/p/w3m/patches/65/
+
+2012-05-19  Hilko Bengen  <bengen@debian.org>
+
+	* form.c: Assume "text" if an input type is unknown.
+	Patch from <http://bugs.debian.org/615843> on 2011-03-01.
+
+2012-05-19  Simon Ruderich  <simon@ruderich.org>
+
+	* Makefile.in: Use $(CPPFLAGS) with $(CPP).
+	Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=665491>
+	on 2012-03-24.
+
+2012-05-03  Miroslav Šulc  <fordfrog@gentoo.org>
+
+	* w3mimg/Makefile.in: Fix parallel make issue.
+	Patch from Gentoo
+	<http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-parallel-make.patch?revision=1.1&view=markup>
+	<https://bugs.gentoo.org/show_bug.cgi?id=353390> on 2011-02-01.
+
+2012-05-03  MATSUU Takuto  <matsuu@gentoo.org>
+
+	* main.c: Support Boehm GC 7.2.
+	Patch from Gentoo
+	<http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.2-gc72.patch?revision=1.1&view=markup>
+	on 2009-12-13.
+
+2012-05-02  Reinhard Tartler  <siretart@tauware.de>
+
+	* istream.c, istream.h:
+	Fix that struct file_handle conflicts with glibc 2.14.
+	Patch from <https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/935540>
+	on 2012-02-19.
+
+2011-10-30  Colin Watson  <cjwatson@ubuntu.com>
+
+	* acinclude.m4, configure, w3mbookmark.c:
+	Appease gcc -Werror=format-security.
+	Patch from 0.5.3-3ubuntu1 on 2011-10-23.
+	Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=646321
+
+2011-06-19  Martin Pitt  <martin.pitt@ubuntu.com>
+
+	* Makefile.in:
+	Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5.
+	Patch from 0.5.2-10ubuntu1 on 2010-12-03.
+	Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=605761
+
+2011-06-19  Fumitoshi UKAI  <ukai@debian.or.jp>
+
+	* main.c: Change the -s option to "squeeze multiple blank lines".
+	Change the -s option from "display charset Shift_JIS" to "squeeze
+	multiple blank lines" to work as /usr/bin/pager.  In addition, the
+	options -j and -e are disabled.  To specify the display charset,
+	use -O{s|j|e} instead.
+	Patch from [w3m-dev 01275] on 2000-10-26.
+	Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=75527
+
+2011-06-19  Hiroyuki Ito  <ZXB01226@nifty.com>
+
+	* file.c, fm.h, html.c, html.h, proto.h, table.c, tagtable.tab:
+	Support the button element as defined in HTML 4.01.
+	Patch from upstream, [w3m-dev 04411] on 2010-09-17, to support the
+	button element.  It is discussed upstream and incomplete, but enough
+	to login Launchpad.
+	Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=136810
+	Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/628755
+
 2012-05-22  Tatsuya Kinoshita <tats@vega.ocn.ne.jp>
 
 	* [w3m-dev 04451] w3m/entity.h should be removed when `make clean'
diff --git a/Makefile.in b/Makefile.in
index 7d692f9..8fa799e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -150,7 +150,7 @@ parsetagx.o: html.c
 
 funcname.tab: $(DEFUNS)
 	(echo '#define DEFUN(x,y,z) x y';\
-	 sed -ne '/^DEFUN/{p;n;/^[ 	]/p;}' $(DEFUNS)) | $(CPP) - | \
+	 sed -ne '/^DEFUN/{p;n;/^[ 	]/p;}' $(DEFUNS)) | $(CPP) $(CPPFLAGS) - | \
 	 awk '$$1 ~ /^[_A-Za-z]/ { \
 	       for (i=2;i<=NF;i++) { print $$i, $$1} \
 	 }' > $@.tmp
@@ -250,7 +250,7 @@ install-po:
 	 (cd $$subdir && $(MAKE) install); \
 	done
 
-all-scripts:
+all-scripts: funcname.tab
 	for dir in $(SCRIPTSUBDIRS);	\
 	do	\
 		(cd $$dir && $(MAKE) $(MAKE_ARGS)); \
diff --git a/NEWS b/NEWS
index 66e309d..c55e929 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,39 @@
+w3m X.X.X - YYYY-MM-DD
+
+* new features
+ - support OSC 5379 remote imaging and sixel graphics
+ - support SGR style mouse handler
+ - support 32-bit color images
+ - support FreeBSD framebuffer
+ - support button element
+ - support meta charset
+ - add extbrowser4..9
+ - add display_borders to display 0 pixel table borders
+ - add siteconf feature
+ - add German translation for options setting panel
+ - add translations for de, zh_CN and zh_TW
+* bug fixes
+ - fix segfaults with malformed text
+ - disable SSLv2 and SSLv3 by default [CVE-2014-3566]
+ - set ssl_verify_server to 1 by default
+ - disable RC4, export ciphers, and keys < 128 bits
+ - use SSL_OP_NO_COMPRESSION due to "CRIME attack" [CVE-2012-4929]
+ - use SSL_MODE_RELEASE_BUFFERS
+ - disable USE_EGD for LibreSSL
+ - appease gcc -Werror=format-security
+ - option -s is now "squeeze multiple blank lines" to work as pager, and
+   -j and -e are obsolete, so use -O{s|j|e} to specify display charset
+ - accept single quoted meta refresh URL
+ - assume "text" if a form input type is unknown
+ - accept cookies by default
+ - set default_url to 1 by default
+ - set argv_is_url to 1 by default
+ - set alt_entity to 0 by default
+ - fix build problems with Boehm GC 7.2, imlib2 1.4.6 and glibc 2.14
+ - fix parallel make failure
+ - fix incorrect ucs_ambwidth_map
+ - and many fixes
+
 w3m 0.5.3 - 2011-01-15
 
 * security fix
diff --git a/README b/README
index 8778d80..765c996 100644
--- a/README
+++ b/README
@@ -1,3 +1,9 @@
+w3m: WWW wo Miru Tool
+=====================
+
+w3m is a pager with WWW capability.  It IS a pager, but it can be used
+as a text-mode WWW browser.
+
 If you can read English, see doc/*.
 If you can read Japanese, see doc-jp/*.
 If you can read both, read both and correct English. :-)
diff --git a/Str.c b/Str.c
index e5a0982..70e9957 100644
--- a/Str.c
+++ b/Str.c
@@ -56,7 +56,7 @@ Strnew_size(int n)
 }
 
 Str
-Strnew_charp(char *p)
+Strnew_charp(const char *p)
 {
     Str x;
     int n;
@@ -73,7 +73,7 @@ Strnew_charp(char *p)
 }
 
 Str
-Strnew_m_charp(char *p, ...)
+Strnew_m_charp(const char *p, ...)
 {
     va_list ap;
     Str r = Strnew();
@@ -87,7 +87,7 @@ Strnew_m_charp(char *p, ...)
 }
 
 Str
-Strnew_charp_n(char *p, int n)
+Strnew_charp_n(const char *p, int n)
 {
     Str x;
 
@@ -140,7 +140,7 @@ Strcopy(Str x, Str y)
 }
 
 void
-Strcopy_charp(Str x, char *y)
+Strcopy_charp(Str x, const char *y)
 {
     int len;
 
@@ -160,7 +160,7 @@ Strcopy_charp(Str x, char *y)
 }
 
 void
-Strcopy_charp_n(Str x, char *y, int n)
+Strcopy_charp_n(Str x, const char *y, int n)
 {
     int len = n;
 
@@ -180,7 +180,7 @@ Strcopy_charp_n(Str x, char *y, int n)
 }
 
 void
-Strcat_charp_n(Str x, char *y, int n)
+Strcat_charp_n(Str x, const char *y, int n)
 {
     int newlen;
 
@@ -209,7 +209,7 @@ Strcat(Str x, Str y)
 }
 
 void
-Strcat_charp(Str x, char *y)
+Strcat_charp(Str x, const char *y)
 {
     if (y == NULL)
 	return;
@@ -278,8 +278,8 @@ void
 Strchop(Str s)
 {
     STR_LENGTH_CHECK(s);
-    while ((s->ptr[s->length - 1] == '\n' || s->ptr[s->length - 1] == '\r') &&
-	   s->length > 0) {
+    while (s->length > 0 &&
+	   (s->ptr[s->length - 1] == '\n' || s->ptr[s->length - 1] == '\r')) {
 	s->length--;
     }
     s->ptr[s->length] = '\0';
@@ -301,7 +301,7 @@ Strinsert_char(Str s, int pos, char c)
 }
 
 void
-Strinsert_charp(Str s, int pos, char *p)
+Strinsert_charp(Str s, int pos, const char *p)
 {
     STR_LENGTH_CHECK(s);
     while (*p)
@@ -530,11 +530,8 @@ Str
 Strfgets(FILE * f)
 {
     Str s = Strnew();
-    char c;
-    while (1) {
-	c = fgetc(f);
-	if (feof(f) || ferror(f))
-	    break;
+    int c;
+    while ((c = fgetc(f)) != EOF) {
 	Strcat_char(s, c);
 	if (c == '\n')
 	    break;
@@ -546,11 +543,8 @@ Str
 Strfgetall(FILE * f)
 {
     Str s = Strnew();
-    char c;
-    while (1) {
-	c = fgetc(f);
-	if (feof(f) || ferror(f))
-	    break;
+    int c;
+    while ((c = fgetc(f)) != EOF) {
 	Strcat_char(s, c);
     }
     return s;
diff --git a/Str.h b/Str.h
index f345c74..248815d 100644
--- a/Str.h
+++ b/Str.h
@@ -30,22 +30,22 @@ typedef struct _Str {
 
 Str Strnew(void);
 Str Strnew_size(int);
-Str Strnew_charp(char *);
-Str Strnew_charp_n(char *, int);
-Str Strnew_m_charp(char *, ...);
+Str Strnew_charp(const char *);
+Str Strnew_charp_n(const char *, int);
+Str Strnew_m_charp(const char *, ...);
 Str Strdup(Str);
 void Strclear(Str);
 void Strfree(Str);
 void Strcopy(Str, Str);
-void Strcopy_charp(Str, char *);
-void Strcopy_charp_n(Str, char *, int);
-void Strcat_charp_n(Str, char *, int);
+void Strcopy_charp(Str, const char *);
+void Strcopy_charp_n(Str, const char *, int);
+void Strcat_charp_n(Str, const char *, int);
 void Strcat(Str, Str);
-void Strcat_charp(Str, char *);
+void Strcat_charp(Str, const char *);
 void Strcat_m_charp(Str, ...);
 Str Strsubstr(Str, int, int);
 void Strinsert_char(Str, int, char);
-void Strinsert_charp(Str, int, char *);
+void Strinsert_charp(Str, int, const char *);
 void Strdelete(Str, int, int);
 void Strtruncate(Str, int);
 void Strlower(Str);
diff --git a/acinclude.m4 b/acinclude.m4
index e4ccc3d..ed1035d 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -6,7 +6,8 @@ dnl w3m autoconf macros
 AC_DEFUN([AC_W3M_VERSION],
 [AC_SUBST(CURRENT_VERSION)
  cvsver=`$AWK '\$[1] ~ /Id:/ { print \$[3]}' $srcdir/ChangeLog`
- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
+ ymdver=`sed -e 's/ .*//;s/-//g;q' $srcdir/ChangeLog`
+ sed -e 's/define CURRENT_VERSION "\(.*\)YYYYMMDD/define CURRENT_VERSION "\1'$ymdver'/;s/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
  CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c`])
 #
 # ----------------------------------------------------------------
@@ -330,10 +331,10 @@ AC_DEFINE_UNQUOTED(DEF_MAILER, "$w3m_mailer")])
 # ----------------------------------------------------------------
 AC_DEFUN([AC_W3M_EXT_BROWSER],
 [AC_SUBST(DEF_EXT_BROWSER)
-w3m_browser="/usr/bin/mozilla"
+w3m_browser="/usr/bin/firefox"
 AC_MSG_CHECKING(which external browser is used by default)
 AC_ARG_WITH(browser,
- [  --with-browser=BROWSER	default browser (/usr/bin/mozilla)],
+ [  --with-browser=BROWSER	default browser (/usr/bin/firefox)],
  [w3m_browser="$with_browser"])
 AC_MSG_RESULT($w3m_browser)
 AC_DEFINE_UNQUOTED(DEF_EXT_BROWSER, "$w3m_browser")])
@@ -400,10 +401,10 @@ AC_DEFUN([AC_W3M_TERMLIB],
 AC_ARG_WITH(termlib,
  [  --with-termlib[=LIBS]		terminal library
 				LIBS is space separated list of:
-				  terminfo mytinfo termcap ncurses curses],,
+				  terminfo mytinfo termcap tinfo ncurses curses],,
  [with_termlib="yes"])
  AC_MSG_RESULT($with_termlib)
- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses"
+ test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap tinfo ncurses curses"
  for lib in $with_termlib; do
    AC_CHECK_LIB($lib, tgetent, [W3M_LIBS="$W3M_LIBS -l$lib"; break])
  done
@@ -600,7 +601,7 @@ AC_DEFUN([AC_W3M_IMAGE],
   if test x"$enable_image" = xyes; then
     enable_image=x11
     case "`uname -s`" in
-    Linux|linux|LINUX) 
+    Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD) 
 	if test -c /dev/fb0; then
 	  enable_image=x11,fb
         fi;;
@@ -649,6 +650,9 @@ AC_DEFUN([AC_W3M_IMAGE],
      fi;;
    imlib2)
      with_imlib2="yes"
+     if test x"$PKG_CONFIG" = x; then
+       PKG_CONFIG=pkg-config
+     fi
      if test x"$IMLIB2_CONFIG" = x; then
        IMLIB2_CONFIG=imlib2-config
      fi;;
@@ -661,8 +665,6 @@ AC_DEFUN([AC_W3M_IMAGE],
      with_gtk2="yes"
      if test x"$PKG_CONFIG" = x; then
        PKG_CONFIG=pkg-config
-     else
-       PKG_CONFIG=:
      fi;;
    esac
   done
@@ -705,8 +707,8 @@ AC_DEFUN([AC_W3M_IMAGE],
      IMGTARGETS="x11"    
      AC_DEFINE(USE_GDKPIXBUF)
      AC_DEFINE(USE_GTK2)
-     IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
-     IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
+     IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
+     IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
    elif test x"$have_gdkpixbuf" = xyes; then
      AC_DEFINE(USE_W3MIMG_X11)
      IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
@@ -728,7 +730,7 @@ AC_DEFUN([AC_W3M_IMAGE],
      IMGTARGETS="x11"    
      AC_DEFINE(USE_IMLIB2)
      IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`"
-     IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`"
+     IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs imlib2`"
    else
      AC_MSG_WARN([unable to build w3mimgdisplay with X11 support])
    fi
@@ -740,8 +742,8 @@ AC_DEFUN([AC_W3M_IMAGE],
      IMGTARGETS="${IMGTARGETS} fb"
      AC_DEFINE(USE_GDKPIXBUF)
      AC_DEFINE(USE_GTK2)
-     IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`"
-     IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`"
+     IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0`"
+     IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0`"
    elif test x"$have_gdkpixbuf" = xyes; then
      AC_DEFINE(USE_W3MIMG_FB)
      IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
@@ -756,7 +758,7 @@ AC_DEFUN([AC_W3M_IMAGE],
      AC_DEFINE(USE_IMLIB2)
      IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
      IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`"
-     IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`"
+     IMGFBLDFLAGS="`${PKG_CONFIG} --libs imlib2`"
    else
      AC_MSG_WARN([unable to build w3mimgdisplay with FB support])
    fi
@@ -866,7 +868,7 @@ AC_MSG_CHECKING(for sys_errlist)
 AC_TRY_COMPILE(
 changequote(<<,>>)dnl
 <<extern char *sys_errlist[];>>,
-<<printf(sys_errlist[0]);>>,
+<<printf("%s", sys_errlist[0]);>>,
 changequote([,])dnl
 [have_sys_errlist="yes"; AC_DEFINE(HAVE_SYS_ERRLIST)],
 [have_sys_errlist="no"])
diff --git a/alloc.h b/alloc.h
new file mode 100644
index 0000000..fa0d391
--- /dev/null
+++ b/alloc.h
@@ -0,0 +1,39 @@
+/*
+ * by Scarlett. public domain.
+ * replacements for w3m's allocation macros which add overflow
+ * detection and concentrate the macros in one file
+ */
+#ifndef W3_ALLOC_H
+#define W3_ALLOC_H
+#include <gc.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <limits.h>
+
+static inline size_t
+z_mult_no_oflow_(size_t n, size_t size)
+{
+	if (size != 0 && n > ULONG_MAX / size) {
+		fprintf(stderr,
+		    "w3m: overflow in malloc, %lu*%lu\n", (unsigned long)n, (unsigned long)size);
+		exit(1);
+	}
+	return n * size;
+}
+
+#define New(type) \
+	(GC_MALLOC(sizeof(type)))
+
+#define NewAtom(type) \
+	(GC_MALLOC_ATOMIC(sizeof(type)))
+
+#define New_N(type, n) \
+	(GC_MALLOC(z_mult_no_oflow_((n), sizeof(type))))
+
+#define NewAtom_N(type, n) \
+	(GC_MALLOC_ATOMIC(z_mult_no_oflow_((n), sizeof(type))))
+
+#define New_Reuse(type, ptr, n) \
+	(GC_REALLOC((ptr), z_mult_no_oflow_((n), sizeof(type))))
+
+#endif /* W3_ALLOC_H */
diff --git a/anchor.c b/anchor.c
index 27bbd56..2d21bfa 100644
--- a/anchor.c
+++ b/anchor.c
@@ -11,7 +11,7 @@ putAnchor(AnchorList *al, char *url, char *target, Anchor **anchor_return,
 {
     int n, i, j;
     Anchor *a;
-    BufferPoint bp;
+    BufferPoint bp = { 0 };
     if (al == NULL) {
 	al = New(AnchorList);
 	al->anchors = NULL;
@@ -200,10 +200,11 @@ _put_anchor_news(Buffer *buf, char *p1, char *p2, int line, int pos)
 	if (*(p2 - 1) == '>')
 	    p2--;
     }
-    tmp = wc_Str_conv_strict(Strnew_charp_n(p1, p2 - p1), InnerCharset,
-			     buf->document_charset);
-    tmp = Sprintf("news:%s", file_quote(tmp->ptr));
-    return registerHref(buf, tmp->ptr, NULL, NO_REFERER, NULL, '\0', line,
+    tmp = Strnew_charp("news:");
+    Strcat_charp_n(tmp, p1, p2 - p1);
+    return registerHref(buf, url_encode(tmp->ptr, baseURL(buf),
+					buf->document_charset),
+			NULL, NO_REFERER, NULL, '\0', line,
 			pos);
 }
 #endif				/* USE_NNTP */
@@ -213,9 +214,10 @@ _put_anchor_all(Buffer *buf, char *p1, char *p2, int line, int pos)
 {
     Str tmp;
 
-    tmp = wc_Str_conv_strict(Strnew_charp_n(p1, p2 - p1), InnerCharset,
-			     buf->document_charset);
-    return registerHref(buf, url_quote(tmp->ptr), NULL, NO_REFERER, NULL,
+    tmp = Strnew_charp_n(p1, p2 - p1);
+    return registerHref(buf, url_encode(tmp->ptr, baseURL(buf),
+					buf->document_charset),
+			NULL, NO_REFERER, NULL,
 			'\0', line, pos);
 }
 
@@ -641,7 +643,6 @@ addMultirowsForm(Buffer *buf, AnchorList *al)
 {
     int i, j, k, col, ecol, pos;
     Anchor a_form, *a;
-    FormItemList *fi;
     Line *l, *ls;
 
     if (al == NULL || al->nanchor == 0)
@@ -668,7 +669,6 @@ addMultirowsForm(Buffer *buf, AnchorList *al)
 	    if (!ls)
 		continue;
 	}
-	fi = (FormItemList *)a_form.url;
 	col = COLPOS(ls, a_form.start.pos);
 	ecol = COLPOS(ls, a_form.end.pos);
 	for (j = 0; l && j < a_form.rows; l = l->next, j++) {
@@ -756,7 +756,7 @@ link_list_panel(Buffer *buf)
 		p = parsedURL2Str(&pu)->ptr;
 		u = html_quote(p);
 		if (DecodeURL)
-		    p = html_quote(url_unquote_conv(p, buf->document_charset));
+		    p = html_quote(url_decode2(p, buf));
 		else
 		    p = u;
 	    }
@@ -787,7 +787,7 @@ link_list_panel(Buffer *buf)
 	    p = parsedURL2Str(&pu)->ptr;
 	    u = html_quote(p);
 	    if (DecodeURL)
-		p = html_quote(url_unquote_conv(p, buf->document_charset));
+		p = html_quote(url_decode2(p, buf));
 	    else
 		p = u;
 	    t = getAnchorText(buf, al, a);
@@ -809,16 +809,13 @@ link_list_panel(Buffer *buf)
 	    p = parsedURL2Str(&pu)->ptr;
 	    u = html_quote(p);
 	    if (DecodeURL)
-		p = html_quote(url_unquote_conv(p, buf->document_charset));
+		p = html_quote(url_decode2(p, buf));
 	    else
 		p = u;
 	    if (a->title && *a->title)
 		t = html_quote(a->title);
-	    else if (DecodeURL)
-		t = html_quote(url_unquote_conv
-			       (a->url, buf->document_charset));
 	    else
-		t = html_quote(a->url);
+		t = html_quote(url_decode2(a->url, buf));
 	    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", p,
 			   "\n", NULL);
 	    a = retrieveAnchor(buf->formitem, a->start.line, a->start.pos);
@@ -842,19 +839,13 @@ link_list_panel(Buffer *buf)
 		    p = parsedURL2Str(&pu)->ptr;
 		    u = html_quote(p);
 		    if (DecodeURL)
-			p = html_quote(url_unquote_conv(p,
-							buf->
-							document_charset));
+			p = html_quote(url_decode2(p, buf));
 		    else
 			p = u;
 		    if (m->alt && *m->alt)
 			t = html_quote(m->alt);
-		    else if (DecodeURL)
-			t = html_quote(url_unquote_conv(m->url,
-							buf->
-							document_charset));
 		    else
-			t = html_quote(m->url);
+			t = html_quote(url_decode2(m->url, buf));
 		    Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t,
 				   "</a><br>", p, "\n", NULL);
 		}
diff --git a/buffer.c b/buffer.c
index 5afc26a..3b2352a 100644
--- a/buffer.c
+++ b/buffer.c
@@ -705,6 +705,7 @@ readBufferCache(Buffer *buf)
 
     cache = fopen(buf->savecache, "r");
     if (cache == NULL || fread1(clnum, cache) || fread1(tlnum, cache)) {
+	fclose(cache);
 	buf->savecache = NULL;
 	return -1;
     }
@@ -760,8 +761,10 @@ readBufferCache(Buffer *buf)
 	}
 #endif
     }
-    buf->lastLine = prevl;
-    buf->lastLine->next = NULL;
+    if (prevl) {
+	    buf->lastLine = prevl;
+	    buf->lastLine->next = NULL;
+    }
     fclose(cache);
     unlink(buf->savecache);
     buf->savecache = NULL;
diff --git a/config.guess b/config.guess
index 51fab47..0967f2a 100755
--- a/config.guess
+++ b/config.guess
@@ -1,13 +1,12 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+#   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2004-03-12'
+timestamp='2016-04-02'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -16,24 +15,22 @@ timestamp='2004-03-12'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 #
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# Please send patches to <config-patches@gnu.org>.
+
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -53,8 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
+Copyright 1992-2016 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -66,11 +62,11 @@ Try \`$me --help' for more information."
 while test $# -gt 0 ; do
   case $1 in
     --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit 0 ;;
+       echo "$timestamp" ; exit ;;
     --version | -v )
-       echo "$version" ; exit 0 ;;
+       echo "$version" ; exit ;;
     --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
+       echo "$usage"; exit ;;
     -- )     # Stop option processing
        shift; break ;;
     - )	# Use stdin as input.
@@ -104,7 +100,7 @@ set_cc_for_build='
 trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
 trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
 : ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
  { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
  { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
  { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
@@ -123,7 +119,7 @@ case $CC_FOR_BUILD,$HOST_CC,$CC in
 	;;
  ,,*)   CC_FOR_BUILD=$CC ;;
  ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ;'
+esac ; set_cc_for_build= ;'
 
 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
 # (ghazi@noc.rutgers.edu 1994-08-24)
@@ -136,12 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+	# If the system lacks a compiler, then just pick glibc.
+	# We could probably try harder.
+	LIBC=gnu
+
+	eval $set_cc_for_build
+	cat <<-EOF > $dummy.c
+	#include <features.h>
+	#if defined(__UCLIBC__)
+	LIBC=uclibc
+	#elif defined(__dietlibc__)
+	LIBC=dietlibc
+	#else
+	LIBC=gnu
+	#endif
+	EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+	;;
+esac
+
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
 	# switched to ELF, *-*-netbsd* would select the old
 	# object file format.  This provides both forward
@@ -151,22 +168,30 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# Note: NetBSD doesn't particularly care about the vendor
 	# portion of the name.  We always set it to "unknown".
 	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+	    /sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || \
+	    echo unknown)`
 	case "${UNAME_MACHINE_ARCH}" in
 	    armeb) machine=armeb-unknown ;;
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
 	    sh3eb) machine=sh-unknown ;;
+	    sh5el) machine=sh5le-unknown ;;
+	    earmv*)
+		arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+		endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+		machine=${arch}${endian}-unknown
+		;;
 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
 	# to ELF recently, or will in the future.
 	case "${UNAME_MACHINE_ARCH}" in
-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+	    arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
 		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep __ELF__ >/dev/null
+			| grep -q __ELF__
 		then
 		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
 		    # Return netbsd for either.  FIX?
@@ -176,7 +201,14 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		fi
 		;;
 	    *)
-	        os=netbsd
+		os=netbsd
+		;;
+	esac
+	# Determine ABI tags.
+	case "${UNAME_MACHINE_ARCH}" in
+	    earm*)
+		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+		abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
 		;;
 	esac
 	# The OS release
@@ -189,78 +221,48 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		release='-gnu'
 		;;
 	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
 		;;
 	esac
 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
 	# contains redundant information, the shorter form:
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
-	exit 0 ;;
-    amd64:OpenBSD:*:*)
-	echo x86_64-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    amiga:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    arc:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    cats:OpenBSD:*:*)
-	echo arm-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    hp300:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mac68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    macppc:OpenBSD:*:*)
-	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvme68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvme88k:OpenBSD:*:*)
-	echo m88k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvmeppc:OpenBSD:*:*)
-	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    pegasos:OpenBSD:*:*)
-	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    pmax:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sgi:OpenBSD:*:*)
-	echo mipseb-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sun3:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    wgrisc:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	echo "${machine}-${os}${release}${abi}"
+	exit ;;
+    *:Bitrig:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+	exit ;;
     *:OpenBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	exit ;;
+    *:LibertyBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+	exit ;;
     *:ekkoBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
     macppc:MirBSD:*:*)
-	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-	exit 0 ;;
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
     *:MirBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
+    *:Sortix:*:*)
+	echo ${UNAME_MACHINE}-unknown-sortix
+	exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
 	*4.0)
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
 		;;
 	*5.*)
-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
 		;;
 	esac
 	# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -270,76 +272,82 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
 	case "$ALPHA_CPU_TYPE" in
 	    "EV4 (21064)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "EV4.5 (21064)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "LCA4 (21066/21068)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "EV5 (21164)")
-		UNAME_MACHINE="alphaev5" ;;
+		UNAME_MACHINE=alphaev5 ;;
 	    "EV5.6 (21164A)")
-		UNAME_MACHINE="alphaev56" ;;
+		UNAME_MACHINE=alphaev56 ;;
 	    "EV5.6 (21164PC)")
-		UNAME_MACHINE="alphapca56" ;;
+		UNAME_MACHINE=alphapca56 ;;
 	    "EV5.7 (21164PC)")
-		UNAME_MACHINE="alphapca57" ;;
+		UNAME_MACHINE=alphapca57 ;;
 	    "EV6 (21264)")
-		UNAME_MACHINE="alphaev6" ;;
+		UNAME_MACHINE=alphaev6 ;;
 	    "EV6.7 (21264A)")
-		UNAME_MACHINE="alphaev67" ;;
+		UNAME_MACHINE=alphaev67 ;;
 	    "EV6.8CB (21264C)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.8AL (21264B)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.8CX (21264D)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE="alphaev69" ;;
+		UNAME_MACHINE=alphaev69 ;;
 	    "EV7 (21364)")
-		UNAME_MACHINE="alphaev7" ;;
+		UNAME_MACHINE=alphaev7 ;;
 	    "EV7.9 (21364A)")
-		UNAME_MACHINE="alphaev79" ;;
+		UNAME_MACHINE=alphaev79 ;;
 	esac
 	# A Pn.n version is a patched version.
 	# A Vn.n version is a released version.
 	# A Tn.n version is a released field test version.
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit 0 ;;
-    Alpha*:OpenVMS:*:*)
-	echo alpha-hp-vms
-	exit 0 ;;
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+	exitcode=$?
+	trap '' 0
+	exit $exitcode ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# Should we change UNAME_MACHINE based on the output of uname instead
 	# of the specific Alpha model?
 	echo alpha-pc-interix
-	exit 0 ;;
+	exit ;;
     21064:Windows_NT:50:3)
 	echo alpha-dec-winnt3.5
-	exit 0 ;;
+	exit ;;
     Amiga*:UNIX_System_V:4.0:*)
 	echo m68k-unknown-sysv4
-	exit 0;;
+	exit ;;
     *:[Aa]miga[Oo][Ss]:*:*)
 	echo ${UNAME_MACHINE}-unknown-amigaos
-	exit 0 ;;
+	exit ;;
     *:[Mm]orph[Oo][Ss]:*:*)
 	echo ${UNAME_MACHINE}-unknown-morphos
-	exit 0 ;;
+	exit ;;
     *:OS/390:*:*)
 	echo i370-ibm-openedition
-	exit 0 ;;
+	exit ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit ;;
     *:OS400:*:*)
-        echo powerpc-ibm-os400
-	exit 0 ;;
+	echo powerpc-ibm-os400
+	exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit 0;;
+	exit ;;
+    arm*:riscos:*:*|arm*:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
 	echo hppa1.1-hitachi-hiuxmpp
-	exit 0;;
+	exit ;;
     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
 	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
 	if test "`(/bin/universe) 2>/dev/null`" = att ; then
@@ -347,32 +355,51 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	else
 		echo pyramid-pyramid-bsd
 	fi
-	exit 0 ;;
+	exit ;;
     NILE*:*:*:dcosx)
 	echo pyramid-pyramid-svr4
-	exit 0 ;;
+	exit ;;
     DRS?6000:unix:4.0:6*)
 	echo sparc-icl-nx6
-	exit 0 ;;
-    DRS?6000:UNIX_SV:4.2*:7*)
+	exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
 	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7 && exit 0 ;;
+	    sparc) echo sparc-icl-nx7; exit ;;
 	esac ;;
+    s390x:SunOS:*:*)
+	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
     sun4H:SunOS:5.*:*)
 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
-    i86pc:SunOS:5.*:*)
-	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+	echo i386-pc-auroraux${UNAME_RELEASE}
+	exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+	eval $set_cc_for_build
+	SUN_ARCH=i386
+	# If there is a compiler, see if it is configured for 64-bit objects.
+	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+	# This test works for both compilers.
+	if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_64BIT_ARCH >/dev/null
+	    then
+		SUN_ARCH=x86_64
+	    fi
+	fi
+	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
     sun4*:SunOS:6*:*)
 	# According to config.sub, this is the proper way to canonicalize
 	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
 	# it's likely to be more like Solaris than SunOS4.
 	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
     sun4*:SunOS:*:*)
 	case "`/usr/bin/arch -k`" in
 	    Series*|S4*)
@@ -381,13 +408,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	esac
 	# Japanese Language versions have a version number like `4.1.3-JL'.
 	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit 0 ;;
+	exit ;;
     sun3*:SunOS:*:*)
 	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     sun*:*:4.2BSD:*)
 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
 	case "`/bin/arch`" in
 	    sun3)
 		echo m68k-sun-sunos${UNAME_RELEASE}
@@ -396,10 +423,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		echo sparc-sun-sunos${UNAME_RELEASE}
 		;;
 	esac
-	exit 0 ;;
+	exit ;;
     aushp:SunOS:*:*)
 	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
     # "atarist" or "atariste" at least should have a processor
@@ -409,41 +436,41 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-	exit 0 ;;
+	echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
 	echo m68k-atari-mint${UNAME_RELEASE}
-        exit 0 ;;
+	exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-	exit 0 ;;
+	echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit 0 ;;
+	echo m68k-milan-mint${UNAME_RELEASE}
+	exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit 0 ;;
+	echo m68k-hades-mint${UNAME_RELEASE}
+	exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit 0 ;;
+	echo m68k-unknown-mint${UNAME_RELEASE}
+	exit ;;
     m68k:machten:*:*)
 	echo m68k-apple-machten${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     powerpc:machten:*:*)
 	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     RISC*:Mach:*:*)
 	echo mips-dec-mach_bsd4.3
-	exit 0 ;;
+	exit ;;
     RISC*:ULTRIX:*:*)
 	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     VAX*:ULTRIX*:*:*)
 	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     2020:CLIX:*:* | 2430:CLIX:*:*)
 	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
@@ -467,35 +494,36 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	  exit (-1);
 	}
 EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c \
-	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
-	  && exit 0
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
 	echo mips-mips-riscos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     Motorola:PowerMAX_OS:*:*)
 	echo powerpc-motorola-powermax
-	exit 0 ;;
+	exit ;;
     Motorola:*:4.3:PL8-*)
 	echo powerpc-harris-powermax
-	exit 0 ;;
+	exit ;;
     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
 	echo powerpc-harris-powermax
-	exit 0 ;;
+	exit ;;
     Night_Hawk:Power_UNIX:*:*)
 	echo powerpc-harris-powerunix
-	exit 0 ;;
+	exit ;;
     m88k:CX/UX:7*:*)
 	echo m88k-harris-cxux7
-	exit 0 ;;
+	exit ;;
     m88k:*:4*:R4*)
 	echo m88k-motorola-sysv4
-	exit 0 ;;
+	exit ;;
     m88k:*:3*:R3*)
 	echo m88k-motorola-sysv3
-	exit 0 ;;
+	exit ;;
     AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	# DG/UX returns AViiON for all architectures
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
 	then
 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -508,29 +536,29 @@ EOF
 	else
 	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
- 	exit 0 ;;
+	exit ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
-	exit 0 ;;
+	exit ;;
     M88*:*:R3*:*)
 	# Delta 88k system running SVR3
 	echo m88k-motorola-sysv3
-	exit 0 ;;
+	exit ;;
     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
 	echo m88k-tektronix-sysv3
-	exit 0 ;;
+	exit ;;
     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
 	echo m68k-tektronix-bsd
-	exit 0 ;;
+	exit ;;
     *:IRIX*:*:*)
 	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit 0 ;;
+	exit ;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
-	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
     i*86:AIX:*:*)
 	echo i386-ibm-aix
-	exit 0 ;;
+	exit ;;
     ia64:AIX:*:*)
 	if [ -x /usr/bin/oslevel ] ; then
 		IBM_REV=`/usr/bin/oslevel`
@@ -538,7 +566,7 @@ EOF
 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
 	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-	exit 0 ;;
+	exit ;;
     *:AIX:2:3)
 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
 		eval $set_cc_for_build
@@ -553,49 +581,54 @@ EOF
 			exit(0);
 			}
 EOF
-		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
-		echo rs6000-ibm-aix3.2.5
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
 	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
 		echo rs6000-ibm-aix3.2.4
 	else
 		echo rs6000-ibm-aix3.2
 	fi
-	exit 0 ;;
-    *:AIX:*:[45])
+	exit ;;
+    *:AIX:*:[4567])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
 	else
 		IBM_ARCH=powerpc
 	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
+	if [ -x /usr/bin/lslpp ] ; then
+		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
 	else
 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
 	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit 0 ;;
+	exit ;;
     *:AIX:*:*)
 	echo rs6000-ibm-aix
-	exit 0 ;;
+	exit ;;
     ibmrt:4.4BSD:*|romp-ibm:BSD:*)
 	echo romp-ibm-bsd4.4
-	exit 0 ;;
+	exit ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
 	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit 0 ;;                           # report: romp-ibm BSD 4.3
+	exit ;;                             # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
 	echo rs6000-bull-bosx
-	exit 0 ;;
+	exit ;;
     DPX/2?00:B.O.S.:*:*)
 	echo m68k-bull-sysv3
-	exit 0 ;;
+	exit ;;
     9000/[34]??:4.3bsd:1.*:*)
 	echo m68k-hp-bsd
-	exit 0 ;;
+	exit ;;
     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
 	echo m68k-hp-bsd4.4
-	exit 0 ;;
+	exit ;;
     9000/[34678]??:HP-UX:*:*)
 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 	case "${UNAME_MACHINE}" in
@@ -604,74 +637,84 @@ EOF
 	    9000/[678][0-9][0-9])
 		if [ -x /usr/bin/getconf ]; then
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
+		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+		    case "${sc_cpu_version}" in
+		      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
+		      532)                      # CPU_PA_RISC2_0
+			case "${sc_kernel_bits}" in
+			  32) HP_ARCH=hppa2.0n ;;
+			  64) HP_ARCH=hppa2.0w ;;
+			  '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
+			esac ;;
+		    esac
 		fi
 		if [ "${HP_ARCH}" = "" ]; then
 		    eval $set_cc_for_build
-		    sed 's/^              //' << EOF >$dummy.c
+		    sed 's/^		//' << EOF >$dummy.c
 
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
+		#define _HPUX_SOURCE
+		#include <stdlib.h>
+		#include <unistd.h>
 
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
+		int main ()
+		{
+		#if defined(_SC_KERNEL_BITS)
+		    long bits = sysconf(_SC_KERNEL_BITS);
+		#endif
+		    long cpu  = sysconf (_SC_CPU_VERSION);
 
-                  switch (cpu)
-              	{
-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-              	case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-              	    switch (bits)
-              		{
-              		case 64: puts ("hppa2.0w"); break;
-              		case 32: puts ("hppa2.0n"); break;
-              		default: puts ("hppa2.0"); break;
-              		} break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-              	    puts ("hppa2.0"); break;
-              #endif
-              	default: puts ("hppa1.0"); break;
-              	}
-                  exit (0);
-              }
+		    switch (cpu)
+			{
+			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+			case CPU_PA_RISC2_0:
+		#if defined(_SC_KERNEL_BITS)
+			    switch (bits)
+				{
+				case 64: puts ("hppa2.0w"); break;
+				case 32: puts ("hppa2.0n"); break;
+				default: puts ("hppa2.0"); break;
+				} break;
+		#else  /* !defined(_SC_KERNEL_BITS) */
+			    puts ("hppa2.0"); break;
+		#endif
+			default: puts ("hppa1.0"); break;
+			}
+		    exit (0);
+		}
 EOF
-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
 		fi ;;
 	esac
-	if [ ${HP_ARCH} = "hppa2.0w" ]
+	if [ ${HP_ARCH} = hppa2.0w ]
 	then
-	    # avoid double evaluation of $set_cc_for_build
-	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+	    eval $set_cc_for_build
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep -q __LP64__
 	    then
-		HP_ARCH="hppa2.0w"
+		HP_ARCH=hppa2.0w
 	    else
-		HP_ARCH="hppa64"
+		HP_ARCH=hppa64
 	    fi
 	fi
 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit 0 ;;
+	exit ;;
     ia64:HP-UX:*:*)
 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 	echo ia64-hp-hpux${HPUX_REV}
-	exit 0 ;;
+	exit ;;
     3050*:HI-UX:*:*)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
@@ -699,340 +742,351 @@ EOF
 	  exit (0);
 	}
 EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
 	echo unknown-hitachi-hiuxwe2
-	exit 0 ;;
+	exit ;;
     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
 	echo hppa1.1-hp-bsd
-	exit 0 ;;
+	exit ;;
     9000/8??:4.3bsd:*:*)
 	echo hppa1.0-hp-bsd
-	exit 0 ;;
+	exit ;;
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
 	echo hppa1.0-hp-mpeix
-	exit 0 ;;
+	exit ;;
     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
 	echo hppa1.1-hp-osf
-	exit 0 ;;
+	exit ;;
     hp8??:OSF1:*:*)
 	echo hppa1.0-hp-osf
-	exit 0 ;;
+	exit ;;
     i*86:OSF1:*:*)
 	if [ -x /usr/sbin/sysversion ] ; then
 	    echo ${UNAME_MACHINE}-unknown-osf1mk
 	else
 	    echo ${UNAME_MACHINE}-unknown-osf1
 	fi
-	exit 0 ;;
+	exit ;;
     parisc*:Lites*:*:*)
 	echo hppa1.1-hp-lites
-	exit 0 ;;
+	exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-        exit 0 ;;
+	exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-        exit 0 ;;
+	exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-        exit 0 ;;
+	exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-        exit 0 ;;
+	exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-        exit 0 ;;
+	exit ;;
     CRAY*Y-MP:*:*:*)
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     CRAY*[A-Z]90:*:*:*)
 	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
 	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
 	      -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     CRAY*TS:*:*:*)
 	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     CRAY*T3E:*:*:*)
 	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     CRAY*SV1:*:*:*)
 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     *:UNICOS/mp:*:*)
-	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit 0 ;;
+	FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
     5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit 0 ;;
+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     sparc*:BSD/OS:*:*)
 	echo sparc-unknown-bsdi${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:BSD/OS:*:*)
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:FreeBSD:*:*)
-	# Determine whether the default compiler uses glibc.
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#if __GLIBC__ >= 2
-	LIBC=gnu
-	#else
-	LIBC=
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
-	# FreeBSD's kernel, but not the complete OS.
-	case ${LIBC} in gnu) kernel_only='k' ;; esac
-	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
-	exit 0 ;;
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	case ${UNAME_PROCESSOR} in
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
-	exit 0 ;;
-    i*:MINGW*:*)
+	exit ;;
+    *:MINGW64*:*)
+	echo ${UNAME_MACHINE}-pc-mingw64
+	exit ;;
+    *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
-	exit 0 ;;
+	exit ;;
+    *:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	exit ;;
+    i*:windows32*:*)
+	# uname -m includes "-pc" on this system.
+	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
-	exit 0 ;;
-    x86:Interix*:[34]*)
-	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
-	exit 0 ;;
+	exit ;;
+    *:Interix*:*)
+	case ${UNAME_MACHINE} in
+	    x86)
+		echo i586-pc-interix${UNAME_RELEASE}
+		exit ;;
+	    authenticamd | genuineintel | EM64T)
+		echo x86_64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	    IA64)
+		echo ia64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	esac ;;
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
 	echo i${UNAME_MACHINE}-pc-mks
-	exit 0 ;;
+	exit ;;
+    8664:Windows_NT:*)
+	echo x86_64-pc-mks
+	exit ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
 	# UNAME_MACHINE based on the output of uname instead of i386?
 	echo i586-pc-interix
-	exit 0 ;;
+	exit ;;
     i*:UWIN*:*)
 	echo ${UNAME_MACHINE}-pc-uwin
-	exit 0 ;;
+	exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+	echo x86_64-unknown-cygwin
+	exit ;;
     p*:CYGWIN*:*)
 	echo powerpcle-unknown-cygwin
-	exit 0 ;;
+	exit ;;
     prep*:SunOS:5.*:*)
 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
     *:GNU:*:*)
 	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit 0 ;;
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-	exit 0 ;;
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+	exit ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
-	exit 0 ;;
+	exit ;;
+    aarch64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+	esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
+	if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    arc:Linux:*:* | arceb:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     arm*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	eval $set_cc_for_build
+	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_EABI__
+	then
+	    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	else
+	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+		| grep -q __ARM_PCS_VFP
+	    then
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+	    else
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+	    fi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     cris:Linux:*:*)
-	echo cris-axis-linux-gnu
-	exit 0 ;;
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+	exit ;;
+    crisv32:Linux:*:*)
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+	exit ;;
+    e2k:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    frv:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    hexagon:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    i*86:Linux:*:*)
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+	exit ;;
     ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    k1om:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
-    mips:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
 	#undef CPU
-	#undef mips
-	#undef mipsel
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mipsel
+	CPU=${UNAME_MACHINE}el
 	#else
 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips
+	CPU=${UNAME_MACHINE}
 	#else
 	CPU=
 	#endif
 	#endif
 EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
 	;;
-    mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips64
-	#undef mips64el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mips64el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips64
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
-	;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
-	exit 0 ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
-	exit 0 ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-	exit 0 ;;
+    openrisc*:Linux:*:*)
+	echo or1k-unknown-linux-${LIBC}
+	exit ;;
+    or32:Linux:*:* | or1k*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    padre:Linux:*:*)
+	echo sparc-unknown-linux-${LIBC}
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-${LIBC}
+	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
-	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
-	  *)    echo hppa-unknown-linux-gnu ;;
+	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+	  *)    echo hppa-unknown-linux-${LIBC} ;;
 	esac
-	exit 0 ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-${LIBC}
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-${LIBC}
+	exit ;;
+    ppc64le:Linux:*:*)
+	echo powerpc64le-unknown-linux-${LIBC}
+	exit ;;
+    ppcle:Linux:*:*)
+	echo powerpcle-unknown-linux-${LIBC}
+	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux
-	exit 0 ;;
+	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+	exit ;;
     sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    tile*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+	exit ;;
     x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-gnu
-	exit 0 ;;
-    i*86:Linux:*:*)
-	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us. cd to the root directory to prevent
-	# problems with other programs or directories called `ld' in the path.
-	# Set LC_ALL=C to ensure ld outputs messages in English.
-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-			 | sed -ne '/supported targets:/!d
-				    s/[ 	][ 	]*/ /g
-				    s/.*supported targets: *//
-				    s/ .*//
-				    p'`
-        case "$ld_supported_targets" in
-	  elf32-i386)
-		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-		;;
-	  a.out-i386-linux)
-		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-		exit 0 ;;
-	  coff-i386)
-		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-		exit 0 ;;
-	  "")
-		# Either a pre-BFD a.out linker (linux-gnuoldld) or
-		# one that does not give us useful --help.
-		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-		exit 0 ;;
-	esac
-	# Determine whether the default compiler is a.out or elf
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#ifdef __ELF__
-	# ifdef __GLIBC__
-	#  if __GLIBC__ >= 2
-	LIBC=gnu
-	#  else
-	LIBC=gnulibc1
-	#  endif
-	# else
-	LIBC=gnulibc1
-	# endif
-	#else
-	#ifdef __INTEL_COMPILER
-	LIBC=gnu
-	#else
-	LIBC=gnuaout
-	#endif
-	#endif
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
-	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
-	;;
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+	exit ;;
+    xtensa*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
 	# earlier versions are messed up and put the nodename in both
 	# sysname and nodename.
 	echo i386-sequent-sysv4
-	exit 0 ;;
+	exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
+	# Unixware is an offshoot of SVR4, but it has its own version
+	# number series starting with 2...
+	# I am not positive that other SVR4 systems won't match this,
 	# I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
+	# Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit 0 ;;
+	exit ;;
     i*86:OS/2:*:*)
 	# If we were able to find `uname', then EMX Unix compatibility
 	# is probably installed.
 	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit 0 ;;
+	exit ;;
     i*86:XTS-300:*:STOP)
 	echo ${UNAME_MACHINE}-unknown-stop
-	exit 0 ;;
+	exit ;;
     i*86:atheos:*:*)
 	echo ${UNAME_MACHINE}-unknown-atheos
-	exit 0 ;;
-	i*86:syllable:*:*)
+	exit ;;
+    i*86:syllable:*:*)
 	echo ${UNAME_MACHINE}-pc-syllable
-	exit 0 ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
 	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     i*86:*DOS:*:*)
 	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit 0 ;;
+	exit ;;
     i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
 	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
@@ -1040,15 +1094,16 @@ EOF
 	else
 		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
 	fi
-	exit 0 ;;
-    i*86:*:5:[78]*)
+	exit ;;
+    i*86:*:5:[678]*)
+	# UnixWare 7.x, OpenUNIX and OpenServer 6.
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
 	esac
 	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit 0 ;;
+	exit ;;
     i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
 		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
@@ -1066,73 +1121,86 @@ EOF
 	else
 		echo ${UNAME_MACHINE}-pc-sysv32
 	fi
-	exit 0 ;;
+	exit ;;
     pc:*:*:*)
 	# Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i386.
-	echo i386-pc-msdosdjgpp
-        exit 0 ;;
+	# uname -m prints for DJGPP always 'pc', but it prints nothing about
+	# the processor, so we play safe by assuming i586.
+	# Note: whatever this is, it MUST be the same as what config.sub
+	# prints for the "djgpp" host, or else GDB configure will decide that
+	# this is a cross-build.
+	echo i586-pc-msdosdjgpp
+	exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
-	exit 0 ;;
+	exit ;;
     paragon:*:*:*)
 	echo i860-intel-osf1
-	exit 0 ;;
+	exit ;;
     i860:*:4.*:*) # i860-SVR4
 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
 	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
 	else # Add other i860-SVR4 vendors below as they are discovered.
 	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
 	fi
-	exit 0 ;;
+	exit ;;
     mini*:CTIX:SYS*5:*)
 	# "miniframe"
 	echo m68010-convergent-sysv
-	exit 0 ;;
+	exit ;;
     mc68k:UNIX:SYSTEM5:3.51m)
 	echo m68k-convergent-sysv
-	exit 0 ;;
+	exit ;;
     M680?0:D-NIX:5.3:*)
 	echo m68k-diab-dnix
-	exit 0 ;;
-    M68*:*:R3V[567]*:*)
-	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
+	exit ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
 	OS_REL=''
 	test -r /etc/.relid \
 	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && echo i486-ncr-sysv4 && exit 0 ;;
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+	OS_REL='.3'
+	test -r /etc/.relid \
+	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
 	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     mc68030:UNIX_System_V:4.*:*)
 	echo m68k-atari-sysv4
-	exit 0 ;;
+	exit ;;
     TSUNAMI:LynxOS:2.*:*)
 	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     rs6000:LynxOS:2.*:*)
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     SM[BE]S:UNIX_SV:*:*)
 	echo mips-dde-sysv${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     RM*:ReliantUNIX-*:*:*)
 	echo mips-sni-sysv4
-	exit 0 ;;
+	exit ;;
     RM*:SINIX-*:*:*)
 	echo mips-sni-sysv4
-	exit 0 ;;
+	exit ;;
     *:SINIX-*:*:*)
 	if uname -p 2>/dev/null >/dev/null ; then
 		UNAME_MACHINE=`(uname -p) 2>/dev/null`
@@ -1140,278 +1208,203 @@ EOF
 	else
 		echo ns32k-sni-sysv
 	fi
-	exit 0 ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit 0 ;;
+	exit ;;
+    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+			# says <Richard.M.Bartel@ccMail.Census.GOV>
+	echo i586-unisys-sysv4
+	exit ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes@openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
 	echo hppa1.1-stratus-sysv4
-	exit 0 ;;
+	exit ;;
     *:*:*:FTX*)
 	# From seanf@swdc.stratus.com.
 	echo i860-stratus-sysv4
-	exit 0 ;;
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
     *:VOS:*:*)
 	# From Paul.Green@stratus.com.
 	echo hppa1.1-stratus-vos
-	exit 0 ;;
+	exit ;;
     mc68*:A/UX:*:*)
 	echo m68k-apple-aux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     news*:NEWS-OS:6*:*)
 	echo mips-sony-newsos6
-	exit 0 ;;
+	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
-	        echo mips-nec-sysv${UNAME_RELEASE}
+		echo mips-nec-sysv${UNAME_RELEASE}
 	else
-	        echo mips-unknown-sysv${UNAME_RELEASE}
+		echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-        exit 0 ;;
+	exit ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
-	exit 0 ;;
+	exit ;;
     BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
 	echo powerpc-apple-beos
-	exit 0 ;;
+	exit ;;
     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
 	echo i586-pc-beos
-	exit 0 ;;
+	exit ;;
+    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
+	echo i586-pc-haiku
+	exit ;;
+    x86_64:Haiku:*:*)
+	echo x86_64-unknown-haiku
+	exit ;;
     SX-4:SUPER-UX:*:*)
 	echo sx4-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     SX-5:SUPER-UX:*:*)
 	echo sx5-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     SX-6:SUPER-UX:*:*)
 	echo sx6-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
+    SX-7:SUPER-UX:*:*)
+	echo sx7-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8:SUPER-UX:*:*)
+	echo sx8-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8R:SUPER-UX:*:*)
+	echo sx8r-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-ACE:SUPER-UX:*:*)
+	echo sxace-nec-superux${UNAME_RELEASE}
+	exit ;;
     Power*:Rhapsody:*:*)
 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:Rhapsody:*:*)
 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:Darwin:*:*)
-	case `uname -p` in
-	    *86) UNAME_PROCESSOR=i686 ;;
-	    powerpc) UNAME_PROCESSOR=powerpc ;;
-	esac
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	eval $set_cc_for_build
+	if test "$UNAME_PROCESSOR" = unknown ; then
+	    UNAME_PROCESSOR=powerpc
+	fi
+	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		    (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		    grep IS_64BIT_ARCH >/dev/null
+		then
+		    case $UNAME_PROCESSOR in
+			i386) UNAME_PROCESSOR=x86_64 ;;
+			powerpc) UNAME_PROCESSOR=powerpc64 ;;
+		    esac
+		fi
+	    fi
+	elif test "$UNAME_PROCESSOR" = i386 ; then
+	    # Avoid executing cc on OS X 10.9, as it ships with a stub
+	    # that puts up a graphical alert prompting to install
+	    # developer tools.  Any system running Mac OS X 10.7 or
+	    # later (Darwin 11 and later) is required to have a 64-bit
+	    # processor. This is not true of the ARM version of Darwin
+	    # that Apple uses in portable devices.
+	    UNAME_PROCESSOR=x86_64
+	fi
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
 	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = "x86"; then
+	if test "$UNAME_PROCESSOR" = x86; then
 		UNAME_PROCESSOR=i386
 		UNAME_MACHINE=pc
 	fi
 	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:QNX:*:4*)
 	echo i386-pc-qnx
-	exit 0 ;;
+	exit ;;
+    NEO-?:NONSTOP_KERNEL:*:*)
+	echo neo-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSE-*:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
 	echo nsr-tandem-nsk${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:NonStop-UX:*:*)
 	echo mips-compaq-nonstopux
-	exit 0 ;;
+	exit ;;
     BS2000:POSIX*:*:*)
 	echo bs2000-siemens-sysv
-	exit 0 ;;
+	exit ;;
     DS/*:UNIX_System_V:*:*)
 	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:Plan9:*:*)
 	# "uname -m" is not consistent, so use $cputype instead. 386
 	# is converted to i386 for consistency with other x86
 	# operating systems.
-	if test "$cputype" = "386"; then
+	if test "$cputype" = 386; then
 	    UNAME_MACHINE=i386
 	else
 	    UNAME_MACHINE="$cputype"
 	fi
 	echo ${UNAME_MACHINE}-unknown-plan9
-	exit 0 ;;
+	exit ;;
     *:TOPS-10:*:*)
 	echo pdp10-unknown-tops10
-	exit 0 ;;
+	exit ;;
     *:TENEX:*:*)
 	echo pdp10-unknown-tenex
-	exit 0 ;;
+	exit ;;
     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
 	echo pdp10-dec-tops20
-	exit 0 ;;
+	exit ;;
     XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
 	echo pdp10-xkl-tops20
-	exit 0 ;;
+	exit ;;
     *:TOPS-20:*:*)
 	echo pdp10-unknown-tops20
-	exit 0 ;;
+	exit ;;
     *:ITS:*:*)
 	echo pdp10-unknown-its
-	exit 0 ;;
+	exit ;;
     SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
-	exit 0 ;;
+	echo mips-sei-seiux${UNAME_RELEASE}
+	exit ;;
     *:DragonFly:*:*)
 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit 0 ;;
+	exit ;;
+    *:*VMS:*:*)
+	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
+	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
+    i*86:AROS:*:*)
+	echo ${UNAME_MACHINE}-pc-aros
+	exit ;;
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-unknown-esx
+	exit ;;
+    amd64:Isilon\ OneFS:*:*)
+	echo x86_64-unknown-onefs
+	exit ;;
 esac
 
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-          "4"
-#else
-	  ""
-#endif
-         ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
-  int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  if (version < 4)
-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-  else
-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-  exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
-  printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
-  printf ("ns32k-encore-mach\n"); exit (0);
-#else
-  printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
-  printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
-  printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
-  printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
-    struct utsname un;
-
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-	printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-	printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-#  include <sys/param.h>
-#  if defined (BSD)
-#   if BSD == 43
-      printf ("vax-dec-bsd4.3\n"); exit (0);
-#   else
-#    if BSD == 199006
-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#    else
-      printf ("vax-dec-bsd\n"); exit (0);
-#    endif
-#   endif
-#  else
-    printf ("vax-dec-bsd\n"); exit (0);
-#  endif
-# else
-    printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
-  printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-  exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-	echo c1-convex-bsd
-	exit 0 ;;
-    c2*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit 0 ;;
-    c34*)
-	echo c34-convex-bsd
-	exit 0 ;;
-    c38*)
-	echo c38-convex-bsd
-	exit 0 ;;
-    c4*)
-	echo c4-convex-bsd
-	exit 0 ;;
-    esac
-fi
-
 cat >&2 <<EOF
 $0: unable to guess system type
 
@@ -1419,7 +1412,9 @@ This script, last modified $timestamp, has failed to recognize
 the operating system you are using. It is advised that you
 download the most up to date version of the config scripts from
 
-    ftp://ftp.gnu.org/pub/gnu/config/
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 If the version you run ($0) is already up to date, please
 send the following data and any information you think might be
diff --git a/config.h.in b/config.h.in
index 2f41eed..3b575e4 100644
--- a/config.h.in
+++ b/config.h.in
@@ -25,6 +25,7 @@
 
 #define PASSWD_FILE	RC_DIR "/passwd"
 #define PRE_FORM_FILE	RC_DIR "/pre_form"
+#define SITECONF_FILE	RC_DIR "/siteconf"
 #define USER_MAILCAP	RC_DIR "/mailcap"
 #define SYS_MAILCAP	CONF_DIR "/mailcap"
 #define USER_MIMETYPES	"~/.mime.types"
@@ -84,7 +85,7 @@
 #undef INET6
 #undef HAVE_SOCKLEN_T
 #undef HAVE_OLD_SS_FAMILY
-#define USE_EGD
+#undef USE_EGD
 #define ENABLE_REMOVE_TRAILINGSPACES
 #undef MENU_THIN_FRAME
 #undef USE_RAW_SCROLL
@@ -209,6 +210,10 @@ typedef RETSIGTYPE MySignalHandler;
 #define SUPPORT_WIN9X_CONSOLE_MBCS 1
 #endif
 
+#if defined(__CYGWIN__) && defined(__x86_64__)
+#define DONT_CALL_GC_AFTER_FORK
+#endif
+
 #if defined(__DJGPP__)
 #define DEFAULT_TERM	"dosansi"
 #else
diff --git a/config.sub b/config.sub
index ba33103..8d39c4b 100755
--- a/config.sub
+++ b/config.sub
@@ -1,42 +1,40 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+#   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2004-03-12'
+timestamp='2016-03-30'
 
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+
+# Please send patches to <config-patches@gnu.org>.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 # If it is invalid, we print an error message on stderr and exit with code 1.
 # Otherwise, we print the canonical config type on stdout and succeed.
 
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
 # that are meaningful with *any* GNU software.
@@ -55,8 +53,7 @@ timestamp='2004-03-12'
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 Canonicalize a configuration name.
 
@@ -70,8 +67,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
+Copyright 1992-2016 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -83,11 +79,11 @@ Try \`$me --help' for more information."
 while test $# -gt 0 ; do
   case $1 in
     --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit 0 ;;
+       echo "$timestamp" ; exit ;;
     --version | -v )
-       echo "$version" ; exit 0 ;;
+       echo "$version" ; exit ;;
     --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
+       echo "$usage"; exit ;;
     -- )     # Stop option processing
        shift; break ;;
     - )	# Use stdin as input.
@@ -99,7 +95,7 @@ while test $# -gt 0 ; do
     *local*)
        # First pass through any local machine types.
        echo $1
-       exit 0;;
+       exit ;;
 
     * )
        break ;;
@@ -118,11 +114,18 @@ esac
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
-  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -145,10 +148,13 @@ case $os in
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis)
+	-apple | -axis | -knuth | -cray | -microblaze*)
 		os=
 		basic_machine=$1
 		;;
+	-bluegene*)
+		os=-cnk
+		;;
 	-sim | -cisco | -oki | -wec | -winbond)
 		os=
 		basic_machine=$1
@@ -163,13 +169,17 @@ case $os in
 		os=-chorusos
 		basic_machine=$1
 		;;
- 	-chorusrdb)
- 		os=-chorusrdb
+	-chorusrdb)
+		os=-chorusrdb
 		basic_machine=$1
- 		;;
+		;;
 	-hiux*)
 		os=-hiuxwe2
 		;;
+	-sco6)
+		os=-sco5v6
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
 	-sco5)
 		os=-sco3.2v5
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -186,6 +196,10 @@ case $os in
 		# Don't forget version if it is 3.2v4 or newer.
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
 	-sco*)
 		os=-sco3.2v2
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -203,6 +217,12 @@ case $os in
 	-isc*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-lynx*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
 	-lynx*)
 		os=-lynxos
 		;;
@@ -227,57 +247,114 @@ case $basic_machine in
 	# Some are omitted here because they have special meanings below.
 	1750a | 580 \
 	| a29k \
+	| aarch64 | aarch64_be \
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
-	| c4x | clipper \
+	| arc | arceb \
+	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+	| avr | avr32 \
+	| ba \
+	| be32 | be64 \
+	| bfin \
+	| c4x | c8051 | clipper \
 	| d10v | d30v | dlx | dsp16xx \
-	| fr30 | frv \
+	| e2k | epiphany \
+	| fido | fr30 | frv | ft32 \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| hexagon \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
-	| m32r | m32rle | m68000 | m68k | m88k | mcore \
+	| k1om \
+	| le32 | le64 \
+	| lm32 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
 	| mips16 \
 	| mips64 | mips64el \
-	| mips64vr | mips64vrel \
+	| mips64octeon | mips64octeonel \
 	| mips64orion | mips64orionel \
+	| mips64r5900 | mips64r5900el \
+	| mips64vr | mips64vrel \
 	| mips64vr4100 | mips64vr4100el \
 	| mips64vr4300 | mips64vr4300el \
 	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
 	| mipsisa32 | mipsisa32el \
 	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa32r6 | mipsisa32r6el \
 	| mipsisa64 | mipsisa64el \
 	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64r6 | mipsisa64r6el \
 	| mipsisa64sb1 | mipsisa64sb1el \
 	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipsr5900 | mipsr5900el \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
+	| moxie \
+	| mt \
 	| msp430 \
+	| nds32 | nds32le | nds32be \
+	| nios | nios2 | nios2eb | nios2el \
 	| ns16k | ns32k \
-	| openrisc | or32 \
+	| open8 | or1k | or1knd | or32 \
 	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| pyramid \
-	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| riscv32 | riscv64 \
+	| rl78 | rx \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
-	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
-	| strongarm \
-	| tahoe | thumb | tic4x | tic80 | tron \
-	| v850 | v850e \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu \
+	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+	| ubicom32 \
+	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+	| visium \
 	| we32k \
-	| x86 | xscale | xstormy16 | xtensa \
-	| z8k)
+	| x86 | xc16x | xstormy16 | xtensa \
+	| z8k | z80)
 		basic_machine=$basic_machine-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12)
-		# Motorola 68HC11/12.
+	c54x)
+		basic_machine=tic54x-unknown
+		;;
+	c55x)
+		basic_machine=tic55x-unknown
+		;;
+	c6x)
+		basic_machine=tic6x-unknown
+		;;
+	leon|leon[3-9])
+		basic_machine=sparc-$basic_machine
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
 	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
 		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
+
+	strongarm | thumb | xscale)
+		basic_machine=arm-unknown
+		;;
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	xscaleeb)
+		basic_machine=armeb-unknown
+		;;
+
+	xscaleel)
+		basic_machine=armel-unknown
+		;;
 
 	# We use `pc' rather than `unknown'
 	# because (1) that's what they normally are, and
@@ -293,59 +370,89 @@ case $basic_machine in
 	# Recognize the basic CPU types with company name.
 	580-* \
 	| a29k-* \
+	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* \
-	| bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-	| clipper-* | cydra-* \
+	| avr-* | avr32-* \
+	| ba-* \
+	| be32-* | be64-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* \
+	| c8051-* | clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
-	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| e2k-* | elxsi-* \
+	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| hexagon-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
-	| m32r-* | m32rle-* \
+	| k1om-* \
+	| le32-* | le64-* \
+	| lm32-* \
+	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | mcore-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+	| microblaze-* | microblazeel-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
-	| mips64vr-* | mips64vrel-* \
+	| mips64octeon-* | mips64octeonel-* \
 	| mips64orion-* | mips64orionel-* \
+	| mips64r5900-* | mips64r5900el-* \
+	| mips64vr-* | mips64vrel-* \
 	| mips64vr4100-* | mips64vr4100el-* \
 	| mips64vr4300-* | mips64vr4300el-* \
 	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
 	| mipsisa32-* | mipsisa32el-* \
 	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa32r6-* | mipsisa32r6el-* \
 	| mipsisa64-* | mipsisa64el-* \
 	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64r6-* | mipsisa64r6el-* \
 	| mipsisa64sb1-* | mipsisa64sb1el-* \
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipsr5900-* | mipsr5900el-* \
 	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| mt-* \
 	| msp430-* \
-	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+	| nds32-* | nds32le-* | nds32be-* \
+	| nios-* | nios2-* | nios2eb-* | nios2el-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| open8-* \
+	| or1k*-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
 	| pyramid-* \
-	| romp-* | rs6000-* \
-	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| riscv32-* | riscv64-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-	| tahoe-* | thumb-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
+	| tahoe-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile*-* \
 	| tron-* \
-	| v850-* | v850e-* | vax-* \
+	| ubicom32-* \
+	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+	| vax-* \
+	| visium-* \
 	| we32k-* \
-	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
-	| xtensa-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* \
+	| xstormy16-* | xtensa*-* \
 	| ymp-* \
-	| z8k-*)
+	| z8k-* | z80-*)
+		;;
+	# Recognize the basic CPU types without company name, with glob match.
+	xtensa*)
+		basic_machine=$basic_machine-unknown
 		;;
 	# Recognize the various machine names and aliases which stand
 	# for a CPU type and a company and sometimes even an OS.
@@ -363,7 +470,7 @@ case $basic_machine in
 		basic_machine=a29k-amd
 		os=-udi
 		;;
-    	abacus)
+	abacus)
 		basic_machine=abacus-unknown
 		;;
 	adobe68k)
@@ -409,6 +516,13 @@ case $basic_machine in
 		basic_machine=m68k-apollo
 		os=-bsd
 		;;
+	aros)
+		basic_machine=i386-pc
+		os=-aros
+		;;
+	asmjs)
+		basic_machine=asmjs-unknown
+		;;
 	aux)
 		basic_machine=m68k-apple
 		os=-aux
@@ -417,10 +531,35 @@ case $basic_machine in
 		basic_machine=ns32k-sequent
 		os=-dynix
 		;;
+	blackfin)
+		basic_machine=bfin-unknown
+		os=-linux
+		;;
+	blackfin-*)
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	bluegene*)
+		basic_machine=powerpc-ibm
+		os=-cnk
+		;;
+	c54x-*)
+		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c55x-*)
+		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c6x-*)
+		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	c90)
 		basic_machine=c90-cray
 		os=-unicos
 		;;
+	cegcc)
+		basic_machine=arm-unknown
+		os=-cegcc
+		;;
 	convex-c1)
 		basic_machine=c1-convex
 		os=-bsd
@@ -445,13 +584,20 @@ case $basic_machine in
 		basic_machine=j90-cray
 		os=-unicos
 		;;
-	cr16c)
-		basic_machine=cr16c-unknown
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16 | cr16-*)
+		basic_machine=cr16-unknown
 		os=-elf
 		;;
 	crds | unos)
 		basic_machine=m68k-crds
 		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
 	cris | cris-* | etrax*)
 		basic_machine=cris-axis
 		;;
@@ -481,6 +627,14 @@ case $basic_machine in
 		basic_machine=m88k-motorola
 		os=-sysv3
 		;;
+	dicos)
+		basic_machine=i686-pc
+		os=-dicos
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
 	dpx20 | dpx20-*)
 		basic_machine=rs6000-bull
 		os=-bosx
@@ -592,7 +746,6 @@ case $basic_machine in
 	i370-ibm* | ibm*)
 		basic_machine=i370-ibm
 		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
 	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
@@ -631,6 +784,17 @@ case $basic_machine in
 		basic_machine=m68k-isi
 		os=-sysv
 		;;
+	leon-*|leon[3-9]-*)
+		basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+		;;
+	m68knommu)
+		basic_machine=m68k-unknown
+		os=-linux
+		;;
+	m68knommu-*)
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
 	m88k-omron*)
 		basic_machine=m88k-omron
 		;;
@@ -642,10 +806,21 @@ case $basic_machine in
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
+	microblaze*)
+		basic_machine=microblaze-xilinx
+		;;
+	mingw64)
+		basic_machine=x86_64-pc
+		os=-mingw64
+		;;
 	mingw32)
-		basic_machine=i386-pc
+		basic_machine=i686-pc
 		os=-mingw32
 		;;
+	mingw32ce)
+		basic_machine=arm-unknown
+		os=-mingw32ce
+		;;
 	miniframe)
 		basic_machine=m68000-convergent
 		;;
@@ -659,10 +834,6 @@ case $basic_machine in
 	mips3*)
 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
 		;;
-	mmix*)
-		basic_machine=mmix-knuth
-		os=-mmixware
-		;;
 	monitor)
 		basic_machine=m68k-rom68k
 		os=-coff
@@ -671,14 +842,29 @@ case $basic_machine in
 		basic_machine=powerpc-unknown
 		os=-morphos
 		;;
+	moxiebox)
+		basic_machine=moxie-unknown
+		os=-moxiebox
+		;;
 	msdos)
 		basic_machine=i386-pc
 		os=-msdos
 		;;
+	ms1-*)
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		;;
+	msys)
+		basic_machine=i686-pc
+		os=-msys
+		;;
 	mvs)
 		basic_machine=i370-ibm
 		os=-mvs
 		;;
+	nacl)
+		basic_machine=le32-unknown
+		os=-nacl
+		;;
 	ncr3000)
 		basic_machine=i486-ncr
 		os=-sysv4
@@ -743,9 +929,11 @@ case $basic_machine in
 	np1)
 		basic_machine=np1-gould
 		;;
-	nv1)
-		basic_machine=nv1-cray
-		os=-unicosmp
+	neo-tandem)
+		basic_machine=neo-tandem
+		;;
+	nse-tandem)
+		basic_machine=nse-tandem
 		;;
 	nsr-tandem)
 		basic_machine=nsr-tandem
@@ -754,9 +942,8 @@ case $basic_machine in
 		basic_machine=hppa1.1-oki
 		os=-proelf
 		;;
-	or32 | or32-*)
+	openrisc | openrisc-*)
 		basic_machine=or32-unknown
-		os=-coff
 		;;
 	os400)
 		basic_machine=powerpc-ibm
@@ -778,6 +965,14 @@ case $basic_machine in
 		basic_machine=i860-intel
 		os=-osf
 		;;
+	parisc)
+		basic_machine=hppa-unknown
+		os=-linux
+		;;
+	parisc-*)
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
 	pbd)
 		basic_machine=sparc-tti
 		;;
@@ -787,6 +982,12 @@ case $basic_machine in
 	pc532 | pc532-*)
 		basic_machine=ns32k-pc532
 		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	pentium | p5 | k5 | k6 | nexgen | viac3)
 		basic_machine=i586-pc
 		;;
@@ -816,9 +1017,10 @@ case $basic_machine in
 		;;
 	power)	basic_machine=power-ibm
 		;;
-	ppc)	basic_machine=powerpc-unknown
+	ppc | ppcbe)	basic_machine=powerpc-unknown
 		;;
-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+	ppc-* | ppcbe-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	ppcle | powerpclittle | ppc-le | powerpc-little)
 		basic_machine=powerpcle-unknown
@@ -843,6 +1045,14 @@ case $basic_machine in
 		basic_machine=i586-unknown
 		os=-pw32
 		;;
+	rdos | rdos64)
+		basic_machine=x86_64-pc
+		os=-rdos
+		;;
+	rdos32)
+		basic_machine=i386-pc
+		os=-rdos
+		;;
 	rom68k)
 		basic_machine=m68k-rom68k
 		os=-coff
@@ -869,6 +1079,10 @@ case $basic_machine in
 	sb1el)
 		basic_machine=mipsisa64sb1el-unknown
 		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
 	sei)
 		basic_machine=mips-sei
 		os=-seiux
@@ -880,6 +1094,9 @@ case $basic_machine in
 		basic_machine=sh-hitachi
 		os=-hms
 		;;
+	sh5el)
+		basic_machine=sh5le-unknown
+		;;
 	sh64)
 		basic_machine=sh64-unknown
 		;;
@@ -901,6 +1118,9 @@ case $basic_machine in
 		basic_machine=i860-stratus
 		os=-sysv4
 		;;
+	strongarm-* | thumb-*)
+		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	sun2)
 		basic_machine=m68000-sun
 		;;
@@ -957,17 +1177,9 @@ case $basic_machine in
 		basic_machine=t90-cray
 		os=-unicos
 		;;
-	tic54x | c54x*)
-		basic_machine=tic54x-unknown
-		os=-coff
-		;;
-	tic55x | c55x*)
-		basic_machine=tic55x-unknown
-		os=-coff
-		;;
-	tic6x | c6x*)
-		basic_machine=tic6x-unknown
-		os=-coff
+	tile*)
+		basic_machine=$basic_machine-unknown
+		os=-linux-gnu
 		;;
 	tx39)
 		basic_machine=mipstx39-unknown
@@ -1029,9 +1241,16 @@ case $basic_machine in
 		basic_machine=hppa1.1-winbond
 		os=-proelf
 		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
 	xps | xps100)
 		basic_machine=xps100-honeywell
 		;;
+	xscale-* | xscalee[bl]-*)
+		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+		;;
 	ymp)
 		basic_machine=ymp-cray
 		os=-unicos
@@ -1040,6 +1259,10 @@ case $basic_machine in
 		basic_machine=z8k-unknown
 		os=-sim
 		;;
+	z80-*-coff)
+		basic_machine=z80-unknown
+		os=-sim
+		;;
 	none)
 		basic_machine=none-none
 		os=-none
@@ -1059,6 +1282,9 @@ case $basic_machine in
 	romp)
 		basic_machine=romp-ibm
 		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
 	rs6000)
 		basic_machine=rs6000-ibm
 		;;
@@ -1075,13 +1301,10 @@ case $basic_machine in
 	we32k)
 		basic_machine=we32k-att
 		;;
-	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
 		basic_machine=sh-unknown
 		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b)
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
 		basic_machine=sparc-sun
 		;;
 	cydra)
@@ -1125,9 +1348,12 @@ esac
 if [ x"$os" != x"" ]
 then
 case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
+	# First match some system type aliases
+	# that might get confused with valid system types.
 	# -solaris* is a basic system type, with this one exception.
+	-auroraux)
+		os=-auroraux
+		;;
 	-solaris1 | -solaris1.*)
 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
 		;;
@@ -1148,26 +1374,32 @@ case $os in
 	# Each alternative MUST END IN A *, to match a version number.
 	# -sysv* is not here because it comes later, after sysvr4.
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* | -plan9* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* \
+	      | -aos* | -aros* | -cloudabi* | -sortix* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -chorusos* | -chorusrdb* | -cegcc* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+	      | -onefs* | -tirtos*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1185,7 +1417,7 @@ case $os in
 		os=`echo $os | sed -e 's|nto|nto-qnx|'`
 		;;
 	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
 	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
 		;;
 	-mac*)
@@ -1206,7 +1438,7 @@ case $os in
 	-opened*)
 		os=-openedition
 		;;
-        -os400*)
+	-os400*)
 		os=-os400
 		;;
 	-wince*)
@@ -1255,7 +1487,7 @@ case $os in
 	-sinix*)
 		os=-sysv4
 		;;
-        -tpf*)
+	-tpf*)
 		os=-tpf
 		;;
 	-triton*)
@@ -1291,8 +1523,15 @@ case $os in
 	-aros*)
 		os=-aros
 		;;
-	-kaos*)
-		os=-kaos
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-dicos*)
+		os=-dicos
+		;;
+	-nacl*)
+		;;
+	-ios)
 		;;
 	-none)
 		;;
@@ -1316,6 +1555,12 @@ else
 # system, and we'll never get to this point.
 
 case $basic_machine in
+	score-*)
+		os=-elf
+		;;
+	spu-*)
+		os=-elf
+		;;
 	*-acorn)
 		os=-riscix1.2
 		;;
@@ -1325,9 +1570,24 @@ case $basic_machine in
 	arm*-semi)
 		os=-aout
 		;;
-    c4x-* | tic4x-*)
-        os=-coff
-        ;;
+	c4x-* | tic4x-*)
+		os=-coff
+		;;
+	c8051-*)
+		os=-elf
+		;;
+	hexagon-*)
+		os=-elf
+		;;
+	tic54x-*)
+		os=-coff
+		;;
+	tic55x-*)
+		os=-coff
+		;;
+	tic6x-*)
+		os=-coff
+		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
 		os=-tops20
@@ -1346,13 +1606,13 @@ case $basic_machine in
 		;;
 	m68000-sun)
 		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
 		;;
 	m68*-cisco)
 		os=-aout
 		;;
+	mep-*)
+		os=-elf
+		;;
 	mips*-cisco)
 		os=-elf
 		;;
@@ -1371,9 +1631,15 @@ case $basic_machine in
 	*-be)
 		os=-beos
 		;;
+	*-haiku)
+		os=-haiku
+		;;
 	*-ibm)
 		os=-aix
 		;;
+	*-knuth)
+		os=-mmixware
+		;;
 	*-wec)
 		os=-proelf
 		;;
@@ -1476,7 +1742,7 @@ case $basic_machine in
 			-sunos*)
 				vendor=sun
 				;;
-			-aix*)
+			-cnk*|-aix*)
 				vendor=ibm
 				;;
 			-beos*)
@@ -1539,7 +1805,7 @@ case $basic_machine in
 esac
 
 echo $basic_machine$os
-exit 0
+exit
 
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
diff --git a/configure b/configure
index 4c1bc06..9cb3074 100755
--- a/configure
+++ b/configure
@@ -1486,11 +1486,11 @@ Optional Packages:
   --with-migemo=MIGEMO_COMMAND	migemo command
   --with-editor=EDITOR		default editor (/usr/bin/vi)
   --with-mailer=MAILER		default mailer (/usr/bin/mail)
-  --with-browser=BROWSER	default browser (/usr/bin/mozilla)
+  --with-browser=BROWSER	default browser (/usr/bin/firefox)
   --with-ssl=PREFIX		support https protocol
   --with-termlib=LIBS		terminal library
 				LIBS is space separated list of:
-				  terminfo mytinfo termcap ncurses curses
+				  terminfo mytinfo termcap tinfo ncurses curses
   --with-gc=PREFIX	  	libgc PREFIX
 
 Some influential environment variables:
@@ -6755,7 +6755,7 @@ $as_echo "$enable_image" >&6; }
   if test x"$enable_image" = xyes; then
     enable_image=x11
     case "`uname -s`" in
-    Linux|linux|LINUX)
+    Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD)
 	if test -c /dev/fb0; then
 	  enable_image=x11,fb
         fi;;
@@ -6811,6 +6811,9 @@ $as_echo "$with_imagelib" >&6; }
      fi;;
    imlib2)
      with_imlib2="yes"
+     if test x"$PKG_CONFIG" = x; then
+       PKG_CONFIG=pkg-config
+     fi
      if test x"$IMLIB2_CONFIG" = x; then
        IMLIB2_CONFIG=imlib2-config
      fi;;
@@ -6823,8 +6826,6 @@ $as_echo "$with_imagelib" >&6; }
      with_gtk2="yes"
      if test x"$PKG_CONFIG" = x; then
        PKG_CONFIG=pkg-config
-     else
-       PKG_CONFIG=:
      fi;;
    esac
   done
@@ -6926,8 +6927,8 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed.  Install Imlib2 (version >=
 
      $as_echo "#define USE_GTK2 1" >>confdefs.h
 
-     IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
-     IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
+     IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
+     IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
    elif test x"$have_gdkpixbuf" = xyes; then
      $as_echo "#define USE_W3MIMG_X11 1" >>confdefs.h
 
@@ -6955,7 +6956,7 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed.  Install Imlib2 (version >=
      $as_echo "#define USE_IMLIB2 1" >>confdefs.h
 
      IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`"
-     IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`"
+     IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs imlib2`"
    else
      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with X11 support" >&5
 $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
@@ -6971,8 +6972,8 @@ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
 
      $as_echo "#define USE_GTK2 1" >>confdefs.h
 
-     IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`"
-     IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`"
+     IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0`"
+     IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0`"
    elif test x"$have_gdkpixbuf" = xyes; then
      $as_echo "#define USE_W3MIMG_FB 1" >>confdefs.h
 
@@ -6991,7 +6992,7 @@ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
 
      IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
      IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`"
-     IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`"
+     IMGFBLDFLAGS="`${PKG_CONFIG} --libs imlib2`"
    else
      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with FB support" >&5
 $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with FB support" >&2;}
@@ -7344,7 +7345,7 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
-w3m_browser="/usr/bin/mozilla"
+w3m_browser="/usr/bin/firefox"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking which external browser is used by default" >&5
 $as_echo_n "checking which external browser is used by default... " >&6; }
 
@@ -7977,7 +7978,7 @@ fi
 
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_termlib" >&5
 $as_echo "$with_termlib" >&6; }
- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses"
+ test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap tinfo ncurses curses"
  for lib in $with_termlib; do
    as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_tgetent" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -l$lib" >&5
@@ -8986,7 +8987,7 @@ extern char *sys_errlist[];
 int
 main ()
 {
-printf(sys_errlist[0]);
+printf("%s", sys_errlist[0]);
   ;
   return 0;
 }
@@ -9076,7 +9077,7 @@ RC_DIR="~/.$PACKAGE"
 $as_echo "#define RC_DIR \"\$RC_DIR\"" >>confdefs.h
 
 
-DOCDIRS="doc:en_English doc-jp:ja_Japanese"
+DOCDIRS="doc:en_English doc-jp:ja_Japanese doc-de:de_German"
 cat >>confdefs.h <<_ACEOF
 #define DOCDIRS "$DOCDIRS"
 _ACEOF
@@ -9084,7 +9085,8 @@ _ACEOF
 
 
  cvsver=`$AWK '\$1 ~ /Id:/ { print \$3}' $srcdir/ChangeLog`
- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
+ ymdver=`sed -e 's/ .*//;s/-//g;q' $srcdir/ChangeLog`
+ sed -e 's/define CURRENT_VERSION "\(.*\)YYYYMMDD/define CURRENT_VERSION "\1'$ymdver'/;s/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
  CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c`
 ac_config_files="$ac_config_files Makefile posubst po/Makefile.in scripts/Makefile scripts/dirlist.cgi scripts/w3mhelp.cgi scripts/w3mmail.cgi scripts/xface2xpm scripts/multipart/Makefile scripts/multipart/multipart.cgi scripts/w3mman/Makefile scripts/w3mman/w3mman scripts/w3mman/w3mman.1 scripts/w3mman/w3mman2html.cgi libwc/Makefile w3mimg/Makefile w3mimg/fb/Makefile w3mimg/x11/Makefile w3mimg/win/Makefile w3mhelp-w3m_en.html w3mhelp-w3m_ja.html w3mhelp-lynx_en.html w3mhelp-lynx_ja.html"
 
diff --git a/configure.ac b/configure.ac
index 7308fc6..3332251 100644
--- a/configure.ac
+++ b/configure.ac
@@ -172,7 +172,7 @@ AC_SUBST(RC_DIR)
 RC_DIR="~/.$PACKAGE"
 AC_DEFINE(RC_DIR, "$RC_DIR")
 AC_SUBST(DOCDIRS)
-DOCDIRS="doc:en_English doc-jp:ja_Japanese"
+DOCDIRS="doc:en_English doc-jp:ja_Japanese doc-de:de_German"
 AC_DEFINE_UNQUOTED(DOCDIRS, "$DOCDIRS")
 
 AC_W3M_VERSION
diff --git a/cookie.c b/cookie.c
index 8020f6d..705e277 100644
--- a/cookie.c
+++ b/cookie.c
@@ -22,10 +22,10 @@ static int is_saved = 1;
 
 #define contain_no_dots(p, ep) (total_dot_number((p),(ep),1)==0)
 
-static int
-total_dot_number(char *p, char *ep, int max_count)
+static unsigned int
+total_dot_number(char *p, char *ep, unsigned int max_count)
 {
-    int count = 0;
+    unsigned int count = 0;
     if (!ep)
 	ep = p + strlen(p);
 
@@ -105,6 +105,7 @@ make_portlist(Str port)
 	pl->next = first;
 	first = pl;
     }
+    Strfree(tmp);
     return first;
 }
 
@@ -247,16 +248,12 @@ find_cookie(ParsedURL *pu)
 		Strcat(tmp, Sprintf("; $Domain=\"%s\"", p1->domain->ptr));
 	    if (p1->portl)
 		Strcat(tmp,
-		       Sprintf("; $Port=\"%s\"", portlist2str(p1->portl)));
+		       Sprintf("; $Port=\"%s\"", portlist2str(p1->portl)->ptr));
 	}
     }
     return tmp;
 }
 
-char *special_domain[] = {
-    ".com", ".edu", ".gov", ".mil", ".net", ".org", ".int", NULL
-};
-
 int
 check_avoid_wrong_number_of_dots_domain( Str domain )
 {
@@ -324,7 +321,7 @@ add_cookie(ParsedURL *pu, Str name, Str value,
 
 	if (version == 0) {
 	    /* [NETSCAPE] rule */
-	    int n = total_dot_number(domain->ptr,
+	    unsigned int n = total_dot_number(domain->ptr,
 				     domain->ptr + domain->length,
 				     3);
 	    if (n < 2) {
@@ -332,19 +329,6 @@ add_cookie(ParsedURL *pu, Str name, Str value,
 		    COOKIE_ERROR(COO_ESPECIAL);
 		}
 	    }
-	    else if (n == 2) {
-		char **sdomain;
-		int ok = 0;
-		for (sdomain = special_domain; !ok && *sdomain; sdomain++) {
-		    int offset = domain->length - strlen(*sdomain);
-		    if (offset >= 0 &&
-			strcasecmp(*sdomain, &domain->ptr[offset]) == 0)
-			ok = 1;
-		}
-		if (!ok && ! check_avoid_wrong_number_of_dots_domain(domain)) {
-		    COOKIE_ERROR(COO_ESPECIAL);
-		}
-	    }
 	}
 	else {
 	    /* [DRAFT 12] s. 4.3.2 case 2 */
@@ -463,7 +447,7 @@ save_cookies(void)
 	    continue;
 	fprintf(fp, "%s\t%s\t%s\t%ld\t%s\t%s\t%d\t%d\t%s\t%s\t%s\n",
 		parsedURL2Str(&p->url)->ptr,
-		p->name->ptr, p->value->ptr, p->expires,
+		p->name->ptr, p->value->ptr, (long)p->expires,
 		p->domain->ptr, p->path->ptr, p->flag,
 		p->version, str2charp(p->comment),
 		(p->portl) ? portlist2str(p->portl)->ptr : "",
@@ -517,36 +501,36 @@ load_cookies(void)
 	cookie->commentURL = NULL;
 	parseURL(readcol(&str)->ptr, &cookie->url, NULL);
 	if (!*str)
-	    return;
+	    break;
 	cookie->name = readcol(&str);
 	if (!*str)
-	    return;
+	    break;
 	cookie->value = readcol(&str);
 	if (!*str)
-	    return;
+	    break;
 	cookie->expires = (time_t) atol(readcol(&str)->ptr);
 	if (!*str)
-	    return;
+	    break;
 	cookie->domain = readcol(&str);
 	if (!*str)
-	    return;
+	    break;
 	cookie->path = readcol(&str);
 	if (!*str)
-	    return;
+	    break;
 	cookie->flag = atoi(readcol(&str)->ptr);
 	if (!*str)
-	    return;
+	    break;
 	cookie->version = atoi(readcol(&str)->ptr);
 	if (!*str)
-	    return;
+	    break;
 	cookie->comment = readcol(&str);
 	if (cookie->comment->length == 0)
 	    cookie->comment = NULL;
 	if (!*str)
-	    return;
+	    break;
 	cookie->portl = make_portlist(readcol(&str));
 	if (!*str)
-	    return;
+	    break;
 	cookie->commentURL = readcol(&str);
 	if (cookie->commentURL->length == 0)
 	    cookie->commentURL = NULL;
diff --git a/display.c b/display.c
index e00eb0c..d4f336a 100644
--- a/display.c
+++ b/display.c
@@ -257,7 +257,7 @@ make_lastline_link(Buffer *buf, char *title, char *url)
     parseURL2(url, &pu, baseURL(buf));
     u = parsedURL2Str(&pu);
     if (DecodeURL)
-	u = Strnew_charp(url_unquote_conv(u->ptr, buf->document_charset));
+	u = Strnew_charp(url_decode2(u->ptr, buf));
 #ifdef USE_M17N
     u = checkType(u, &pr, NULL);
 #endif
@@ -487,7 +487,7 @@ displayBuffer(Buffer *buf, int mode)
     term_title(conv_to_system(buf->buffername));
     refresh();
 #ifdef USE_IMAGE
-    if (activeImage && displayImage && buf->img) {
+    if (activeImage && displayImage && buf->img && buf->image_loaded) {
 	drawImage();
     }
 #endif
@@ -521,7 +521,15 @@ drawAnchorCursor0(Buffer *buf, AnchorList *al, int hseq, int prevhseq,
 		break;
 	}
 	if (hseq >= 0 && an->hseq == hseq) {
+	    int start_pos = an->start.pos;
+	    int end_pos = an->end.pos;
 	    for (i = an->start.pos; i < an->end.pos; i++) {
+	        if (enable_inline_image && (l->propBuf[i] & PE_IMAGE)) {
+		    if (start_pos == i)
+			start_pos = i + 1;
+		    else if (end_pos == an->end.pos)
+		        end_pos = i - 1;
+		}
 		if (l->propBuf[i] & (PE_IMAGE | PE_ANCHOR | PE_FORM)) {
 		    if (active)
 			l->propBuf[i] |= PE_ACTIVE;
@@ -529,9 +537,9 @@ drawAnchorCursor0(Buffer *buf, AnchorList *al, int hseq, int prevhseq,
 			l->propBuf[i] &= ~PE_ACTIVE;
 		}
 	    }
-	    if (active)
+	    if (active && start_pos < end_pos)
 		redrawLineRegion(buf, l, l->linenumber - tline + buf->rootY,
-				 an->start.pos, an->end.pos);
+				 start_pos, end_pos);
 	}
 	else if (prevhseq >= 0 && an->hseq == prevhseq) {
 	    if (active)
@@ -855,14 +863,16 @@ redrawLineImage(Buffer *buf, Line *l, int i)
 		y = (int)(i * pixel_per_line);
 		sx = (int)((rcol - COLPOS(l, a->start.pos)) * pixel_per_char);
 		sy = (int)((l->linenumber - image->y) * pixel_per_line);
-		if (sx == 0 && x + image->xoffset >= 0)
-		    x += image->xoffset;
-		else
-		    sx -= image->xoffset;
-		if (sy == 0 && y + image->yoffset >= 0)
-		    y += image->yoffset;
-		else
-		    sy -= image->yoffset;
+		if (! enable_inline_image) {
+		    if (sx == 0 && x + image->xoffset >= 0)
+			x += image->xoffset;
+		    else
+			sx -= image->xoffset;
+		    if (sy == 0 && y + image->yoffset >= 0)
+			y += image->yoffset;
+		    else
+			sy -= image->yoffset;
+		}
 		if (image->width > 0)
 		    w = image->width - sx;
 		else
diff --git a/doc-de/README.func b/doc-de/README.func
new file mode 100644
index 0000000..72d7d45
--- /dev/null
+++ b/doc-de/README.func
@@ -0,0 +1,146 @@
+ABORT		Sofort beenden
+ACCESSKEY	Öffne Zugangstasten-Menü
+ADD_BOOKMARK	Lege für aktuelle Seite Lesezeichen an
+ALARM		Alarm einrichten
+BACK		Schließe aktuellen Puffer und kehre zu dem im Stapel darunterliegenden zurück
+BEGIN		Gehe zur ersten Zeile
+BOOKMARK	Lesezeichen ansehen
+CENTER_H	Um Cursor herum horizontal zentrieren
+CENTER_V	Um Cursor herum vertikal zentrieren
+CHARSET 	Ändere die Zeichenkodierung für das aktuelle Dokument
+CLOSE_TAB	Schließe Reiter
+CLOSE_TAB_MOUSE Schließe Reiter bei Mauszeiger
+COMMAND 	Rufe w3m Funktion(en) auf
+COOKIE		Cookie-Liste ansehen
+DEFAULT_CHARSET Ändere die Voreinstellung für die Zeichenkodierung
+DEFINE_KEY	Definiere eine Verbindung zwischen einer Tastenkombination und einem Kommando
+DELETE_PREVBUF	Lösche vorherigen Puffer (hauptsächlich für lokale CGI-Skripte)
+DICT_WORD	Führe eine Wörterbuch-Funktion aus (siehe README.dict)
+DICT_WORD_AT	Benutze Wörterbuch für Wort unter Cursor
+DISPLAY_IMAGE	Starte das Laden und die Erstellung von Bildern erneut
+DOWN		Scrolle den Anzeigebereich eine Zeile abwärts
+DOWNLOAD	Dokument-Quellcode speichern
+DOWNLOAD_LIST	Die Übersicht heruntergeladener Dateien zeigen
+EDIT		Bearbeite lokales Quelldokument
+EDIT_SCREEN	Bearbeite eine Kopie des verarbeiteten Dokuments
+END		Gehe zur letzten Zeile
+EXEC_SHELL	Führe Shell-Befehl aus und zeige Ausgabe an
+EXIT		Sofort beenden
+EXTERN		Verwende externen Browser zur Anzeige
+EXTERN_LINK	Verwende externen Browser zur Anzeige des Linkziels
+FRAME		Wechsle zwischen Kennung und Umsetzung von HTML-Frames
+GOTO		Öffne angegebenes Dokument in neuem Puffer
+GOTO_LINE	Gehe zur angebenen Zeile
+GOTO_LINK	Folge dem aktuellen Hyperlink in neuem Puffer
+GOTO_RELATIVE	Gehe zu relativer Adresse
+HELP		Zeige Hilfe-Übersicht
+HISTORY 	Chronik aufgesuchter Dokumente
+INFO		Zeige Informationen über dieses Dokument
+INTERRUPT	w3m zum Hintergrundprozess machen
+ISEARCH 	Inkrementelle Suche vorwärts
+ISEARCH_BACK	Inkrementelle Suche rückwärts
+LEFT		Anzeigebereich um eine Spalte nach links verschieben
+LINE_BEGIN	Gehe zum Zeilenanfang
+LINE_END	Gehe zum Zeilenende
+LINE_INFO	Zeige aktuelle Position im Dokument an
+LINK_BEGIN	Gehe zum ersten Hyperlink
+LINK_END	Gehe zum letzten Hyperlink
+LINK_MENU	Öffne Menü mit den Link-Elementen
+LIST		Zeige alle referenzierten URLs
+LIST_MENU	Öffne Menü mit aufsuchbaren Hyperlinks
+LOAD		Öffne lokale Datei in einem neuen Puffer
+MAIN_MENU	Öffne Menü
+MARK		Setze/Lösche Markierung
+MARK_MID	Wandle Nachrichten-ID-artige Zeichenketten um in Hyperlinks
+MARK_URL	Wandle URL-artige Zeichenketten um in Hyperlinks
+MARK_WORD	Wandle aktuelles Wort in Hyperlink um
+MENU		Öffne Menü
+MENU_MOUSE	Öffne Menü beim Mauszeiger
+MOUSE_TOGGLE	Schalte Mausbedienung an oder ab
+MOVE_DOWN	Cursor abwärts
+MOVE_DOWN1	Cursor abwärts; am Rand gleitend bewegen
+MOVE_LEFT	Cursor nach links
+MOVE_LEFT1	Cursor nach links; am Rand gleitend bewegen
+MOVE_LIST_MENU	Öffne Menü mit vorhandenen Hyperlinks
+MOVE_MOUSE	Cursor auf Mauszeigerposition setzen
+MOVE_RIGHT	Cursor nach rechts
+MOVE_RIGHT1	Cursor nach rechts; am Rand gleitend bewegen
+MOVE_UP		Cursor aufwärts
+MOVE_UP1	Cursor aufwärts; am Rand gleitend bewegen
+MSGS		Zeige Fehlermeldungen an
+NEW_TAB 	Öffne neuen Reiter (mit aktuellem Dokument)
+NEXT		Schalte zum nächsten Puffer
+NEXT_DOWN	Gehe abwärts zum nächsten Hyperlink
+NEXT_HALF_PAGE	Scrolle eine halbe Seite abwärts
+NEXT_LEFT	Gehe zum nächsten Hyperlink links
+NEXT_LEFT_UP	Gehe zum nächsten Hyperlink links oder oberhalb
+NEXT_LINK	Gehe zum nächsten Hyperlink
+NEXT_MARK	Gehe zur nächsten Markierung
+NEXT_PAGE	Eine Seite abwärts
+NEXT_RIGHT	Gehe zum nächsten Hyperlink rechts
+NEXT_RIGHT_DOWN	Gehe zum nächsten Hyperlink rechts oder unterhalb
+NEXT_TAB	Schalte zum nächsten Reiter
+NEXT_UP		Gehe zum nächsten Hyperlink oberhalb
+NEXT_VISITED	Gehe zum nächsten besuchten Hyperlink
+NEXT_WORD	Gehe zum nächsten Wort
+NOTHING 	Tue nichts
+NULL		Tue nichts
+OPTIONS 	Zeige Einstellungen für Änderungen
+PEEK		Zeige aktuelle Adresse an
+PEEK_IMG	Zeige Adresse des Bildes
+PEEK_LINK	Zeige Zieladresse
+PIPE_BUF	Leite aktuellen Pufferinhalt einem Shell-Befehl zu und zeige Ausgabe an
+PIPE_SHELL	Führe Shell-Befehl aus und zeige Ausgabe an
+PREV		Schalte zum vorherigen Puffer
+PREV_HALF_PAGE	Scrolle eine halbe Seite aufwärts
+PREV_LINK	Gehe zum vorangegangen Hyperlink
+PREV_MARK	Gehe zur vorherigen Markierung
+PREV_PAGE	Eine Seite aufwärts
+PREV_TAB	Schalte zum vorherigen Reiter
+PREV_VISITED	Gehe zum vorherigen besuchten Hyperlink
+PREV_WORD	Gehe zum vorherigen Wort
+PRINT		Speichere verarbeitetes Dokument
+QUIT		Mit Bestätigungsfrage beenden
+READ_SHELL	Führe Shell-Befehl aus und zeige Ausgabe an
+REDO		Den letzten Rücknahmebefehl zurücknehmen
+REDRAW		Bildschirmanzeige neu aufbauen
+REG_MARK	Zu einem Muster passenden Zeichenfolgen überall markieren
+REINIT		Konfigurationsdatei erneut laden
+RELOAD		Aktuelles Dokument erneut laden
+RESHAPE 	Dokument nochmals verarbeiten
+RIGHT		Anzeigebereich um eine Spalte nach rechts verschieben
+SAVE		Dokument-Quellcode speichern
+SAVE_IMAGE	Speichere Bild
+SAVE_LINK	Speichere Ziel des Hyperlinks
+SAVE_SCREEN	Speichere verarbeitetes Dokument
+SEARCH		Suche vorwärts
+SEARCH_BACK	Suche rückwärts
+SEARCH_FORE	Suche vorwärts
+SEARCH_NEXT	Setze Suche vorwärts fort
+SEARCH_PREV	Setze Suche rückwärts fort
+SELECT		Zeige Puffferstapel-Übersicht
+SELECT_MENU	Öffne Puffferstapel-Menü
+SETENV		Setze Umgebungsvariable
+SET_OPTION	Setze Option
+SHELL		Führe Shell-Befehl aus und zeige Ausgabe an
+SHIFT_LEFT	Anzeigebereich nach links versetzen
+SHIFT_RIGHT	Anzeigebereich nach rechts versetzen
+SOURCE		Wechsle zwischen HTML-Wiedergabe und -Verarbeitung
+STOP_IMAGE	Bilder nicht mehr laden und anzeigen
+SUBMIT		Formular übermitteln
+SUSPEND 	w3m zum Hintergrundprozess machen
+TAB_GOTO	Öffne das angegebene Dokument in einem neuen Reiter
+TAB_GOTO_RELATIVE	Öffne relative Adresse in einem neuen Reiter
+TAB_LEFT	Einen Reiter weiter nach links gehen
+TAB_LINK	Folge dem aktuellen Hyperlink in einem neuen Reiter
+TAB_MENU	Öffne das Reiter-Auswahl-Menü
+TAB_MOUSE	Wähle per Maus Reiter aus
+TAB_RIGHT	Einen Reiter weiter nach rechts gehen
+UNDO		Nimm die letzte Cursorbewegung zurück
+UP		Scrolle den Anzeigebereich eine Zeile aufwärts
+VERSION		Zeige die Version von w3m an
+VIEW		Wechsle zwischen HTML-Wiedergabe und -Verarbeitung
+VIEW_BOOKMARK	Lesezeichen ansehen
+VIEW_IMAGE	Zeige Bild in Betrachter
+WHEREIS 	Suche vorwärts
+WRAP_TOGGLE	Wechsle zwischen umlaufendem und nicht-umlaufendem Suchen
diff --git a/doc-jp/FAQ.html b/doc-jp/FAQ.html
index e16a986..86ef05a 100644
--- a/doc-jp/FAQ.html
+++ b/doc-jp/FAQ.html
@@ -176,7 +176,7 @@ w3m
 ��¸���ޤ�����������¸������� ESC I �Ǥ���
 <p>
 <dt>�ץ�����������Ϥɤ�����Ρ�
-<dd>�Ķ��ѿ� HTTP_proxy �����ꤹ�뤫��"o" ���ޥ�ɤΥ��ץ��������ѥͥ�
+<dd>�Ķ��ѿ� HTTP_PROXY, HTTPS_PROXY, GOPHER_PROXY, FTP_PROXY �����ꤹ�뤫��"o" ���ޥ�ɤΥ��ץ��������ѥͥ�
 �����ꤷ�ޤ����㤨�� proxy.hogege.com �Ȥ����ۥ��Ȥ� 8000�֥ݡ��Ȥ�
 ���Ѥ����硤
 <p>
diff --git a/doc-jp/MANUAL.html b/doc-jp/MANUAL.html
index 41d70f1..66fdc6e 100644
--- a/doc-jp/MANUAL.html
+++ b/doc-jp/MANUAL.html
@@ -51,15 +51,9 @@ w3m 
 <dt>-l �Կ�
 <dd>ɸ�����Ϥ����Ƥ�ɽ������Ȥ�����¸��������Կ�����ꤹ
 �롥�ǥե���Ȥ� 10000��
-<dt>-s
-<dd>Shift_JIS �����ɤ�ɽ�����롥
-<dt>-e
-<dd>EUC �����ɤ�ɽ�����롥
-<dt>-j
-<dd>JIS(ISO-2022-JP) �����ɤ�ɽ�����롥
-<dt>-O e|s|j|N|m|n
+<dt>-O ʸ��������
 <dd>ɽ�����Ѥ���ʸ�������ɤ���ꤹ�롥
-<dt>-I e|s
+<dt>-I ʸ��������
 <dd>����ʸ���ʸ�������ɤ���ꤹ�롥
 <dt>-T ������
 <dd>ɽ������ʸ��Υ����פ���ꤹ�롥���λ��꤬�ʤ���硤�ե�����
@@ -89,7 +83,7 @@ HTML
 <dd>���顼ɽ���򤷤ʤ���
 <dt>-F
 <dd>�ե졼���ưɽ�����롥
-<dt>-S
+<dt>-s
 <dd>Ϣ³������Ԥ�1�ԤˤޤȤ��ɽ�����롥
 <dt>-X
 <dd>w3m��λ���ˡ������β��̤����ʤ���
@@ -211,9 +205,9 @@ HTMLʸ
 <TR><TD>F<TD>&lt;FRAMESET&gt;��ޤ�ʸ���ɽ�����Ƥ���Ȥ��ˡ�&lt;FRAME&gt;
 �����λؤ�ʣ����ʸ���1�Ĥ�ʸ����Ѵ�����ɽ�����ޤ���
 <TR><TD>M<TD>���߸��Ƥ���ڡ����򡤳����֥饦����Ȥä�ɽ�����ޤ���
-2M, 3M ��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+2M, 3M, ..., 9M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
 <TR><TD>ESC M<TD>���ߤΥ����򡤳����֥饦����Ȥä�ɽ�����ޤ���
-2ESC M, 3ESC M ��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+2ESC M, 3ESC M, ..., 9ESC M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
 </table>
 
 <H3>�ե������URL�ط������</H3>
@@ -349,9 +343,9 @@ Lynx
 <TR><TD>F<TD>&lt;FRAMESET&gt;��ޤ�ʸ���ɽ�����Ƥ���Ȥ��ˡ�&lt;FRAME&gt;
 �����λؤ�ʣ����ʸ���1�Ĥ�ʸ����Ѵ�����ɽ�����ޤ���
 <TR><TD>M<TD>���߸��Ƥ���ڡ����򡤳����֥饦����Ȥä�ɽ�����ޤ���
-2M, 3M ��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+2M, 3M, ..., 9M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
 <TR><TD>ESC M<TD>���ߤΥ����򡤳����֥饦����Ȥä�ɽ�����ޤ���
-2ESC M, 3ESC M ��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+2ESC M, 3ESC M, ..., 9ESC M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
 </table>
 
 <H3>�ե������URL�ط������</H3>
@@ -489,8 +483,7 @@ w3m
 w3m��Ȥ��С�HTTP�����Фʤ���CGI������ץȤ�ư���뤳�Ȥ��Ǥ��ޤ���
 ���ΤȤ���w3m�������ФΤդ�򤷤ƥ�����ץȤ�ư�������ν��Ϥ�
 �ɤߤ����ɽ������櫓�Ǥ���
-<a href="file:///$LIB/w3mbookmark?mode=panel&bmark=~/.w3m/bookmark.html&url=MANUAL.html&title=w3m+manual">�֥å��ޡ�������Ͽ</a>��
-<a href="file:///$LIB/w3mhelperpanel?mode=panel">�����ӥ塼�����Խ�</a>
+�֥å��ޡ�������Ͽ�ȳ����ӥ塼�����Խ�
 �ϡ�local CGI�Υ�����ץȤȤ��Ƽ¸�����Ƥ��ޤ���
 local CGI��Ȥ��С�w3m�����ѤΥե��������ϥ��󥿥ե������Ȥ���
 �Ȥ����Ȥ��Ǥ��ޤ���
diff --git a/doc-jp/README b/doc-jp/README
index 074766f..e5e59b1 100644
--- a/doc-jp/README
+++ b/doc-jp/README
@@ -122,7 +122,6 @@ w3m 
 	��������±�
 	satodai@w3m.jp
 
-���ո��������ۤ�ML�ޤǤ��󤻤���������
-	w3m-dev@sic.med.tohoku.ac.jp (���ܸ�)
-	w3m-dev-en@sic.med.tohoku.ac.jp (�Ѹ�)
+���ո��������ۤ򤪴󤻤���������
 	http://w3m.sourceforge.net/
+	https://sourceforge.net/projects/w3m/
diff --git a/doc-jp/README.SSL b/doc-jp/README.SSL
index 4aedfde..47d5fd6 100644
--- a/doc-jp/README.SSL
+++ b/doc-jp/README.SSL
@@ -25,9 +25,9 @@ SSL 
 
     ssl_forbid_method
         �Ȥ�ʤ�SSL�᥽�åɤΥꥹ��(2: SSLv2, 3: SSLv3, t: TLSv1)
-        (�ǥե���Ȥ�<NULL>).
+        (�ǥե���Ȥ�2, 3).
     ssl_verify_server ON/OFF
-        SSL�Υ�����ǧ�ڤ�Ԥ�(�ǥե���Ȥ�OFF).
+        SSL�Υ�����ǧ�ڤ�Ԥ�(�ǥե���Ȥ�ON).
     ssl_cert_file �ե�����̾
         SSL�Υ��饤�������PEM����������ե�����(�ǥե���Ȥ�<NULL>).
     ssl_key_file �ե�����̾
@@ -85,6 +85,9 @@ SSL 
 #
 # certdata2pem.rb
 
+if RUBY_VERSION>="1.9"
+  Encoding.default_external="UTF-8"
+end
 while line = $stdin.gets
   next if line =~ /^#/
   next if line =~ /^\s*$/
diff --git a/doc-jp/README.func b/doc-jp/README.func
index 542aaa9..8a5f821 100644
--- a/doc-jp/README.func
+++ b/doc-jp/README.func
@@ -1,7 +1,7 @@
 ABORT		��ǧ������w3m��λ���ޤ�
 ACCESSKEY	Accesskey ��˥塼��Ω���夲�ޤ�
-ALARM		���顼������ꤷ�ޤ�
 ADD_BOOKMARK	���߸��Ƥ���ڡ�����֥å��ޡ������ɲä��ޤ�
+ALARM		���顼������ꤷ�ޤ�
 BACK		������ΥХåե���ɽ�����ޤ�
 BEGIN		ʸ��Τ����Ф��ιԤ˰�ư���ޤ�
 BOOKMARK	�֥å��ޡ������ɤ߹��ߤޤ�
@@ -36,7 +36,6 @@ GOTO_RELATIVE	
 HELP		�إ�ץե������ɽ�����ޤ�
 HISTORY                URL�����ɽ�����ޤ�
 INFO		���ߤ�ʸ��˴ؤ�������ɽ�����ޤ�
-INIT_MAILCAP   mailcap ����ɤ߹��ߤ��ޤ�(��� local-CGI ��)
 INTERRUPT	ʸ����ɤ߹��ߤ����Ǥ��ޤ�
 ISEARCH		�ե�����������ˤफ�äƥ��󥯥��󥿥륵�������ޤ�
 ISEARCH_BACK	�ե��������Ƭ�ˤफ�äƥ��󥯥��󥿥륵�������ޤ�
@@ -72,6 +71,7 @@ MSGS        
 NEW_TAB		���������֤򳫤��ޤ�
 NEXT		���ΥХåե���ɽ�����ޤ�
 NEXT_DOWN      ��������β�¦�ˤ����󥯤˰�ư���ޤ�
+NEXT_HALF_PAGE	Ⱦ�ڡ������˥��������뤷�ޤ�
 NEXT_LEFT      ��������κ�¦�ˤ����󥯤˰�ư���ޤ�
 NEXT_LEFT_UP   ��������κ�¦(̵��������ι԰���)�ˤ����󥯤˰�ư���ޤ�
 NEXT_LINK	���Υ�󥯤˰�ư���ޤ�
@@ -92,6 +92,7 @@ PEEK_LINK      
 PIPE_BUF       �Хåե������Ƥ�ѥ��פ��Ϥ��ޤ�
 PIPE_SHELL	���ޥ�ɤ�¹Ԥ�����̤��ɤߤ��ߤʤ���ɽ�����ޤ�
 PREV		���ΥХåե���ɽ�����ޤ�
+PREV_HALF_PAGE	Ⱦ�ڡ�����˥��������뤷�ޤ�
 PREV_LINK	���Υ�󥯤˰�ư���ޤ�
 PREV_MARK	������Υޡ����˰�ư���ޤ�
 PREV_PAGE	���Υڡ�����ɽ�����ޤ�
diff --git a/doc-jp/README.siteconf b/doc-jp/README.siteconf
new file mode 100644
index 0000000..90066f7
--- /dev/null
+++ b/doc-jp/README.siteconf
@@ -0,0 +1,60 @@
+siteconf: �������̥������ޥ���
+
+siteconf �ϡ� URL �Υѥ�����ȡ������ɳ�դ���줿���꤫������ޤ���
+siteconf ��Ȥ��ȡ����������ʸ�������ɤ���ꤷ�� "decode_url"
+�ν��Ϥ���������ꡢ Google �Υ�����쥯���򱪲󤷤���ǽ��
+�ץ饤�Х�������夵�����ꤹ�뤳�Ȥ��Ǥ��ޤ���
+
+�ǥե���ȤǤ� siteconf �� ~/.w3m/siteconf �����ɤ߹��ޤ�ޤ���
+
+===== ��ʸ =====
+
+url <url>|/<re-url>/|m@<re-url>@i [exact]
+substitute_url "<destination-url>"
+url_charset <charset>
+no_referer_from on|off
+no_referer_to on|off
+
+��������˽񤫤줿��Τ�ͥ�褵��ޤ���
+
+===== �� =====
+
+url "https://twitter.com/"
+substitute_url "https://mobile.twitter.com/"
+
+twitter.com ���Х��륵���Ȥ�ž�����ޤ���
+
+url "http://your.bookmark.net/"
+no_referer_from on
+
+your.bookmark.net ����ĥ�ä���󥯤�é��ݤˡ� HTTP referer ��
+����ʤ��褦�ˤ��ޤ���
+
+url "http://www.google.com/url?" exact
+substitute_url "file:///cgi-bin/your-redirector.cgi?"
+
+Google �Υ�����쥯���� local CGI ��ž�����ޤ���
+
+url /^http:\/\/[a-z]*\.wikipedia\.org\//
+url_charset utf-8
+
+Ʊ���� "decode_url" ���ץ����򥪥�ˤ���ȡ� Wikipedia �ؤ�
+��󥯤� UTF-8 �Ȥ��ƥǥ����ɤ���ɽ�����ޤ���
+
+===== ����ɽ���ˤĤ��� =====
+
+��������ɽ���Ϥ������Ʊ����̣��ɽ���ޤ���
+
+/http:\/\/www\.example\.com\//
+m/http:\/\/www\.example\.com\//
+m@http://www\.example\.com/@
+m!http://www\.example\.com/!
+
+�Ǹ�� 'i' �����Ҥ��դ���ȡ���ʸ����ʸ������̤����˾ȹ��Ԥ��ޤ���
+�㤨�С� m@^http://www\.example\.com/abc/@i �ϰʲ��Τ�����Ȥ���פ��ޤ���
+
+http://www.example.com/abc/
+http://www.example.com/Abc/
+http://www.example.com/ABC/
+
+���������ۥ���̾����ʬ�Ͼ�˾�ʸ�����Ѵ����Ƥ�����Ӥ��ޤ���
diff --git a/doc-jp/keymap.lynx b/doc-jp/keymap.lynx
index 869c716..e4085c8 100644
--- a/doc-jp/keymap.lynx
+++ b/doc-jp/keymap.lynx
@@ -46,7 +46,7 @@ keymap	-	PREV_PAGE
 keymap	.	RIGHT
 keymap	/	SEARCH
 keymap	:	MARK_URL
-keymap	;	MARK_WORD
+keymap	";"	MARK_WORD
 keymap	<	SHIFT_LEFT
 keymap	=	INFO
 keymap	>	SHIFT_RIGHT
diff --git a/doc-jp/w3m.1 b/doc-jp/w3m.1
index 89aacb6..a54e078 100644
--- a/doc-jp/w3m.1
+++ b/doc-jp/w3m.1
@@ -1,5 +1,5 @@
 .\"
-.TH W3M 1 "Jun 6 2000" "UNIX"
+.TH W3M 1 "2016-04-02" "w3m 0.5.3"
 .SH NAME
 .B w3m
 \- text base pager/WWW browser
@@ -39,19 +39,10 @@ text/plain
 ɸ�����Ϥ����Ƥ�ɽ������Ȥ�����¸��������Կ�����ꤹ�롥
 �ǥե���Ȥ�10000��
 .TP
-.B \-s
-Shift_JIS�����ɤ�ɽ�����롥
-.TP
-.B \-e
-EUC�����ɤ�ɽ�����롥
-.TP
-.B \-j
-JIS (ISO-2022-JP)�����ɤ�ɽ�����롥
-.TP
-.BI \-O\  e|s|j|N|m
+.BI \-O\  ʸ��������
 ɽ���˻Ȥ�ʸ�������ɤ���ꤹ��.
 .TP
-.BI \-I\  e|s
+.BI \-I\  ʸ��������
 ����ʸ���ʸ�������ɤ���ꤹ�롥
 .TP
 .BI \-T\  ������
@@ -90,7 +81,7 @@ Bookmark 
 .B \-F
 �ե졼���ưɽ�����롥
 .TP
-.B \-S
+.B \-s
 Ϣ³������Ԥ�1�ԤˤޤȤ��ɽ�����롥
 .TP
 .B \-X
@@ -327,13 +318,13 @@ URL
 .TP
 .B M
 ���߸��Ƥ���ڡ����򡤳����֥饦����Ȥä�ɽ�����ޤ���
-.B 2M, 3M
-��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+.B 2M, 3M, ..., 9M
+��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
 .TP
 .B "ESC M"
 ���ߤΥ����򡤳����֥饦����Ȥä�ɽ�����ޤ���
-.B "2ESC M", "3ESC M"
-��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+.B "2ESC M", "3ESC M", ..., "9ESC M"
+��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
 .SS �ե������URL�ط������
 .TP
 .B U
diff --git a/doc/FAQ.html b/doc/FAQ.html
index ed2a704..34da9f1 100644
--- a/doc/FAQ.html
+++ b/doc/FAQ.html
@@ -1,151 +1,423 @@
-<HTML>
-<HEAD>
-<TITLE>W3M FAQ</TITLE>
-</HEAD>
-<BODY>
-<p>&nbsp;
-<center><h1>Frequently Asked Questions and Answers about w3m</h1></center>
-<div align=right>
-Akinori Ito<br>
-aito@fw.ipsj.or.jp<br>
-Corrected by Tom Berger &lt;tom.be@gmx.net&gt;
-</div>
-<p>
-<b><center><font size=+1><u><a name="index">Index</a></u></font></center></b>
-<p>
-<br>
-<ul>
-<li><h2><a href="#general">General Questions, How to Get It, Required Environment</a></h2></li>
-<ul>
-<li><h3>How do I pronounce &quot;w3m&quot;?</h3>
-<li><h3>Why is it called &quot;w3m&quot;?</h3>
-<li><h3>On which platforms does w3m work?</h3>
-<li><h3>Where can I get more information about w3m?</h3>
-<li><h3>Is there a mailing list for w3m?</h3>
-<li><h3>Are there any binary distributions?</h3>
-</ul>
-<br>
-<li><a href="#install"><h2>Compile and Install</h2></a>
-<br>
-<li><a href="#command"><h2>Options, Commands, Usage</h2></a>
-<ul>
-<li><h3>w3m quits if started without parameters. What's wrong?</h3>
-<li><h3>w3m starts with black characters on a black screen. How do I change this?</h3>
-<li><h3>Does w3m support colours?</h3>
-<li><h3>Does w3m support monochrome display?</h3>
-<li><h3>How do I shift the display?</h3>
-<li><h3>How do I move from anchor to anchor?</h3>
-<li><h3>Netscape displays a word red, but w3m doesn't. Why?</h3>
-<li><h3>How do I change the colour of anchor-/image-/form links?</h3>
-<li><h3>w3m doesn't seem to use the variable EDITOR. Why? </h3>
-<li><h3>How do I quit a search or URL text input?</h3>
-</ul>
-<br>
-<li><a href="#www"><h2>Questions about WWW usage</h2></a>
-<ul>
-<li><h3>How do I fill in forms with w3m?</h3>
-<li><h3>Seems like w3m is slower than Netscape or Lynx. Why?</h3>
-<li><h3>Loading time doesn't decrease when loading a previously seen page</h3>
-<li><h3>How do I download a linked file?</h3>
-<li><h3>How do I specify a proxy server?</h3>
-<li><h3>w3m freezes when I invoke an external browser.</h3>
-<li><h3>How do I change the default image viewer?</h3>
-<li><h3>How do I enter a URL?</h3>
-<li><h3>w3m appends a URL to the former one despite of having cleared the line with Ctrl-u. What to do?</h3>
-</ul>
-<br>
-<li><a href="#other"><h2>Misc</a></h2>
-<ul>
-<li><h3>What is w3m's configuration file?</h3>
-<li><h3>What are these w3mxxxx files in my ~/.w3m directory for?</h3>
-</ul>
-<br>&nbsp;
-<br>
-<u><h2><a name="general">General Questions, How to Get It, Required Environment</a></h2></u>
-<br>
-<dl>
-<dt><h3>How do I pronounce &quot;w3m&quot;?</h3>
-<dd>It's &quot;W-three-M&quot;. It doesn't rhyme with &quot;pteranodon&quot;.
-<p>
-<dt><h3>Why is it called &quot;w3m&quot;?</h3>
-<dd>It's an abbreviation of &quot;WWW-wo-Miru&quot;, which is Japanese for
-&quot;See the WWW&quot;. So in English the name of this browser would be
-something like &quot;stw3&quot;.
-<p>
-<dt><h3>On which platforms does w3m work?</h3>
-<dd>It runs on various versions of Unix, since version 990226 on OS/2 and since
-version 990303 also on MS-Windows with Cygwin32.
-<br>
-Current versions have been confirmed to run on:
-<ul>
-<li>SunOS 4.1.x
-<li>HP-UX 9.x, 10.x
-<li>Solaris 2.5.x, 2.6, 8
-<li>Linux 2.0.30
-<li>FreeBSD 2.2.8, 3.1, 3.2, 4.6
-<li>NetBSD/macppc, m68k
-<li>EWS4800 Rel.12.2 Rev.A
-<li>Digital UNIX: v3.2D, v4.0D
-<li>IRIX 5.3, IRIX 6.5
-<li>OS/2 with emx
-<li>Windows 9x/NT with Cygwin32 b20.1
-<li>MS-DOS with DJGPP and WATT32 packet driver
-<li>MacOS X Server
-<li>MacOS X 10.1, 10.2
-</ul>
-<dt><h3>Where can I get more information about w3m?</h3>
-<dd>At the <a href="http://w3m.sourceforge.net/index.en.html">English w3m home page</a>.
-<dt><h3>Is there a mailing list for w3m?</h3>
-<dd>There is a mailing list for developpers (w3m-dev-en). Please see
-<a href="http://w3m.sourceforge.net/index.en.html">w3m page</a>
-for details. You may also mail your comments to <a href="mailto:aito@fw.ipsj.or.jp">the author</a>.
-<dt><h3>Are there any binary distributions?</h3>
-<dd>So far there are only binaries for the win/cygnus32 version. You can get
-them from <a href="http://prdownloads.sourceforge.net/w3m/">here</a>.
-Contact <a href="mailto:aito@fw.ipsj.or.jp">the author</a> if you want to contribute binaries for other platforms.
-</dd>
-</dl>
-<br>
-<div align=right>
-<i>Up to <a href="#index">index</a></i>
-</div>
-<br>
-<u><h2><a name="install">Compile and Install</a></h2></u>
-No problem :-)
-<u><h2><a name="command">Options, Commands, Usage</a></h2></u>
-<br>
-<dl>
-<dt><h3>w3m quits if started without parameters. What's wrong?</h3>
-<dd>w3m is a <b>pager</b>. Therefore it just quits when invoked without any
-arguments. Possible arguments are:
-<ol>
-<li>A filename or an URL
-<li>Pipe from standard input
-<li>The -B option (Show bookmark file)
-<li>The -v option (visual startup)
-<li>From a specified HTTP_HOME or WWW_HOME variable
-</ol>
-<p>
-<dt><h3>w3m starts with black characters on black background. How do I change
-this?</h3>
-<dd>
-When compiled with colour support, w3m assumes a white background and therefore
-displays black characters. 
-<br>
-You may either change the background colour of your terminal (e.g. with the -bg
-option in a xterm) or take these steps:
-<ul>
-<li>invoke w3m with 'w3m -M' (for monochrome),
-<li>type 'o' for getting to the options screen
-<li><b>Mark 'Display with colour' as ON</b> and choose an arbitrary colour.
-Click on [OK].
-</ul>
-<p>
-<dt><h3>Does w3m support colours?</h3>
-<dd>Yes. When you run './configure', answer the question
-<p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <head>
+  <meta http-equiv=content-type content="text/html;charset=US-ASCII">
+  <title>W3M FAQ</title>
+ </head>
+ <body>
+  <h1 align="center">
+   Frequently Asked Questions and Answers about w3m
+  </h1>
+  <p align="right">
+   Akinori Ito<br>
+   aito@fw.ipsj.or.jp<br>
+   Corrected by Tom Berger &lt;tom.be@gmx.net&gt;
+  </p>
+  <h2 id="index">
+   <u>
+    Index
+   </u>
+  </h2>
+  <ul>
+   <li>
+    <a href="#general">
+     <b>
+      General Questions, How to Get It, Required Environment
+     </b>
+    </a>
+   </li>
+    <ul>
+     <li>
+      <b>
+       How do I pronounce <q>w3m</q>?
+      </b>
+     </li>
+     <li>
+      <b>
+       Why is it called <q>w3m</q>?
+      </b>
+     </li>
+     <li>
+      <b>
+       On which platforms does w3m work?
+      </b>
+     </li>
+     <li>
+      <b>
+       Where can I get more information about w3m?
+      </b>
+     </li>
+     <li>
+      <b>
+       Is there a mailing list for w3m?
+      </b>
+     </li>
+     <li>
+      <b>
+       Are there any binary distributions?
+      </b>
+     </li>
+    </ul>
+   <li>
+    <a href="#install">
+     <b>
+      Compile and Install
+     </b>
+    </a>
+   </li>
+   <li>
+    <a href="#command">
+     <b>
+      Options, Commands, Usage
+     </b>
+    </a>
+   </li>
+    <ul>
+     <li>
+      <b>
+       w3m quits if started without parameters. What's wrong?
+      </b>
+     </li>
+     <li>
+      <b>
+       w3m starts with black characters on a black background. How do
+       I change this?
+      </b>
+     </li>
+     <li>
+      <b>
+       Does w3m support colors?
+      </b>
+     </li>
+     <li>
+      <b>
+       Does w3m support monochrome displays?
+      </b>
+     </li>
+     <li>
+      <b>
+       How do I shift the display?
+      </b>
+     </li>
+     <li>
+      <b>
+       How do I move from anchor to anchor?
+      </b>
+     </li>
+     <li>
+      <b>
+       Graphical browsers display a word red, but w3m doesn't. Why?
+      </b>
+     </li>
+     <li>
+      <b>
+       How do I change the color of anchor/image/form links?
+      </b>
+     </li>
+     <li>
+      <b>
+       w3m doesn't seem to use the variable EDITOR. Why?
+      </b>
+     </li>
+     <li>
+      <b>
+       How do I quit a search or URL text input?
+      </b>
+     </li>
+    </ul>
+   <li>
+    <a href="#www">
+     <b>
+      Questions about WWW usage
+     </b>
+    </a>
+   </li>
+    <ul>
+     <li>
+      <b>
+       How do I fill in forms with w3m?
+      </b>
+     </li>
+     <li>
+      <b>
+       Seems like w3m is slower than some other browsers. Why?
+      </b>
+     </li>
+     <li>
+      <b>
+       Loading time doesn't decrease when loading a previously seen
+       page.
+      </b>
+     </li>
+     <li>
+      <b>
+       How do I download a linked file?
+      </b>
+     </li>
+     <li>
+      <b>
+       How do I specify a proxy server?
+      </b>
+     </li>
+     <li>
+      <b>
+       w3m freezes when I invoke an external browser.
+      </b>
+     </li>
+     <li>
+      <b>
+       How do I change the default image viewer?
+      </b>
+     </li>
+     <li>
+      <b>
+       How do I enter a URL?
+      </b>
+     </li>
+     <li>
+      <b>
+       w3m appends a URL to the former one even when I clear the line
+       with Ctrl-u. What should I do?
+      </b>
+     </li>
+    </ul>
+   <li>
+    <a href="#other">
+     <b>
+      Miscellaneous
+     </b>
+    </a>
+   </li>
+    <ul>
+     <li>
+      <b>
+       What is w3m's configuration file?
+      </b>
+     </li>
+     <li>
+      <b>
+       What are these w3mxxxx files in my ~/.w3m directory for?
+      </b>
+     </li>
+    </ul>
+  </ul>
+  <h2 id="general">
+   <u>
+    General Questions, How to Get It, Required Environment
+   </u>
+  </h2>
+  <dl>
+   <dt>
+    <b>
+     How do I pronounce <q>w3m</q>?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     It's <q>W-three-M</q>. It doesn't rhyme with <q>pteranodon</q>.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     Why is it called <q>w3m</q>?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     It's an abbreviation of <q>WWW-wo-Miru</q>, which is Japanese
+     for <q>See the WWW</q>. So in English the name of this browser
+     would be something like <q>stw3</q>.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     On which platforms does w3m work?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     It runs on various versions of Unix, since version 990226 on OS/2
+     and since version 990303 also on MS-Windows with Cygwin32.
+    </p>
+    <p>
+     More recent versions have been confirmed to run on:
+    </p>
+    <ul>
+     <li>
+      SunOS 4.1.x
+     </li>
+     <li>
+      HP-UX 9.x, 10.x
+     </li>
+     <li>
+      Solaris 2.5.x, 2.6, 8
+     </li>
+     <li>
+      Linux 2.0.1 to 3.17
+     </li>
+     <li>
+      FreeBSD 2.2.8, 3.1, 3.2, 4.6
+     </li>
+     <li>
+      NetBSD/macppc, m68k
+     </li>
+     <li>
+      EWS4800 Rel.12.2 Rev.A
+     </li>
+     <li>
+      Digital UNIX: v3.2D, v4.0D
+     </li>
+     <li>
+      IRIX 5.3, IRIX 6.5
+     </li>
+     <li>
+      OS/2 with emx
+      </li>
+     <li>
+      Windows 9x/NT with Cygwin32 b20.1
+     </li>
+     <li>
+      MS-DOS with DJGPP and WATT32 packet driver
+     </li>
+     <li>
+      MacOS X Server
+     </li>
+     <li>
+      MacOS X 10.1, 10.2
+     </li>
+    </ul>
+   </dd>
+   <dt>
+    <b>
+     Where can I get more information about w3m?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     At the
+     <a href="http://w3m.sourceforge.net/index.en.html">English w3m
+     home page</a>.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     Is there a mailing list for w3m?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     There is a mailing list for developers (w3m-dev-en). Please see
+     the <a href="http://w3m.sourceforge.net/index.en.html">w3m home
+     page</a> for details. You may also mail your comments to
+     <a href="mailto:aito@fw.ipsj.or.jp">the author</a>.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     Are there any binary distributions?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     So far there are only binaries for the win/cygnus32 version.
+<!--
+     You can get them from
+     <a href="http://prdownloads.sourceforge.net/w3m/">here</a>.
+!-->
+     Contact <a href="mailto:aito@fw.ipsj.or.jp">the author</a> if you
+     want to contribute binaries for other platforms.
+    </p>
+   </dd>
+  </dl>
+  <p align="right">
+   <i>
+    Up to <a href="#index">index</a>
+   </i>
+  </p>
+  <h2 id="install">
+   <u>
+    Compile and Install
+   </u>
+  </h2>
+  <p>
+   No problem :-)
+  </p>
+  <h2 id="command">
+   <u>
+    Options, Commands, Usage
+   </u>
+  </h2>
+  <dl>
+   <dt>
+    <b>
+     w3m quits if started without parameters. What's wrong?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     w3m is a <b>pager</b>. Therefore it just quits when invoked
+     without any arguments. Possible arguments are:
+    </p>
+    <ol>
+     <li>
+      A filename or URL
+     </li>
+     <li>
+      Pipe from standard input
+     </li>
+     <li>
+      The -B option (show bookmark file)
+     </li>
+     <li>
+      The -v option (visual startup)
+     </li>
+     <li>
+      A specified HTTP_HOME or WWW_HOME variable
+     </li>
+    </ol>
+   </dd>
+   <dt>
+    <b>
+     w3m starts with black characters on a black background. How do I
+     change this?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     When compiled with color support, w3m assumes a white background
+     and therefore displays black characters.
+    </p>
+    <p>
+     You may either change the background color of your terminal
+     (e.g. with the -bg option in a xterm) or take these steps:
+    </p>
+    <ul>
+     <li>
+      invoke w3m with <q>w3m -M</q> (for monochrome),
+     </li>
+     <li>
+      type <q>o</q> to get to the options screen
+     </li>
+     <li>
+      Mark <q>Display with color</q> as <q>YES</q> and choose an
+      arbitrary color.
+     </li>
+     <li>
+      Click on [OK].
+     </li>
+    </ul>
+   </dd>
+   <dt>
+    <b>
+     Does w3m support colors?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     Yes. When you run <q>./configure</q>, answer the question
+    </p>
 <pre>
-Let's do some configurations. Choose config option among the list."
+Let's do some configurations. Choose config option among the list.
 
 1 - Baby model    (no color, no menu, no mouse, no cookie, no SSL)
 2 - Little model  (color, menu, no mouse, no cookie, no SSL)
@@ -153,139 +425,311 @@ Let's do some configurations. Choose config option among the list."
 4 - Cookie model  (color, menu, mouse, cookie, no SSL)
 5 - Monster model (with everything; you need openSSL library)
 6 - Customize
-Which? 
+Which?
 </pre>
-<p>
-with 2,3,4 or 5.
-<p>
-<dt><h3>Does w3m support monochrome display?</h3>
-<dd>Yes. You may either
-<ol>
-<li>Answer the above mentioned 'configure' question with 1, or
-<li>Invoke w3m with the -M option, or
-<li>Type 'o' within w3m to enter the options screen and turn off colour display
-mode.
-</ol>
-<dt><h3>How do I shift the display?</h3>
-<dd>You can shift the display by moving the cursor to the edge of the screen. You
-may also use the "&gt;"/"&lt;" or "."/"," keys.
-<br>
-Another idea would be adjusting the xterm with the -geometry option (e.g.
-something like 'xterm -geometry 110x45 -bg white -name w3m -e w3m -B').
-<dt><h3>How do I move from anchor to anchor?</h3>
-<dd>You can move to the next anchor using TAB. ESC TAB moves cursor to the previous anchor.
-<p>
-<dt><h3>Netscape displays a word red, but w3m doesn't. Why?</h3>
-<dd>w3m doesn't support &lt;FONT COLOR=".."&gt; tags. It won't be impossible to implement this, but I think it would make the document more difficult to read.
-<p>
-<dt><h3>How do I change the colour of anchor-/image-/form links?</h3>
-<dd>Type 'o' within w3m to get the 'options' screen. You can change these
-settings there.
-<dt>
-<dt><h3>w3m doesn't seem to use the variable EDITOR. Why? </h3>
-<dd><dd>Go to the 'options' screen using the "o" key. Any entry in the 'Editor' field will override the environment variable.
-<br>
-If you want to use the editor specified by EDITOR blank the field and push [OK].
-<p>
-<dt><h3>How do I quit a search or URL text input?</h3>
-<dd>Clear input text using Ctrl-u and hit RETURN.
-</dd>
-</dl>
-<br>
-<div align=right>
-<i>Up to <a href="#index">index</a></i>
-</div>
-<br>
-<u><h2><a name="www">Questions about WWW usage</a></h2></u>
-<br>
-<dl>
-<dt><h3>How do I fill in forms with w3m?</h3>
-<dd>Form input fields are displayed in red (or reverse). Move the cursor to
-them and hit RETURN. Then,
-<ul>
-<li>if it is a text input field, put in your text on the bottom line,
-<li>if it is a radiobutton or checkbox, that item is selected,
-<li>if it is a textarea, an editor is spawned,
-<li>if it is 'submit' or 'reset', well, just do it.
-</ul>
-<dt><h3>Seems like w3m is slower than Netscape or Lynx. Why?</h3>
-<dd>w3m renders a HTML document in two passes. Therefore it displays the documentnot before having read the entire document.
-<br>
-Netscape or Lynx display the document before having read the whole page,
-and therefore seem faster.
-<p>
-<dt><h3>Loading time doesn't decrease when loading a previously seen page</h3>
-<dd>w3m doesn't have its own cache. Therefore, it reads the document
-from the server each time it accesses it. If possible, use a cache server. 
-<p>
-<dt><h3>How do I download a linked file?</h3>
-<dd>Use 'a' (or 'd' with Lynx-like keybindings) or ESC RET. If you want to download an inline image, use ESC 'I'.
-<p>
-<dt><h3>How do I specify a proxy server?</h3>
-<dd>Set the environment variable HTTP_PROXY or use the option setting panel
-("o" key). For example, if you want to use port 8000 of proxy.hogege.com, specify
-<p>
+    <p>
+     with 2, 3, 4, or 5.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     Does w3m support monochrome displays?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     Yes. You may either
+    </p>
+    <ol>
+     <li>
+      Answer the above-mentioned <q>configure</q> question with 1,
+      or
+     </li>
+     <li>
+      Invoke w3m with the -M option, or
+     </li>
+     <li>
+      Type <q>o</q> within w3m to enter the options screen and turn
+      off color display mode.
+     </li>
+    </ol>
+   </dd>
+   <dt>
+    <b>
+     How do I shift the display?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     You can shift the display by moving the cursor to the edge of
+     the screen. You may also use the <q>&gt;</q>/<q>&lt;</q> or
+     <q>.</q>/<q>,</q> keys.
+    </p>
+    <p>
+     Another idea would be adjusting the xterm with the -geometry
+     option (e.g. something like <q>xterm -geometry 110x45 -bg white
+     -name w3m -e w3m -B</q>).
+    </p>
+   </dd>
+   <dt>
+    <b>
+     How do I move from anchor to anchor?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     You can move to the next anchor using TAB. ESC TAB moves the
+     cursor to the previous anchor.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     Graphical browsers display a word red, but w3m doesn't. Why?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     w3m doesn't support the HTML COLOR="..." attribute. It wouldn't
+     be impossible to implement this, but I think it would make
+     documents more difficult to read.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     How do I change the color of anchor/image/form links?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     Type <q>o</q> within w3m to get the <q>options</q> screen. You
+     can change these settings there.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     w3m doesn't seem to use the variable EDITOR. Why?
+    </b>
+   </dt>
+    <dd>
+     <p>
+     Go to the <q>options</q> screen using the <q>o</q> key. Any
+     entry in the <q>Editor</q> field will override the environment
+     variable.
+    </p>
+    <p>
+     If you want to use the editor specified by EDITOR, blank the
+     field and press [OK].
+     </p>
+   </dd>
+   <dt>
+    <b>
+     How do I quit a search or URL text input?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     Clear input text using CTRL-u and hit RETURN.
+    </p>
+   </dd>
+  </dl>
+  <p align="right">
+   <i>
+    Up to <a href="#index">index</a>
+   </i>
+  </p>
+  <h2 id="www">
+   <u>
+    Questions about WWW usage
+   </u>
+  </h2>
+  <dl>
+   <dt>
+    <b>
+     How do I fill in forms with w3m?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     Form input fields are displayed in red (or reverse). Move the
+     cursor to them and hit RETURN. Then,
+    </p>
+    <ul>
+     <li>
+      if it is a text input field, put in your text on the bottom
+      line,
+     </li>
+     <li>
+      if it is a radiobutton or checkbox, that item is selected,
+     </li>
+     <li>
+      if it is a textarea, an editor is spawned,
+     </li>
+     <li>
+      if it is <q>submit</q> or <q>reset</q>, well, just do it.
+     </li>
+    </ul>
+   </dd>
+   <dt>
+    <b>
+     Seems like w3m is slower than some other browsers. Why?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     w3m renders a HTML document in two passes. Therefore it doesn't
+     start to display the document until it has finished reading it.
+    </p>
+    <p>
+     Most other browsers display the document before having read the
+     whole page, and therefore seem faster.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     Loading time doesn't decrease when loading a previously seen
+     page.
+    </b>
+   </dt>
+   <dd>
+    <p>
+     w3m doesn't have its own cache. Therefore, it reads the document
+     from the server each time it accesses it. If possible, use a
+     cache server.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     How do I download a linked file?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     Use <q>a</q> (or <q>d</q> with Lynx-like keybindings) or ESC RET.
+     If you want to download an inline image, use ESC <q>I</q>.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     How do I specify a proxy server?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     Set the environment variables HTTP_PROXY, HTTPS_PROXY, GOPHER_PROXY
+     and FTP_PROXY, or use the option setting panel (<q>o</q> key). For
+     example, if you want to use port 8000 of proxy.example.org, specify
+    </p>
 <pre>
-    http://proxy.hogege.com:8000/
+    http://proxy.example.org:8000/
 </pre>
-<p>
-<dt><h3>w3m freezes when I invoke an external browser.</h3>
-<dd>Enter w3m's option screen using the 'o' key and specify
-<p>
+   </dd>
+   <dt>
+    <b>
+     w3m freezes when I invoke an external browser.
+    </b>
+   </dt>
+   <dd>
+    <p>
+     Enter w3m's option screen using the <q>o</q> key and specify
+    </p>
 <pre>
-    netscape %s &
+    firefox %s &
 </pre>
-<p>
-(if you are using netscape).
-<p>
-<dt><h3>How do I change the default image viewer?</h3>
-<dd>By default w3m uses xv to view images. If you want to change it into, let's say, 'display', add the following line to ~/.w3m/mailcap or /etc/mailcap.
-<p>
+    <p>
+     (if you are using Firefox). Note that %s is replaced with the URL
+     when invoking.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     How do I change the default image viewer?
+    </b>
+    </dt>
+    <dd>
+     <p>
+      By default w3m uses xv to view images. If you want to change it
+      into, let's say, <q>display</q>, add the following line to
+      ~/.w3m/mailcap or /etc/mailcap.
+     </p>
 <pre>
 image/*; display %s
 </pre>
-<p>
-You can specify external viewers of other file types as well:
-<p>
+     <p>
+      You can specify external viewers of other file types as well:
+     </p>
 <pre>
 image/*;                     display %s
 application/postscript;      ghostview %s
 application/x-dvi;           xdvi %s
 </pre>
-<dt><h3>How do I enter a URL?</h3>
-<dd>Type SHIFT-U
-<p>
-<dt><h3>w3m appends a URL to the former one despite of having cleared the line
-with Ctrl-u. What to do?</h3>
-<dd>Enter the <i>complete</i> adress, e.g. http://www.slashdot.org.
-</dd>
-</dl>
-<br>
-<div align=right>
-<i>Up to <a href="#index">index</a></i>
-</div>
-<br>
-<u><h2><a name="other">Miscellaneous</a></h2></u>
-<br>
-<dl>
-<dt><h3>What is w3m's configuration file?</h3>
-<dd>It is ~/.w3m/config.
-With this file, you can adjust w3m's behavior by changing values of options
-that are described to be varied with the option setting panel.
-Each line contains setting for one option, which is a pair of an option name
-and its value with a space as a separator.
-<p>
-<dt><h3>What are these w3mxxxx files in my ~/.w3m directory for?</h3>
-<dd>These are temporary files used by w3m when reading documents from a
-WWW server. They are not cache files and are usually deleted when w3m is 
-terminated. If there remain any temp files, please remove them by yourself.
-<p>
-</dd>
-</dl>
-<br>
-<div align=right>
-<i>Up to <a href="#index">index</a></i>
-</div>
-<br>
-</BODY>
-</HTML>
+    </dd>
+    <dt>
+     <b>
+      How do I enter a URL?
+     </b>
+   </dt>
+   <dd>
+    <p>
+     Type SHIFT-u
+    </p>
+   </dd>
+   <dt>
+    <b>
+     w3m appends a URL to the former one even when I clear the line
+     with CTRL-u. What should I do?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     Enter the <i>complete</i> address, e.g. http://www.slashdot.org.
+    </p>
+   </dd>
+  </dl>
+  <p align="right">
+   <i>
+    Up to <a href="#index">index</a>
+   </i>
+  </p>
+  <h2 id="other">
+   <u>
+    Miscellaneous
+   </u>
+  </h2>
+  <dl>
+   <dt>
+    <b>
+     What is w3m's configuration file?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     It is ~/.w3m/config.
+    </p>
+    <p>
+     With this file, you can adjust w3m's behavior by changing the
+     values of options whose effects are described in the option
+     setting panel. Each line contains one option setting, consisting
+     of an option name and its value with a space as a separator.
+    </p>
+   </dd>
+   <dt>
+    <b>
+     What are these w3mxxxx files in my ~/.w3m directory for?
+    </b>
+   </dt>
+   <dd>
+    <p>
+     These are temporary files used by w3m when reading documents
+     from a WWW server. They are not cache files and are usually
+     deleted when w3m is terminated. If any temp files are left
+     behind, please remove them yourself.
+    </p>
+   </dd>
+  </dl>
+  <p align="right">
+   <i>
+    Up to <a href="#index">index</a>
+   </i>
+  </p>
+ </body>
+</html>
diff --git a/doc/HISTORY b/doc/HISTORY
index b8f5b94..7f7ae2b 100644
--- a/doc/HISTORY
+++ b/doc/HISTORY
@@ -588,7 +588,7 @@ From: Okabe Katsuya <okabek@guitar.ocn.ne.jp>
   * space characters in a buffer are mapped into 0x80-0x9f.
   * unprintable characters (0x80-0xa0) are displayed as \xxx.
 
-From: Tsutomu Okada ($B2,ED(B $BJY(B) <okada@furuno.co.jp>
+From: Tsutomu Okada <okada@furuno.co.jp>
 Subject: [w3m-dev 01354] minimize when #undef USE_GOPHER or USE_NNTP
 
 2000/11/16
@@ -1422,7 +1422,7 @@ HTML4.0 ID attribute support.
 
 From: Okabe Katsuya <okabe@fphy.hep.okayama-u.ac.jp>
 table get weird when it contains <input type=hidden>.
-$B=$@5!%(B
+Fixed.
 
 2000.2.12
 From: Rogue Metal - Jake Moorman <roguemtl@stampede.org>
@@ -1649,15 +1649,15 @@ From: patakuti
 If an <input type=button> tag has no `name' attribute,
 w3m adds it an inappropriate name attribute.
 
-From: $B$d$^(B
+From: Yama
 Now w3m can handle a frameset that has both ROWS and COLS.
 
 From: aito
 Now bookmarking is done by a separate command w3mbookmark.
 
-C-s $B$G2hLLI=<($,;_$^$C$F$$$?%P%0$N=$@5!%(B
+Bug fix that C-s hangs.
 
-$BJ8;zF~NO;~$K(B C-g $B$GCf;_$G$-$k$h$&$K$7$?!%(B
+Enable C-g to quit for keyboard input.
 
 From: hovav@cs.stanford.edu
 When downloading a file, an attempt to save it to a non-exist
@@ -1699,7 +1699,7 @@ Menu behavior is changed.
 * Clicking outside the menu causes cancellation of sub-menu.
 * <, >, +, - abandoned
 
-From: $B$*$+$@(B <okada@furuno.co.jp>
+From: Okada <okada@furuno.co.jp>
 Now C-a/C-e are bound to 'jump to the first/last item in menu.'
 
 From: "OMAE, jun" <jun-o@osb.att.ne.jp>
diff --git a/doc/MANUAL.html b/doc/MANUAL.html
index aff0189..44379e9 100644
--- a/doc/MANUAL.html
+++ b/doc/MANUAL.html
@@ -1,508 +1,2207 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<head><title>w3m manual</title>
-</head>
-<body>
-<h1>w3m MANUAL</h1>
-<div align=right>
-Akinori Ito<br>
-aito@fw.ipsj.or.jp 
-</div>
-<h2>Index</h2>
-<menu>
-<li><a href="#Introduction">Introduction</a>
-<li><a href="#Options">Options</a>
-<li><a href="#Color">Document color</a>
-<li><a href="#Key:orig">Key binding</a>
-<li><a href="#Key:lynx">Lynx-like key binding</a>
-<li><a href="#Mouse">Mouse operation</a>
-<li><a href="#Key:custom">Key customization</a>
-<li><a href="#LocalCGI">Local CGI</a>
-</menu>
-
-<hr>
-<a name="Introduction"></a>
-<h2>Introduction</h2>
-w3m is a pager/text-based WWW browser. You can browse local documents and/or 
-documents on the WWW using a terminal emulator.
-
-<hr>
-<a name="Options"></a>
-<h2>Options</h2>
-
-Command line usage is
-<p>
+ <head>
+  <meta http-equiv=content-type content="text/html;charset=US-ASCII">
+  <title>
+   w3m manual
+  </title>
+ </head>
+ <body>
+   <!--
+Todo:
+words anchor, link, hyperlink are used with the meaning link. Decide which one shall be prefered and used throughout the documentation
+-->
+   <!--
+Todo:
+Keybindigs: Check whether there are keybindings that contain SHIFT-Letter which shall be replaced with the majuscule. Having this notation all over the documentation, this shall be noted in the introduction paragraph of section "Key bindings"
+-->
+   <!--
+insertions tagged with "mh 2016-03-29" come from the latest version of manual page w3m (1) 
+-->
+   <h1>w3m MANUAL</h1>
+  <div align="right">
+   Akinori Ito<br>
+   aito@fw.ipsj.or.jp
+  </div>
+  <h2>Index</h2>
+  <ul>
+   <li>
+    <a href="#Introduction">
+     Introduction
+    </a>
+   </li>
+   <li>
+    <a href="#Options">
+     Options
+    </a>
+   </li>
+   <li>
+    <a href="#Color">
+     Document colors
+    </a>
+   </li>
+   <li>
+    <a href="#Key:orig">
+     Key bindings
+    </a>
+   </li>
+   <li>
+    <a href="#Key:lynx">
+     Lynx-like key bindings
+    </a>
+   </li>
+   <li>
+    <a href="#Mouse">
+     Mouse operation
+    </a>
+   </li>
+   <li>
+    <a href="#Key:custom">
+     Key customization
+    </a>
+   </li>
+   <li>
+    <a href="#LocalCGI">
+     Local CGI
+    </a>
+   </li>
+  </ul>
+  <hr>
+  <h2 id="Introduction">
+   Introduction
+  </h2>
+  <p>
+   w3m is a pager/text-based WWW browser. You can browse local
+   documents and/or documents on the WWW using a terminal emulator.
+  </p>
+  <hr>
+  <h2 id="Options">
+   Options
+  </h2>
+  <p>
+   Command line usage is
+  </p>
 <pre>
     w3m [options] [file|URL]
 </pre>
-<P>
-If you specify filenames/URLs on command line, these documents are displayed. 
-If you specify nothing, w3m reads a document from standard input and display it.
-If no filename and/or URLs are specified and standard input is tty, w3m terminates
-without displaying anything.
-
-<p>
-Options are as follows:
-<dl>
-<dt>+&lt;line number&gt;
-<dd>Move to the specified line.
-<dt>-t width
-<dd>Specify tab width. Default is 8.
-<dt>-r
-<dd>When displaying text/plain document, prohibit emphasis using backspace.
-If you don't specify this option, 
-``A^H_'' is interpreted as underlined character and ``A^HA'' as a bold character.
-<dt>-l number
-<dd>Specify line number preserved internally when reading text/plain document
-fron standard input. Default is 10000.
-<dt>-s
-<dd>Display documents with Shift_JIS code.
-<dt>-e
-<dd>Display documents with EUC_JP code.
-<dt>-j
-<dd>Display documents with ISO-2022-JP code.
-<dt>-T type
-<dd>Specify document type. Without this option, document type
-is determined from extension of a file. If the determination
-fails, the document is regarded as text/plain.
-<p>
-Example:<br>
-Read HTML document from standard input and display it
+  <p>
+   If you specify filenames/URLs on the command line, these documents
+   are displayed. If you specify nothing, w3m will read a document
+   from standard input and display it. If it doesn't find a document
+   there either then normally w3m will terminate.
+  </p>
+  <p>
+   Options include:
+  </p>
+  <dl>
+   <dt>
+    +<i>number</i>
+   </dt>
+   <dd>
+    <p>
+     Move to the specified line-number.
+    </p>
+   </dd>
+  <dt>
+    -t <i>width</i>
+    <!--mh 2016-03-29 -t <i>num</i>-->
+   </dt>
+   <dd>
+    <p>
+      Specify tab width. Default is 8.
+      <!--mh 2016-03-29 set tab width to num columns. No effect on stdout-->
+    </p>
+   </dd>
+   <dt>
+    -r
+   </dt>
+   <dd>
+    <p>
+     When displaying text/plain documents, prohibit emphasis using
+     backspace. If you don't specify this option, <q>A^H_</q> is
+     interpreted as an underlined <q>A</q> and <q>A^HA</q> as a bold
+     <q>A</q>.
+<!-- mh 2016-03-29 
+use caret notation to display special escape characters (such as ANSI escapes or nroff-style backspaces for bold  and  underlined characters) instead of processing them
+-->
+    </p>
+   </dd>
+   <dt>
+    -l <i>number</i>
+   </dt>
+   <dd>
+    <p>
+     Specify the number of lines that should be cached while reading a
+     text/plain document from standard input. Default is 10,000.
+    </p>
+   </dd>
+   <dt>
+    -O <i>charset</i>
+   </dt>
+   <dd>
+    <p>
+     Specify display/output charset.
+<!-- mh 2016-03-29
+user defined character encoding of output data
+-->
+    </p>
+   </dd>
+   <dt>
+    -I <i>charset</i>
+   </dt>
+   <dd>
+    <p>
+     Specify document charset.
+<!-- mh 2016-03-29
+user defined character encoding of input data
+-->
+    </p>
+   </dd>
+   <dt>
+    -T <i>type</i>
+   </dt>
+   <dd>
+    <p>
+     Specify document type. Without this option, document type is
+     determined from the extension of a file. If the determination
+     fails, the document is regarded as text/plain. For example:
+    </p>
+    <p>
+     Read HTML document from standard input and display it
+    </p>
 <pre>
-   cat hoge.html | w3m -T text/html
+   cat example.html | w3m -T text/html
 </pre>
-<p>
-Display HTML source
+   <p>
+    Display HTML source
+   </p>
 <pre>
-   w3m -T text/plain hoge.html
+   w3m -T text/plain example.html
 </pre>
-<dt>-m
-<dd>Display document with Internet message mode.
-With this option, w3m determines document type from header information.
-It is useful when reading E-mail or NetNews messages.
-<dt>-v
-<dd>visual startup mode.
-<dt>-B
-<dd>Show the bookmark.
-<dt>-bookmark file
-<dd>Specify bookmark file.
-<dt>-M
-<dd>Monochrome display mode.
-<dt>-F
-<dd>Automatically render frame.
-<dt>-S
-<dd>Squeeze blank lines.
-<dt>-X
-<dd>Upon exit, do not display preserved screen.
-<dt>-W
-<dd>Toggle wrap search mode.
-<dt>-o option=value
-<dd>Specify option. The option names and values are
-same as that appears in ~/.w3m/config.
-<dt>-cookie
-<dd>Process cookies.
-<dt>-no-cookie
-<dd>Don't process cookies.
-<dt>-num
-<dd>Show linenumber.
-<dt>-dump
-<dd>Read document specified by URL and dump formatted text into standard
-output. The width of the document become 80. This width can be overridden
-with -cols option.
-<dt>-cols width
-<dd>Specify document width. Used with -dump option.
-<dt>-ppc count
-<dd> Specify the number of pixels per character (default 8.0). Larger
- values will make tables narrower.
-<dt>-dump_source
-<dd>Read document specified by URL and dump the source.
-<dt>-dump_head
-<dd>Read document specified by URL and dump headers.
-<dt>-dump_both
-<dd>Read document specified by URL and dump headers and the source.
-<dt>-dump_extra
-<dd>Read document specified by URL and dump extra informations, headers and the source.
-<dt>-post file
-<dd>use POST method with file content.
-<dt>-header string
-<dd>insert string as a header.
-<dt>-no-proxy
-<dd>Don't use proxy server.
-<dt>-no-graph
-<dd>Use ASCII character to draw frames.
-<dt>-no-mouse
-<dd>Don't activate mouse.
-<dt>-config file
-<dd>specify config file.
-</dl>
-
-<hr>
-<a name="Color"></a>
-<h2>Document color</h2>
-
-Links and images are displayed as follows.
-<div align="center">
-<table border="1">
-<tr><th>&nbsp;</th><th>Color mode</th><th>Monochrome mode</th></tr>
-<tr><td>links</td><td>blue</td><td>underline</td></tr>
-<tr><td>inline images</td><td>green</td><td>reverse</td></tr>
-<tr><td>form input</td><td>red</td><td>reverse</td></tr>
-</table>
-</div>
-These colors can be customized using option setting command "o".
-
-<hr>
-<a name="Key:orig"></a>
-<h2>Key binding</h2>
-
-After invocation, you can operate w3m by one-character commands from
-the keyboard.
-<P>
-Here's the original key-binding table. If you are using Lynx-like key
-bindings, see <a href="#Key:lynx">the Lynx-like key binding</a>.
-
-<H3>Page/Cursor motion</H3>
-<table>
-<TR><TD WIDTH=100>SPC,C-v<TD>Forward page
-<TR><TD>b,ESC v<TD>Backward page
-<TR><TD>l,C-f<TD>Cursor right
-<TR><TD>h,C-b<TD>Cursor left
-<TR><TD>j,C-n<TD>Cursor down
-<TR><TD>k,C-p<TD>Cursor up
-<TR><TD>J<TD>Roll up one line
-<TR><TD>K<TD>Roll down one line
-<TR><TD>^,C-a<TD>Go to the beginning of line
-<TR><TD>$,C-e<TD>Go to the end of line
-<TR><TD>w<TD>Go to next word
-<TR><TD>W<TD>Go to previous word
-<TR><TD>&gt;<TD>Shift screen right
-<TR><TD>&lt;<TD>Shift screen left
-<TR><TD>.<TD>Shift screen one column right
-<TR><TD>,<TD>Shift screen one column left
-<TR><TD>g,M-&lt;<TD>Go to the first line
-<TR><TD>G,M-&gt;<TD>Go to the last line
-<TR><TD>ESC g<TD>Go to specified line
-<TR><TD>Z<TD>Move to the center line
-<TR><TD>z<TD>Move to the center column
-<TR><TD>TAB<TD>Move to next hyperlink
-<TR><TD>C-u,ESC TAB<TD>Move to previous hyperlink
-<TR><TD>[<TD>Move to the first hyperlink
-<TR><TD>]<TD>Move to the last hyperlink
-</table>
-
-<H3>Hyperlink operation</H3>
-<table>
-<TR><TD WIDTH=100>RET<TD>Follow hyperlink
-<TR><TD>a, ESC RET<TD>Save link to file
-<TR><TD>u<TD>Peek link URL
-<TR><TD>i<TD>Peek image URL
-<TR><TD>I<TD>View inline image
-<TR><TD>ESC I<TD>Save inline image to file
-<TR><TD>:<TD>Mark URL-like strings as anchors
-<TR><TD>ESC :<TD>Mark Message-ID-like strings as news anchors
-<TR><TD>c<TD>Peek current URL
-<TR><TD>=<TD>Display information about current document
-<TR><TD>C-g<TD>Show current line number
-<TR><TD>C-h<TD>View history of URL
-<TR><TD>F<TD>Render frame
-<TR><TD>M<TD>Browse current document using external browser
-(use 2M and 3M to invoke second and third browser)
-<TR><TD>ESC M<TD>Browse link using external browser
-(use 2ESC M and 3ESC M to invoke second and third browser)
-</table>
-
-<H3>File/Stream operation</H3>
-<table>
-<TR><TD WIDTH=100>U<TD>Open URL
-<TR><TD>V<TD>View new file
-<TR><TD>@<TD>Execute shell command and load
-<TR><TD>#<TD>Execute shell command and browse
-</table>
-
-<H3>Buffer operation</H3>
-<table>
-<TR><TD WIDTH=100>B<TD>Back to the previous buffer
-<TR><TD>v<TD>View HTML source
-<TR><TD>s<TD>Select buffer
-<TR><TD>E<TD>Edit buffer source
-<TR><TD>C-l<TD>Redraw screen
-<TR><TD>R<TD>Reload buffer
-<TR><TD>S<TD>Save buffer
-<TR><TD>ESC s<TD>Save source
-<TR><TD>ESC e<TD>Edit buffer image
-</table>
-
-<H3>Buffer selection mode</H3>
-<table>
-<TR><TD WIDTH=100>k, C-p<TD>Select previous buffer
-<TR><TD>j, C-n<TD>Select next buffer
-<TR><TD>D<TD>Delect current buffer
-<TR><TD>RET<TD>Go to the selected buffer
-</table>
-
-<H3>Bookmark operation</H3>
-<table>
-<TR><TD WIDTH=100>ESC b<TD>Load bookmark
-<TR><TD>ESC a<TD>Add current to bookmark
-</table>
+   </dd>
+   <dt>
+    -m
+   </dt>
+   <dd>
+    <p>
+     Display document using <q>Internet message mode</q>. With this
+     option, w3m determines document type from header information.
+     This is useful when reading e-mail or Usenet news posts.
+<!-- mh 2016-03-29
+Render the body of Usenet messages according to the header <q>Content-type</q>
+-->
+    </p>
+   </dd>
+   <dt>
+    -v
+   </dt>
+   <dd>
+    <p>
+     Show w3m's startup page.
+<!-- mh 2016-03-29
+with no other target defined, welcome users with a built-in page
+-->
+    </p>
+   </dd>
+   <dt>
+    -B
+   </dt>
+   <dd>
+    <p>
+     Show w3m's bookmarks page.
+<!-- mh 2016-03-29
+with no other target defined, use the bookmark page for startup
+-->
+    </p>
+   </dd>
+   <dt>
+    -bookmark <i>file</i>
+   </dt>
+   <dd>
+    <p>
+     Specify a custom bookmarks file.
+    </p>
+   </dd>
+   <dt>
+    -M
+   </dt>
+   <dd>
+    <p>
+     Monochrome display mode.
+<!-- mh 2016-03-29
+monochrome display
+-->
+    </p>
+   </dd>
+   <dt>
+    -F
+   </dt>
+   <dd>
+    <p>
+     Automatically render HTML frames.
+<!-- mh 2016-03-29
+render frames
+-->
+    </p>
+   </dd>
+   <dt>
+    -s
+   </dt>
+   <dd>
+    <p>
+     Squeeze blank lines.
+<!-- mh 2016-03-29
+squeeze multiple blank lines into one
+-->
+    </p>
+   </dd>
+   <dt>
+    -X
+   </dt>
+   <dd>
+    <p>
+     Upon exit, do not reinitialize the terminal.
+    </p>
+   </dd>
+   <dt>
+    -W
+   </dt>
+   <dd>
+    <p>
+     Toggle wrapping mode in searches.
+<!-- mh 2016-03-29
+toggle wrapping in searches
+-->
 
-<H3>Search</H3>
-<table>
-<TR><TD WIDTH=100>/,C-s<TD>Search forward
-<TR><TD>?,C-r<TD>Search backward
-<TR><TD>n<TD>Search next
-<TR><TD>N<TD>Search previous
-<TR><TD>C-w<TD>Toggle wrap search mode
-</table>
+    </p>
+   </dd>
+   <dt>
+    -o <i>option</i>=<i>value</i>
+   </dt>
+   <dd>
+    <p>
+     Specify option. The available option names and values are the
+     same as in ~/.w3m/config.
+<!-- mh 2016-03-29
+modify one configuration item with an explicitly given value; without option=value, equivalent to -show-option
+-->
+    </p>
+   </dd>
+   <dt>
+    -cookie
+   </dt>
+   <dd>
+    <p>
+     Process cookies.
+<!-- mh 2016-03-29
+use stored cookies and accept new ones
+-->
 
-<H3>Mark operation</H3>
-<table>
-<TR><TD WIDTH=100>C-SPC<TD>Set/unset mark
-<TR><TD>ESC p<TD>Go to previous mark
-<TR><TD>ESC n<TD>Go to next mark
-<TR><TD>"<TD>Mark by regular expression
-</table>
+    </p>
+   </dd>
+   <dt>
+    -no-cookie
+   </dt>
+   <dd>
+    <p>
+     Don't process cookies.
+<!-- mh 2016-03-29
+neither use stored cookies nor accept new ones
+-->
 
-<H3>Miscellany</H3>
-<table>
-<TR><TD WIDTH=100>!<TD>Execute shell command
-<TR><TD>H<TD>Help (load this file)
-<TR><TD>o<TD>Set option
-<TR><TD>C-k<TD>Show cookie jar
-<TR><TD>C-c<TD>Stop
-<TR><TD>C-z<TD>Suspend
-<TR><TD>q<TD>Quit (with confirmation, if you like)
-<TR><TD>Q<TD>Quit without confirmation
-</table>
+    </p>
+   </dd>
+   <dt>
+    -num
+   </dt>
+   <dd>
+    <p>
+     Show line-numbers.
+<!-- mh 2016-03-29
+display each line's number
+-->
+    </p>
+   </dd>
+   <dt>
+    -dump
+   </dt>
+   <dd>
+    <p>
+      Read document specified by URL and dump page rendered as text
+      into standard output. A width of 80 columns is used unless option
+      -cols sets another value.
+      
+<!-- mh 2016-03-29
+dump  rendered  page  into stdout. Set implicitly when output is directed to a file or pipe
+-->
 
-<H3>Line-edit mode</H3>
-<table>
-<TR><TD WIDTH=100>C-f<TD>Move cursor forward
-<TR><TD>C-b<TD>Move cursor backward
-<TR><TD>C-h<TD>Delete previous character
-<TR><TD>C-d<TD>Delete current character
-<TR><TD>C-k<TD>Kill everything after cursor
-<TR><TD>C-u<TD>Kill everything before cursor
-<TR><TD>C-a<TD>Move to the top of line
-<TR><TD>C-e<TD>Move to the bottom of line
-<TR><TD>C-p<TD>Fetch the previous string from the history list
-<TR><TD>C-n<TD>Fetch the next string from the history list
-<TR><TD>TAB,SPC<TD>Complete filename
-<TR><TD>RETURN<TD>Accept
-</table>
+    </p>
+   </dd>
+   <dt>
+    -cols <i>width</i>
+   </dt>
+   <dd>
+    <p>
+     Specify document width. Used with -dump option.
+    </p>
+   </dd>
+   <dt>
+    -ppc <i>count</i>
+   </dt>
+   <dd>
+    <p>
+     Specify the number of pixels per character (default 8.0). Larger
+     values will make tables narrower.
+<!-- mh 2016-03-29
+width of num pixels per character. Range of 4.0 to 32.0, default 8.0. Larger 
+values will make tables narrower. (Implementation not verified)
+-->
+    </p>
+   </dd>
+   <dt>
+    -dump_source
+   </dt>
+   <dd>
+    <p>
+     Read document specified by URL and dump the source.
+<!-- mh 2016-03-29
+dump the page's source code into stdout
+-->
+    </p>
+   </dd>
+   <dt>
+    -dump_head
+   </dt>
+   <dd>
+    <p>
+     Read document specified by URL and dump headers.
+<!-- mh 2016-03-29
+dump response of a HEAD request for a URL into stdout
+-->
+    </p>
+   </dd>
+   <dt>
+    -dump_both
+   </dt>
+   <dd>
+    <p>
+     Read document specified by URL and dump headers and the source.
+<!-- mh 2016-03-29
+dump HEAD, and source code for a URL into stdout
+-->
 
-<hr>
-<a name="Key:lynx"></a>
-<h2>Lynx-like key binding</h2>
+    </p>
+   </dd>
+   <dt>
+    -dump_extra
+   </dt>
+   <dd>
+    <p>
+     Read document specified by URL and dump extra informations,
+     headers, and the source.
+<!-- mh 2016-03-29
+dump HEAD, source code, and extra information  for  a  URL  into
+stdout
+-->
 
-If you have chosen `Lynx-like key binding' at the compile time,
-you can use the following key binding.
+    </p>
+   </dd>
+   <dt>
+    -post <i>file</i>
+   </dt>
+   <dd>
+    <p>
+     Use POST method with file content.
+<!-- mh 2016-03-29
+use POST method to upload data defined in <q>file</q>. The syntax to be
+ used is var1=value1[&amp;var2=value2]...
+-->
 
-<H3>Page/Cursor motion</H3>
-<table>
-<TR><TD WIDTH=100>SPC,C-v,+<TD>Forward page
-<TR><TD>b,ESC v,-<TD>Previous page
-<TR><TD>l<TD>Cursor right
-<TR><TD>h<TD>Cursor left
-<TR><TD>j<TD>Cursor down
-<TR><TD>k<TD>Cursor up
-<TR><TD>J<TD>Roll up one line
-<TR><TD>K<TD>Roll down one line
-<TR><TD>^<TD>Go to the beginning of line
-<TR><TD>$<TD>Go to the end of line
-<TR><TD>&gt;<TD>Shift screen right
-<TR><TD>&lt;<TD>Shift screen left
-<TR><TD>C-a<TD>Go to the first line
-<TR><TD>C-e<TD>Go to the last line
-<TR><TD>G<TD>Go to the specified line
-<TR><TD>Z<TD>Move to the center line
-<TR><TD>z<TD>Move to the center column
-<TR><TD>TAB,C-n,Down arrow<TD>Move to next hyperlink
-<TR><TD>ESC TAB,C-p,Up arrow<TD>Move to previous link
-<TR><TD>C-g<TD>Show current page position
-</table>
+    </p>
+   </dd>
+   <dt>
+    -header <i>string</i>
+   </dt>
+   <dd>
+    <p>
+     Insert string as a header.
+<!-- mh 2016-03-29
+append  <q>string</q>  to  the  HTTP(S)  request. Expected to match the 
+header syntax  Variable: Value
+-->
 
+    </p>
+   </dd>
+   <dt>
+    -no-proxy
+   </dt>
+   <dd>
+    <p>
+     Don't use proxy server.
+    </p>
+   </dd>
+   <dt>
+    -no-graph
+   </dt>
+   <dd>
+    <p>
+     Use ASCII characters to draw frames rather than graphical ones.
+<!-- mh 2016-03-29
+do not use graphic characters for drawing HTML table and 
+frame borders
+-->
 
-<H2>Hyperlink operation</H2>
-<table>
-<TR><TD WIDTH=100>RET, C-f, Right arrow<TD>Follow hyperlink
-<TR><TD>d, ESC RET<TD>Save link to file
-<TR><TD>u<TD>Peek link URL
-<TR><TD>i<TD>Peek image URL
-<TR><TD>I<TD>View inline image
-<TR><TD>ESC I<TD>Save inline image to file
-<TR><TD>:<TD>Mark URL-like strings as anchors
-<TR><TD>ESC :<TD>Mark Message-ID-like strings as news anchors
-<TR><TD>c<TD>Peek current URL
-<TR><TD>=<TD>Display information about current document
-<TR><TD>C-h<TD>View history of URL
-<TR><TD>F<TD>Render frame
-<TR><TD>M<TD>Browse current document using external browser
-(use 2M and 3M to invoke second and third browser)
-<TR><TD>ESC M<TD>Browse link using external browser
-(use 2ESC M and 3ESC M to invoke second and third browser)
-</table>
-
-<H2>File/Stream operation</H2>
-<table>
-<TR><TD WIDTH=100>g,U<TD>Open URL
-<TR><TD>V<TD>View new file
-<TR><TD>@<TD>Execute shell command and load
-<TR><TD>#<TD>Execute shell command and browse
-</table>
-
-<H2>Buffer operation</H2>
-<table>
-<TR><TD WIDTH=100>B, C-b, Left arrow<TD>Back to the previous buffer
-<TR><TD>\<TD>View HTML source
-<TR><TD>s, C-h<TD>Select buffer
-<TR><TD>E<TD>Edit buffer source
-<TR><TD>C-l, C-w<TD>Redraw screen
-<TR><TD>R, C-r<TD>Reload buffer
-<TR><TD>S, p<TD>Save buffer
-<TR><TD>ESC s<TD>Save source
-<TR><TD>ESC e<TD>Edit buffer image
-</table>
-
-<H2>Buffer selection mode</H2>
-<table>
-<TR><TD WIDTH=100>k, C-p<TD>Select previous buffer
-<TR><TD>j, C-n<TD>Select next buffer
-<TR><TD>D<TD>Delect current buffer
-<TR><TD>RET<TD>Go to the selected buffer
-</table>
-
-<H2>Bookmark operation</H2>
-<table>
-<TR><TD WIDTH=100>v, ESC b<TD>Load bookmark
-<TR><TD>a, ESC a<TD>Add current to bookmark
-</table>
-
-<H2>Search</H2>
-<table>
-<TR><TD WIDTH=100>/, C-s<TD>Search forward
-<TR><TD>n<TD>Search next
-<TR><TD>w<TD>Toggle wrap search mode
-</table>
-
-<H2>Mark operation</H2>
-<table>
-<TR><TD WIDTH=100>C-SPC<TD>Set/unset mark
-<TR><TD>P<TD>Go to previous mark
-<TR><TD>N<TD>Go to next mark
-<TR><TD>"<TD>Mark by regular expression
-</table>
-
-<H2>Miscellany</H2>
-<table>
-<TR><TD WIDTH=100>!<TD>Execute shell command
-<TR><TD>H, ?<TD>Help (load this file)
-<TR><TD>o<TD>Set option
-<TR><TD>C-k<TD>Show cookie jar
-<TR><TD>C-c<TD>Stop
-<TR><TD>C-z<TD>Suspend
-<TR><TD>q<TD>Quit (with confirmation, if you like)
-<TR><TD>Q<TD>Quit without confirmation
-</table>
-
-<H2>Line-edit mode</H2>
-<table>
-<TR><TD WIDTH=100>C-f<TD>Move cursor forward
-<TR><TD>C-b<TD>Move cursor backward
-<TR><TD>C-h<TD>Delete previous character
-<TR><TD>C-d<TD>Delete current character
-<TR><TD>C-k<TD>Kill everything after cursor
-<TR><TD>C-u<TD>Kill everything before cursor
-<TR><TD>C-a<TD>Move to the top of line
-<TR><TD>C-e<TD>Move to the bottom of line
-<TR><TD>C-p<TD>Fetch the previous string from the history list
-<TR><TD>C-n<TD>Fetch the next string from the history list
-<TR><TD>TAB,SPC<TD>Complete filename
-<TR><TD>RETURN<TD>Accept
-</table>
-
-<hr>
-<a name="Mouse"></a>
-<h2>Mouse operation</h2>
-If w3m is compiled with mouse option and you are using
-xterm/kterm/rxvt (in this case, you have to set the TERM
-environment variable to `xterm' or `kterm'.) or GPM 
-environment, you can use mouse
-for the navigation. 
-<p>
-<table border=0>
-<tr><td>left click
-<td>Move the cursor to the place pointed by the mouse cursor.
-If you click the cursor and it is on an anchor, follow the anchor.
-<tr><td>middle click
-<td>Back to the previous buffer.
-<tr><td>right click
-<td>Open pop-up menu. You can choose an item by clicking it.
-<tr><td>left drag
-<td>Scroll document. The default behavior is to grab the document
-and drag it. You can reverse the behavior (grab the window and drag it)
-with the option setting panel.
-</table>
-<p>
-
-
-<hr>
-<a name="Key:custom"></a>
-<h2>Key customization</h2>
-You can customize the key binding (except line-editing keymap)
-by describing ~/.w3m/keymap. For example,
+    </p>
+   </dd>
+   <dt>
+    -no-mouse
+   </dt>
+   <dd>
+    <p>
+     Deactivate mouse support.
+    </p>
+   </dd>
+   <dt>
+    -config <i>file</i>
+   </dt>
+   <dd>
+    <p>
+     Specify config file.
+    </p>
+   </dd>
+  </dl>
+  <hr>
+  <h2 id="Color">
+   Document colors
+  </h2>
+  <p>
+   Links and images are displayed as follows.
+  </p>
+  <div align="center">
+   <table border="1">
+    <tr>
+     <th>
+      &nbsp;
+     </th>
+     <th>
+      Color mode
+     </th>
+     <th>
+      Monochrome mode
+     </th>
+    </tr>
+    <tr>
+     <td>
+      links
+     </td>
+     <td>
+      blue
+     </td>
+     <td>
+      underline
+     </td>
+    </tr>
+    <tr>
+     <td>
+      inline images
+     </td>
+     <td>
+      green
+     </td>
+     <td>
+      reverse
+     </td>
+    </tr>
+    <tr>
+     <td>
+      form input
+     </td>
+     <td>
+      red
+     </td>
+     <td>
+      reverse
+     </td>
+    </tr>
+   </table>
+  </div>
+  <p>
+   These colors can be customized using the option setting command
+   <q>o</q>.
+  </p>
+  <hr>
+  <h2 id="Key:orig">
+   Key bindings
+  </h2>
+<!--
+ TODO: reorganise this whole thing into one big table of
+    FUNCTIONNAME | description | default-binding | Lynxlike-binding
+!-->
+  <p>
+   After invoking w3m, you can control it with keyboard commands.
+  </p>
+  <p>
+   Here's the original key-binding table. If you are using Lynx-like
+   key bindings, see <a href="#Key:lynx">the Lynx-like key
+   bindings</a>. Throughout, the <q>C-</q> and <q>M-</q> notations
+   indicate the modifiers <q>control</q> and <q>meta</q> (which can be
+   replaced with <q>alt</q> or ESC); on the other hand <q>2 M</q>
+   simply means <q>2</q> followed by <q>M</q>.
+  </p>
+<!--
+Correction:
+The two equivalents to the meta-key are pressing simultaneously the ALT-key or pressing the ESC-key first and then other mentioned keys.
+-->  
+  <h3>
+   In-page navigation
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     SPC, C-v, +, PGDN
+    </td>
+    <td>
+     Forward page
+    </td>
+   </tr>
+   <tr>
+    <td>
+     b, M-v, -, PGUP
+    </td>
+    <td>
+     Backward page
+    </td>
+   </tr>
+   <tr>
+    <td>
+     l, C-f, RIGHT
+    </td>
+    <td>
+     Cursor right
+    </td>
+   </tr>
+   <tr>
+    <td>
+     h, C-b, LEFT
+    </td>
+    <td>
+     Cursor left
+    </td>
+   </tr>
+   <tr>
+    <td>
+     j, C-n, DOWN
+    </td>
+    <td>
+     Cursor down
+    </td>
+   </tr>
+   <tr>
+    <td>
+     k, C-p, UP
+    </td>
+    <td>
+     Cursor up
+    </td>
+   </tr>
+   <tr>
+    <td>
+     J
+    </td>
+    <td>
+     Scroll screen up one line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     K
+    </td>
+    <td>
+     Scroll screen down one line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     ^, C-a
+    </td>
+    <td>
+     Go to the beginning of line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     $, C-e
+    </td>
+    <td>
+     Go to the end of line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     w
+    </td>
+    <td>
+     Go to the next word
+    </td>
+   </tr>
+   <tr>
+    <td>
+     W
+    </td>
+    <td>
+     Go to the previous word
+    </td>
+   </tr>
+   <tr>
+    <td>
+     &gt;
+    </td>
+    <td>
+     Shift screen right
+    </td>
+   </tr>
+   <tr>
+    <td>
+     &lt;
+    </td>
+    <td>
+     Shift screen left
+    </td>
+   </tr>
+   <tr>
+    <td>
+     .
+    </td>
+    <td>
+     Shift screen one column right
+    </td>
+   </tr>
+   <tr>
+    <td>
+     ,
+    </td>
+    <td>
+     Shift screen one column left
+    </td>
+   </tr>
+   <tr>
+    <td>
+     g, M-&lt;, HOME
+    </td>
+    <td>
+     Go to the first line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     G, M-&gt;, END
+    </td>
+    <td>
+     Go to the last line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-g
+    </td>
+    <td>
+     Go to the specified line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     Z
+    </td>
+    <td>
+     Center on cursor column
+    </td>
+   </tr>
+   <tr>
+    <td>
+     z
+    </td>
+    <td>
+     Center on cursor line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     TAB
+    </td>
+    <td>
+     Move to the next hyperlink
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-u, M-TAB
+    </td>
+    <td>
+     Move to the previous hyperlink
+    </td>
+   </tr>
+   <tr>
+    <td>
+     [
+    </td>
+    <td>
+     Move to the first hyperlink
+    </td>
+   </tr>
+   <tr>
+    <td>
+     ]
+    </td>
+    <td>
+     Move to the last hyperlink
+    </td>
+   </tr>
+  </table>
+  <h3>Hyperlink operation</h3>
+  <table>
+   <tr>
+    <td width="100">
+     C-j, C-m, RET
+    </td>
+    <td>
+     Follow hyperlink
+    </td>
+   </tr>
+   <tr>
+    <td>
+     a, M-RET
+    </td>
+    <td>
+     Save link to file
+    </td>
+   </tr>
+   <tr>
+    <td>
+     u
+    </td>
+    <td>
+     Show link URL
+    </td>
+   </tr>
+   <tr>
+    <td>
+     i
+    </td>
+    <td>
+     Show image URL
+    </td>
+   </tr>
+   <tr>
+    <td>
+     I
+    </td>
+    <td>
+     View inline image
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-I
+    </td>
+    <td>
+     Save inline image to file
+    </td>
+   </tr>
+   <tr>
+    <td>
+     :
+    </td>
+    <td>
+     Mark URL-like strings as hyperlinks
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-:
+    </td>
+    <td>
+     Mark Message-ID-like strings as links
+    </td>
+   </tr>
+   <tr>
+    <td>
+     c
+    </td>
+    <td>
+     Show current URL
+    </td>
+   </tr>
+   <tr>
+    <td>
+     =
+    </td>
+    <td>
+     Show information about current document
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-g
+    </td>
+    <td>
+     Show current position in page
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-h
+    </td>
+    <td>
+     Show browsing history
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M
+    </td>
+    <td>
+     Browse current document using external browser (prefix 2, 3, ...,
+     or 9 to invoke alternate configured browsers, e.g. 3 M)
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-M
+    </td>
+    <td>
+     Browse link using external browser (prefixed as above, e.g.
+     3 M-M)
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Bookmark management
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     M-b
+    </td>
+    <td>
+     Go to the bookmarks page
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-a
+    </td>
+    <td>
+     Bookmark current page
+    </td>
+   </tr>
+  </table>
+  <h3>
+   File/stream operation
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     U
+    </td>
+    <td>
+     Open new URL
+    </td>
+   </tr>
+   <tr>
+    <td>
+     V
+    </td>
+    <td>
+     Open new file
+    </td>
+   </tr>
+   <tr>
+    <td>
+     @
+    </td>
+    <td>
+     Execute shell command and view output
+    </td>
+   </tr>
+   <tr>
+    <td>
+     #
+    </td>
+    <td>
+     Execute shell command and browse output
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Content operations
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     v
+    </td>
+    <td>
+     Toggle viewing as text or rendered HTML
+    </td>
+   </tr>
+   <tr>
+    <td>
+     F
+    </td>
+    <td>
+     Toggle rendering HTML frames
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-l
+    </td>
+    <td>
+     Redraw screen
+    </td>
+   </tr>
+   <tr>
+    <td>
+     R
+    </td>
+    <td>
+     Reload 
+    </td>
+   </tr>
+   <tr>
+    <td>
+     E
+    </td>
+    <td>
+     Edit local source
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-e
+    </td>
+    <td>
+     Edit rendered copy of page
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-s
+    </td>
+    <td>
+     Save source
+    </td>
+   </tr>
+   <tr>
+    <td>
+     S
+    </td>
+    <td>
+     Save rendered copy of page
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Buffer/tab navigation
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     B
+    </td>
+    <td>
+     Go back, <q>popping</q> the buffer stack
+    </td>
+   </tr>
+   <tr>
+    <td>
+     s
+    </td>
+    <td>
+     Show buffer-stack menu
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-t
+    </td>
+    <td>
+     Show tab menu
+    </td>
+   </tr>
+   <tr>
+    <td>
+     T
+    </td>
+    <td>
+     Open current page as new tab
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-t
+    </td>
+    <td>
+     Open link as new tab
+    </td>
+   </tr>
+   <tr>
+    <td>
+     }
+    </td>
+    <td>
+     Switch to next tab
+    </td>
+   </tr>
+   <tr>
+    <td>
+     {
+    </td>
+    <td>
+     Switch to previous tab
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-q
+    </td>
+    <td>
+     Close current tab
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Search
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     /
+    </td>
+    <td>
+     Search forward
+    </td>
+   </tr>
+   <tr>
+    <td>
+     ?
+    </td>
+    <td>
+     Search backward
+    </td>
+   </tr>
+   <tr>
+    <td width="100">
+     C-s
+    </td>
+    <td>
+     Incremental search forward
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-r
+    </td>
+    <td>
+     Incremental search backward
+    </td>
+   </tr>
+   <tr>
+    <td>
+     n
+    </td>
+    <td>
+     Next match
+    </td>
+   </tr>
+   <tr>
+    <td>
+     N
+    </td>
+    <td>
+     Previous match
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-w
+    </td>
+    <td>
+     Toggle wrapping mode in searches
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Mark management
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     C-SPC
+    </td>
+    <td>
+     Set/unset mark
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-p
+    </td>
+    <td>
+     Go to the previous mark
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-n
+    </td>
+    <td>
+     Go to the next mark
+    </td>
+   </tr>
+   <tr>
+    <td>
+     "
+    </td>
+    <td>
+     Mark all occurrences of a regular expression
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Miscellany
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     !
+    </td>
+    <td>
+     Execute shell command
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-c
+    </td>
+    <td>
+     Invoke w3m function
+    </td>
+   </tr>
+   <tr>
+    <td>
+     H
+    </td>
+    <td>
+     Show help panel
+    </td>
+   </tr>
+   <tr>
+    <td>
+     o
+    </td>
+    <td>
+     Show options panel
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-k
+    </td>
+    <td>
+     Show cookie jar
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-c
+    </td>
+    <td>
+     Interrupt
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-z
+    </td>
+    <td>
+     Suspend w3m
+    </td>
+   </tr>
+   <tr>
+    <td>
+     q
+    </td>
+    <td>
+     Quit (with confirmation dialog)
+    </td>
+   </tr>
+   <tr>
+    <td>
+     Q
+    </td>
+    <td>
+     Quit without confirmation
+    </td>
+   </tr>
+  </table>
+<!--
+ TODO: import leftovers from current keymap (same in both):
+ (    UNDO
+ )    REDO
+ ;    MARK_WORD
+ D    DOWNLOAD_LIST
+ L    LIST
+ m    MOUSE_TOGGLE
+ r    VERSION
+ |    PIPE_BUF
+ M-W  DICT_WORD_AT
+ M-c  COMMAND
+ M-k  DEFINE_KEY
+ M-l  LIST_MENU
+ M-m  MOVE_LIST_MENU
+ M-o  SET_OPTION
+ M-u  GOTO_RELATIVE
+ M-w  DICT_WORD
+ M-Fn MENU
+!-->
+  <p>
+   Two special operational modes exist which have built-in (not
+   redefinable) keymappings:
+  </p>
+  <h3>
+   Menu selection mode
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     k, C-p, UP
+    </td>
+    <td>
+     Select previous item
+    </td>
+   </tr>
+   <tr>
+    <td>
+     j, C-n, DOWN
+    </td>
+    <td>
+     Select next item
+    </td>
+   </tr>
+   <tr>
+    <td>
+     D
+    </td>
+    <td>
+     Delete current item
+    </td>
+   </tr>
+   <tr>
+    <td>
+     SPC, RET
+    </td>
+    <td>
+     Go to the selected item
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Line-editing mode
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     C-f, RIGHT
+    </td>
+    <td>
+     Move cursor forward
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-b, LEFT
+    </td>
+    <td>
+     Move cursor backward
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-h, BKSPC
+    </td>
+    <td>
+     Delete previous character
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-d
+    </td>
+    <td>
+     Delete current character
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-k
+    </td>
+    <td>
+     Kill everything after cursor
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-u
+    </td>
+    <td>
+     Kill everything before cursor
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-a
+    </td>
+    <td>
+     Move to the beginning of line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-e
+    </td>
+    <td>
+     Move to the end of line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-p, UP
+    </td>
+    <td>
+     Fetch the previous string from the history list
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-n, DOWN
+    </td>
+    <td>
+     Fetch the next string from the history list
+    </td>
+   </tr>
+   <tr>
+    <td>
+     TAB, SPC
+    </td>
+    <td>
+     Try to complete filename
+    </td>
+   </tr>
+   <tr>
+    <td>
+     RET
+    </td>
+    <td>
+     Accept
+    </td>
+   </tr>
+  </table>
+  <hr>
+  <h2 id="Key:lynx">
+   Lynx-like key bindings
+  </h2>
+  <p>
+   If w3m was compiled with <q>Lynx-like key bindings</q>, you can use
+   the following key bindings.
+  </p>
+  <h3>
+   In-page navigation
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     SPC, C-v, +
+    </td>
+    <td>
+     Forward page
+    </td>
+   </tr>
+   <tr>
+    <td>
+     b, M-v, -
+    </td>
+    <td>
+     Backward page
+    </td>
+   </tr>
+   <tr>
+    <td>
+     l
+    </td>
+    <td>
+     Cursor right
+    </td>
+   </tr>
+   <tr>
+    <td>
+     h
+    </td>
+    <td>
+     Cursor left
+    </td>
+   </tr>
+   <tr>
+    <td>
+     j
+    </td>
+    <td>
+     Cursor down
+    </td>
+   </tr>
+   <tr>
+    <td>
+     k
+    </td>
+    <td>
+     Cursor up
+    </td>
+   </tr>
+   <tr>
+    <td>
+     J
+    </td>
+    <td>
+     Scroll screen up one line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     K
+    </td>
+    <td>
+     Scroll screen down one line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     ^
+    </td>
+    <td>
+     Go to the beginning of line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     $
+    </td>
+    <td>
+     Go to the end of line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     &gt;
+    </td>
+    <td>
+     Shift screen right
+    </td>
+   </tr>
+   <tr>
+    <td>
+     &lt;
+    </td>
+    <td>
+     Shift screen left
+    </td>
+   </tr>
+   <tr>
+    <td>
+     .
+    </td>
+    <td>
+     Shift screen one column right
+    </td>
+   </tr>
+   <tr>
+    <td>
+     ,
+    </td>
+    <td>
+     Shift screen one column left
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-a, M-&lt;
+    </td>
+    <td>
+     Go to the first line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-e, M-&gt;
+    </td>
+    <td>
+     Go to the last line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     G
+    </td>
+    <td>
+     Go to the specified line
+    </td>
+   </tr>
+   <tr>
+    <td>
+     w
+    </td>
+    <td>
+     Go to the next word
+    </td>
+   </tr>
+   <tr>
+    <td>
+     W
+    </td>
+    <td>
+     Go to the previous word
+    </td>
+   </tr>
+   <tr>
+    <td>
+     Z
+    </td>
+    <td>
+     Center on cursor line
+   </td>
+   </tr>
+   <tr>
+    <td>
+     z
+    </td>
+    <td>
+     Center on cursor column
+    </td>
+   </tr>
+   <tr>
+    <td>
+     TAB, C-n, DOWN
+    </td>
+    <td>
+     Move to the next hyperlink
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-TAB, C-p, C-u, UP
+    </td>
+    <td>
+     Move to the previous link
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-g
+    </td>
+    <td>
+     Show current position in page
+    </td>
+   </tr>
+   <tr>
+    <td>
+     [
+    </td>
+    <td>
+     Move to the first hyperlink
+    </td>
+   </tr>
+   <tr>
+    <td>
+     ]
+    </td>
+    <td>
+     Move to the last hyperlink
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Hyperlink operation
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     C-f, C-j, C-m, RET, RIGHT
+    </td>
+    <td>
+     Follow hyperlink
+    </td>
+   </tr>
+   <tr>
+    <td>
+     d, M-RET
+    </td>
+    <td>
+     Save link to file
+    </td>
+   </tr>
+   <tr>
+    <td>
+     u
+    </td>
+    <td>
+     Show link URL
+    </td>
+   </tr>
+   <tr>
+    <td>
+     i
+    </td>
+    <td>
+     Show image URL
+    </td>
+   </tr>
+   <tr>
+    <td>
+     I
+    </td>
+    <td>
+     View inline image
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-I
+    </td>
+    <td>
+     Save inline image to file
+    </td>
+   </tr>
+   <tr>
+    <td>
+     :
+    </td>
+    <td>
+     Mark URL-like strings as hyperlinks
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-:
+    </td>
+    <td>
+     Mark Message-ID-like strings as news anchors
+    </td>
+   </tr>
+   <tr>
+    <td>
+     c
+    </td>
+    <td>
+     Show current URL
+    </td>
+   </tr>
+   <tr>
+    <td>
+     =
+    </td>
+    <td>
+     Show information about current document
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-h
+    </td>
+    <td>
+     Show browsing history
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M
+    </td>
+    <td>
+     Browse current document using external browser (prefix 2, 3, ...,
+     or 9 to invoke alternate configured browsers, e.g. 3 M)
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-M
+    </td>
+    <td>
+     Browse link using external browser (prefixed as above, e.g.
+     3 M-M)
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Bookmark management
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     v, M-b
+    </td>
+    <td>
+     Go to the bookmarks page
+    </td>
+   </tr>
+   <tr>
+    <td>
+     a, M-a
+    </td>
+    <td>
+     Bookmark current page
+    </td>
+   </tr>
+  </table>
+  <h3>
+   File/stream operation
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     g, U
+    </td>
+    <td>
+     Open new URL
+    </td>
+   </tr>
+   <tr>
+    <td>
+     V
+    </td>
+    <td>
+     Open new file
+    </td>
+   </tr>
+   <tr>
+    <td>
+     @
+    </td>
+    <td>
+     Execute shell command and view output
+    </td>
+   </tr>
+   <tr>
+    <td>
+     #
+    </td>
+    <td>
+     Execute shell command and browse output
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Content operations
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     \
+    </td>
+    <td>
+     Toggle viewing as text or rendered HTML
+    </td>
+   </tr>
+   <tr>
+    <td>
+     F
+    </td>
+    <td>
+     Toggle rendering HTML frames
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-l, C-w
+    </td>
+    <td>
+     Redraw screen
+    </td>
+   </tr>
+   <tr>
+    <td>
+     R, C-r
+    </td>
+    <td>
+     Reload
+    </td>
+   </tr>
+   <tr>
+    <td>
+     E
+    </td>
+    <td>
+     Edit local source
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-e
+    </td>
+    <td>
+     Edit rendered copy of page
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-s
+    </td>
+    <td>
+     Save source
+    </td>
+   </tr>
+   <tr>
+    <td>
+     S, p
+    </td>
+    <td>
+     Save rendered copy of page
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Buffer/tab navigation
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     B, C-b, LEFT
+    </td>
+    <td>
+     Go back, <q>popping</q> the buffer stack
+    </td>
+   </tr>
+   <tr>
+    <td>
+     s, C-h
+    </td>
+    <td>
+     Show buffer-stack menu
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-t
+    </td>
+    <td>
+     Show tab menu
+    </td>
+   </tr>
+   <tr>
+    <td>
+     T
+    </td>
+    <td>
+     Open current page as new tab
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-t
+    </td>
+    <td>
+     Open link as new tab
+    </td>
+   </tr>
+   <tr>
+    <td>
+     }
+    </td>
+    <td>
+     Switch to next tab
+    </td>
+   </tr>
+   <tr>
+    <td>
+     {
+    </td>
+    <td>
+     Switch to previous tab
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-q
+    </td>
+    <td>
+     Close current tab
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Search
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     /, C-s
+    </td>
+    <td>
+     Search forward
+    </td>
+   </tr>
+   <tr>
+    <td>
+     n
+    </td>
+    <td>
+     Next match
+    </td>
+   </tr>
+   <tr>
+    <td>
+     w
+    </td>
+    <td>
+     Toggle wrapping mode in searches
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Mark management
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     C-SPC
+    </td>
+    <td>
+     Set/unset mark
+    </td>
+   </tr>
+   <tr>
+    <td>
+     P
+    </td>
+    <td>
+     Go to the previous mark
+    </td>
+   </tr>
+   <tr>
+    <td>
+     N
+    </td>
+    <td>
+     Go to the next mark
+    </td>
+   </tr>
+   <tr>
+    <td>
+     "
+    </td>
+    <td>
+     Mark all occurrences of a regular expression
+    </td>
+   </tr>
+  </table>
+  <h3>
+   Miscellany
+  </h3>
+  <table>
+   <tr>
+    <td width="100">
+     !
+    </td>
+    <td>
+     Execute shell command
+    </td>
+   </tr>
+   <tr>
+    <td>
+     M-c
+    </td>
+    <td>
+     Invoke w3m function
+    </td>
+   </tr>
+   <tr>
+    <td>
+     H, ?
+    </td>
+    <td>
+     Show help panel
+    </td>
+   </tr>
+   <tr>
+    <td>
+     o
+    </td>
+    <td>
+     Show options panel
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-k
+    </td>
+    <td>
+     Show cookie jar
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-c
+    </td>
+    <td>
+     Interrupt
+    </td>
+   </tr>
+   <tr>
+    <td>
+     C-z
+    </td>
+    <td>
+     Suspend w3m
+    </td>
+   </tr>
+   <tr>
+    <td>
+     q
+    </td>
+    <td>
+     Quit (with confirmation dialog)
+    </td>
+   </tr>
+   <tr>
+    <td>
+     Q
+    </td>
+    <td>
+     Quit without confirmation
+    </td>
+   </tr>
+  </table>
+  <p>
+   The Lynx-like configuration leaves keymappings unchanged in the
+   menu-selection and line-editing modes.
+  </p>
+  <hr>
+  <h2 id="Mouse">
+   Mouse operation
+  </h2>
+  <p>
+   If w3m is compiled with mouse support and you are invoking w3m
+   either from a console with GPM or from an X terminal emulator, you
+   can use the mouse for navigation (in the case of rxvt, you need to
+   set the TERM environment variable to <q>xterm</q> or <q>kterm</q>).
+  </p>
+  <table border="0">
+   <tr>
+    <td>
+     left click
+    </td>
+    <td>
+     Move the cursor to the place indicated by the mouse cursor.
+     If you click the cursor and it is on a hyperlink, follow the
+     link.
+    </td>
+   </tr>
+   <tr>
+    <td>
+     middle click
+    </td>
+    <td>
+     Back to the previous buffer.
+    </td>
+   </tr>
+   <tr>
+    <td>
+     right click
+    </td>
+    <td>
+     Open pop-up menu. You can choose an item by clicking it.
+    </td>
+   </tr>
+   <tr>
+    <td>
+     left drag
+    </td>
+    <td>
+     Scroll document. The default behavior is to grab the document
+     and drag it. You can reverse the behavior (grab the window and
+     drag it) with the option setting panel.
+    </td>
+   </tr>
+  </table>
+  <hr>
+  <h2 id="Key:custom">
+   Key customization
+  </h2>
+  <p>
+   You can customize the key bindings (except the line-editing keymap)
+   in a ~/.w3m/keymap file. For example,
+  </p>
 <pre>
 
    keymap C-o NEXT_PAGE
 
 </pre>
-binds `NEXT_PAGE' function (normally bound to SPC and C-v)
-to control-o. See <a href="README.func">README.func</a> for
-list of available functions. Original and Lynx-like keymap
-definitions are provided (<a href="keymap.default">keymap.default</a>
-and <a href="keymap.lynx">keymap.lynx</a>) as examples.
-
-<hr>
-<a name="LocalCGI"></a>
-<h2>Local CGI</h2>
-You can run CGI scripts using w3m, without any HTTP server.
-It means that w3m behaves like an HTTP server and activates CGI script,
-then w3m reads the output of the script and display it. The 
-<a href="file:///$LIB/w3mbookmark?mode=panel&bmark=~/.w3m/bookmark.html&url=MANUAL.html&title=w3m+manual">bookmark registration</a>
-and <a href="file:///$LIB/w3mhelperpanel?mode=panel">helper-app editor</a>
-are realized as local CGI scripts.
-Using local CGI, w3m can be used as a general purpose form interface.
-<P>
-For security reason, CGI scripts invoked by w3m must be in one of
-these directories.
-<ul>
-<li>The directory where w3m-related files are stored 
-(typically /usr/local/lib/w3m). This directory can be referred
-as $LIB.
-<li>/cgi-bin/ directory. You can map /cgi-bin/ to any directory you like
-with option setting panel (``Directory corresponds to /cgi-bin'' field).
-You can specify multiple paths separated by `:', like
-/usr/local/cgi-bin:/home/aito/cgi-bin. To use /cgi-bin/ directory,
-you must use file:/cgi-bin URL as follows:
+  <p>
+   binds the <q>NEXT_PAGE</q> function (normally bound to SPC and C-v)
+   to control-o. See <a href="README.func">README.func</a> for a
+   list of available functions. Original and Lynx-like keymap
+   definitions are provided (<a href="keymap.default">keymap.default</a>
+   and <a href="keymap.lynx">keymap.lynx</a>) as examples.
+  </p>
+  <hr>
+  <h2 id="LocalCGI">
+   Local CGI
+  </h2>
+  <p>
+   You can run CGI scripts using w3m, without any HTTP server.
+   This means that w3m behaves like an HTTP server and runs the CGI
+   script, then reads the output of the script and displays it. For
+   example, the bookmark registration system and default directory
+   browser are realized as local CGI scripts. Moreover, such scripts
+   allow w3m to be used as a form interface to acquire all kinds of
+   data.
+  </p>
+  <p>
+   For security reason, CGI scripts invoked by w3m must be in one of
+   the following directories:
+  </p>
+  <ul>
+   <li>
+    The directory where w3m-related files are stored (typically
+    /usr/local/lib/w3m). This directory can be referenced as $LIB.
+   </li>
+   <li>
+    The /cgi-bin/ directory. You can map /cgi-bin/ to any directory you
+    like in the option setting panel (the <q>Directory corresponds to
+    /cgi-bin</q> field). You can specify multiple paths separated by
+    <q>:</q>, like /usr/local/cgi-bin:/home/aito/cgi-bin. To use a
+    /cgi-bin/ directory, you must use a file:/cgi-bin URL as follows:
 <pre>
  w3m -o cgi_bin=/path/to/cgi-bin file:/cgi-bin/script.cgi
 </pre>
-It is not recommended to include current directory to this path.
-</ul>
-<p>
-The CGI script can use special header `w3m-control:' to control w3m.
-This field can take any function (see <a href="README.func">README.func</a>),
-and the specified function is invoked after the document is displayed.
-For example, The CGI output
+    It is not recommended to include the current directory to this path.
+   </li>
+  </ul>
+  <p>
+   The CGI script can use the special header <q>w3m-control:</q> to
+   control w3m. This field can take any function (see
+   <a href="README.func">README.func</a>), and the specified function
+   is invoked after the document is displayed. For example, the CGI
+   output
+  </p>
 <pre>
 
 Content-Type: text/plain
 W3m-control: BACK
 
 </pre>
-will display blank page and delete that buffer immediately.
-This is useful when you don't want to display any page after
-the script is invoked. The next example
+  <p>
+   will display a blank page and delete that buffer immediately.
+   This is useful when you don't want to display any page after
+   the script is invoked. The next example
+  </p>
 <pre>
 
 Content-Type: text/plain
@@ -510,26 +2209,32 @@ W3m-control: DELETE_PREVBUF
 
 contents.....
 </pre>
-will override the current buffer.
-<p>
-One w3m-control: header have to contain only one function, but you can
-include more than one w3m-control: lines in the HTTP header.
-In addition, you can specify an argument to GOTO function:
+  <p>
+   will override the current buffer.
+  </p>
+  <p>
+   Each w3m-control: header can contain only one function, but you can
+   include more than one w3m-control: line in the HTTP header.
+   In addition, you can specify an argument to the GOTO function:
+  </p>
 <pre>
 
 Content-Type: text/plain
-W3m-control: GOTO http://www.yahoo.com/
+W3m-control: GOTO http://www.example.org/
 
 </pre>
-This example works exactly the same way to the Location header: 
+   <p>
+    This example works exactly the same way as the Location header:
+   </p>
 <pre>
 
 Content-Type: text/plain
-Location: http://www.yahoo.com/
+Location: http://www.example.org/
 
 </pre>
-Note that this header has no effect when the CGI script is invoked
-through HTTP server.
-
-</body>
+  <p>
+   Note that this header has no effect when the CGI script is invoked
+   through an HTTP server.
+  </p>
+ </body>
 </html>
diff --git a/doc/README b/doc/README
index 324ea3e..60d6d19 100644
--- a/doc/README
+++ b/doc/README
@@ -115,7 +115,6 @@ Current Maintainer
 	Tohoku University Hospital
 	satodai@w3m.jp
 
-Feel free to send your opinion to the w3m mailing-lists.
-	w3m-dev@sic.med.tohoku.ac.jp (Japanese)
-	w3m-dev-en@sic.med.tohoku.ac.jp (English)
+Feel free to send your opinion to:
 	http://w3m.sourceforge.net/
+	https://sourceforge.net/projects/w3m/
diff --git a/doc/README.cookie b/doc/README.cookie
index 56cca50..da16947 100644
--- a/doc/README.cookie
+++ b/doc/README.cookie
@@ -37,7 +37,7 @@ cookie support of w3m
                               (HDN: host domain name)
 
 
- �� If the number of "." in domain name is lesser than 2, it is
+ * If the number of "." in domain name is lesser than 2, it is
     assumed as invalid cookie (cf. RFC 2109 4.3.2), however, you can
     use cookie_avoid_wrong_number_of_dots to avoid this
     restriction. You can set this in "Domains to avoid [wrong number
diff --git a/doc/README.func b/doc/README.func
index 0b2c034..a3ef3ac 100644
--- a/doc/README.func
+++ b/doc/README.func
@@ -1,145 +1,146 @@
-ABORT		Quit w3m without confirmation
-ACCESSSKEY	Popup acceskey menu
-ADD_BOOKMARK	Add current page to bookmark
+ABORT		Quit at once
+ACCESSKEY	Pop up accesskey menu
+ADD_BOOKMARK	Add current page to bookmarks
 ALARM		Set alarm
-BACK		Back to previous buffer
+BACK		Close current buffer and return to the one below in stack
 BEGIN		Go to the first line
-BOOKMARK	Read bookmark
-CENTER_H	Move to the center line
-CENTER_V	Move to the center column
-CHARSET		Change the current document charset
-CLOSE_TAB	Close current tab
-CLOSE_TAB_MOUSE	Close tab on mouse cursor (for mouse action)
-COMMAND		Execute w3m command(s)
+BOOKMARK	View bookmarks
+CENTER_H	Center on cursor column
+CENTER_V	Center on cursor line
+CHARSET 	Change the character encoding for the current document
+CLOSE_TAB	Close tab
+CLOSE_TAB_MOUSE Close tab at mouse pointer
+COMMAND 	Invoke w3m function(s)
 COOKIE		View cookie list
-DEFAULT_CHARSET	Change the default document charset
-DEFINE_KEY	Define a binding between a key stroke and a user command
-DELETE_PREVBUF  Delete previous buffer (mainly for local-CGI)
+DEFAULT_CHARSET Change the default character encoding
+DEFINE_KEY	Define a binding between a key stroke combination and a command
+DELETE_PREVBUF	Delete previous buffer (mainly for local CGI-scripts)
 DICT_WORD	Execute dictionary command (see README.dict)
-DICT_WORD_AT   Execute dictionary command for word at cursor
+DICT_WORD_AT	Execute dictionary command for word at cursor
 DISPLAY_IMAGE	Restart loading and drawing of images
-DOWN		Scroll down one line
-DOWNLOAD	Save document source to file
-DOWNLOAD_LIST	Display download list panel
-EDIT		Edit current document
-EDIT_SCREEN	Edit currently rendered document
+DOWN		Scroll the screen down one line
+DOWNLOAD	Save document source
+DOWNLOAD_LIST	Display downloads panel
+EDIT		Edit local source
+EDIT_SCREEN	Edit rendered copy of document
 END		Go to the last line
-EXEC_SHELL	Execute shell command
-EXIT		Quit w3m without confirmation
-EXTERN		Execute external browser
-EXTERN_LINK	View current link using external browser
-FRAME		Render frame
-GOTO		Go to URL
-GOTO_LINE	Go to specified line
-GOTO_LINK	Go to current link
-GOTO_RELATIVE	Go to relative URL
-HELP		View help
-HISTORY		View history of URL
-INFO		View info of current document
-INTERRUPT	Stop loading document
-INIT_MAILCAP    Reread mailcap (mainly for local-CGI)
-ISEARCH		Incremental search forward
+EXEC_SHELL	Execute shell command and display output
+EXIT		Quit at once
+EXTERN		Display using an external browser
+EXTERN_LINK	Display target using an external browser
+FRAME		Toggle rendering HTML frames
+GOTO		Open specified document in a new buffer
+GOTO_LINE	Go to the specified line
+GOTO_LINK	Follow current hyperlink in a new buffer
+GOTO_RELATIVE	Go to relative address
+HELP		Show help panel
+HISTORY 	Show browsing history
+INFO		Display information about the current document
+INTERRUPT	Suspend w3m to background
+ISEARCH 	Incremental search forward
 ISEARCH_BACK	Incremental search backward
-LEFT		Shift screen one column
-LINE_BEGIN	Go to the beginning of line
-LINE_END	Go to the end of line
-LINE_INFO	Show current line number
-LINK_BEGIN     Go to the first link
-LINK_END       Go to the last link
-LINK_MENU	Popup link element menu
-LIST		Show all links and images
-LIST_MENU	Popup link list menu and go to selected link
-LOAD		Load local file
-MAIN_MENU	Popup menu
+LEFT		Shift screen one column left
+LINE_BEGIN	Go to the beginning of the line
+LINE_END	Go to the end of the line
+LINE_INFO	Display current position in document
+LINK_BEGIN	Move to the first hyperlink
+LINK_END	Move to the last hyperlink
+LINK_MENU	Pop up link element menu
+LIST		Show all URLs referenced
+LIST_MENU	Pop up menu for hyperlinks to browse to
+LOAD		Open local file in a new buffer
+MAIN_MENU	Pop up menu
 MARK		Set/unset mark
-MARK_MID	Mark Message-ID-like strings as anchors
-MARK_URL	Mark URL-like strings as anchors
-MARK_WORD	Mark current word as anchor
-MENU		Popup menu
-MENU_MOUSE	Popup menu at mouse cursor (for mouse action)
-MOUSE_TOGGLE   Toggle activity of mouse
-MOVE_DOWN      Move cursor down (a half screen scroll at the end of screen)
-MOVE_DOWN1     Move cursor down (1 line scroll at the end of screen)
-MOVE_LEFT      Move cursor left (a half screen shift at the left edge)
-MOVE_LEFT1     Move cursor left (1 columns shift at the left edge)
-MOVE_LIST_MENU	Popup link list menu and move cursor to selected link
-MOVE_MOUSE	Move cursor to mouse cursor (for mouse action)
-MOVE_RIGHT     Move cursor right (a half screen shift at the right edge)
-MOVE_RIGHT1    Move cursor right (1 columns shift at the right edge)
-MOVE_UP                Move cursor up (a half screen scroll at the top of screen)
-MOVE_UP1       Move cursor up (1 line scrol at the top of screen)
-MSGS        Display error messages
-NEW_TAB		Open new tab
-NEXT		Move to next buffer
-NEXT_DOWN      Move to next downward link 
-NEXT_LEFT      Move to next left link 
-NEXT_LEFT_UP   Move to next left (or upward) link 
-NEXT_LINK	Move to next link
-NEXT_MARK	Move to next word
-NEXT_PAGE	Move to next page
-NEXT_RIGHT     Move to next right link 
-NEXT_RIGHT_DOWN        Move to next right (or downward) link 
-NEXT_TAB	Move to next tab
-NEXT_UP                Move to next upward link 
-NEXT_VISITED    Move to next visited link
-NEXT_WORD	Move to next word
-NOTHING		Do nothing
+MARK_MID	Turn Message-ID-like strings into hyperlinks
+MARK_URL	Turn URL-like strings into hyperlinks
+MARK_WORD	Turn current word into hyperlink
+MENU		Pop up menu
+MENU_MOUSE	Pop up menu at mouse pointer
+MOUSE_TOGGLE	Toggle mouse support
+MOVE_DOWN	Cursor down
+MOVE_DOWN1	Cursor down. With edge touched, slide
+MOVE_LEFT	Cursor left
+MOVE_LEFT1	Cursor left. With edge touched, slide
+MOVE_LIST_MENU	Pop up menu to navigate between hyperlinks
+MOVE_MOUSE	Move cursor to mouse pointer
+MOVE_RIGHT	Cursor right
+MOVE_RIGHT1	Cursor right. With edge touched, slide
+MOVE_UP		Cursor up
+MOVE_UP1	Cursor up. With edge touched, slide
+MSGS		Display error messages
+NEW_TAB 	Open a new tab (with current document)
+NEXT		Switch to the next buffer
+NEXT_DOWN	Move downward to the next hyperlink
+NEXT_HALF_PAGE	Scroll down half a page
+NEXT_LEFT	Move left to the next hyperlink
+NEXT_LEFT_UP	Move left or upward to the next hyperlink
+NEXT_LINK	Move to the next hyperlink
+NEXT_MARK	Go to the next mark
+NEXT_PAGE	Scroll down one page
+NEXT_RIGHT	Move right to the next hyperlink
+NEXT_RIGHT_DOWN	Move right or downward to the next hyperlink
+NEXT_TAB	Switch to the next tab
+NEXT_UP		Move upward to the next hyperlink
+NEXT_VISITED	Move to the next visited hyperlink
+NEXT_WORD	Move to the next word
+NOTHING 	Do nothing
 NULL		Do nothing
-OPTIONS		Option setting panel
-PEEK		Peek current URL
-PEEK_IMG	Peek image URL 
-PEEK_LINK      Peek link URL
-PIPE_BUF       Send rendered document to pipe
-PIPE_SHELL	Execute shell command and browse
-PREV		Move to previous buffer
-PREV_LINK	Move to previous link
-PREV_MARK	Move to previous mark
-PREV_PAGE	Move to previous page
-PREV_TAB	Move to previous tab
-PREV_VISITED    Move to previous visited link
-PREV_WORD	Move to previous word
-PRINT		Save buffer to file
-QUIT		Quit w3m
-READ_SHELL	Execute shell command and load
+OPTIONS 	Display options setting panel
+PEEK		Show current address
+PEEK_IMG	Show image address
+PEEK_LINK	Show target address
+PIPE_BUF	Pipe current buffer through a shell command and display output
+PIPE_SHELL	Execute shell command and display output
+PREV		Switch to the previous buffer
+PREV_HALF_PAGE	Scroll up half a page
+PREV_LINK	Move to the previous hyperlink
+PREV_MARK	Go to the previous mark
+PREV_PAGE	Scroll up one page
+PREV_TAB	Switch to the previous tab
+PREV_VISITED	Move to the previous visited hyperlink
+PREV_WORD	Move to the previous word
+PRINT		Save rendered document
+QUIT		Quit with confirmation request
+READ_SHELL	Execute shell command and display output
 REDO		Cancel the last undo
-REDRAW		Redraw screen
-REG_MARK	Set mark using regexp
-REINIT		Reload configuration files
-RELOAD		Reload buffer
-RESHAPE		Re-render buffer
+REDRAW		Draw the screen anew
+REG_MARK	Mark all occurences of a pattern
+REINIT		Reload configuration file
+RELOAD		Load current document anew
+RESHAPE 	Re-render document
 RIGHT		Shift screen one column right
-SAVE		Save document source to file
-SAVE_IMAGE	Save image to file
-SAVE_LINK	Save link to file
-SAVE_SCREEN	Save rendered document to file
+SAVE		Save document source
+SAVE_IMAGE	Save inline image
+SAVE_LINK	Save hyperlink target
+SAVE_SCREEN	Save rendered document
 SEARCH		Search forward
 SEARCH_BACK	Search backward
 SEARCH_FORE	Search forward
-SEARCH_NEXT	Search next regexp
-SEARCH_PREV	Search previous regexp
-SELECT		Go to buffer selection panel
-SELECT_MENU    Popup buffer selection menu
-SETENV        Set environment variable
-SET_OPTION     Set option
-SHELL		Execute shell command
+SEARCH_NEXT	Continue search forward
+SEARCH_PREV	Continue search backward
+SELECT		Display buffer-stack panel
+SELECT_MENU	Pop up buffer-stack menu
+SETENV		Set environment variable
+SET_OPTION	Set option
+SHELL		Execute shell command and display output
 SHIFT_LEFT	Shift screen left
 SHIFT_RIGHT	Shift screen right
-SOURCE		View HTML source
+SOURCE		Toggle between HTML shown or processed
 STOP_IMAGE	Stop loading and drawing of images
 SUBMIT		Submit form
-SUSPEND		Stop loading document
-TAB_GOTO	Open URL on new tab
-TAB_GOTO_RELATIVE	Open relative URL on new tab
-TAB_LEFT	Move current tab left
-TAB_LINK	Open current link on new tab
-TAB_MENU	Popup tab selection menu
-TAB_MOUSE	Move to tab on mouse cursor (for mouse action)
-TAB_RIGHT	Move current tab right
+SUSPEND 	Suspend w3m to background
+TAB_GOTO	Open specified document in a new tab
+TAB_GOTO_RELATIVE	Open relative address in a new tab
+TAB_LEFT	Move left along the tab bar
+TAB_LINK	Follow current hyperlink in a new tab
+TAB_MENU	Pop up tab selection menu
+TAB_MOUSE	Select tab by mouse action
+TAB_RIGHT	Move right along the tab bar
 UNDO		Cancel the last cursor movement
-UP		Scroll up one line
-VERSION                Display version of w3m
-VIEW		View HTML source
-VIEW_BOOKMARK	View bookmark
-VIEW_IMAGE	View image
-WHEREIS		Search forward
-WRAP_TOGGLE    Toggle wrap search mode
+UP		Scroll the screen up one line
+VERSION		Display the version of w3m
+VIEW		Toggle between HTML shown or processed
+VIEW_BOOKMARK	View bookmarks
+VIEW_IMAGE	Display image in viewer
+WHEREIS 	Search forward
+WRAP_TOGGLE	Toggle wrapping mode in searches
diff --git a/doc/README.img b/doc/README.img
index 0c10114..f11362f 100644
--- a/doc/README.img
+++ b/doc/README.img
@@ -41,7 +41,7 @@ Key functions
   Specify the following keymaps in ~/.w3m/keymap.
       keymap  X    DISPLAY_IMAGE
       keymap  C-c  STOP_IMAGE
-      keyamp  t    SET_OPTION  display_image=toggle
+      keymap  t    SET_OPTION  display_image=toggle
 
 Commandline options
 
diff --git a/doc/README.m17n b/doc/README.m17n
index c064d76..da5408b 100644
--- a/doc/README.m17n
+++ b/doc/README.m17n
@@ -49,7 +49,7 @@ Supported encoding schemes (character set)
   * Thai
       TIS-620 (ISO-8859-11), CP874
   * Other
-      US_ASCII, ISO-8859-1 �� 10, 13 �� 15,
+      US_ASCII, ISO-8859-1 - 10, 13 - 15,
       KOI8-R, KOI8-U, NeXT, CP437, CP737, CP775, CP850, CP852, CP855, CP856,
       CP857, CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP869, CP1006,
       CP1250, CP1251, CP1252, CP1253, CP1254, CP1255, CP1256, CP1257
diff --git a/doc/README.siteconf b/doc/README.siteconf
new file mode 100644
index 0000000..39b1028
--- /dev/null
+++ b/doc/README.siteconf
@@ -0,0 +1,60 @@
+The siteconf: Site-specific preferences 
+
+The siteconf consists of URL patterns and preferences associated to them.
+You can improve "decode_url" feature by giving charsets of URLs site by site,
+or bypass Google's redirector for performance and your privacy.
+
+The siteconf is read from ~/.w3m/siteconf by default.
+
+===== The syntax =====
+
+url <url>|/<re-url>/|m@<re-url>@i [exact]
+substitute_url "<destination-url>"
+url_charset <charset>
+no_referer_from on|off
+no_referer_to on|off
+
+The last match wins.
+
+===== Examples =====
+
+url "https://twitter.com/"
+substitute_url "https://mobile.twitter.com/"
+
+This forwards the twitter.com to its mobile site.
+
+url "http://your.bookmark.net/"
+no_referer_from on
+
+This prevents HTTP referers from being sent when you follow links
+at the your.bookmark.net.
+
+url "http://www.google.com/url?" exact
+substitute_url "file:///cgi-bin/your-redirector.cgi?"
+
+This forwards the Google's redirector to your local CGI.
+
+url /^http:\/\/[a-z]*\.wikipedia\.org\//
+url_charset utf-8
+
+When combinated with "decode_url" option turned on, links to
+Wikipedia will be human-readable.
+
+===== Regular expressions notes =====
+
+Following expressions are all equivalent:
+
+/http:\/\/www\.example\.com\//
+m/http:\/\/www\.example\.com\//
+m@http://www\.example\.com/@
+m!http://www\.example\.com/!
+
+With a trailing 'i' modifier, you can specify a case-insensitive match.
+For example, m@^http://www\.example\.com/abc/@i matches to:
+
+http://www.example.com/abc/
+http://www.example.com/Abc/
+http://www.example.com/ABC/
+
+Hostnames, however, are always converted to lowercases before compared.
+
diff --git a/doc/README.sixel b/doc/README.sixel
new file mode 100644
index 0000000..588afc4
--- /dev/null
+++ b/doc/README.sixel
@@ -0,0 +1,27 @@
+Sixel support of w3m
+                                                              2014/11/05
+                                                              K. Araki
+
+Introduction
+
+  This is the extension for w3m to show inline images by sixel graphics.
+
+Requirements
+
+  Install 'img2sixel' command provided by libsixel project.
+  (https://github.com/saitoha/libsixel)
+
+Build
+
+  $ ./configure --enable-image ...
+  $ make
+  $ make install
+
+Usage
+
+  $ w3m -sixel http://...
+
+  You can specify options of 'img2sixel' command by "W3M_IMG2SIXEL"
+  environmental variable.
+
+  $ W3M_IMG2SIXEL="img2sixel -d atkinson" w3m -sixel http://...
diff --git a/doc/keymap.lynx b/doc/keymap.lynx
index 869c716..e4085c8 100644
--- a/doc/keymap.lynx
+++ b/doc/keymap.lynx
@@ -46,7 +46,7 @@ keymap	-	PREV_PAGE
 keymap	.	RIGHT
 keymap	/	SEARCH
 keymap	:	MARK_URL
-keymap	;	MARK_WORD
+keymap	";"	MARK_WORD
 keymap	<	SHIFT_LEFT
 keymap	=	INFO
 keymap	>	SHIFT_RIGHT
diff --git a/doc/menu.submenu b/doc/menu.submenu
index e55193d..e837f46 100644
--- a/doc/menu.submenu
+++ b/doc/menu.submenu
@@ -39,6 +39,6 @@ menu Link
 end
 
 menu Bookmark
- func   "Read bookmark       (b)"	BOOKMARK	"bB"
+ func   "View bookmarks      (b)"	BOOKMARK	"bB"
  func   "Add page to bookmark(a)"	ADD_BOOKMARK	"aA"
 end
diff --git a/doc/w3m.1 b/doc/w3m.1
index 8f071c6..dbd01af 100644
--- a/doc/w3m.1
+++ b/doc/w3m.1
@@ -1,13 +1,10 @@
 .nr N -1
 .nr D 5
-.TH W3M 1 Local
-.UC 4
+.TH W3M 1 "2016-04-02" "w3m 0.5.3"
 .SH NAME
-w3m \- a text based Web browser and pager
+w3m \- a text based web browser and pager
 .SH SYNOPSIS
-.B w3m
-[options] [URL or filename]
-.PP
+w3m [OPTION]...  [ \fIfile\fP | \fIURL\fP ]...
 .SH DESCRIPTION
 .\" This defines appropriate quote strings for nroff and troff
 .ds lq \&"
@@ -17,234 +14,283 @@ w3m \- a text based Web browser and pager
 .\" Just in case these number registers aren't set yet...
 .if \nN==0 .nr N 10
 .if \nD==0 .nr D 5
-.I
-w3m
-is a World Wide Web (WWW) text based client. It has English and
-Japanese help files and an option menu and can be configured to
-use either language. It will display hypertext markup language
-(HTML) documents containing links to files residing on the local
-system, as well as files residing on remote systems. It can
-display HTML tables and frames.
-In addition, it can be used as a "pager" in much the same manner
-as "more" or "less".
-Current versions of
-.I
-w3m
-run on
-Unix (Solaris, SunOS, HP-UX, Linux, FreeBSD, and EWS4800)
-and on
-Microsoft Windows 9x/NT.
-.PP
+
+\fIw3m\fP is a text based browser which can display local or remote
+web pages as well as other documents. It is able to process HTML
+tables and frames but it ignores JavaScript and Cascading Style
+Sheets. \fIw3m\fP can also serve as a pager for text files named as
+arguments or passed on standard input, and as a general purpose
+directory browser.
+
+\fIw3m\fP organizes its content in buffers or tabs, allowing easy
+navigation between them. With the w3m-img extension installed, \fIw3m\fP can
+display inline graphics in web pages. And whenever \fIw3m\fP's HTML
+rendering capabilities do not meet your needs, the target URL can be
+handed over to a graphical browser with a single command.
+
+For help with runtime options, press \(lqH\(rq while running \fIw3m\fP. 
+
+.SH ARGUMENTS
+
+When given one or more command line arguments, \fIw3m\fP will handle
+targets according to content type. For web, \fIw3m\fP gets this
+information from HTTP headers; for relative or absolute file system
+paths, it relies on filenames.
+
+With no argument, \fIw3m\fP expects data from standard input and
+assumes \(lqtext/plain\(rq unless another MIME type is given by the user.
+
+If provided with no target and no fallback target (see for instance
+option \fB\-v\fP below), \fIw3m\fP will exit with usage information.
 .SH OPTIONS
-At start up, \fIw3m\fR will load any local
-file or remote URL specified at the command
-line.  For help with runtime options, press \fB"H"\fR
-while running \fIw3m\fR.
-Command line options are:
-.PP
+Command line options are introduced with a single \(lq\-\(rq character and
+may take an argument.
+.SS General options:
 .TP
-.B -t tab
-set tab width
+\fB\-B\fP
+with no other target defined, use the bookmark page for startup
 .TP
-.B -r
-ignore backspace effect
-.TP
-.B -l line
-# of preserved line (default 10000)
-.TP
-.B -I charset
-document charset
-.TP
-.B -O charset
-display/output charset
+\fB\-M\fP
+monochrome display
 .TP
-.B -B
-load bookmark
+\fB\-no-mouse\fP
+deactivate mouse support
 .TP
-.B -bookmark file
-specify bookmark file
+\fB\-num\fP
+display each line's number
 .TP
-.B -T type
-specify content-type
+\fB\-N\fP
+distribute multiple command line arguments to tabs. By default, a
+stack of buffers is used
+.TP 
+\fB\-ppc \fInum\fR
+width of \fInum\fR pixels per character. Range of 4.0 to 32.0, default 8.0.
+Larger values will make tables narrower. (Implementation not verified)
 .TP
-.B -m
-internet message mode
+\fB\-ppl \fInum\fR
+height of \fInum\fR pixels per line. Range of 4.0 to 64.0. (Implementation not verified)
 .TP
-.B -v
-visual startup mode
+\fB\-title\fP, \fB\-title=TERM\fP
+use the buffer name as terminal title string. With specified TERM,
+this sets the title configuration style accordingly
 .TP
-.B -M
-monochrome display
+\fB\-v\fP
+with no other target defined, welcome users with a built-in page
 .TP
-.B -N
-open URL of command line on each new tab
+\fB\-W\fP
+toggle wrapping in searches
 .TP
-.B -F
-automatically render frame
+\fB\-X\fP
+do not initialize/deinitialize the terminal
 .TP
-.B -dump
-dump formatted page into stdout
+\fB+\fInum\fR
+go to line \fInum\fR; only effective for \fInum\fR larger than the number of lines in the terminal
+.SS Browser options:
 .TP
-.B -cols width
-specify column width (used with -dump)
+\fB\-cols \fInum\fR
+with stdout as destination; HTML is rendered to lines of \fInum\fR characters
 .TP
-.B -ppc count
-specify the number of pixels per character (4.0...32.0).
-Larger values will make tables narrower.  [default 8.0]
+\fB\-cookie\fP, \fB\-no-cookie\fP
+use stored cookies and accept new ones, or do neither
 .TP
-.B -ppl count
-specify the number of pixels per line (4.0...64.0)
+\fB\-F\fP
+render frames
 .TP
-.B -dump_source
-dump page source into stdout
+\fB\-graph\fP, \fB\-no-graph\fP
+use or do not use graphic characters for drawing HTML table and frame borders
 .TP
-.B -dump_head
-dump response of HEAD request into stdout
+\fB\-header \fIstring\fR
+append \fIstring\fR to the HTTP(S) request. Expected to match the header syntax \f(CW Variable: Value\fP
 .TP
-.B -dump_both
-dump HEAD and source into stdout
+\fB\-m\fP
+Render the body of Usenet messages according to the header \(lqContent-type\(rq 
 .TP
-.B -dump_extra
-dump HEAD, source, and extra information into stdout
+\fB\-no-proxy\fP
+do not use proxy
 .TP
-.B -post file
-use POST method with file content
+\fB\-post \fIfile\fR
+use POST method to upload data defined in \fIfile\fR. The syntax to be used
+is \f(CWvar1=value1[&var2=value2]...\fP
 .TP
-.B -header string
-insert string as a header
+\fB\-4\fP
+IPv4 only. Corresponds to dns_order=4 in configuration files
 .TP
-.B +<num>
-goto <num> line
+\fB\-6\fP
+IPv6 only. Corresponds to dns_order=6 in configuration files
+.SS Text pager options:
 .TP
-.B -num
-show line number
+\fB\-l \fInum\fR
+number of lines preserved internally when receiving plain text from
+stdin (default 10,000)
 .TP
-.B -no-proxy
-don't use proxy
+\fB\-r\fP
+use caret notation to display special escape characters (such
+as ANSI escapes or nroff-style backspaces for bold and underlined
+characters) instead of processing them
 .TP
-.B -4
-IPv4 only (-o dns_order=4)
+\fB\-s\fP
+squeeze multiple blank lines into one
 .TP
-.B -6
-IPv6 only (-o dns_order=6)
+\fB\-t\fP \fInum\fP
+set tab width to \fInum\fR columns. No effect on stdout
+.SS Data type/encoding options:
 .TP
-.B -no-mouse
-don't use mouse
+\fB\-I \fIcharset\fR
+user defined character encoding of input data
 .TP
-.B -cookie
-use cookie.
+\fB\-O \fIcharset\fR
+user defined character encoding of output data
 .TP
-.B -no-cookie
-don't use cookie
+\fB\-T \fItype\fR
+explicit characterization of input data by MIME type
+.SS Options for data output, followed by immediate exit:
 .TP
-.B -graph
-use graphic character
+\fB\-dump\fP
+dump rendered page into stdout. Set implicitly when output is directed
+to a file or pipe
 .TP
-.B -no-graph
-don't use graphic character
+\fB\-dump_source\fP
+dump the page's source code into stdout
 .TP
-.B -S
-squeeze multiple blank lines
+\fB\-dump_head\fP
+dump response of a HEAD request for a URL into stdout
 .TP
-.B -W
-toggle wrap search mode
+\fB\-dump_both\fP
+dump HEAD, and source code for a URL into stdout
 .TP
-.B -X
-don't use termcap init/deinit
+\fB\-dump_extra\fP
+dump HEAD, source code, and extra information for a URL into stdout
 .TP
-.B -title [=TERM]
-set buffer name to terminal title string. 
-If TERM is specified, use the TERM style title configuration.
+\fB\-help\fP
+show a summary of compiled-in features and command line options
 .TP
-.B -o opt=value
-assign value to config option
+\fB\-show-option\fP
+show all available config options
 .TP
-.B -show-option
-show all available config option
+\fB\-version\fP
+show the version of \fIw3m\fP
+.SS Options for overriding default settings and resources:
 .TP
-.B -config file
-specify config file
+\fB\-bookmark \fIfile\fR
+use \fIfile\fR instead of the default bookmark.html file
 .TP
-.B -help
-show usage
+\fB\-config \fIfile\fR
+use \fIfile\fR instead of the default config file
 .TP
-.B -version
-show w3m version
+\fB\-debug\fP
+DO NOT USE
 .TP
-.B -reqlog
-write request logfile
+\fB\-o \fIoption=value\fR
+modify one configuration item with an explicitly given value; without \fIoption=value\fR, equivalent to -show-option
 .TP
-.B -debug
-DO NOT USE
+\fB\-reqlog\fP
+log headers of HTTP communication in file \f(CW~/.w3m/request.log\fP
 .SH EXAMPLES
+.SS Pager-like usage 
+.TP
+Combine snippets of HTML code and preview the page 
+.EX
+$ cat header.html footer.html | w3m -T text/html
+.EE
+.TP
+Compare two files using tabs 
+.EX
+$ w3m -N config.old config
+.EE
+.SS Browser-like usage 
+.TP
+Display web content in monochrome terminal
+.EX
+$ w3m -M http://w3m.sourceforge.net
+.EE
+.TP
+Display embedded graphics
+.EX
+$ w3m -o auto_image=TRUE http://w3m.sourceforge.net
+.EE
+.TP
+Display content from Usenet  
+.EX
+$ w3m -m nntp://news.aioe.org/comp.os.linux.networking
+.EE
+.TP
+Upload data for a URL using the POST method 
+.EX
+$ w3m -post - http://example.com/form.php <<<'a=0&b=1'
+.EE
+.SS Filter-like usage
+.TP
+Convert an HTML file to plain text with a defined line length
+.EX
+$ w3m -cols 40 foo.html > foo.txt
+.EE
+.TP
+Output the bookmarks page as text with an appended list of links
+.EX
+$ w3m -B -o display_link_number=1 > out.txt
+.EE
+.TP
+Conversion of file format and character encoding
+.EX
+$ w3m -T text/html -I EUC-JP -O UTF-8 < foo.html > foo.txt
+.EE
+.SS Start with no input
+.TP
+Welcome users with a built-in page
+.EX
+$ w3m -v
+.EE
+.\".SH Errors
+.SH ENVIRONMENT
+\fIw3m\fP recognises the environment variable WWW_HOME as defining a
+fallback target for use if it is invoked without one.
+.SH FILES
 .TP
-To use w3m as a pager:
-.br
-$ ls | w3m
-.br
-.TP
-To use w3m to translate HTML files:
-.br
-$ cat foo.html | w3m -T text/html
+\f(CW~/.w3m/bookmark.html\fP
+default bookmark file 
 .TP
-or
-.br
-$ cat foo.html | w3m -dump -T text/html >foo.txt
-.SH FILES
+\f(CW~/.w3m/config\fP
+user defined configuration file; overrides \f(CW/etc/w3m/config\fP
 .TP
-.I ${HOME}/.w3m/config
-configuration file
+\f(CW~/.w3m/cookie\fP
+cookie jar; written on exit, read on launch   
 .TP
-.I ${HOME}/.w3m/keymap
-key binding configuration file
-.\" .TP
-.\" .I ${HOME}/.w3m/menu
-.\" ???
+\f(CW~/.w3m/history\fP
+browser history - visited files and URLs
 .TP
-.I ${HOME}/.w3m/mouse
-mouse configuration file
+\f(CW~/.w3m/keymap\fP
+user defined key bindings; overrides default key bindings
 .TP
-.I ${HOME}/.w3m/cookie
-cookie file
+\f(CW~/.w3m/mailcap\fP
+external viewer configuration file
 .TP
-.I ${HOME}/.w3m/history
-history file
+\f(CW~/.w3m/menu\fP
+user defined menu; overrides default menu
 .TP
-.I ${HOME}/.w3m/passwd
-passowrd and username file
+\f(CW~/.w3m/mime.types\fP
+MIME types file
 .TP
-.I ${HOME}/.w3m/pre_form
-form parameters file
+\f(CW~/.w3m/mouse\fP
+user defined mouse settings
 .TP
-.I ${HOME}/.w3m/mailcap
-external viewer configuration file
+\f(CW~/.w3m/passwd\fP
+password and username file
 .TP
-.I ${HOME}/.w3m/mime.types
-MIME types file
+\f(CW~/.w3m/pre_form\fP
+contains predefined values to fill recurrent HTML forms
 .\" .TP
-.\" .I ${HOME}/.w3m/urimethodmap
+.\" .I $~/.w3m/urimethodmap
 .\" ???
-.SH NOTES
-This is the
-.I
-w3m
-0.5.3 Release.
-.PP
-Please see the MANUAL.html file distributed with w3m for
-more detailed documentation.
-
-Additional information about
-.I
-w3m
-may be found on its Japanese language Web site located at:
-  http://w3m.sourceforge.net/index.ja.html
-.br
-or on its English version of the site at:
-  http://w3m.sourceforge.net/index.en.html
+.SH SEE ALSO
+README and example files are to be found in the doc directory of your \fIw3m\fP installation. Recent information about \fIw3m\fP may be found on 
+.UR http://w3m.sourceforge.net
+the project's web pages at
+.UE
 .SH ACKNOWLEDGMENTS
-.I
-w3m
-has incorporated code from several sources.
+\fIw3m\fP has incorporated code from several sources.
 Users have contributed patches and suggestions over time.
 .SH AUTHOR
-Akinori ITO <aito@fw.ipsj.or.jp>
+.UR aito@fw.ipsj.or.jp
+Akinori ITO
+.UE
+
diff --git a/entity.c b/entity.c
index fdd8f64..45dc95e 100644
--- a/entity.c
+++ b/entity.c
@@ -44,6 +44,8 @@ conv_entity(unsigned int c)
 	return " ";
     if (c == 0xa0)
 	return NBSP;
+    if (c == 0xad)		/* SOFT HYPHEN */
+        return "";
     if (c < 0x100) {		/* Latin1 (ISO 8859-1) */
 	if (UseAltEntity)
 	    return alt_latin1[c - 0xa0];
diff --git a/etc.c b/etc.c
index 8fe1215..dcc6edd 100644
--- a/etc.c
+++ b/etc.c
@@ -1365,7 +1365,13 @@ setup_child(int child, int i, int f)
     if (!child)
 	SETPGRP();
 #endif /* __MINGW32_VERSION */
+    /*
+     * I don't know why but close_tty() sometimes interrupts loadGeneralFile() in loadImage()
+     * and corrupt image data can be cached in ~/.w3m.
+     */
+#if 0
     close_tty();
+#endif
     close_all_fds_except(i, f);
     QuietMessage = TRUE;
     fmInitialized = FALSE;
diff --git a/file.c b/file.c
index 567d41e..e26f383 100644
--- a/file.c
+++ b/file.c
@@ -26,6 +26,8 @@
 #define min(a,b)        ((a) > (b) ? (b) : (a))
 #endif				/* not min */
 
+#define MAX_INPUT_SIZE 80 /* TODO - max should be screen line length */
+
 static int frame_source = 0;
 
 static char *guess_filename(char *file);
@@ -47,11 +49,11 @@ static JMP_BUF AbortLoading;
 static struct table *tables[MAX_TABLE];
 static struct table_mode table_mode[MAX_TABLE];
 
-#ifdef USE_IMAGE
+#if defined(USE_M17N) || defined(USE_IMAGE)
 static ParsedURL *cur_baseURL = NULL;
-#ifdef USE_M17N
-static char cur_document_charset;
 #endif
+#ifdef USE_M17N
+static wc_ces cur_document_charset = 0;
 #endif
 
 static Str cur_title;
@@ -215,7 +217,6 @@ currentLn(Buffer *buf)
 
 static Buffer *
 loadSomething(URLFile *f,
-	      char *path,
 	      Buffer *(*loadproc) (URLFile *, Buffer *), Buffer *defaultbuf)
 {
     Buffer *buf;
@@ -223,17 +224,23 @@ loadSomething(URLFile *f,
     if ((buf = loadproc(f, defaultbuf)) == NULL)
 	return NULL;
 
-    buf->filename = path;
     if (buf->buffername == NULL || buf->buffername[0] == '\0') {
 	buf->buffername = checkHeader(buf, "Subject:");
-	if (buf->buffername == NULL)
-	    buf->buffername = conv_from_system(lastFileName(path));
+	if (buf->buffername == NULL && buf->filename != NULL)
+	    buf->buffername = conv_from_system(lastFileName(buf->filename));
     }
     if (buf->currentURL.scheme == SCM_UNKNOWN)
 	buf->currentURL.scheme = f->scheme;
-    buf->real_scheme = f->scheme;
     if (f->scheme == SCM_LOCAL && buf->sourcefile == NULL)
-	buf->sourcefile = path;
+	buf->sourcefile = buf->filename;
+    if (loadproc == loadHTMLBuffer
+#ifdef USE_IMAGE
+	|| loadproc == loadImageBuffer
+#endif
+       )
+	buf->type = "text/html";
+    else
+	buf->type = "text/plain";
     return buf;
 }
 
@@ -484,28 +491,6 @@ convertLine0(URLFile *uf, Str line, int mode)
     return line;
 }
 
-/* 
- * loadFile: load file to buffer
- */
-Buffer *
-loadFile(char *path)
-{
-    Buffer *buf;
-    URLFile uf;
-    init_stream(&uf, SCM_LOCAL, NULL);
-    examineFile(path, &uf);
-    if (uf.stream == NULL)
-	return NULL;
-    buf = newBuffer(INIT_BUFFER_WIDTH);
-    current_content_length = 0;
-#ifdef USE_M17N
-    content_charset = 0;
-#endif
-    buf = loadSomething(&uf, path, loadBuffer, buf);
-    UFclose(&uf);
-    return buf;
-}
-
 int
 matchattr(char *p, char *attr, int len, Str *value)
 {
@@ -694,6 +679,7 @@ readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu)
 #endif
 		    init_stream(&f, SCM_LOCAL, newStrStream(src));
 		    loadHTMLstream(&f, newBuf, NULL, TRUE);
+		    UFclose(&f);
 		    for (l = newBuf->lastLine; l && l->real_linenumber;
 			 l = l->prev)
 			l->real_linenumber = 0;
@@ -1244,6 +1230,7 @@ AuthDigestCred(struct http_auth *ha, Str uname, Str pw, ParsedURL *pu,
     unsigned char md5[MD5_DIGEST_LENGTH + 1];
     Str uri = HTTPrequestURI(pu, hr);
     char nc[] = "00000001";
+    FILE *fp;
 
     Str algorithm = qstr_unquote(get_auth_param(ha->param, "algorithm"));
     Str nonce = qstr_unquote(get_auth_param(ha->param, "nonce"));
@@ -1326,10 +1313,11 @@ AuthDigestCred(struct http_auth *ha, Str uname, Str pw, ParsedURL *pu,
 	/*  A2 = Method ":" digest-uri-value ":" H(entity-body) */
 	if (request && request->body) {
 	    if (request->method == FORM_METHOD_POST && request->enctype == FORM_ENCTYPE_MULTIPART) {
-		FILE *fp = fopen(request->body, "r");
+		fp = fopen(request->body, "r");
 		if (fp != NULL) {
 		    Str ebody;
 		    ebody = Strfgetall(fp);
+		    fclose(fp);
 		    MD5(ebody->ptr, strlen(ebody->ptr), md5);
 		}
 		else {
@@ -1697,13 +1685,15 @@ getLinkNumberStr(int correction)
 /* 
  * loadGeneralFile: load file to buffer
  */
+#define DO_EXTERNAL ((Buffer *(*)(URLFile *, Buffer *))doExternal)
 Buffer *
 loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
 		int flag, FormList *volatile request)
 {
     URLFile f, *volatile of = NULL;
     ParsedURL pu;
-    Buffer *b = NULL, *(*volatile proc)() = loadBuffer;
+    Buffer *b = NULL;
+    Buffer *(*volatile proc)(URLFile *, Buffer *) = loadBuffer;
     char *volatile tpath;
     char *volatile t = "text/plain", *p, *volatile real_type = NULL;
     Buffer *volatile t_buf = NULL;
@@ -1730,7 +1720,22 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
     add_auth_cookie_flag = 0;
 
     checkRedirection(NULL);
+
   load_doc:
+    {
+	const char *sc_redirect;
+	parseURL2(tpath, &pu, current);
+	sc_redirect = query_SCONF_SUBSTITUTE_URL(&pu);
+	if (sc_redirect && *sc_redirect && checkRedirection(&pu)) {
+	    tpath = (char *)sc_redirect;
+	    request = NULL;
+	    add_auth_cookie_flag = 0;
+	    current = New(ParsedURL);
+	    *current = pu;
+	    status = HTST_NORMAL;
+	    goto load_doc;
+	}
+    }
     TRAP_OFF;
     url_option.referer = referer;
     url_option.flag = flag;
@@ -1863,7 +1868,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
 	    /* 302: Found */
 	    /* 303: See Other */
 	    /* 307: Temporary Redirect (HTTP/1.1) */
-	    tpath = url_quote_conv(p, DocumentCharset);
+	    tpath = url_encode(p, NULL, 0);
 	    request = NULL;
 	    UFclose(&f);
 	    current = New(ParsedURL);
@@ -2022,7 +2027,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
 	if (f.is_cgi && (p = checkHeader(t_buf, "Location:")) != NULL &&
 	    checkRedirection(&pu)) {
 	    /* document moved */
-	    tpath = url_quote_conv(remove_space(p), DocumentCharset);
+	    tpath = url_encode(remove_space(p), NULL, 0);
 	    request = NULL;
 	    UFclose(&f);
 	    add_auth_cookie_flag = 0;
@@ -2123,10 +2128,6 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
     if (real_type == NULL)
 	real_type = t;
     proc = loadBuffer;
-#ifdef USE_IMAGE
-    cur_baseURL = New(ParsedURL);
-    copyParsedURL(cur_baseURL, &pu);
-#endif
 
     current_content_length = 0;
     if ((p = checkHeader(t_buf, "Content-Length:")) != NULL)
@@ -2197,18 +2198,8 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
 #endif
     else if (w3m_backend) ;
     else if (!(w3m_dump & ~DUMP_FRAME) || is_dump_text_type(t)) {
-	if (!do_download && doExternal(f,
-				       pu.real_file ? pu.real_file : pu.file,
-				       t, &b, t_buf)) {
-	    if (b && b != NO_BUFFER) {
-		b->real_scheme = f.scheme;
-		b->real_type = real_type;
-		if (b->currentURL.host == NULL && b->currentURL.file == NULL)
-		    copyParsedURL(&b->currentURL, &pu);
-	    }
-	    UFclose(&f);
-	    TRAP_OFF;
-	    return b;
+	if (!do_download && searchExtViewer(t) != NULL) {
+	    proc = DO_EXTERNAL;
 	}
 	else {
 	    TRAP_OFF;
@@ -2232,36 +2223,30 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
     else if (w3m_dump & DUMP_FRAME)
 	return NULL;
 
+    if (t_buf == NULL)
+	t_buf = newBuffer(INIT_BUFFER_WIDTH);
+    copyParsedURL(&t_buf->currentURL, &pu);
+    t_buf->filename = pu.real_file ? pu.real_file :
+	pu.file ? conv_to_system(pu.file) : NULL;
     if (flag & RG_FRAME) {
-	if (t_buf == NULL)
-	    t_buf = newBuffer(INIT_BUFFER_WIDTH);
 	t_buf->bufferprop |= BP_FRAME;
     }
 #ifdef USE_SSL
-    if (t_buf)
-	t_buf->ssl_certificate = f.ssl_certificate;
+    t_buf->ssl_certificate = f.ssl_certificate;
 #endif
     frame_source = flag & RG_FRAME_SRC;
-    b = loadSomething(&f, pu.real_file ? pu.real_file : pu.file, proc, t_buf);
+    if (proc == DO_EXTERNAL) {
+	b = doExternal(f, t, t_buf);
+    } else {
+	b = loadSomething(&f, proc, t_buf);
+    }
     UFclose(&f);
     frame_source = 0;
-    if (b) {
+    if (b && b != NO_BUFFER) {
 	b->real_scheme = f.scheme;
 	b->real_type = real_type;
-	if (b->currentURL.host == NULL && b->currentURL.file == NULL)
-	    copyParsedURL(&b->currentURL, &pu);
-	if (is_html_type(t))
-	    b->type = "text/html";
-	else if (w3m_backend) {
-	    Str s = Strnew_charp(t);
-	    b->type = s->ptr;
-	}
-#ifdef USE_IMAGE
-	else if (proc == loadImageBuffer)
-	    b->type = "text/html";
-#endif
-	else
-	    b->type = "text/plain";
+	if (w3m_backend)
+	    b->type = allocStr(t, -1);
 	if (pu.label) {
 	    if (proc == loadHTMLBuffer) {
 		Anchor *a;
@@ -2287,10 +2272,11 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
     if (header_string)
 	header_string = NULL;
 #ifdef USE_NNTP
-    if (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS)
+    if (b && b != NO_BUFFER && (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS))
 	reAnchorNewsheader(b);
 #endif
-    preFormUpdateBuffer(b);
+    if (b && b != NO_BUFFER)
+	preFormUpdateBuffer(b);
     TRAP_OFF;
     return b;
 }
@@ -2469,6 +2455,7 @@ set_breakpoint(struct readbuffer *obuf, int tag_length)
     bcopy((void *)&obuf->anchor, (void *)&obuf->bp.anchor,
 	  sizeof(obuf->anchor));
     obuf->bp.img_alt = obuf->img_alt;
+    obuf->bp.input_alt = obuf->input_alt;
     obuf->bp.in_bold = obuf->in_bold;
     obuf->bp.in_italic = obuf->in_italic;
     obuf->bp.in_under = obuf->in_under;
@@ -2486,6 +2473,7 @@ back_to_breakpoint(struct readbuffer *obuf)
     bcopy((void *)&obuf->bp.anchor, (void *)&obuf->anchor,
 	  sizeof(obuf->anchor));
     obuf->img_alt = obuf->bp.img_alt;
+    obuf->input_alt = obuf->bp.input_alt;
     obuf->in_bold = obuf->bp.in_bold;
     obuf->in_italic = obuf->bp.in_italic;
     obuf->in_under = obuf->bp.in_under;
@@ -2729,7 +2717,7 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
     Str line = obuf->line, pass = NULL;
     char *hidden_anchor = NULL, *hidden_img = NULL, *hidden_bold = NULL,
 	*hidden_under = NULL, *hidden_italic = NULL, *hidden_strike = NULL,
-	*hidden_ins = NULL, *hidden = NULL;
+	*hidden_ins = NULL, *hidden_input = NULL, *hidden = NULL;
 
 #ifdef DEBUG
     if (w3m_debug) {
@@ -2761,6 +2749,12 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
 		hidden = hidden_img;
 	}
     }
+    if (obuf->input_alt.in) {
+	if ((hidden_input = has_hidden_link(obuf, HTML_INPUT_ALT)) != NULL) {
+	    if (!hidden || hidden_input < hidden)
+		hidden = hidden_input;
+	}
+    }
     if (obuf->in_bold) {
 	if ((hidden_bold = has_hidden_link(obuf, HTML_B)) != NULL) {
 	    if (!hidden || hidden_bold < hidden)
@@ -2812,6 +2806,8 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
 	Strcat_charp(line, "</a>");
     if (obuf->img_alt && !hidden_img)
 	Strcat_charp(line, "</img_alt>");
+    if (obuf->input_alt.in && !hidden_input)
+	Strcat_charp(line, "</input_alt>");
     if (obuf->in_bold && !hidden_bold)
 	Strcat_charp(line, "</b>");
     if (obuf->in_italic && !hidden_italic)
@@ -3022,6 +3018,18 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
 	Strcat_charp(tmp, "\">");
 	push_tag(obuf, tmp->ptr, HTML_IMG_ALT);
     }
+    if (!hidden_input && obuf->input_alt.in) {
+	Str tmp;
+	if (obuf->input_alt.hseq > 0)
+	    obuf->input_alt.hseq = - obuf->input_alt.hseq;
+	tmp = Sprintf("<INPUT_ALT hseq=\"%d\" fid=\"%d\" name=\"%s\" type=\"%s\" value=\"%s\">",
+		     obuf->input_alt.hseq,
+		     obuf->input_alt.fid,
+		     obuf->input_alt.name->ptr,
+		     obuf->input_alt.type->ptr,
+		     obuf->input_alt.value->ptr);
+	push_tag(obuf, tmp->ptr, HTML_INPUT_ALT);
+    }
     if (!hidden_bold && obuf->in_bold)
 	push_tag(obuf, "<B>", HTML_B);
     if (!hidden_italic && obuf->in_italic)
@@ -3228,7 +3236,7 @@ process_img(struct parsed_tag *tag, int width)
 
     if (!parsedtag_get_value(tag, ATTR_SRC, &p))
 	return tmp;
-    p = remove_space(p);
+    p = url_encode(remove_space(p), cur_baseURL, cur_document_charset);
     q = NULL;
     parsedtag_get_value(tag, ATTR_ALT, &q);
     if (!pseudoInlines && (q == NULL || (*q == '\0' && ignore_null_img_alt)))
@@ -3322,12 +3330,7 @@ process_img(struct parsed_tag *tag, int width)
 	    Image image;
 	    ParsedURL u;
 
-#ifdef USE_M17N
-	    parseURL2(wc_conv(p, InnerCharset, cur_document_charset)->ptr, &u,
-		      cur_baseURL);
-#else
 	    parseURL2(p, &u, cur_baseURL);
-#endif
 	    image.url = parsedURL2Str(&u)->ptr;
 	    if (!uncompressed_file_type(u.file, &image.ext))
 		image.ext = filename_extension(u.file, TRUE);
@@ -3346,8 +3349,14 @@ process_img(struct parsed_tag *tag, int width)
 	    if (i < 0)
 		i = pixel_per_line;
 	}
-	nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1;
-	ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1;
+	if (enable_inline_image) {
+	    nw = (w > 1) ? ((w - 1) / pixel_per_char_i + 1) : 1 ;
+	    ni = (i > 1) ? ((i - 1) / pixel_per_line_i + 1) : 1 ;
+	}
+	else {
+	    nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1;
+	    ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1;
+	}
 	Strcat(tmp,
 	       Sprintf("<pre_int><img_alt hseq=\"%d\" src=\"", cur_iseq++));
 	pre_int = TRUE;
@@ -3378,19 +3387,21 @@ process_img(struct parsed_tag *tag, int width)
 	if (i0 >= 0)
 	    Strcat(tmp, Sprintf(" height=%d", i0));
 	switch (align) {
+	case ALIGN_MIDDLE:
+	    if (!enable_inline_image) {
+		top = ni / 2;
+		bottom = top;
+		if (top * 2 == ni)
+		    yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2);
+		else
+		    yoffset = (int)((ni * pixel_per_line - i) / 2);
+		break;
+	    }
 	case ALIGN_TOP:
 	    top = 0;
 	    bottom = ni - 1;
 	    yoffset = 0;
 	    break;
-	case ALIGN_MIDDLE:
-	    top = ni / 2;
-	    bottom = top;
-	    if (top * 2 == ni)
-		yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2);
-	    else
-		yoffset = (int)((ni * pixel_per_line - i) / 2);
-	    break;
 	case ALIGN_BOTTOM:
 	    top = ni - 1;
 	    bottom = 0;
@@ -3408,7 +3419,12 @@ process_img(struct parsed_tag *tag, int width)
 	    }
 	    break;
 	}
-	xoffset = (int)((nw * pixel_per_char - w) / 2);
+
+	if (enable_inline_image)
+	    xoffset = 0;
+	else
+	    xoffset = (int)((nw * pixel_per_char - w) / 2);
+
 	if (xoffset)
 	    Strcat(tmp, Sprintf(" xoffset=%d", xoffset));
 	if (yoffset)
@@ -3548,7 +3564,7 @@ process_anchor(struct parsed_tag *tag, char *tagbuf)
 Str
 process_input(struct parsed_tag *tag)
 {
-    int i, w, v, x, y, z, iw, ih;
+    int i = 20, v, x, y, z, iw, ih, size = 20;
     char *q, *p, *r, *p2, *s;
     Str tmp = NULL;
     char *qq = "";
@@ -3567,9 +3583,9 @@ process_input(struct parsed_tag *tag)
     parsedtag_get_value(tag, ATTR_VALUE, &q);
     r = "";
     parsedtag_get_value(tag, ATTR_NAME, &r);
-    w = 20;
-    parsedtag_get_value(tag, ATTR_SIZE, &w);
-    i = 20;
+    parsedtag_get_value(tag, ATTR_SIZE, &size);
+    if (size > MAX_INPUT_SIZE)
+	    size = MAX_INPUT_SIZE;
     parsedtag_get_value(tag, ATTR_MAXLENGTH, &i);
     p2 = NULL;
     parsedtag_get_value(tag, ATTR_ALT, &p2);
@@ -3625,7 +3641,7 @@ process_input(struct parsed_tag *tag)
     }
     Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" fid=\"%d\" type=%s "
 			"name=\"%s\" width=%d maxlength=%d value=\"%s\"",
-			cur_hseq++, cur_form_id, p, html_quote(r), w, i, qq));
+			cur_hseq++, cur_form_id, p, html_quote(r), size, i, qq));
     if (x)
 	Strcat_charp(tmp, " checked");
     if (y)
@@ -3670,18 +3686,18 @@ process_input(struct parsed_tag *tag)
 	case FORM_INPUT_PASSWORD:
 	    i = 0;
 	    if (q) {
-		for (; i < qlen && i < w; i++)
+		for (; i < qlen && i < size; i++)
 		    Strcat_char(tmp, '*');
 	    }
-	    for (; i < w; i++)
+	    for (; i < size; i++)
 		Strcat_char(tmp, ' ');
 	    break;
 	case FORM_INPUT_TEXT:
 	case FORM_INPUT_FILE:
 	    if (q)
-		Strcat(tmp, textfieldrep(Strnew_charp(q), w));
+		Strcat(tmp, textfieldrep(Strnew_charp(q), size));
 	    else {
-		for (i = 0; i < w; i++)
+		for (i = 0; i < size; i++)
 		    Strcat_char(tmp, ' ');
 	    }
 	    break;
@@ -3732,6 +3748,63 @@ process_input(struct parsed_tag *tag)
 }
 
 Str
+process_button(struct parsed_tag *tag)
+{
+    Str tmp = NULL;
+    char *p, *q, *r, *qq = "";
+    int qlen, v;
+
+    if (cur_form_id < 0) {
+       char *s = "<form_int method=internal action=none>";
+       tmp = process_form(parse_tag(&s, TRUE));
+    }
+    if (tmp == NULL)
+       tmp = Strnew();
+
+    p = "submit";
+    parsedtag_get_value(tag, ATTR_TYPE, &p);
+    q = NULL;
+    parsedtag_get_value(tag, ATTR_VALUE, &q);
+    r = "";
+    parsedtag_get_value(tag, ATTR_NAME, &r);
+
+    v = formtype(p);
+    if (v == FORM_UNKNOWN)
+       return NULL;
+
+    if (!q) {
+       switch (v) {
+       case FORM_INPUT_SUBMIT:
+       case FORM_INPUT_BUTTON:
+           q = "SUBMIT";
+           break;
+       case FORM_INPUT_RESET:
+           q = "RESET";
+           break;
+       }
+    }
+    if (q) {
+       qq = html_quote(q);
+       qlen = strlen(q);
+    }
+
+    /*    Strcat_charp(tmp, "<pre_int>"); */
+    Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" fid=\"%d\" type=%s "
+                       "name=\"%s\" value=\"%s\">",
+                       cur_hseq++, cur_form_id, p, html_quote(r), qq));
+    return tmp;
+}
+
+Str
+process_n_button(void)
+{
+    Str tmp = Strnew();
+    Strcat_charp(tmp, "</input_alt>");
+    /*    Strcat_charp(tmp, "</pre_int>"); */
+    return tmp;
+}
+
+Str
 process_select(struct parsed_tag *tag)
 {
     Str tmp = NULL;
@@ -4084,6 +4157,7 @@ process_form_int(struct parsed_tag *tag, int fid)
     parsedtag_get_value(tag, ATTR_METHOD, &p);
     q = "!CURRENT_URL!";
     parsedtag_get_value(tag, ATTR_ACTION, &q);
+    q = url_encode(remove_space(q), cur_baseURL, cur_document_charset);
     r = NULL;
 #ifdef USE_M17N
     if (parsedtag_get_value(tag, ATTR_ACCEPT_CHARSET, &r))
@@ -4284,15 +4358,15 @@ getMetaRefreshParam(char *q, Str *refresh_uri)
     while (*q) {
 	if (!strncasecmp(q, "url=", 4)) {
 	    q += 4;
-	    if (*q == '\"')	/* " */
+	    if (*q == '\"' || *q == '\'')	/* " or ' */
 		q++;
 	    r = q;
 	    while (*r && !IS_SPACE(*r) && *r != ';')
 		r++;
 	    s_tmp = Strnew_charp_n(q, r - q);
 
-	    if (s_tmp->ptr[s_tmp->length - 1] == '\"') {	/* " 
-								 */
+	    if (s_tmp->ptr[s_tmp->length - 1] == '\"'          /* " */
+	       || s_tmp->ptr[s_tmp->length - 1] == '\'') {     /* ' */
 		s_tmp->length--;
 		s_tmp->ptr[s_tmp->length] = '\0';
 	    }
@@ -4861,7 +4935,35 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
 	    if (i > obuf->bottom_margin)
 		obuf->bottom_margin = i;
 	}
+	if (parsedtag_get_value(tag, ATTR_HSEQ, &hseq)) {
+	    obuf->input_alt.hseq = hseq;
+	}
+	if (parsedtag_get_value(tag, ATTR_FID, &i)) {
+	    obuf->input_alt.fid = i;
+	}
+	if (parsedtag_get_value(tag, ATTR_TYPE, &p)) {
+	    obuf->input_alt.type = Strnew_charp(p);
+	}
+	if (parsedtag_get_value(tag, ATTR_VALUE, &p)) {
+	    obuf->input_alt.value = Strnew_charp(p);
+	}
+	if (parsedtag_get_value(tag, ATTR_NAME, &p)) {
+	    obuf->input_alt.name = Strnew_charp(p);
+	}
+	obuf->input_alt.in = 1;
 	return 0;
+    case HTML_N_INPUT_ALT:
+	if (obuf->input_alt.in) {
+	    if (!close_effect0(obuf, HTML_INPUT_ALT))
+		push_tag(obuf, "</input_alt>", HTML_N_INPUT_ALT);
+	    obuf->input_alt.hseq = 0;
+	    obuf->input_alt.fid = -1;
+	    obuf->input_alt.in = 0;
+	    obuf->input_alt.type = NULL;
+	    obuf->input_alt.name = NULL;
+	    obuf->input_alt.value = NULL;
+	}
+	return 1;
     case HTML_TABLE:
 	close_anchor(h_env, obuf);
 	obuf->table_level++;
@@ -4884,6 +4986,8 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
 	    else
 		w = BORDER_THIN;
 	}
+	if (DisplayBorders && w == BORDER_NONE)
+	    w = BORDER_THIN;
 	if (parsedtag_get_value(tag, ATTR_WIDTH, &i)) {
 	    if (obuf->table_level == 0)
 		width = REAL_WIDTH(i, h_env->limit - envs[h_env->envc].indent);
@@ -4970,6 +5074,16 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
     case HTML_INPUT:
 	close_anchor(h_env, obuf);
 	tmp = process_input(tag);
+       if (tmp)
+           HTMLlineproc1(tmp->ptr, h_env);
+       return 1;
+    case HTML_BUTTON:
+       tmp = process_button(tag);
+       if (tmp)
+           HTMLlineproc1(tmp->ptr, h_env);
+       return 1;
+    case HTML_N_BUTTON:
+       tmp = process_n_button();
 	if (tmp)
 	    HTMLlineproc1(tmp->ptr, h_env);
 	return 1;
@@ -5067,11 +5181,10 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
 	}
 	return 1;
     case HTML_BASE:
-#ifdef USE_IMAGE
+#if defined(USE_M17N) || defined(USE_IMAGE)
 	p = NULL;
 	if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
-	    if (!cur_baseURL)
-		cur_baseURL = New(ParsedURL);
+	    cur_baseURL = New(ParsedURL);
 	    parseURL(p, cur_baseURL, NULL);
 	}
 #endif
@@ -5329,6 +5442,13 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
 #ifdef MENU_SELECT
     Anchor **a_select = NULL;
 #endif
+#if defined(USE_M17N) || defined(USE_IMAGE)
+    ParsedURL *base = baseURL(buf);
+#endif
+#ifdef USE_M17N
+    wc_ces name_charset = url_to_charset(NULL, &buf->currentURL,
+					 buf->document_charset);
+#endif
 
     if (out_size == 0) {
 	out_size = LINELEN;
@@ -5523,16 +5643,17 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
 		    hseq = 0;
 		    id = NULL;
 		    if (parsedtag_get_value(tag, ATTR_NAME, &id)) {
-			id = url_quote_conv(id, buf->document_charset);
+			id = url_quote_conv(id, name_charset);
 			registerName(buf, id, currentLn(buf), pos);
 		    }
 		    if (parsedtag_get_value(tag, ATTR_HREF, &p))
-			p = url_quote_conv(remove_space(p),
-					   buf->document_charset);
+			p = url_encode(remove_space(p), base,
+				       buf->document_charset);
 		    if (parsedtag_get_value(tag, ATTR_TARGET, &q))
 			q = url_quote_conv(q, buf->document_charset);
 		    if (parsedtag_get_value(tag, ATTR_REFERER, &r))
-			r = url_quote_conv(r, buf->document_charset);
+			r = url_encode(r, base,
+				       buf->document_charset);
 		    parsedtag_get_value(tag, ATTR_TITLE, &s);
 		    parsedtag_get_value(tag, ATTR_ACCESSKEY, &t);
 		    parsedtag_get_value(tag, ATTR_HSEQ, &hseq);
@@ -5618,7 +5739,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
 			    ParsedURL u;
 			    Image *image;
 
-			    parseURL2(a_img->url, &u, cur_baseURL);
+			    parseURL2(a_img->url, &u, base);
 			    a_img->image = image = New(Image);
 			    image->url = parsedURL2Str(&u)->ptr;
 			    if (!uncompressed_file_type(u.file, &image->ext))
@@ -5639,7 +5760,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
 			    image->map = q;
 			    image->ismap = ismap;
 			    image->touch = 0;
-			    image->cache = getImage(image, cur_baseURL,
+			    image->cache = getImage(image, base,
 						    IMG_FLAG_SKIP);
 			}
 			else if (iseq < 0) {
@@ -5689,6 +5810,21 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
 				putHmarker(buf->hmarklist, currentLn(buf),
 					   hpos, hseq - 1);
 			}
+			else if (hseq < 0) {
+			    int h = -hseq - 1;
+			    int hpos = pos;
+			    if (*str == '[')
+				hpos++;
+			    if (buf->hmarklist &&
+				h < buf->hmarklist->nmark &&
+				buf->hmarklist->marks[h].invalid) {
+				buf->hmarklist->marks[h].pos = hpos;
+				buf->hmarklist->marks[h].line = currentLn(buf);
+				buf->hmarklist->marks[h].invalid = 0;
+				hseq = -hseq;
+			    }
+			}
+
 			if (!form->target)
 			    form->target = buf->baseTarget;
 			if (a_textarea &&
@@ -5761,8 +5897,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
 			break;
 		    if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
 			MapArea *a;
-			p = url_quote_conv(remove_space(p),
-					   buf->document_charset);
+			p = url_encode(remove_space(p), base,
+				       buf->document_charset);
 			t = NULL;
 			parsedtag_get_value(tag, ATTR_TARGET, &t);
 			q = "";
@@ -5811,11 +5947,14 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
 		    break;
 		case HTML_BASE:
 		    if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
-			p = url_quote_conv(remove_space(p),
-					   buf->document_charset);
+			p = url_encode(remove_space(p), NULL,
+				       buf->document_charset);
 			if (!buf->baseURL)
 			    buf->baseURL = New(ParsedURL);
 			parseURL(p, buf->baseURL, NULL);
+#if defined(USE_M17N) || defined(USE_IMAGE)
+			base = buf->baseURL;
+#endif
 		    }
 		    if (parsedtag_get_value(tag, ATTR_TARGET, &p))
 			buf->baseTarget =
@@ -5830,8 +5969,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
 			int refresh_interval = getMetaRefreshParam(q, &tmp);
 #ifdef USE_ALARM
 			if (tmp) {
-			    p = url_quote_conv(remove_space(tmp->ptr),
-					       buf->document_charset);
+			    p = url_encode(remove_space(tmp->ptr), base,
+					   buf->document_charset);
 			    buf->event = setAlarmEvent(buf->event,
 						       refresh_interval,
 						       AL_IMPLICIT_ONCE,
@@ -5844,8 +5983,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
 						       FUNCNAME_reload, NULL);
 #else
 			if (tmp && refresh_interval == 0) {
-			    p = url_quote_conv(remove_space(tmp->ptr),
-					       buf->document_charset);
+			    p = url_encode(remove_space(tmp->ptr), base,
+					   buf->document_charset);
 			    pushEvent(FUNCNAME_gorURL, p);
 			}
 #endif
@@ -5929,7 +6068,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
 #ifdef	ID_EXT
 		id = NULL;
 		if (parsedtag_get_value(tag, ATTR_ID, &id)) {
-		    id = url_quote_conv(id, buf->document_charset);
+		    id = url_quote_conv(id, name_charset);
 		    registerName(buf, id, currentLn(buf), pos);
 		}
 		if (renderFrameSet &&
@@ -5982,7 +6121,8 @@ addLink(Buffer *buf, struct parsed_tag *tag)
 
     parsedtag_get_value(tag, ATTR_HREF, &href);
     if (href)
-	href = url_quote_conv(remove_space(href), buf->document_charset);
+	href = url_encode(remove_space(href), baseURL(buf),
+			  buf->document_charset);
     parsedtag_get_value(tag, ATTR_TITLE, &title);
     parsedtag_get_value(tag, ATTR_TYPE, &ctype);
     parsedtag_get_value(tag, ATTR_REL, &rel);
@@ -6756,6 +6896,12 @@ init_henv(struct html_feed_environ *h_env, struct readbuffer *obuf,
     obuf->nobr_level = 0;
     bzero((void *)&obuf->anchor, sizeof(obuf->anchor));
     obuf->img_alt = 0;
+    obuf->input_alt.hseq = 0;
+    obuf->input_alt.fid = -1;
+    obuf->input_alt.in = 0;
+    obuf->input_alt.type = NULL;
+    obuf->input_alt.name = NULL;
+    obuf->input_alt.value = NULL;
     obuf->in_bold = 0;
     obuf->in_italic = 0;
     obuf->in_under = 0;
@@ -6791,6 +6937,15 @@ completeHTMLstream(struct html_feed_environ *h_env, struct readbuffer *obuf)
 	push_tag(obuf, "</img_alt>", HTML_N_IMG_ALT);
 	obuf->img_alt = NULL;
     }
+    if (obuf->input_alt.in) {
+	push_tag(obuf, "</input_alt>", HTML_N_INPUT_ALT);
+	obuf->input_alt.hseq = 0;
+	obuf->input_alt.fid = -1;
+	obuf->input_alt.in = 0;
+	obuf->input_alt.type = NULL;
+	obuf->input_alt.name = NULL;
+	obuf->input_alt.value = NULL;
+    }
     if (obuf->in_bold) {
 	push_tag(obuf, "</b>", HTML_N_B);
 	obuf->in_bold = 0;
@@ -6963,8 +7118,6 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
 	image_flag = IMG_FLAG_AUTO;
     else
 	image_flag = IMG_FLAG_SKIP;
-    if (newBuf->currentURL.file)
-	cur_baseURL = baseURL(newBuf);
 #endif
 
     if (w3m_halfload) {
@@ -6987,6 +7140,9 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
 	htmlenv1.f = stdout;
     else
 	htmlenv1.buf = newTextLineList();
+#if defined(USE_M17N) || defined(USE_IMAGE)
+    cur_baseURL = baseURL(newBuf);
+#endif
 
     if (SETJMP(AbortLoading) != 0) {
 	HTMLlineproc1("<br>Transfer Interrupted!<br>", &htmlenv1);
@@ -7048,18 +7204,23 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
 	}
 #endif
 	lineBuf2 = convertLine(f, lineBuf2, HTML_MODE, &charset, doc_charset);
-#if defined(USE_M17N) && defined(USE_IMAGE)
+#ifdef USE_M17N
 	cur_document_charset = charset;
 #endif
 	HTMLlineproc0(lineBuf2->ptr, &htmlenv1, internal);
     }
     if (obuf.status != R_ST_NORMAL) {
-	obuf.status = R_ST_EOL;
 	HTMLlineproc0("\n", &htmlenv1, internal);
     }
     obuf.status = R_ST_NORMAL;
     completeHTMLstream(&htmlenv1, &obuf);
     flushline(&htmlenv1, &obuf, 0, 2, htmlenv1.limit);
+#if defined(USE_M17N) || defined(USE_IMAGE)
+    cur_baseURL = NULL;
+#endif
+#ifdef USE_M17N
+    cur_document_charset = 0;
+#endif
     if (htmlenv1.title)
 	newBuf->buffername = htmlenv1.title;
     if (w3m_halfdump) {
@@ -7096,16 +7257,17 @@ loadHTMLString(Str page)
     MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
     Buffer *newBuf;
 
+    init_stream(&f, SCM_LOCAL, newStrStream(page));
+
     newBuf = newBuffer(INIT_BUFFER_WIDTH);
     if (SETJMP(AbortLoading) != 0) {
 	TRAP_OFF;
 	discardBuffer(newBuf);
+	UFclose(&f);
 	return NULL;
     }
     TRAP_ON;
 
-    init_stream(&f, SCM_LOCAL, newStrStream(page));
-
 #ifdef USE_M17N
     newBuf->document_charset = InnerCharset;
 #endif
@@ -7115,6 +7277,7 @@ loadHTMLString(Str page)
 #endif
 
     TRAP_OFF;
+    UFclose(&f);
     newBuf->topLine = newBuf->firstLine;
     newBuf->lastLine = newBuf->currentLine;
     newBuf->currentLine = newBuf->firstLine;
@@ -7207,7 +7370,7 @@ loadGopherDir(URLFile *uf, ParsedURL *pu, wc_ces * charset)
 	q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr,
 			   "/", file->ptr, NULL)->ptr;
 	Strcat_m_charp(tmp, "<a href=\"",
-		       html_quote(url_quote_conv(q, *charset)),
+		       html_quote(url_encode(q, NULL, *charset)),
 		       "\">", p, html_quote(name->ptr + 1), "</a>\n", NULL);
     }
 
@@ -7243,7 +7406,6 @@ loadBuffer(URLFile *uf, Buffer *volatile newBuf)
 
     if (newBuf == NULL)
 	newBuf = newBuffer(INIT_BUFFER_WIDTH);
-    lineBuf2 = Strnew();
 
     if (SETJMP(AbortLoading) != 0) {
 	goto _end;
@@ -7331,6 +7493,7 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
     URLFile f;
     MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
     struct stat st;
+    const ParsedURL *pu = newBuf ? &newBuf->currentURL : NULL;
 
     loadImage(newBuf, IMG_FLAG_STOP);
     image.url = uf->url;
@@ -7338,20 +7501,18 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
     image.width = -1;
     image.height = -1;
     image.cache = NULL;
-    cache = getImage(&image, cur_baseURL, IMG_FLAG_AUTO);
-    if (!cur_baseURL->is_nocache && cache->loaded & IMG_FLAG_LOADED &&
+    cache = getImage(&image, (ParsedURL *)pu, IMG_FLAG_AUTO);
+    if (!(pu && pu->is_nocache) && cache->loaded & IMG_FLAG_LOADED &&
 	!stat(cache->file, &st))
 	goto image_buffer;
 
-    TRAP_ON;
     if (IStype(uf->stream) != IST_ENCODED)
 	uf->stream = newEncodedStream(uf->stream, uf->encoding);
+    TRAP_ON;
     if (save2tmp(*uf, cache->file) < 0) {
-	UFclose(uf);
 	TRAP_OFF;
 	return NULL;
     }
-    UFclose(uf);
     TRAP_OFF;
 
     cache->loaded = IMG_FLAG_LOADED;
@@ -7371,6 +7532,7 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
 
     init_stream(&f, SCM_LOCAL, newStrStream(tmp));
     loadHTMLstream(&f, newBuf, src, TRUE);
+    UFclose(&f);
     if (src)
 	fclose(src);
 
@@ -7580,8 +7742,11 @@ openGeneralPagerBuffer(InputStream stream)
 #ifdef USE_M17N
     content_charset = 0;
 #endif
+    t_buf = newBuffer(INIT_BUFFER_WIDTH);
+    copyParsedURL(&t_buf->currentURL, NULL);
+    t_buf->currentURL.scheme = SCM_LOCAL;
+    t_buf->currentURL.file = "-";
     if (SearchHeader) {
-	t_buf = newBuffer(INIT_BUFFER_WIDTH);
 	readHeader(&uf, t_buf, TRUE, NULL);
 	t = checkContentType(t_buf);
 	if (t == NULL)
@@ -7609,14 +7774,13 @@ openGeneralPagerBuffer(InputStream stream)
 #ifdef USE_IMAGE
     else if (activeImage && displayImage && !useExtImageViewer &&
 	     !(w3m_dump & ~DUMP_FRAME) && !strncasecmp(t, "image/", 6)) {
-	cur_baseURL = New(ParsedURL);
-	parseURL("-", cur_baseURL, NULL);
 	buf = loadImageBuffer(&uf, t_buf);
 	buf->type = "text/html";
     }
 #endif
     else {
-	if (doExternal(uf, "-", t, &buf, t_buf)) {
+	if (searchExtViewer(t)) {
+	    buf = doExternal(uf, t, t_buf);
 	    UFclose(&uf);
 	    if (buf == NULL || buf == NO_BUFFER)
 		return buf;
@@ -7629,8 +7793,6 @@ openGeneralPagerBuffer(InputStream stream)
 	}
     }
     buf->real_type = t;
-    buf->currentURL.scheme = SCM_LOCAL;
-    buf->currentURL.file = "-";
     return buf;
 }
 
@@ -7766,6 +7928,8 @@ save2tmp(URLFile uf, char *tmpf)
     clen_t linelen = 0, trbyte = 0;
     MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
     static JMP_BUF env_bak;
+    volatile int retval = 0;
+    char *volatile buf = NULL;
 
     ff = fopen(tmpf, "wb");
     if (ff == NULL) {
@@ -7802,30 +7966,29 @@ save2tmp(URLFile uf, char *tmpf)
     else
 #endif				/* USE_NNTP */
     {
-	Str buf = Strnew_size(SAVE_BUF_SIZE);
-	while (UFread(&uf, buf, SAVE_BUF_SIZE)) {
-	    if (Strfputs(buf, ff) != buf->length) {
-		bcopy(env_bak, AbortLoading, sizeof(JMP_BUF));
-		TRAP_OFF;
-		fclose(ff);
-		current_content_length = 0;
-		return -2;
+	int count;
+
+	buf = NewWithoutGC_N(char, SAVE_BUF_SIZE);
+	while ((count = ISread_n(uf.stream, buf, SAVE_BUF_SIZE)) > 0) {
+	    if (fwrite(buf, 1, count, ff) != count) {
+		retval = -2;
+		goto _end;
 	    }
-	    linelen += buf->length;
+	    linelen += count;
 	    showProgress(&linelen, &trbyte);
 	}
     }
   _end:
     bcopy(env_bak, AbortLoading, sizeof(JMP_BUF));
     TRAP_OFF;
+    xfree(buf);
     fclose(ff);
     current_content_length = 0;
-    return 0;
+    return retval;
 }
 
-int
-doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
-	   Buffer *defaultbuf)
+Buffer *
+doExternal(URLFile uf, char *type, Buffer *defaultbuf)
 {
     Str tmpf, command;
     struct mailcap *mcap;
@@ -7834,7 +7997,7 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
     char *header, *src = NULL, *ext = uf.ext;
 
     if (!(mcap = searchExtViewer(type)))
-	return 0;
+	return NULL;
 
     if (mcap->nametemplate) {
 	tmpf = unquote_mailcap(mcap->nametemplate, NULL, "", NULL, NULL);
@@ -7867,15 +8030,13 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
 	    UFclose(&uf);
 	    myExec(command->ptr);
 	}
-	*bufp = NO_BUFFER;
-	return 1;
+	return NO_BUFFER;
     }
     else
 #endif
     {
 	if (save2tmp(uf, tmpf->ptr) < 0) {
-	    *bufp = NULL;
-	    return 1;
+	    return NULL;
 	}
     }
     if (mcap->flags & (MAILCAP_HTMLOUTPUT | MAILCAP_COPIOUSOUTPUT)) {
@@ -7918,14 +8079,13 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
 	buf = NO_BUFFER;
     }
     if (buf && buf != NO_BUFFER) {
-	buf->filename = path;
-	if (buf->buffername == NULL || buf->buffername[0] == '\0')
-	    buf->buffername = conv_from_system(lastFileName(path));
+	if ((buf->buffername == NULL || buf->buffername[0] == '\0') &&
+	    buf->filename)
+	    buf->buffername = conv_from_system(lastFileName(buf->filename));
 	buf->edit = mcap->edit;
 	buf->mailcap = mcap;
     }
-    *bufp = buf;
-    return 1;
+    return buf;
 }
 
 static int
@@ -7935,7 +8095,8 @@ _MoveFile(char *path1, char *path2)
     FILE *f2;
     int is_pipe;
     clen_t linelen = 0, trbyte = 0;
-    Str buf;
+    char *buf = NULL;
+    int count;
 
     f1 = openIS(path1);
     if (f1 == NULL)
@@ -7953,12 +8114,13 @@ _MoveFile(char *path1, char *path2)
 	return -1;
     }
     current_content_length = 0;
-    buf = Strnew_size(SAVE_BUF_SIZE);
-    while (ISread(f1, buf, SAVE_BUF_SIZE)) {
-	Strfputs(buf, f2);
-	linelen += buf->length;
+    buf = NewWithoutGC_N(char, SAVE_BUF_SIZE);
+    while ((count = ISread_n(f1, buf, SAVE_BUF_SIZE)) > 0) {
+	fwrite(buf, 1, count, f2);
+	linelen += count;
 	showProgress(&linelen, &trbyte);
     }
+    xfree(buf);
     ISclose(f1);
     if (is_pipe)
 	pclose(f2);
@@ -7998,7 +8160,7 @@ _doFileCopy(char *tmpf, char *defstr, int download)
 	else {
 	    if (q) {
 		p = unescape_spaces(Strnew_charp(q))->ptr;
-		p = conv_to_system(q);
+		p = conv_to_system(p);
 	    }
 	    p = expandPath(p);
 	    if (checkOverWrite(p) < 0)
@@ -8317,21 +8479,23 @@ uncompress_stream(URLFile *uf, char **src)
 	}
 	if (pid2 == 0) {
 	    /* child2 */
-	    Str buf = Strnew_size(SAVE_BUF_SIZE);
+	    char *buf = NewWithoutGC_N(char, SAVE_BUF_SIZE);
+	    int count;
 	    FILE *f = NULL;
 
 	    setup_child(TRUE, 2, UFfileno(uf));
 	    if (tmpf)
 		f = fopen(tmpf, "wb");
-	    while (UFread(uf, buf, SAVE_BUF_SIZE)) {
-		if (Strfputs(buf, stdout) < 0)
+	    while ((count = ISread_n(uf->stream, buf, SAVE_BUF_SIZE)) > 0) {
+		if (fwrite(buf, 1, count, stdout) != count)
+		    break;
+		if (f && fwrite(buf, 1, count, f) != count)
 		    break;
-		if (f)
-		    Strfputs(buf, f);
 	    }
 	    UFclose(uf);
 	    if (f)
 		fclose(f);
+	    xfree(buf);
 	    exit(0);
 	}
 	/* child1 */
@@ -8378,7 +8542,7 @@ lessopen_stream(char *path)
 	}
 	c = getc(fp);
 	if (c == EOF) {
-	    fclose(fp);
+	    pclose(fp);
 	    return NULL;
 	}
 	ungetc(c, fp);
diff --git a/fm.h b/fm.h
index 8378939..4b99a9d 100644
--- a/fm.h
+++ b/fm.h
@@ -76,6 +76,7 @@ typedef int wc_ces;	/* XXX: not used */
 #include "textlist.h"
 #include "funcname1.h"
 #include "terms.h"
+#include "istream.h"
 
 #ifndef HAVE_BCOPY
 void bcopy(const void *, void *, int);
@@ -264,6 +265,18 @@ extern int REV_LB[];
 #define IMG_FLAG_ERROR		2
 #define IMG_FLAG_DONT_REMOVE	4
 
+#define IS_EMPTY_PARSED_URL(pu) ((pu)->scheme == SCM_UNKNOWN && !(pu)->file)
+#define SCONF_RESERVED		0
+#define SCONF_SUBSTITUTE_URL	1
+#define SCONF_URL_CHARSET	2
+#define SCONF_NO_REFERER_FROM	3
+#define SCONF_NO_REFERER_TO	4
+#define SCONF_N_FIELD		5
+#define query_SCONF_SUBSTITUTE_URL(pu) ((const char *)querySiteconf(pu, SCONF_SUBSTITUTE_URL))
+#define query_SCONF_URL_CHARSET(pu) ((const wc_ces *)querySiteconf(pu, SCONF_URL_CHARSET))
+#define query_SCONF_NO_REFERER_FROM(pu) ((const int *)querySiteconf(pu, SCONF_NO_REFERER_FROM))
+#define query_SCONF_NO_REFERER_TO(pu) ((const int *)querySiteconf(pu, SCONF_NO_REFERER_TO))
+
 /* 
  * Macros.
  */
@@ -276,8 +289,6 @@ extern int REV_LB[];
 #define inputFilenameHist(p,d,h)	inputLineHist(p,d,IN_FILENAME,h)
 #define inputChar(p)		inputLine(p,"",IN_CHAR)
 
-#define free(x)  GC_free(x)	/* let GC do it. */
-
 #ifdef __EMX__
 #define HAVE_STRCASECMP
 #define strcasecmp	stricmp
@@ -362,6 +373,8 @@ typedef struct _imageCache {
     int index;
     short width;
     short height;
+    short a_width;
+    short a_height;
 } ImageCache;
 
 typedef struct _image {
@@ -562,6 +575,13 @@ typedef struct _DownloadList {
 #define INIT_BUFFER_WIDTH ((_INIT_BUFFER_WIDTH > 0) ? _INIT_BUFFER_WIDTH : 0)
 #define FOLD_BUFFER_WIDTH (FoldLine ? (INIT_BUFFER_WIDTH + 1) : -1)
 
+struct input_alt_attr {
+  int hseq;
+  int fid;
+  int in;
+  Str type, name, value;
+};
+
 typedef struct {
     int pos;
     int len;
@@ -569,6 +589,7 @@ typedef struct {
     long flag;
     Anchor anchor;
     Str img_alt;
+    struct input_alt_attr input_alt;
     char fontstat[FONTSTAT_SIZE];
     short nobr_level;
     Lineprop prev_ctype;
@@ -591,6 +612,7 @@ struct readbuffer {
     short nobr_level;
     Anchor anchor;
     Str img_alt;
+    struct input_alt_attr input_alt;
     char fontstat[FONTSTAT_SIZE];
     char fontstat_stack[FONT_STACK_SIZE][FONTSTAT_SIZE];
     int fontstat_sp;
@@ -802,7 +824,7 @@ global char PermitSaveToPipe init(FALSE);
 global char DecodeCTE init(FALSE);
 global char AutoUncompress init(FALSE);
 global char PreserveTimestamp init(TRUE);
-global char ArgvIsURL init(FALSE);
+global char ArgvIsURL init(TRUE);
 global char MetaRefresh init(FALSE);
 
 global char fmInitialized init(FALSE);
@@ -874,6 +896,9 @@ global char *index_file init(NULL);
 
 global char *CurrentDir;
 global int CurrentPid;
+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
+global char *MyProgramName init("w3m");
+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
 /*
  * global Buffer *Currentbuf;
  * global Buffer *Firstbuf;
@@ -896,6 +921,7 @@ global char *CurrentKeyData;
 global char *CurrentCmdData;
 global char *w3m_reqlog;
 extern char *w3m_version;
+extern int enable_inline_image;
 
 #define DUMP_BUFFER   0x01
 #define DUMP_HEAD     0x02
@@ -968,10 +994,17 @@ global int MailtoOptions init(MAILTO_OPTIONS_IGNORE);
 global char *ExtBrowser init(DEF_EXT_BROWSER);
 global char *ExtBrowser2 init(NULL);
 global char *ExtBrowser3 init(NULL);
+global char *ExtBrowser4 init(NULL);
+global char *ExtBrowser5 init(NULL);
+global char *ExtBrowser6 init(NULL);
+global char *ExtBrowser7 init(NULL);
+global char *ExtBrowser8 init(NULL);
+global char *ExtBrowser9 init(NULL);
 global int BackgroundExtViewer init(TRUE);
 global int disable_secret_security_check init(FALSE);
 global char *passwd_file init(PASSWD_FILE);
 global char *pre_form_file init(PRE_FORM_FILE);
+global char *siteconf_file init(SITECONF_FILE);
 global char *ftppasswd init(NULL);
 global int ftppass_hostnamegen init(TRUE);
 global int do_download init(FALSE);
@@ -1004,7 +1037,7 @@ global int FoldLine init(FALSE);
 #define DEFAULT_URL_EMPTY	0
 #define DEFAULT_URL_CURRENT	1
 #define DEFAULT_URL_LINK	2
-global int DefaultURLString init(DEFAULT_URL_EMPTY);
+global int DefaultURLString init(DEFAULT_URL_CURRENT);
 global int MarkAllPages init(FALSE);
 
 #ifdef USE_MIGEMO
@@ -1065,11 +1098,12 @@ global char SimplePreserveSpace init(FALSE);
 #define wc_Str_conv(x,charset0,charset1) (x)
 #define wc_Str_conv_strict(x,charset0,charset1) (x)
 #endif
-global char UseAltEntity init(TRUE);
+global char UseAltEntity init(FALSE);
 #define GRAPHIC_CHAR_ASCII 2
 #define GRAPHIC_CHAR_DEC 1
 #define GRAPHIC_CHAR_CHARSET 0
 global char UseGraphicChar init(GRAPHIC_CHAR_CHARSET);
+global char DisplayBorders init(FALSE);
 extern char *graph_symbol[];
 extern char *graph2_symbol[];
 extern int symbol_width;
@@ -1113,9 +1147,9 @@ global MouseAction mouse_action;
 
 #ifdef USE_COOKIE
 global int default_use_cookie init(TRUE);
-global int use_cookie init(FALSE);
-global int show_cookie init(TRUE);
-global int accept_cookie init(FALSE);
+global int use_cookie init(TRUE);
+global int show_cookie init(FALSE);
+global int accept_cookie init(TRUE);
 #define ACCEPT_BAD_COOKIE_DISCARD	0
 #define ACCEPT_BAD_COOKIE_ACCEPT	1
 #define ACCEPT_BAD_COOKIE_ASK		2
@@ -1135,7 +1169,7 @@ global int view_unseenobject init(TRUE);
 #endif
 
 #if defined(USE_SSL) && defined(USE_SSL_VERIFY)
-global int ssl_verify_server init(FALSE);
+global int ssl_verify_server init(TRUE);
 global char *ssl_cert_file init(NULL);
 global char *ssl_key_file init(NULL);
 global char *ssl_ca_path init(NULL);
@@ -1144,15 +1178,17 @@ global int ssl_path_modified init(FALSE);
 #endif				/* defined(USE_SSL) &&
 				 * defined(USE_SSL_VERIFY) */
 #ifdef USE_SSL
-global char *ssl_forbid_method init(NULL);
+global char *ssl_forbid_method init("2, 3");
 #endif
 
 global int is_redisplay init(FALSE);
 global int clear_buffer init(TRUE);
 global double pixel_per_char init(DEFAULT_PIXEL_PER_CHAR);
+global int pixel_per_char_i init(DEFAULT_PIXEL_PER_CHAR);
 global int set_pixel_per_char init(FALSE);
 #ifdef USE_IMAGE
 global double pixel_per_line init(DEFAULT_PIXEL_PER_LINE);
+global int pixel_per_line_i init(DEFAULT_PIXEL_PER_LINE);
 global int set_pixel_per_line init(FALSE);
 global double image_scale init(100);
 #endif
diff --git a/form.c b/form.c
index b7556ca..62b568e 100644
--- a/form.c
+++ b/form.c
@@ -196,7 +196,7 @@ formtype(char *typestr)
 	if (!strcasecmp(typestr, _formtypetbl[i]))
 	    return i;
     }
-    return FORM_UNKNOWN;
+    return FORM_INPUT_TEXT;
 }
 
 void
@@ -787,7 +787,7 @@ struct pre_form {
 static struct pre_form *PreForm = NULL;
 
 static struct pre_form *
-add_pre_form(struct pre_form *prev, char *url, char *name, char *action)
+add_pre_form(struct pre_form *prev, char *url, Regex *re_url, char *name, char *action)
 {
     ParsedURL pu;
     struct pre_form *new;
@@ -796,21 +796,13 @@ add_pre_form(struct pre_form *prev, char *url, char *name, char *action)
 	new = prev->next = New(struct pre_form);
     else
 	new = PreForm = New(struct pre_form);
-    if (url && *url == '/') {
-	int l = strlen(url);
-	if (l > 1 && url[l - 1] == '/')
-	    new->url = allocStr(url + 1, l - 2);
-	else
-	    new->url = url + 1;
-	new->re_url = newRegex(new->url, FALSE, NULL, NULL);
-	if (!new->re_url)
-	    new->url = NULL;
-    }
-    else if (url) {
+    if (url && !re_url) {
 	parseURL2(url, &pu, NULL);
 	new->url = parsedURL2Str(&pu)->ptr;
-	new->re_url = NULL;
     }
+    else
+	new->url = url;
+    new->re_url = re_url;
     new->name = (name && *name) ? name : NULL;
     new->action = (action && *action) ? action : NULL;
     new->item = NULL;
@@ -834,7 +826,7 @@ add_pre_form_item(struct pre_form *pf, struct pre_form_item *prev, int type,
     new->name = name;
     new->value = value;
     if (checked && *checked && (!strcmp(checked, "0") ||
-				strcasecmp(checked, "off")
+				!strcasecmp(checked, "off")
 				|| !strcasecmp(checked, "no")))
 	new->checked = 0;
     else
@@ -875,6 +867,7 @@ loadPreForm(void)
 	return;
     while (1) {
 	char *p, *s, *arg;
+	Regex *re_arg;
 
 	line = Strfgets(fp);
 	if (line->length == 0)
@@ -890,18 +883,20 @@ loadPreForm(void)
 	if (*p == '#' || *p == '\0')
 	    continue;		/* comment or empty line */
 	s = getWord(&p);
-	arg = getWord(&p);
 
 	if (!strcmp(s, "url")) {
+	    arg = getRegexWord((const char **)&p, &re_arg);
 	    if (!arg || !*arg)
 		continue;
 	    p = getQWord(&p);
-	    pf = add_pre_form(pf, arg, NULL, p);
+	    pf = add_pre_form(pf, arg, re_arg, NULL, p);
 	    pi = pf->item;
 	    continue;
 	}
 	if (!pf)
 	    continue;
+
+	arg = getWord(&p);
 	if (!strcmp(s, "form")) {
 	    if (!arg || !*arg)
 		continue;
@@ -913,7 +908,7 @@ loadPreForm(void)
 	    }
 	    if (pf->item) {
 		struct pre_form *prev = pf;
-		pf = add_pre_form(prev, "", s, p);
+		pf = add_pre_form(prev, "", NULL, s, p);
 		/* copy previous URL */
 		pf->url = prev->url;
 		pf->re_url = prev->re_url;
diff --git a/frame.c b/frame.c
index b431437..c595c40 100644
--- a/frame.c
+++ b/frame.c
@@ -91,7 +91,8 @@ newFrame(struct parsed_tag *tag, Buffer *buf)
     body->baseURL = baseURL(buf);
     if (tag) {
 	if (parsedtag_get_value(tag, ATTR_SRC, &p))
-	    body->url = url_quote_conv(remove_space(p), buf->document_charset);
+	    body->url = url_encode(remove_space(p), body->baseURL,
+				   buf->document_charset);
 	if (parsedtag_get_value(tag, ATTR_NAME, &p) && *p != '_')
 	    body->name = url_quote_conv(p, buf->document_charset);
     }
@@ -639,7 +640,7 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level,
 			case HTML_BASE:
 			    /* "BASE" is prohibit tag */
 			    if (parsedtag_get_value(tag, ATTR_HREF, &q)) {
-				q = url_quote_conv(remove_space(q), charset);
+				q = url_encode(remove_space(q), NULL, charset);
 				parseURL(q, &base, NULL);
 			    }
 			    if (parsedtag_get_value(tag, ATTR_TARGET, &q)) {
@@ -768,8 +769,8 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level,
 				if (!tag->value[j])
 				    break;
 				tag->value[j] =
-				    url_quote_conv(remove_space(tag->value[j]),
-						   charset);
+				    url_encode(remove_space(tag->value[j]),
+					       &base, charset);
 				tag->need_reconstruct = TRUE;
 				parseURL2(tag->value[j], &url, &base);
 				if (url.scheme == SCM_UNKNOWN ||
@@ -894,8 +895,10 @@ renderFrame(Buffer *Cbuf, int force_reload)
     /* 
      * if (Cbuf->frameQ != NULL) fset = Cbuf->frameQ->frameset; else */
     fset = Cbuf->frameset;
-    if (fset == NULL || createFrameFile(fset, f, Cbuf, 0, force_reload) < 0)
+    if (fset == NULL || createFrameFile(fset, f, Cbuf, 0, force_reload) < 0) {
+	fclose(f);
 	return NULL;
+    }
     fclose(f);
     flag = RG_FRAME;
     if ((Cbuf->currentURL).is_nocache)
diff --git a/ftp.c b/ftp.c
index 0002abd..2ca0247 100644
--- a/ftp.c
+++ b/ftp.c
@@ -123,6 +123,7 @@ static int
 ftp_login(FTP ftp)
 {
     int sock, status;
+    int sock_wf;
 
     sock = openSocket(ftp->host, "ftp", 21);
     if (sock < 0)
@@ -139,7 +140,6 @@ ftp_login(FTP ftp)
 	    socklen_t socknamelen = sizeof(sockname);
 
 	    if (!getsockname(sock, (struct sockaddr *)&sockname, &socknamelen)) {
-		struct hostent *sockent;
 		Str tmp = Strnew_charp(ftp->pass);
 #ifdef INET6
 		char hostbuf[NI_MAXHOST];
@@ -156,6 +156,7 @@ ftp_login(FTP ftp)
 		    Strcat_charp(tmp, "unknown");
 #else
 
+		struct hostent *sockent;
 		if ((sockent = gethostbyaddr((char *)&sockname.sin_addr,
 					     sizeof(sockname.sin_addr),
 					     sockname.sin_family)))
@@ -169,7 +170,10 @@ ftp_login(FTP ftp)
 	}
     }
     ftp->rf = newInputStream(sock);
-    ftp->wf = fdopen(dup(sock), "wb");
+    if ((sock_wf = dup(sock)) >= 0 )
+	    ftp->wf = fdopen(sock_wf, "wb");
+    else
+	    goto open_err;
     if (!ftp->rf || !ftp->wf)
 	goto open_err;
     IStype(ftp->rf) |= IST_UNCLOSE;
diff --git a/func.c b/func.c
index f389e00..8b5deac 100644
--- a/func.c
+++ b/func.c
@@ -8,6 +8,7 @@
 #include "fm.h"
 #include "func.h"
 #include "myctype.h"
+#include "regex.h"
 
 #include "funcname.c"
 #include "functable.c"
@@ -434,6 +435,93 @@ getQWord(char **str)
     return tmp->ptr;
 }
 
+/* This extracts /regex/i or m@regex@i from the given string.
+ * Then advances *str to the end of regex.
+ * If the input does not seems to be a regex, this falls back to getQWord().
+ * 
+ * Returns a word (no matter whether regex or not) in the give string.
+ * If regex_ret is non-NULL, compiles the regex and stores there.
+ *
+ * XXX: Actually this is unrelated to func.c.
+ */
+char *
+getRegexWord(const char **str, Regex **regex_ret)
+{
+    char *word = NULL;
+    const char *p, *headp, *bodyp, *tailp;
+    char delimiter;
+    int esc;
+    int igncase = 0;
+
+    p = *str;
+    SKIP_BLANKS(p);
+    headp = p;
+
+    /* Get the opening delimiter */
+    if (p[0] == 'm' && IS_PRINT(p[1]) && !IS_ALNUM(p[1]) && p[1] != '\\') {
+	delimiter = p[1];
+	p += 2;
+    }
+    else if (p[0] == '/') {
+	delimiter = '/';
+	p += 1;
+    }
+    else {
+	goto not_regex;
+    }
+    bodyp = p;
+
+    /* Scan the end of the expression */
+    for (esc = 0; *p; ++p) {
+	if (esc) {
+	    esc = 0;
+	} else {
+	    if (*p == delimiter)
+		break;
+	    else if (*p == '\\')
+		esc = 1;
+	}
+    }
+    if (!*p && *headp == '/')
+	goto not_regex;
+    tailp = p;
+
+    /* Check the modifiers */
+    if (*p == delimiter) {
+	while (*++p && !IS_SPACE(*p)) {
+	    switch (*p) {
+	    case 'i':
+		igncase = 1;
+		break;
+	    }
+	    /* ignore unknown modifiers */
+	}
+    }
+
+    /* Save the expression */
+    word = allocStr(headp, p - headp);
+
+    /* Compile */
+    if (regex_ret) {
+	if (*tailp == delimiter)
+	    word[tailp - headp] = 0;
+	*regex_ret = newRegex(word + (bodyp - headp), igncase, NULL, NULL);
+	if (*tailp == delimiter)
+	    word[tailp - headp] = delimiter;
+    }
+    goto last;
+
+not_regex:
+    p = headp;
+    word = getQWord((char **)&p);
+    if (regex_ret)
+	*regex_ret = NULL;
+
+last:
+    *str = p;
+    return word;
+}
+
 #ifdef USE_MOUSE
 static MouseAction default_mouse_action = {
     NULL,
diff --git a/history.c b/history.c
index 951ef83..f2a00b4 100644
--- a/history.c
+++ b/history.c
@@ -17,7 +17,7 @@ historyBuffer(Hist *hist)
 	for (item = hist->list->last; item; item = item->prev) {
 	    q = html_quote((char *)item->ptr);
 	    if (DecodeURL)
-		p = html_quote(url_unquote_conv((char *)item->ptr, 0));
+		p = html_quote(url_decode2((char *)item->ptr, NULL));
 	    else
 		p = q;
 	    Strcat_charp(src, "<li><a href=\"");
@@ -60,6 +60,7 @@ saveHistory(Hist *hist, size_t size)
     FILE *f;
     HistItem *item;
     char *tmpf;
+    int rename_ret;
 
     if (hist == NULL || hist->list == NULL)
 	return;
@@ -79,7 +80,11 @@ saveHistory(Hist *hist, size_t size)
 	disp_err_message("Can't save history", FALSE);
 	return;
     }
-    rename(tmpf, rcFile(HISTORY_FILE));
+    rename_ret = rename(tmpf, rcFile(HISTORY_FILE));
+    if (rename_ret != 0) {
+	disp_err_message("Can't save history", FALSE);
+	return;
+    }
 }
 #endif				/* USE_HISTORY */
 
diff --git a/html.c b/html.c
index bca227e..d9f08e9 100644
--- a/html.c
+++ b/html.c
@@ -56,6 +56,9 @@ unsigned char ALST_INPUT[] =
     ATTR_CORE
 };
 #define MAXA_INPUT      MAXA_CORE + 12
+unsigned char ALST_BUTTON[] =
+    { ATTR_TYPE, ATTR_VALUE, ATTR_NAME, ATTR_CORE };
+#define MAXA_BUTTON	MAXA_CORE + 3
 unsigned char ALST_TEXTAREA[] =
     { ATTR_COLS, ATTR_ROWS, ATTR_NAME, ATTR_READONLY, ATTR_CORE };
 #define MAXA_TEXTAREA   MAXA_CORE + 4
@@ -247,24 +250,24 @@ TagInfo TagMAP[MAX_HTMLTAG] = {
     {"/bdo", NULL, 0, TFLG_END},	/* 121 HTML_N_BDO */
     {"big", ALST_NOP, MAXA_NOP, 0},		/* 122 HTML_BIG */
     {"/big", NULL, 0, TFLG_END},	/* 123 HTML_N_BIG */
-    {"button", ALST_NOP, MAXA_NOP, 0},		/* 124 HTML_BUTTON */
-    {"fieldset", ALST_NOP, MAXA_NOP, 0},	        /* 125 HTML_FIELDSET */
-    {"/fieldset", NULL, 0, TFLG_END},	/* 126 HTML_N_FIELDSET */
-    {"iframe", ALST_NOP, MAXA_NOP, 0},		/* 127 HTML_IFRAME */
-    {"label", ALST_NOP, MAXA_NOP, 0}, 		/* 128 HTML_LABEL */
-    {"/label", NULL, 0, TFLG_END},	/* 129 HTML_N_LABEL */
-    {"legend", ALST_NOP, MAXA_NOP, 0},		/* 130 HTML_LEGEND */
-    {"/legend", NULL, 0, TFLG_END},	/* 131 HTML_N_LEGEND */
-    {"noscript", ALST_NOP, MAXA_NOP, 0},	        /* 132 HTML_NOSCRIPT */
-    {"/noscript", NULL, 0, TFLG_END},	/* 133 HTML_N_NOSCRIPT */
-    {"object", ALST_NOP, MAXA_NOP, 0},		/* 134 HTML_OBJECT */
-    {"optgroup", ALST_NOP, MAXA_NOP, 0},	        /* 135 HTML_OPTGROUP */
-    {"/optgroup", NULL, 0, TFLG_END},	/* 136 HTML_N_OPTGROUP */
-    {"param", ALST_NOP, MAXA_NOP, 0},		/* 137 HTML_PARAM */
-    {"small", ALST_NOP, MAXA_NOP, 0}, 		/* 138 HTML_SMALL */
-    {"/small", NULL, 0, TFLG_END},	/* 139 HTML_N_SMALL */
+    {"button", ALST_BUTTON, MAXA_BUTTON, 0},	/* 124 HTML_BUTTON */
+    {"/button", NULL, 0, TFLG_END},	/* 125 HTML_N_BUTTON */
+    {"fieldset", ALST_NOP, MAXA_NOP, 0},	/* 126 HTML_FIELDSET */
+    {"/fieldset", NULL, 0, TFLG_END},	/* 127 HTML_N_FIELDSET */
+    {"iframe", ALST_NOP, MAXA_NOP, 0},		/* 128 HTML_IFRAME */
+    {"label", ALST_NOP, MAXA_NOP, 0}, 		/* 129 HTML_LABEL */
+    {"/label", NULL, 0, TFLG_END},	/* 130 HTML_N_LABEL */
+    {"legend", ALST_NOP, MAXA_NOP, 0},		/* 131 HTML_LEGEND */
+    {"/legend", NULL, 0, TFLG_END},	/* 132 HTML_N_LEGEND */
+    {"noscript", ALST_NOP, MAXA_NOP, 0},	        /* 133 HTML_NOSCRIPT */
+    {"/noscript", NULL, 0, TFLG_END},	/* 134 HTML_N_NOSCRIPT */
+    {"object", ALST_NOP, MAXA_NOP, 0},		/* 135 HTML_OBJECT */
+    {"optgroup", ALST_NOP, MAXA_NOP, 0},	        /* 136 HTML_OPTGROUP */
+    {"/optgroup", NULL, 0, TFLG_END},	/* 137 HTML_N_OPTGROUP */
+    {"param", ALST_NOP, MAXA_NOP, 0},		/* 138 HTML_PARAM */
+    {"small", ALST_NOP, MAXA_NOP, 0}, 		/* 139 HTML_SMALL */
+    {"/small", NULL, 0, TFLG_END},	/* 140 HTML_N_SMALL */
 
-    {NULL, NULL, 0, 0},		/* 140 Undefined */
     {NULL, NULL, 0, 0},		/* 141 Undefined */
     {NULL, NULL, 0, 0},		/* 142 Undefined */
     {NULL, NULL, 0, 0},		/* 143 Undefined */
diff --git a/html.h b/html.h
index 7abbd3b..c490655 100644
--- a/html.h
+++ b/html.h
@@ -1,20 +1,18 @@
 /* $Id: html.h,v 1.31 2010/08/14 01:29:40 htrb Exp $ */
 #ifndef _HTML_H
 #define _HTML_H
+#include "config.h"
 #ifdef USE_SSL
 #include <openssl/bio.h>
 #include <openssl/x509.h>
 #include <openssl/ssl.h>
 #endif				/* USE_SSL */
 
-#include "istream.h"
-
 #define StrUFgets(f) StrISgets((f)->stream)
 #define StrmyUFgets(f) StrmyISgets((f)->stream)
 #define UFgetc(f) ISgetc((f)->stream)
 #define UFundogetc(f) ISundogetc((f)->stream)
-#define UFread(f,buf,len) ISread((f)->stream,buf,len)
-#define UFclose(f) (void)(ISclose((f)->stream) == 0 && ((f)->stream = NULL))
+#define UFclose(f) if (ISclose((f)->stream) == 0) {(f)->stream = NULL ;}
 #define UFfileno(f) ISfileno((f)->stream)
 
 struct cmdtable {
@@ -62,11 +60,12 @@ typedef struct _ParsedURL {
     int is_nocache;
 } ParsedURL;
 
+union input_stream;
 typedef struct {
     unsigned char scheme;
     char is_cgi;
     char encoding;
-    InputStream stream;
+    union input_stream *stream;
     char *ext;
     int compression;
     int content_encoding;
@@ -214,21 +213,22 @@ typedef struct {
 #define HTML_BIG        122
 #define HTML_N_BIG      123
 #define HTML_BUTTON     124
-#define HTML_FIELDSET   125
-#define HTML_N_FIELDSET 126
-#define HTML_IFRAME     127
-#define HTML_LABEL      128
-#define HTML_N_LABEL    129
-#define HTML_LEGEND     130
-#define HTML_N_LEGEND   131
-#define HTML_NOSCRIPT   132
-#define HTML_N_NOSCRIPT 133
-#define HTML_OBJECT     134
-#define HTML_OPTGROUP   135
-#define HTML_N_OPTGROUP 136
-#define HTML_PARAM      137
-#define HTML_SMALL      138
-#define HTML_N_SMALL    139
+#define HTML_N_BUTTON   125
+#define HTML_FIELDSET   126
+#define HTML_N_FIELDSET 127
+#define HTML_IFRAME     128
+#define HTML_LABEL      129
+#define HTML_N_LABEL    130
+#define HTML_LEGEND     131
+#define HTML_N_LEGEND   132
+#define HTML_NOSCRIPT   133
+#define HTML_N_NOSCRIPT 134
+#define HTML_OBJECT     135
+#define HTML_OPTGROUP   136
+#define HTML_N_OPTGROUP 137
+#define HTML_PARAM      138
+#define HTML_SMALL      139
+#define HTML_N_SMALL    140
 
    /* pseudo tag */
 #define HTML_SELECT_INT     160
diff --git a/image.c b/image.c
index 5f5991a..91034ee 100644
--- a/image.c
+++ b/image.c
@@ -44,6 +44,8 @@ initImage()
 	activeImage = TRUE;
 }
 
+int get_pixel_per_cell(int *ppc, int *ppl);
+
 int
 getCharSize()
 {
@@ -52,6 +54,24 @@ getCharSize()
     int w = 0, h = 0;
 
     set_environ("W3M_TTY", ttyname_tty());
+
+    if (enable_inline_image) {
+	int ppc, ppl;
+
+	if (get_pixel_per_cell(&ppc,&ppl)) {
+	    pixel_per_char_i = ppc ;
+	    pixel_per_line_i = ppl ;
+	    pixel_per_char = (double)ppc;
+	    pixel_per_line = (double)ppl;
+	}
+	else {
+	    pixel_per_char_i = (int)pixel_per_char;
+	    pixel_per_line_i = (int)pixel_per_line;
+	}
+
+	return  TRUE;
+    }
+
     tmp = Strnew();
     if (!strchr(Imgdisplay, '/'))
 	Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL);
@@ -90,17 +110,18 @@ termImage()
 static int
 openImgdisplay()
 {
+    char *cmd;
+
+    if (!strchr(Imgdisplay, '/'))
+	cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr;
+    else
+	cmd = Imgdisplay;
     Imgdisplay_pid = open_pipe_rw(&Imgdisplay_rf, &Imgdisplay_wf);
     if (Imgdisplay_pid < 0)
 	goto err0;
     if (Imgdisplay_pid == 0) {
 	/* child */
-	char *cmd;
 	setup_child(FALSE, 2, -1);
-	if (!strchr(Imgdisplay, '/'))
-	    cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr;
-	else
-	    cmd = Imgdisplay;
 	myExec(cmd);
 	/* XXX: ifdef __EMX__, use start /f ? */
     }
@@ -155,6 +176,10 @@ addImage(ImageCache * cache, int x, int y, int sx, int sy, int w, int h)
 static void
 syncImage(void)
 {
+    if (enable_inline_image) {
+	return;
+    }
+
     fputs("3;\n", Imgdisplay_wf);	/* XSync() */
     fputs("4;\n", Imgdisplay_wf);	/* put '\n' */
     while (fflush(Imgdisplay_wf) != 0) {
@@ -170,12 +195,16 @@ syncImage(void)
     n_terminal_image = 0;
 }
 
+void put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image);
+void put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image);
+
 void
 drawImage()
 {
     static char buf[64];
     int j, draw = FALSE;
     TerminalImage *i;
+    struct stat st ;
 
     if (!activeImage)
 	return;
@@ -183,6 +212,47 @@ drawImage()
 	return;
     for (j = 0; j < n_terminal_image; j++) {
 	i = &terminal_image[j];
+
+	if (enable_inline_image) {
+	#if 0
+	    fprintf(stderr,"file %s x %d y %d w %d h %d sx %d sy %d sw %d sh %d (ppc %d ppl %d)\n",
+		((enable_inline_image == 2 || getenv("WINDOWID")) &&
+		 i->cache->touch) ? i->cache->file : i->cache->url,
+		i->x, i->y,
+		i->cache->width > 0 ? i->cache->width : 0,
+		i->cache->height > 0 ? i->cache->height : 0,
+		i->sx, i->sy, i->width, i->height,
+		pixel_per_char_i, pixel_per_line_i);
+	#endif
+	    (enable_inline_image == 2 ? put_image_sixel : put_image_osc5379)(
+		((enable_inline_image == 2 /* sixel */ || getenv("WINDOWID")) &&
+		 /* XXX I don't know why but sometimes i->cache->file doesn't exist. */
+		 i->cache->touch && stat(i->cache->file,&st) == 0) ?
+			/* local */ i->cache->file : /* remote */ i->cache->url,
+		i->x / pixel_per_char_i,
+		i->y / pixel_per_line_i,
+	    #if 1
+		i->cache->a_width > 0 ?
+			(i->cache->width + i->x % pixel_per_char_i + pixel_per_char_i - 1) /
+				pixel_per_char_i :
+	    #endif
+			0,
+
+	    #if 1
+		i->cache->a_height > 0 ?
+			(i->cache->height + i->y % pixel_per_line_i + pixel_per_line_i - 1) /
+				pixel_per_line_i :
+	    #endif
+			0,
+		i->sx / pixel_per_char_i,
+		i->sy / pixel_per_line_i,
+		(i->width + i->sx % pixel_per_char_i + pixel_per_char_i - 1) / pixel_per_char_i,
+		(i->height + i->sy % pixel_per_line_i + pixel_per_line_i - 1) / pixel_per_line_i,
+		n_terminal_image);
+
+	    continue ;
+	}
+
 	if (!(i->cache->loaded & IMG_FLAG_LOADED &&
 	      i->width > 0 && i->height > 0))
 	    continue;
@@ -206,9 +276,15 @@ drawImage()
 	fputs("\n", Imgdisplay_wf);
 	draw = TRUE;
     }
-    if (!draw)
-	return;
-    syncImage();
+
+    if (!enable_inline_image) {
+	if (!draw)
+	    return;
+	syncImage();
+    }
+    else
+	n_terminal_image = 0;
+
     touch_cursor();
     refresh();
 }
@@ -320,6 +396,8 @@ showImageProgress(Buffer *buf)
 	}
     }
     if (n) {
+        if (enable_inline_image && n == l)
+	    drawImage();
 	message(Sprintf("%d/%d images loaded", l, n)->ptr,
 		buf->cursorX + buf->rootX, buf->cursorY + buf->rootY);
 	refresh();
@@ -333,6 +411,9 @@ loadImage(Buffer *buf, int flag)
     struct stat st;
     int i, draw = FALSE;
     /* int wait_st; */
+#ifdef DONT_CALL_GC_AFTER_FORK
+    char *loadargs[7];
+#endif
 
     if (maxLoadImage > MAX_LOAD_IMAGE)
 	maxLoadImage = MAX_LOAD_IMAGE;
@@ -346,7 +427,7 @@ loadImage(Buffer *buf, int flag)
     }
     for (i = 0; i < n_load_image; i++) {
 	cache = image_cache[i];
-	if (!cache)
+	if (!cache || !cache->touch)
 	    continue;
 	if (lstat(cache->touch, &st))
 	    continue;
@@ -377,7 +458,7 @@ loadImage(Buffer *buf, int flag)
 
     for (i = (buf != image_buffer) ? 0 : maxLoadImage; i < n_load_image; i++) {
 	cache = image_cache[i];
-	if (!cache)
+	if (!cache || !cache->touch)
 	    continue;
 	if (cache->pid) {
 	    kill(cache->pid, SIGKILL);
@@ -403,7 +484,8 @@ loadImage(Buffer *buf, int flag)
     }
 
     if (draw && image_buffer) {
-	drawImage();
+        if (!enable_inline_image)
+	    drawImage();
 	showImageProgress(image_buffer);
     }
 
@@ -431,8 +513,29 @@ loadImage(Buffer *buf, int flag)
 		break;
 	}
 	image_cache[i] = cache;
+	if (!cache->touch) {
+	    continue;
+	}
 
 	flush_tty();
+#ifdef DONT_CALL_GC_AFTER_FORK
+	loadargs[0] = MyProgramName;
+	loadargs[1] = "-$$getimage";
+	loadargs[2] = conv_to_system(cache->url);
+	loadargs[3] = conv_to_system(parsedURL2Str(cache->current)->ptr);
+	loadargs[4] = cache->file;
+	loadargs[5] = cache->touch;
+	loadargs[6] = NULL;
+	if ((cache->pid = fork()) == 0) {
+	    setup_child(FALSE, 0, -1);
+	    execvp(MyProgramName, loadargs);
+	    exit(1);
+	}
+	else if (cache->pid < 0) {
+	    cache->pid = 0;
+	    return;
+	}
+#else /* !DONT_CALL_GC_AFTER_FORK */
 	if ((cache->pid = fork()) == 0) {
 	    Buffer *b;
 	    /*
@@ -458,6 +561,7 @@ loadImage(Buffer *buf, int flag)
 	    cache->pid = 0;
 	    return;
 	}
+#endif /* !DONT_CALL_GC_AFTER_FORK */
     }
 }
 
@@ -492,12 +596,30 @@ getImage(Image * image, ParsedURL *current, int flag)
 	cache->url = image->url;
 	cache->current = current;
 	cache->file = tmpfname(TMPF_DFL, image->ext)->ptr;
-	cache->touch = tmpfname(TMPF_DFL, NULL)->ptr;
 	cache->pid = 0;
 	cache->index = 0;
 	cache->loaded = IMG_FLAG_UNLOADED;
-	cache->width = image->width;
-	cache->height = image->height;
+	if (enable_inline_image == 1) {
+	    if (image->width > 0 && image->width % pixel_per_char_i > 0)
+		image->width += (pixel_per_char_i - image->width % pixel_per_char_i);
+
+	    if (image->height > 0 && image->height % pixel_per_line_i > 0)
+		image->height += (pixel_per_line_i - image->height % pixel_per_line_i);
+	    if (image->height > 0 && image->width > 0) {
+		cache->loaded = IMG_FLAG_LOADED;
+	    }
+	}
+	if (cache->loaded == IMG_FLAG_UNLOADED) {
+	    cache->touch = tmpfname(TMPF_DFL, NULL)->ptr;
+	}
+	else {
+	    cache->touch = NULL;
+	}
+
+	cache->width = image->width ;
+	cache->height = image->height ;
+	cache->a_width = image->width;
+	cache->a_height = image->height;
 	putHash_sv(image_hash, key->ptr, (void *)cache);
     }
     if (flag != IMG_FLAG_SKIP) {
@@ -519,6 +641,78 @@ getImage(Image * image, ParsedURL *current, int flag)
     return cache;
 }
 
+static int
+parseImageHeader(char *path, u_int *width, u_int *height)
+{
+    FILE *fp;
+    u_char buf[8];
+
+    if (!(fp = fopen(path, "r"))) return FALSE;
+
+    if (fread(buf, 1, 2, fp) != 2) goto error;
+
+    if (memcmp(buf, "\xff\xd8", 2) == 0) {
+        /* JPEG */
+	if (fseek(fp, 2, SEEK_CUR) < 0)	goto error;   /* 0xffe0 */
+	while (fread(buf, 1, 2, fp) == 2) {
+	    size_t len = ((buf[0] << 8) | buf[1]) - 2;
+	    if (fseek(fp, len, SEEK_CUR) < 0) goto error;
+	    if (fread(buf, 1, 2, fp) == 2 &&
+	        /* SOF0 or SOF2 */
+	        (memcmp(buf, "\xff\xc0", 2) == 0 || memcmp(buf, "\xff\xc2", 2) == 0)) {
+		fseek(fp, 3, SEEK_CUR);
+		if (fread(buf, 1, 2, fp) == 2) {
+		    *height = (buf[0] << 8) | buf[1];
+		    if (fread(buf, 1, 2, fp) == 2) {
+			*width = (buf[0] << 8) | buf[1];
+			goto success;
+		    }
+		}
+		break;
+	    }
+	}
+	goto error;
+    }
+
+    if (fread(buf + 2, 1, 1, fp) != 1) goto error;
+
+    if (memcmp(buf, "GIF", 3) == 0) {
+        /* GIF */
+	if (fseek(fp, 3, SEEK_CUR) < 0) goto error;
+	if (fread(buf, 1, 2, fp) == 2) {
+	    *width = (buf[1] << 8) | buf[0];
+	    if (fread(buf, 1, 2, fp) == 2) {
+		*height = (buf[1] << 8) | buf[0];
+		goto success;
+	    }
+	}
+	goto error;
+    }
+
+    if (fread(buf + 3, 1, 5, fp) != 5) goto error;
+
+    if (memcmp(buf, "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a", 8) == 0) {
+	/* PNG */
+	if (fseek(fp, 8, SEEK_CUR) < 0) goto error;
+	if (fread(buf, 1, 4, fp) == 4) {
+	    *width = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+	    if (fread(buf, 1, 4, fp) == 4) {
+		*height = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+		goto success;
+	    }
+	}
+	goto error;
+    }
+
+error:
+    fclose(fp);
+    return FALSE;
+
+success:
+    fclose(fp);
+    return TRUE;
+}
+
 int
 getImageSize(ImageCache * cache)
 {
@@ -531,6 +725,10 @@ getImageSize(ImageCache * cache)
     if (!cache || !(cache->loaded & IMG_FLAG_LOADED) ||
 	(cache->width > 0 && cache->height > 0))
 	return FALSE;
+
+    if (parseImageHeader(cache->file, &w, &h))
+	goto got_image_size;
+
     tmp = Strnew();
     if (!strchr(Imgdisplay, '/'))
 	Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL);
@@ -546,6 +744,8 @@ getImageSize(ImageCache * cache)
 
     if (!(w > 0 && h > 0))
 	return FALSE;
+
+got_image_size:
     w = (int)(w * image_scale / 100 + 0.5);
     if (w == 0)
 	w = 1;
@@ -558,11 +758,11 @@ getImageSize(ImageCache * cache)
     }
     else if (cache->width < 0) {
 	int tmp = (int)((double)cache->height * w / h + 0.5);
-	cache->width = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
+	cache->a_width = cache->width = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
     }
     else if (cache->height < 0) {
 	int tmp = (int)((double)cache->width * h / w + 0.5);
-	cache->height = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
+	cache->a_height = cache->height = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
     }
     if (cache->width == 0)
 	cache->width = 1;
diff --git a/indep.c b/indep.c
index 65b04aa..5c5de06 100644
--- a/indep.c
+++ b/indep.c
@@ -357,6 +357,20 @@ strcasemstr(char *str, char *srch[], char **ret_ptr)
     return -1;
 }
 
+int
+strmatchlen(const char *s1, const char *s2, int maxlen)
+{
+    int i;
+
+    /* To allow the maxlen to be negatie (infinity),
+     * compare by "!=" instead of "<=". */
+    for (i = 0; i != maxlen; ++i) {
+	if (!s1[i] || !s2[i] || s1[i] != s2[i])
+	    break;
+    }
+    return i;
+}
+
 char *
 remove_space(char *str)
 {
@@ -707,6 +721,111 @@ shell_quote(char *str)
     return str;
 }
 
+void *
+xrealloc(void *ptr, size_t size)
+{
+    void *newptr = realloc(ptr, size);
+    if (newptr == NULL) {
+	fprintf(stderr, "Out of memory\n");
+	exit(-1);
+    }
+    return newptr;
+}
+
+/* Define this as a separate function in case the free() has
+ * an incompatible prototype. */
+void
+xfree(void *ptr)
+{
+    free(ptr);
+}
+
+void *
+w3m_GC_realloc_atomic(void *ptr, size_t size)
+{
+    return ptr ? GC_REALLOC(ptr, size) : GC_MALLOC_ATOMIC(size);
+}
+
+void
+w3m_GC_free(void *ptr)
+{
+    GC_FREE(ptr);
+}
+
+void
+growbuf_init(struct growbuf *gb)
+{
+    gb->ptr = NULL;
+    gb->length = 0;
+    gb->area_size = 0;
+    gb->realloc_proc = &w3m_GC_realloc_atomic;
+    gb->free_proc = &w3m_GC_free;
+}
+
+void
+growbuf_init_without_GC(struct growbuf *gb)
+{
+    gb->ptr = NULL;
+    gb->length = 0;
+    gb->area_size = 0;
+    gb->realloc_proc = &xrealloc;
+    gb->free_proc = &xfree;
+}
+
+void
+growbuf_clear(struct growbuf *gb)
+{
+    (*gb->free_proc) (gb->ptr);
+    gb->ptr = NULL;
+    gb->length = 0;
+    gb->area_size = 0;
+}
+
+Str
+growbuf_to_Str(struct growbuf *gb)
+{
+    Str s;
+
+    if (gb->free_proc == &w3m_GC_free) {
+	growbuf_reserve(gb, gb->length + 1);
+	gb->ptr[gb->length] = '\0';
+	s = New(struct _Str);
+	s->ptr = gb->ptr;
+	s->length = gb->length;
+	s->area_size = gb->area_size;
+    } else {
+	s = Strnew_charp_n(gb->ptr, gb->length);
+	(*gb->free_proc) (gb->ptr);
+    }
+    gb->ptr = NULL;
+    gb->length = 0;
+    gb->area_size = 0;
+    return s;
+}
+
+void
+growbuf_reserve(struct growbuf *gb, int leastarea)
+{
+    int newarea;
+
+    if (gb->area_size < leastarea) {
+	newarea = gb->area_size * 3 / 2;
+	if (newarea < leastarea)
+	    newarea = leastarea;
+	newarea += 16;
+	gb->ptr = (*gb->realloc_proc) (gb->ptr, newarea);
+	gb->area_size = newarea;
+    }
+}
+
+void
+growbuf_append(struct growbuf *gb, const char *src, int len)
+{
+    growbuf_reserve(gb, gb->length + len);
+    memcpy(&gb->ptr[gb->length], src, len);
+    gb->length += len;
+}
+
 static char *
 w3m_dir(const char *name, char *dft)
 {
diff --git a/indep.h b/indep.h
index b3819a3..2809832 100644
--- a/indep.h
+++ b/indep.h
@@ -1,7 +1,7 @@
 /* $Id: indep.h,v 1.16 2003/09/22 21:02:19 ukai Exp $ */
 #ifndef INDEP_H
 #define INDEP_H
-#include <gc.h>
+#include "alloc.h"
 #include "Str.h"
 #include "config.h"
 
@@ -12,6 +12,14 @@
 #define FALSE 0
 #endif				/* FALSE */
 
+struct growbuf {
+    char *ptr;
+    int length;
+    int area_size;
+    void *(*realloc_proc) (void *, size_t);
+    void (*free_proc) (void *);
+};
+
 #define RAW_MODE	0
 #define PAGER_MODE	1
 #define HTML_MODE	2
@@ -52,6 +60,7 @@ extern int strncasecmp(const char *s1, const char *s2, size_t n);
 extern char *strcasestr(const char *s1, const char *s2);
 #endif
 extern int strcasemstr(char *str, char *srch[], char **ret_ptr);
+int strmatchlen(const char *s1, const char *s2, int maxlen);
 extern char *remove_space(char *str);
 extern int non_null(char *s);
 extern void cleanup_line(Str s, int mode);
@@ -64,6 +73,18 @@ extern Str Str_url_unquote(Str x, int is_form, int safe);
 extern Str Str_form_quote(Str x);
 #define Str_form_unquote(x) Str_url_unquote((x), TRUE, FALSE)
 extern char *shell_quote(char *str);
+#define xmalloc(s) xrealloc(NULL, s)
+extern void *xrealloc(void *ptr, size_t size);
+extern void xfree(void *ptr);
+extern void *w3m_GC_realloc_atomic(void *ptr, size_t size);
+extern void w3m_GC_free(void *ptr);
+extern void growbuf_init(struct growbuf *gb);
+extern void growbuf_init_without_GC(struct growbuf *gb);
+extern void growbuf_clear(struct growbuf *gb);
+extern Str growbuf_to_Str(struct growbuf *gb);
+extern void growbuf_reserve(struct growbuf *gb, int leastarea);
+extern void growbuf_append(struct growbuf *gb, const char *src, int len);
+#define GROWBUF_ADD_CHAR(gb,ch) ((((gb)->length>=(gb)->area_size)?growbuf_reserve(gb,(gb)->length+1):(void)0),(void)((gb)->ptr[(gb)->length++] = (ch)))
 
 extern char *w3m_auxbin_dir();
 extern char *w3m_lib_dir();
@@ -71,10 +92,8 @@ extern char *w3m_etc_dir();
 extern char *w3m_conf_dir();
 extern char *w3m_help_dir();
 
-#define New(type)	((type*)GC_MALLOC(sizeof(type)))
-#define NewAtom(type)	((type*)GC_MALLOC_ATOMIC(sizeof(type)))
-#define New_N(type,n)	((type*)GC_MALLOC((n)*sizeof(type)))
-#define NewAtom_N(type,n)	((type*)GC_MALLOC_ATOMIC((n)*sizeof(type)))
-#define New_Reuse(type,ptr,n)   ((type*)GC_REALLOC((ptr),(n)*sizeof(type)))
+#define NewWithoutGC(type)	((type*)xmalloc(sizeof(type)))
+#define NewWithoutGC_N(type,n)	((type*)xmalloc((n)*sizeof(type)))
+#define NewWithoutGC_Reuse(type,ptr,n)	((type*)xrealloc(ptr,(n)*sizeof(type)))
 
 #endif				/* INDEP_H */
diff --git a/istream.c b/istream.c
index 8967280..1387307 100644
--- a/istream.c
+++ b/istream.c
@@ -22,8 +22,8 @@
 static void basic_close(int *handle);
 static int basic_read(int *handle, char *buf, int len);
 
-static void file_close(struct file_handle *handle);
-static int file_read(struct file_handle *handle, char *buf, int len);
+static void file_close(struct io_file_handle *handle);
+static int file_read(struct io_file_handle *handle, char *buf, int len);
 
 static int str_read(Str handle, char *buf, int len);
 
@@ -35,12 +35,14 @@ static int ssl_read(struct ssl_handle *handle, char *buf, int len);
 static int ens_read(struct ens_handle *handle, char *buf, int len);
 static void ens_close(struct ens_handle *handle);
 
+static void memchop(char *p, int *len);
+
 static void
 do_update(BaseStream base)
 {
     int len;
     base->stream.cur = base->stream.next = 0;
-    len = base->read(base->handle, base->stream.buf, base->stream.size);
+    len = (*base->read) (base->handle, base->stream.buf, base->stream.size);
     if (len <= 0)
 	base->iseos = TRUE;
     else
@@ -66,12 +68,12 @@ init_buffer(BaseStream base, char *buf, int bufsize)
     StreamBuffer sb = &base->stream;
     sb->size = bufsize;
     sb->cur = 0;
+    sb->buf = NewWithoutGC_N(uchar, bufsize);
     if (buf) {
-	sb->buf = (uchar *) buf;
+	memcpy(sb->buf, buf, bufsize);
 	sb->next = bufsize;
     }
     else {
-	sb->buf = NewAtom_N(uchar, bufsize);
 	sb->next = 0;
     }
     base->iseos = FALSE;
@@ -95,10 +97,10 @@ newInputStream(int des)
     InputStream stream;
     if (des < 0)
 	return NULL;
-    stream = New(union input_stream);
+    stream = NewWithoutGC(union input_stream);
     init_base_stream(&stream->base, STREAM_BUF_SIZE);
     stream->base.type = IST_BASIC;
-    stream->base.handle = New(int);
+    stream->base.handle = NewWithoutGC(int);
     *(int *)stream->base.handle = des;
     stream->base.read = (int (*)())basic_read;
     stream->base.close = (void (*)())basic_close;
@@ -111,10 +113,10 @@ newFileStream(FILE * f, void (*closep) ())
     InputStream stream;
     if (f == NULL)
 	return NULL;
-    stream = New(union input_stream);
+    stream = NewWithoutGC(union input_stream);
     init_base_stream(&stream->base, STREAM_BUF_SIZE);
     stream->file.type = IST_FILE;
-    stream->file.handle = New(struct file_handle);
+    stream->file.handle = NewWithoutGC(struct io_file_handle);
     stream->file.handle->f = f;
     if (closep)
 	stream->file.handle->close = closep;
@@ -131,10 +133,10 @@ newStrStream(Str s)
     InputStream stream;
     if (s == NULL)
 	return NULL;
-    stream = New(union input_stream);
+    stream = NewWithoutGC(union input_stream);
     init_str_stream(&stream->base, s);
     stream->str.type = IST_STR;
-    stream->str.handle = s;
+    stream->str.handle = NULL;
     stream->str.read = (int (*)())str_read;
     stream->str.close = NULL;
     return stream;
@@ -147,10 +149,10 @@ newSSLStream(SSL * ssl, int sock)
     InputStream stream;
     if (sock < 0)
 	return NULL;
-    stream = New(union input_stream);
+    stream = NewWithoutGC(union input_stream);
     init_base_stream(&stream->base, SSL_BUF_SIZE);
     stream->ssl.type = IST_SSL;
-    stream->ssl.handle = New(struct ssl_handle);
+    stream->ssl.handle = NewWithoutGC(struct ssl_handle);
     stream->ssl.handle->ssl = ssl;
     stream->ssl.handle->sock = sock;
     stream->ssl.read = (int (*)())ssl_read;
@@ -166,14 +168,14 @@ newEncodedStream(InputStream is, char encoding)
     if (is == NULL || (encoding != ENC_QUOTE && encoding != ENC_BASE64 &&
 		       encoding != ENC_UUENCODE))
 	return is;
-    stream = New(union input_stream);
+    stream = NewWithoutGC(union input_stream);
     init_base_stream(&stream->base, STREAM_BUF_SIZE);
     stream->ens.type = IST_ENCODED;
-    stream->ens.handle = New(struct ens_handle);
+    stream->ens.handle = NewWithoutGC(struct ens_handle);
     stream->ens.handle->is = is;
     stream->ens.handle->pos = 0;
     stream->ens.handle->encoding = encoding;
-    stream->ens.handle->s = NULL;
+    growbuf_init_without_GC(&stream->ens.handle->gb);
     stream->ens.read = (int (*)())ens_read;
     stream->ens.close = (void (*)())ens_close;
     return stream;
@@ -187,8 +189,10 @@ ISclose(InputStream stream)
 	stream->base.type & IST_UNCLOSE)
 	return -1;
     prevtrap = mySignal(SIGINT, SIG_IGN);
-    stream->base.close(stream->base.handle);
+    stream->base.close (stream->base.handle);
     mySignal(SIGINT, prevtrap);
+    xfree(stream->base.stream.buf);
+    xfree(stream);
     return 0;
 }
 
@@ -218,122 +222,97 @@ ISundogetc(InputStream stream)
     return -1;
 }
 
-#define MARGIN_STR_SIZE 10
 Str
-StrISgets(InputStream stream)
+StrISgets2(InputStream stream, char crnl)
 {
-    BaseStream base;
-    StreamBuffer sb;
-    Str s = NULL;
-    uchar *p;
-    int len;
+    struct growbuf gb;
 
     if (stream == NULL)
-	return '\0';
-    base = &stream->base;
-    sb = &base->stream;
-
-    while (!base->iseos) {
-	if (MUST_BE_UPDATED(base)) {
-	    do_update(base);
-	}
-	else {
-	    if ((p = memchr(&sb->buf[sb->cur], '\n', sb->next - sb->cur))) {
-		len = p - &sb->buf[sb->cur] + 1;
-		if (s == NULL)
-		    s = Strnew_size(len);
-		Strcat_charp_n(s, (char *)&sb->buf[sb->cur], len);
-		sb->cur += len;
-		return s;
-	    }
-	    else {
-		if (s == NULL)
-		    s = Strnew_size(sb->next - sb->cur + MARGIN_STR_SIZE);
-		Strcat_charp_n(s, (char *)&sb->buf[sb->cur],
-			       sb->next - sb->cur);
-		sb->cur = sb->next;
-	    }
-	}
-    }
-
-    if (s == NULL)
-	return Strnew();
-    return s;
+	return NULL;
+    growbuf_init(&gb);
+    ISgets_to_growbuf(stream, &gb, crnl);
+    return growbuf_to_Str(&gb);
 }
 
-Str
-StrmyISgets(InputStream stream)
+void
+ISgets_to_growbuf(InputStream stream, struct growbuf *gb, char crnl)
 {
-    BaseStream base;
-    StreamBuffer sb;
-    Str s = NULL;
-    int i, len;
+    BaseStream base = &stream->base;
+    StreamBuffer sb = &base->stream;
+    int i;
 
-    if (stream == NULL)
-	return '\0';
-    base = &stream->base;
-    sb = &base->stream;
+    gb->length = 0;
 
     while (!base->iseos) {
 	if (MUST_BE_UPDATED(base)) {
 	    do_update(base);
+	    continue;
 	}
-	else {
-	    if (s && Strlastchar(s) == '\r') {
-		if (sb->buf[sb->cur] == '\n')
-		    Strcat_char(s, (char)sb->buf[sb->cur++]);
-		return s;
+	if (crnl && gb->length > 0  && gb->ptr[gb->length - 1] == '\r') {
+	    if (sb->buf[sb->cur] == '\n') {
+		GROWBUF_ADD_CHAR(gb, '\n');
+		++sb->cur;
 	    }
-	    for (i = sb->cur;
-		 i < sb->next && sb->buf[i] != '\n' && sb->buf[i] != '\r';
-		 i++) ;
-	    if (i < sb->next) {
-		len = i - sb->cur + 1;
-		if (s == NULL)
-		    s = Strnew_size(len + MARGIN_STR_SIZE);
-		Strcat_charp_n(s, (char *)&sb->buf[sb->cur], len);
-		sb->cur = i + 1;
-		if (sb->buf[i] == '\n')
-		    return s;
-	    }
-	    else {
-		if (s == NULL)
-		    s = Strnew_size(sb->next - sb->cur + MARGIN_STR_SIZE);
-		Strcat_charp_n(s, (char *)&sb->buf[sb->cur],
-			       sb->next - sb->cur);
-		sb->cur = sb->next;
+	    break;
+	}
+	for (i = sb->cur; i < sb->next; ++i) {
+	    if (sb->buf[i] == '\n' || (crnl && sb->buf[i] == '\r')) {
+		++i;
+		break;
 	    }
 	}
+	growbuf_append(gb, &sb->buf[sb->cur], i - sb->cur);
+	sb->cur = i;
+	if (gb->length > 0 && gb->ptr[gb->length - 1] == '\n')
+	    break;
     }
 
-    if (s == NULL)
-	return Strnew();
-    return s;
+    growbuf_reserve(gb, gb->length + 1);
+    gb->ptr[gb->length] = '\0';
+    return;
 }
 
+#ifdef unused
 int
 ISread(InputStream stream, Str buf, int count)
 {
-    int rest, len;
+    int len;
+
+    if (count + 1 > buf->area_size) {
+	char *newptr = GC_MALLOC_ATOMIC(count + 1);
+	memcpy(newptr, buf->ptr, buf->length);
+	newptr[buf->length] = '\0';
+	buf->ptr = newptr;
+	buf->area_size = count + 1;
+    }
+    len = ISread_n(stream, buf->ptr, count);
+    buf->length = (len > 0) ? len : 0;
+    buf->ptr[buf->length] = '\0';
+    return (len > 0) ? 1 : 0;
+}
+#endif
+
+int
+ISread_n(InputStream stream, char *dst, int count)
+{
+    int len, l;
     BaseStream base;
 
-    if (stream == NULL || (base = &stream->base)->iseos)
+    if (stream == NULL || count <= 0)
+	return -1;
+    if ((base = &stream->base)->iseos)
 	return 0;
 
-    len = buffer_read(&base->stream, buf->ptr, count);
-    rest = count - len;
+    len = buffer_read(&base->stream, dst, count);
     if (MUST_BE_UPDATED(base)) {
-	len = base->read(base->handle, &buf->ptr[len], rest);
-	if (len <= 0) {
+	l = (*base->read) (base->handle, &dst[len], count - len);
+	if (l <= 0) {
 	    base->iseos = TRUE;
-	    len = 0;
+	} else {
+	    len += l;
 	}
-	rest -= len;
     }
-    Strtruncate(buf, count - rest);
-    if (buf->length > 0)
-	return 1;
-    return 0;
+    return len;
 }
 
 int
@@ -496,8 +475,6 @@ ssl_check_cert_ident(X509 * x, char *hostname)
 	    /* FIXME: gettextize? */
 	    ret = Sprintf("Bad cert ident %s from %s", buf, hostname);
 	}
-	else
-	    match_ident = TRUE;
     }
     return ret;
 }
@@ -645,6 +622,7 @@ basic_close(int *handle)
 #else
     close(*(int *)handle);
 #endif
+    xfree(handle);
 }
 
 static int
@@ -658,13 +636,14 @@ basic_read(int *handle, char *buf, int len)
 }
 
 static void
-file_close(struct file_handle *handle)
+file_close(struct io_file_handle *handle)
 {
     handle->close(handle->f);
+    xfree(handle);
 }
 
 static int
-file_read(struct file_handle *handle, char *buf, int len)
+file_read(struct io_file_handle *handle, char *buf, int len)
 {
     return fread(buf, 1, len, handle->f);
 }
@@ -682,6 +661,7 @@ ssl_close(struct ssl_handle *handle)
     close(handle->sock);
     if (handle->ssl)
 	SSL_free(handle->ssl);
+    xfree(handle);
 }
 
 static int
@@ -717,38 +697,60 @@ static void
 ens_close(struct ens_handle *handle)
 {
     ISclose(handle->is);
+    growbuf_clear(&handle->gb);
+    xfree(handle);
 }
 
 static int
 ens_read(struct ens_handle *handle, char *buf, int len)
 {
-    if (handle->s == NULL || handle->pos == handle->s->length) {
+    if (handle->pos == handle->gb.length) {
 	char *p;
-	handle->s = StrmyISgets(handle->is);
-	if (handle->s->length == 0)
+	struct growbuf gbtmp;
+
+	ISgets_to_growbuf(handle->is, &handle->gb, TRUE);
+	if (handle->gb.length == 0)
 	    return 0;
-	cleanup_line(handle->s, PAGER_MODE);
 	if (handle->encoding == ENC_BASE64)
-	    Strchop(handle->s);
+	    memchop(handle->gb.ptr, &handle->gb.length);
 	else if (handle->encoding == ENC_UUENCODE) {
-	    if (!strncmp(handle->s->ptr, "begin", 5))
-		handle->s = StrmyISgets(handle->is);
-	    Strchop(handle->s);
+	    if (handle->gb.length >= 5 &&
+		!strncmp(handle->gb.ptr, "begin", 5))
+		ISgets_to_growbuf(handle->is, &handle->gb, TRUE);
+	    memchop(handle->gb.ptr, &handle->gb.length);
 	}
-	p = handle->s->ptr;
+	growbuf_init_without_GC(&gbtmp);
+	p = handle->gb.ptr;
 	if (handle->encoding == ENC_QUOTE)
-	    handle->s = decodeQP(&p);
+	    decodeQP_to_growbuf(&gbtmp, &p);
 	else if (handle->encoding == ENC_BASE64)
-	    handle->s = decodeB(&p);
+	    decodeB_to_growbuf(&gbtmp, &p);
 	else if (handle->encoding == ENC_UUENCODE)
-	    handle->s = decodeU(&p);
+	    decodeU_to_growbuf(&gbtmp, &p);
+	growbuf_clear(&handle->gb);
+	handle->gb = gbtmp;
 	handle->pos = 0;
     }
 
-    if (len > handle->s->length - handle->pos)
-	len = handle->s->length - handle->pos;
+    if (len > handle->gb.length - handle->pos)
+	len = handle->gb.length - handle->pos;
 
-    bcopy(&handle->s->ptr[handle->pos], buf, len);
+    memcpy(buf, &handle->gb.ptr[handle->pos], len);
     handle->pos += len;
     return len;
 }
+
+static void
+memchop(char *p, int *len)
+{
+    char *q;
+
+    for (q = p + *len; q > p; --q) {
+	if (q[-1] != '\n' && q[-1] != '\r')
+	    break;
+    }
+    if (q != p + *len)
+	*q = '\0';
+    *len = q - p;
+    return;
+}
diff --git a/istream.h b/istream.h
index a220d8b..5a04be0 100644
--- a/istream.h
+++ b/istream.h
@@ -2,13 +2,13 @@
 #ifndef IO_STREAM_H
 #define IO_STREAM_H
 
+#include "indep.h"
 #include <stdio.h>
 #ifdef USE_SSL
 #include <openssl/bio.h>
 #include <openssl/x509.h>
 #include <openssl/ssl.h>
 #endif
-#include "Str.h"
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -20,7 +20,7 @@ struct stream_buffer {
 
 typedef struct stream_buffer *StreamBuffer;
 
-struct file_handle {
+struct io_file_handle {
     FILE *f;
     void (*close) ();
 };
@@ -36,7 +36,7 @@ union input_stream;
 
 struct ens_handle {
     union input_stream *is;
-    Str s;
+    struct growbuf gb;
     int pos;
     char encoding;
 };
@@ -53,7 +53,7 @@ struct base_stream {
 
 struct file_stream {
     struct stream_buffer stream;
-    struct file_handle *handle;
+    struct io_file_handle *handle;
     char type;
     char iseos;
     int (*read) ();
@@ -119,9 +119,14 @@ extern InputStream newEncodedStream(InputStream is, char encoding);
 extern int ISclose(InputStream stream);
 extern int ISgetc(InputStream stream);
 extern int ISundogetc(InputStream stream);
-extern Str StrISgets(InputStream stream);
-extern Str StrmyISgets(InputStream stream);
+extern Str StrISgets2(InputStream stream, char crnl);
+#define StrISgets(stream) StrISgets2(stream, FALSE)
+#define StrmyISgets(stream) StrISgets2(stream, TRUE)
+void ISgets_to_growbuf(InputStream stream, struct growbuf *gb, char crnl);
+#ifdef unused
 extern int ISread(InputStream stream, Str buf, int count);
+#endif
+int ISread_n(InputStream stream, char *dst, int bufsize);
 extern int ISfileno(InputStream stream);
 extern int ISeos(InputStream stream);
 #ifdef USE_SSL
diff --git a/keybind.c b/keybind.c
index a490962..fec0c65 100644
--- a/keybind.c
+++ b/keybind.c
@@ -91,7 +91,7 @@ unsigned char EscBKeymap[128] = {
     /*  0       1       2       3       4       5       6       7        */
     nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd,
     /*  8       9       :       ;       <       =       >       ?        */
-    nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd,
+    nulcmd, nulcmd, nulcmd, nulcmd, sgrmouse, nulcmd, nulcmd, nulcmd,
     /*  @       A       B       C       D       E       F       G        */
     nulcmd, movU, movD, movR, movL, nulcmd, goLineL, pgFore,
     /*  H       I       J       K       L       M       N       O        */
diff --git a/keybind_lynx.c b/keybind_lynx.c
index 163f6b2..42267ec 100644
--- a/keybind_lynx.c
+++ b/keybind_lynx.c
@@ -99,7 +99,7 @@ unsigned char EscBKeymap[128] = {
     /*  0       1       2       3       4       5       6       7        */
     nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd,
     /*  8       9       :       ;       <       =       >       ?        */
-    nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd,
+    nulcmd, nulcmd, nulcmd, nulcmd, sgrmouse, nulcmd, nulcmd, nulcmd,
     /*  @       A       B       C       D       E       F       G        */
     nulcmd, prevA, nextA, followA, backBf, nulcmd, goLineL, pgFore,
     /*  H       I       J       K       L       M       N       O        */
diff --git a/libwc/ambwidth_map.awk b/libwc/ambwidth_map.awk
index 8544f58..1d9d25f 100644
--- a/libwc/ambwidth_map.awk
+++ b/libwc/ambwidth_map.awk
@@ -3,9 +3,15 @@ BEGIN {
     i = 0;
 }
 $2 == "A" { 
-    code = sprintf("0x%s", $1);
-    if (strtonum(code) < 0x10000) {
-	map[i] = code
+    code = code2 = strtonum(sprintf("0x%s", $1))
+    if (match($1, /[.]+[0-9A-Fa-f]+/)) {
+	s = substr($1, RSTART, RLENGTH)
+	sub(/[.]+/, "0x", s)
+	code2 = strtonum(s)
+    }
+    for (; code <= code2; code++) {
+	if (code >= 0x10000) { break }
+	map[i] = sprintf("0x%04X", code)
 	i++;
     }
 }
@@ -15,28 +21,14 @@ END {
     prev = strtonum(map[0]);
     for (j = 1; j < i; j++) {
 	cur = strtonum(map[j]);
-	if (match(map[j], "[.]+")) {
+	if (cur - prev > 1) {
 	    map2[n] = sprintf("%s, %s", start, map[j - 1]);
 	    n++;
-	    gsub("[.]+", ", 0x", map[j])
-	    map2[n] = map[j];
-	    n++;
-	    start = map[j + 1];
-	    cur = strtonum(start);
-	} else {
-	    if (cur - prev > 2) {
-		map2[n] = sprintf("%s, %s", start, map[j - 1]);
-		start = map[j];
-		n++;
-	    }
-
-	    if (j == i - 1) {
-		map2[n] = sprintf("%s, %s", start, map[j]);
-		n++;
-	    }
+	    start = map[j];
 	}
 	prev = cur;
     }
+    if (i > 0) { map2[n] = sprintf("%s, %s", start, map[i - 1]); n++ }
 
     printf("static wc_map ucs_ambwidth_map[] = {\n");
     for (j = 0; j < n; j++) {
diff --git a/libwc/charset.c b/libwc/charset.c
index 3f0b74d..ea79b1c 100644
--- a/libwc/charset.c
+++ b/libwc/charset.c
@@ -1,8 +1,7 @@
 
 #include <stdlib.h>
 #include <ctype.h>
-#include <gc.h>
-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
+#include "../alloc.h"
 
 #include "wc.h"
 
diff --git a/libwc/gb18030.c b/libwc/gb18030.c
index c195d49..d5c9018 100644
--- a/libwc/gb18030.c
+++ b/libwc/gb18030.c
@@ -151,6 +151,7 @@ wc_ucs_to_gb18030(wc_uint32 ucs)
 	return cc;
     }
     cc.ccs = WC_CCS_UNKNOWN;
+    cc.code = 0;
     return cc;
 }
 #endif
diff --git a/libwc/iso2022.c b/libwc/iso2022.c
index 33d9a19..385adde 100644
--- a/libwc/iso2022.c
+++ b/libwc/iso2022.c
@@ -463,7 +463,7 @@ wc_push_to_iso2022(Str os, wc_wchar_t cc, wc_status *st)
 	cc.code = (wc_uint32)WC_REPLACE[0];
 	break;
     default:
-	if ((cc.ccs == WC_CCS_JOHAB || WC_CCS_JOHAB_1 ||
+	if ((cc.ccs == WC_CCS_JOHAB || cc.ccs == WC_CCS_JOHAB_1 ||
 		cc.ccs == WC_CCS_JOHAB_2 || cc.ccs == WC_CCS_JOHAB_3) &&
 		cs94w_gmap[WC_F_KS_X_1001 - WC_F_ISO_BASE]) {
 	    wc_wchar_t cc2 = wc_johab_to_ksx1001(cc);
diff --git a/libwc/johab.c b/libwc/johab.c
index 8d587b8..498b1bb 100644
--- a/libwc/johab.c
+++ b/libwc/johab.c
@@ -160,9 +160,9 @@ wc_N_to_johab1(wc_uint32 code)
 {
     wc_uint32 a, b, c;
 
-    a = N_johab1_map[0][(code / 28) / 21];
-    b = N_johab1_map[1][(code / 28) % 21];
-    c = N_johab1_map[2][ code % 28      ];
+    a = N_johab1_map[0][(code / 28) / 21 & 0x1F];
+    b = N_johab1_map[1][(code / 28) % 21 & 0x1F];
+    c = N_johab1_map[2][ code % 28       & 0x1F];
     return 0x8000 | (a << 10) | (b << 5) | c;
 }
 
diff --git a/libwc/map/big5_ucs.map b/libwc/map/big5_ucs.map
index 0c6fd12..ac817a9 100644
--- a/libwc/map/big5_ucs.map
+++ b/libwc/map/big5_ucs.map
@@ -1,6 +1,8 @@
 /* Big5 (Chinese Taiwan) */
 
-static wc_uint16 big5_ucs_map[ 0x59 * 0x9D ] = {
+#define N_big5_ucs_map (0x59 * 0x9D)
+
+static wc_uint16 big5_ucs_map[ N_big5_ucs_map ] = {
  0x3000,	/* 0xA140 */
  0xFF0C,	/* 0xA141 */
  0x3001,	/* 0xA142 */
diff --git a/libwc/map/cns11643_ucs.map b/libwc/map/cns11643_ucs.map
index b426dd3..fcba334 100644
--- a/libwc/map/cns11643_ucs.map
+++ b/libwc/map/cns11643_ucs.map
@@ -1,6 +1,8 @@
 /* CNS 11643 (Chinese Taiwan) */
 
-static wc_uint16 cns116431_ucs_map[ 0x5E * 0x5E ] = {
+#define N_cns116431_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 cns116431_ucs_map[ N_cns116431_ucs_map ] = {
  0x3000,	/* 0x2121 */
  0xFF0C,	/* 0x2122 */
  0x3001,	/* 0x2123 */
@@ -8839,7 +8841,9 @@ static wc_uint16 cns116431_ucs_map[ 0x5E * 0x5E ] = {
  0,		/* 0x7E7E */
 };
 
-static wc_uint16 cns116432_ucs_map[ 0x5E * 0x5E ] = {
+#define N_cns116432_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 cns116432_ucs_map[ N_cns116432_ucs_map ] = {
  0x4E42,	/* 0x2121 */
  0x4E5C,	/* 0x2122 */
  0x51F5,	/* 0x2123 */
diff --git a/libwc/map/gb12345_ucs.map b/libwc/map/gb12345_ucs.map
index 55558c7..3fb338d 100644
--- a/libwc/map/gb12345_ucs.map
+++ b/libwc/map/gb12345_ucs.map
@@ -1,6 +1,8 @@
 /* GB 12345 (Chinese) */
 
-static wc_uint16 gb12345_ucs_map[ 0x5E * 0x5E ] = {
+#define N_gb12345_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 gb12345_ucs_map[ N_gb12345_ucs_map ] = {
  0x3000,	/* 0x2121 */
  0x3001,	/* 0x2122 */
  0x3002,	/* 0x2123 */
diff --git a/libwc/map/gb2312_ucs.map b/libwc/map/gb2312_ucs.map
index 38fb88f..3d37465 100644
--- a/libwc/map/gb2312_ucs.map
+++ b/libwc/map/gb2312_ucs.map
@@ -1,6 +1,8 @@
 /* GB 2312 (Chinese) */
 
-static wc_uint16 gb2312_ucs_map[ 0x5E * 0x5E ] = {
+#define N_gb2312_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 gb2312_ucs_map[ N_gb2312_ucs_map ] = {
  0x3000,	/* 0x2121 */
  0x3001,	/* 0x2122 */
  0x3002,	/* 0x2123 */
diff --git a/libwc/map/gbk_ucs.map b/libwc/map/gbk_ucs.map
index 5a0d5ba..d092fd7 100644
--- a/libwc/map/gbk_ucs.map
+++ b/libwc/map/gbk_ucs.map
@@ -6,7 +6,9 @@ static wc_map ucs_gbk_80_map[ N_ucs_gbk_80_map ] = {
   { 0x20AC, 0x0080 },
 };
 
-static wc_uint16 gbk_ucs_map[ 0x7E * 0xBE - 0x5E * 0x5E + 0x0A + 0x16 + 0x06 ] = {
+#define N_gbk_ucs_map (0x7E * 0xBE - 0x5E * 0x5E + 0x0A + 0x16 + 0x06)
+
+static wc_uint16 gbk_ucs_map[ N_gbk_ucs_map ] = {
   0x4E02,	/* 0x8140 */
   0x4E04,	/* 0x8141 */
   0x4E05,	/* 0x8142 */
diff --git a/libwc/map/hkscs_ucs.map b/libwc/map/hkscs_ucs.map
index 96d1566..2fbe6b4 100644
--- a/libwc/map/hkscs_ucs.map
+++ b/libwc/map/hkscs_ucs.map
@@ -1,6 +1,8 @@
 /* HKSCS (Chinese Hong Kong) */
 
-static wc_uint16 hkscs_ucs_map[ 0x1E * 0x9D ] = {
+#define N_hkscs_ucs_map (0x1E * 0x9D)
+
+static wc_uint16 hkscs_ucs_map[ N_hkscs_ucs_map ] = {
  0,		/* 0x8840 */
  0,		/* 0x8841 */
  0,		/* 0x8842 */
diff --git a/libwc/map/jisx0208x0212x0213_ucs.map b/libwc/map/jisx0208x0212x0213_ucs.map
index 1a1d706..28c2a6c 100644
--- a/libwc/map/jisx0208x0212x0213_ucs.map
+++ b/libwc/map/jisx0208x0212x0213_ucs.map
@@ -1,6 +1,8 @@
 /* JIS X 0208, JIS X 0212, JIS X 0213 (Japanese) */
 
-static wc_uint16 jisx0208x02131_ucs_map[ 0x5E * 0x5E ] = {
+#define N_jisx0208x02131_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 jisx0208x02131_ucs_map[ N_jisx0208x02131_ucs_map ] = {
  0x3000,	/* JIS X 0208 0x2121 */
  0x3001,	/* JIS X 0208 0x2122 */
  0x3002,	/* JIS X 0208 0x2123 */
@@ -8839,7 +8841,9 @@ static wc_uint16 jisx0208x02131_ucs_map[ 0x5E * 0x5E ] = {
  0,		/* JIS X 0213-1 0x7E7E */
 };
 
-static wc_uint16 jisx0212x02132_ucs_map[ 0x5E * 0x5E ] = {
+#define N_jisx0212x02132_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 jisx0212x02132_ucs_map[ N_jisx0212x02132_ucs_map ] = {
  0,		/* JIS X 0213-2 0x2121 */
  0x4E02,	/* JIS X 0213-2 0x2122 */
  0x4E0F,	/* JIS X 0213-2 0x2123 */
diff --git a/libwc/map/ksx1001_ucs.map b/libwc/map/ksx1001_ucs.map
index 9a17d61..cb62f98 100644
--- a/libwc/map/ksx1001_ucs.map
+++ b/libwc/map/ksx1001_ucs.map
@@ -1,6 +1,8 @@
 /* KS X 1001 (Korean) */
 
-static wc_uint16 ksx1001_ucs_map[ 0x5E * 0x5E ] = {
+#define N_ksx1001_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 ksx1001_ucs_map[ N_ksx1001_ucs_map ] = {
  0x3000,	/* 0x2121 */
  0x3001,	/* 0x2122 */
  0x3002,	/* 0x2123 */
diff --git a/libwc/map/sjis_ext_ucs.map b/libwc/map/sjis_ext_ucs.map
index a82995c..cc748ba 100644
--- a/libwc/map/sjis_ext_ucs.map
+++ b/libwc/map/sjis_ext_ucs.map
@@ -1,6 +1,8 @@
 /* Shift_JIS/CP932 (Japanese) */
 
-static wc_uint16 sjis_ext_ucs_map[ 0x5E * 10 ] = {
+#define N_sjis_ext_ucs_map (0x5E * 10)
+
+static wc_uint16 sjis_ext_ucs_map[ N_sjis_ext_ucs_map ] = {
   0x2460,	/* 0x8740 */
   0x2461,	/* 0x8741 */
   0x2462,	/* 0x8742 */
diff --git a/libwc/map/ucs_ambwidth.map b/libwc/map/ucs_ambwidth.map
index 6f03ba8..35ceedb 100644
--- a/libwc/map/ucs_ambwidth.map
+++ b/libwc/map/ucs_ambwidth.map
@@ -1,50 +1,82 @@
 static wc_map ucs_ambwidth_map[] = {
    { 0x00A1, 0x00A1 },
    { 0x00A4, 0x00A4 },
-   { 0x00A7, 0x00AA },
-   { 0x00AD, 0x00BF },
+   { 0x00A7, 0x00A8 },
+   { 0x00AA, 0x00AA },
+   { 0x00AD, 0x00AE },
+   { 0x00B0, 0x00B4 },
+   { 0x00B6, 0x00BA },
+   { 0x00BC, 0x00BF },
    { 0x00C6, 0x00C6 },
    { 0x00D0, 0x00D0 },
    { 0x00D7, 0x00D8 },
    { 0x00DE, 0x00E1 },
-   { 0x00E6, 0x00ED },
-   { 0x00F0, 0x00F3 },
-   { 0x00F7, 0x00FE },
+   { 0x00E6, 0x00E6 },
+   { 0x00E8, 0x00EA },
+   { 0x00EC, 0x00ED },
+   { 0x00F0, 0x00F0 },
+   { 0x00F2, 0x00F3 },
+   { 0x00F7, 0x00FA },
+   { 0x00FC, 0x00FC },
+   { 0x00FE, 0x00FE },
    { 0x0101, 0x0101 },
-   { 0x0111, 0x0113 },
+   { 0x0111, 0x0111 },
+   { 0x0113, 0x0113 },
    { 0x011B, 0x011B },
    { 0x0126, 0x0127 },
    { 0x012B, 0x012B },
    { 0x0131, 0x0133 },
    { 0x0138, 0x0138 },
-   { 0x013F, 0x0144 },
-   { 0x0148, 0x014D },
+   { 0x013F, 0x0142 },
+   { 0x0144, 0x0144 },
+   { 0x0148, 0x014B },
+   { 0x014D, 0x014D },
    { 0x0152, 0x0153 },
    { 0x0166, 0x0167 },
    { 0x016B, 0x016B },
-   { 0x01CE, 0x01DC },
+   { 0x01CE, 0x01CE },
+   { 0x01D0, 0x01D0 },
+   { 0x01D2, 0x01D2 },
+   { 0x01D4, 0x01D4 },
+   { 0x01D6, 0x01D6 },
+   { 0x01D8, 0x01D8 },
+   { 0x01DA, 0x01DA },
+   { 0x01DC, 0x01DC },
    { 0x0251, 0x0251 },
    { 0x0261, 0x0261 },
    { 0x02C4, 0x02C4 },
-   { 0x02C7, 0x02CD },
+   { 0x02C7, 0x02C7 },
+   { 0x02C9, 0x02CB },
+   { 0x02CD, 0x02CD },
    { 0x02D0, 0x02D0 },
-   { 0x02D8, 0x02DF },
+   { 0x02D8, 0x02DB },
+   { 0x02DD, 0x02DD },
+   { 0x02DF, 0x02DF },
    { 0x0300, 0x036F },
-   { 0x0391, 0x03A9 },
-   { 0x03B1, 0x03C9 },
+   { 0x0391, 0x03A1 },
+   { 0x03A3, 0x03A9 },
+   { 0x03B1, 0x03C1 },
+   { 0x03C3, 0x03C9 },
    { 0x0401, 0x0401 },
-   { 0x0410, 0x0451 },
+   { 0x0410, 0x044F },
+   { 0x0451, 0x0451 },
    { 0x2010, 0x2010 },
-   { 0x2013, 0x2019 },
+   { 0x2013, 0x2016 },
+   { 0x2018, 0x2019 },
    { 0x201C, 0x201D },
-   { 0x2020, 0x2027 },
-   { 0x2030, 0x2035 },
+   { 0x2020, 0x2022 },
+   { 0x2024, 0x2027 },
+   { 0x2030, 0x2030 },
+   { 0x2032, 0x2033 },
+   { 0x2035, 0x2035 },
    { 0x203B, 0x203B },
    { 0x203E, 0x203E },
    { 0x2074, 0x2074 },
-   { 0x207F, 0x2084 },
+   { 0x207F, 0x207F },
+   { 0x2081, 0x2084 },
    { 0x20AC, 0x20AC },
-   { 0x2103, 0x2105 },
+   { 0x2103, 0x2103 },
+   { 0x2105, 0x2105 },
    { 0x2109, 0x2109 },
    { 0x2113, 0x2113 },
    { 0x2116, 0x2116 },
@@ -52,21 +84,28 @@ static wc_map ucs_ambwidth_map[] = {
    { 0x2126, 0x2126 },
    { 0x212B, 0x212B },
    { 0x2153, 0x2154 },
-   { 0x215B, 0x216B },
+   { 0x215B, 0x215E },
+   { 0x2160, 0x216B },
    { 0x2170, 0x2179 },
    { 0x2189, 0x2189 },
    { 0x2190, 0x2199 },
    { 0x21B8, 0x21B9 },
-   { 0x21D2, 0x21D4 },
+   { 0x21D2, 0x21D2 },
+   { 0x21D4, 0x21D4 },
    { 0x21E7, 0x21E7 },
-   { 0x2200, 0x2203 },
+   { 0x2200, 0x2200 },
+   { 0x2202, 0x2203 },
    { 0x2207, 0x2208 },
    { 0x220B, 0x220B },
-   { 0x220F, 0x2211 },
+   { 0x220F, 0x220F },
+   { 0x2211, 0x2211 },
    { 0x2215, 0x2215 },
    { 0x221A, 0x221A },
    { 0x221D, 0x2220 },
-   { 0x2223, 0x222E },
+   { 0x2223, 0x2223 },
+   { 0x2225, 0x2225 },
+   { 0x2227, 0x222C },
+   { 0x222E, 0x222E },
    { 0x2234, 0x2237 },
    { 0x223C, 0x223D },
    { 0x2248, 0x2248 },
@@ -83,11 +122,13 @@ static wc_map ucs_ambwidth_map[] = {
    { 0x22A5, 0x22A5 },
    { 0x22BF, 0x22BF },
    { 0x2312, 0x2312 },
-   { 0x2460, 0x254B },
+   { 0x2460, 0x24E9 },
+   { 0x24EB, 0x254B },
    { 0x2550, 0x2573 },
    { 0x2580, 0x258F },
    { 0x2592, 0x2595 },
-   { 0x25A0, 0x25A9 },
+   { 0x25A0, 0x25A1 },
+   { 0x25A3, 0x25A9 },
    { 0x25B2, 0x25B3 },
    { 0x25B6, 0x25B7 },
    { 0x25BC, 0x25BD },
@@ -101,12 +142,20 @@ static wc_map ucs_ambwidth_map[] = {
    { 0x2609, 0x2609 },
    { 0x260E, 0x260F },
    { 0x2614, 0x2615 },
-   { 0x261C, 0x261E },
-   { 0x2640, 0x2642 },
-   { 0x2660, 0x266F },
+   { 0x261C, 0x261C },
+   { 0x261E, 0x261E },
+   { 0x2640, 0x2640 },
+   { 0x2642, 0x2642 },
+   { 0x2660, 0x2661 },
+   { 0x2663, 0x2665 },
+   { 0x2667, 0x266A },
+   { 0x266C, 0x266D },
+   { 0x266F, 0x266F },
    { 0x269E, 0x269F },
    { 0x26BE, 0x26BF },
-   { 0x26C4, 0x26E3 },
+   { 0x26C4, 0x26CD },
+   { 0x26CF, 0x26E1 },
+   { 0x26E3, 0x26E3 },
    { 0x26E8, 0x26FF },
    { 0x273D, 0x273D },
    { 0x2757, 0x2757 },
diff --git a/libwc/map/uhc_ucs.map b/libwc/map/uhc_ucs.map
index b6b43ca..55efc09 100644
--- a/libwc/map/uhc_ucs.map
+++ b/libwc/map/uhc_ucs.map
@@ -1,6 +1,8 @@
 /* UHC/CP949 (Korean) */
 
-static wc_uint16 uhc_ucs_map[ 0x20 * 0xB2 + 0x27 * 0x54 + 2 ] = {
+#define N_uhc_ucs_map (0x20 * 0xB2 + 0x27 * 0x54 + 2)
+
+static wc_uint16 uhc_ucs_map[ N_uhc_ucs_map ] = {
   0xAC02,	/* 0x8141 */
   0xAC03,	/* 0x8142 */
   0xAC05,	/* 0x8143 */
diff --git a/libwc/status.c b/libwc/status.c
index d25c924..4a2ebf8 100644
--- a/libwc/status.c
+++ b/libwc/status.c
@@ -1,7 +1,6 @@
 
 #include <string.h>
-#include <gc.h>
-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
+#include "../alloc.h"
 
 #include "wc.h"
 #ifdef USE_UNICODE
diff --git a/libwc/ucs.c b/libwc/ucs.c
index d7b6948..727e574 100644
--- a/libwc/ucs.c
+++ b/libwc/ucs.c
@@ -100,6 +100,7 @@ wc_ucs_to_any(wc_uint32 ucs, wc_table *t)
 	    return t->conv(t->ccs, map->code2);
     }
     cc.ccs = WC_CCS_UNKNOWN;
+    cc.code = 0;
     return cc;
 }
 
@@ -108,6 +109,7 @@ wc_any_to_ucs(wc_wchar_t cc)
 {
     int f;
     wc_uint16 *map = NULL;
+    wc_uint32 map_size = 0x80;
     wc_map *map2;
 
     f = WC_CCS_INDEX(cc.ccs);
@@ -138,6 +140,7 @@ wc_any_to_ucs(wc_wchar_t cc)
 	if (f < WC_F_ISO_BASE || f > WC_F_CS94W_END)
 	    return 0;
 	map = cs94w_ucs_map[f - WC_F_ISO_BASE];
+	map_size = cs94w_ucs_map_size[f - WC_F_ISO_BASE];
 	cc.code = WC_CS94W_N(cc.code);
 	break;
     case WC_CCS_A_CS96:
@@ -150,6 +153,7 @@ wc_any_to_ucs(wc_wchar_t cc)
 	if (f < WC_F_ISO_BASE || f > WC_F_CS96W_END)
 	    return WC_C_UCS4_ERROR;
 	map = cs96w_ucs_map[f - WC_F_ISO_BASE];
+	map_size = cs96w_ucs_map_size[f - WC_F_ISO_BASE];
 	cc.code = WC_CS96W_N(cc.code);
 	break;
     case WC_CCS_A_CS942:
@@ -180,6 +184,7 @@ wc_any_to_ucs(wc_wchar_t cc)
 	if (f < WC_F_PCS_BASE || f > WC_F_PCSW_END)
 	    return WC_C_UCS4_ERROR;
 	map = pcsw_ucs_map[f - WC_F_PCS_BASE];
+	map_size = pcsw_ucs_map_size[f - WC_F_PCS_BASE];
 	switch (cc.ccs) {
 	case WC_CCS_BIG5:
 	    cc.code = WC_BIG5_N(cc.code);
@@ -271,6 +276,8 @@ wc_any_to_ucs(wc_wchar_t cc)
     }
     if (map == NULL)
 	return WC_C_UCS4_ERROR;
+    if (map_size == 0 || cc.code > map_size - 1)
+	return WC_C_UCS4_ERROR;
     cc.code = map[cc.code];
     return cc.code ? cc.code : WC_C_UCS4_ERROR;
 }
diff --git a/libwc/ucs.map b/libwc/ucs.map
index dfac6d9..5d6f688 100644
--- a/libwc/ucs.map
+++ b/libwc/ucs.map
@@ -195,7 +195,28 @@ static wc_uint16 *cs94w_ucs_map[] = {
   jisx0212x02132_ucs_map,	/* 50 (JIS X 0213-2) */
 };
 
+static wc_uint32 cs94w_ucs_map_size[] = {
+  N_jisx0208x02131_ucs_map,	/* 40 (JIS C 6226) */
+  N_gb2312_ucs_map,		/* 41 (GB 2312) */
+  N_jisx0208x02131_ucs_map,	/* 42 (JIS X 0208) */
+  N_ksx1001_ucs_map,		/* 43 (KS X 1001) */
+  N_jisx0212x02132_ucs_map,	/* 44 (JIS X 0212) */
+  0,				/* 45 (ISO IR 165) */
+  0,				/* 46 */
+  N_cns116431_ucs_map,		/* 47 (CNS 11643-1) */
+  N_cns116432_ucs_map,		/* 48 (CNS 11643-2) */
+  0,				/* 49 (CNS 11643-3) */
+  0,				/* 4A (CNS 11643-4) */
+  0,				/* 4B (CNS 11643-5) */
+  0,				/* 4C (CNS 11643-6) */
+  0,				/* 4D (CNS 11643-7) */
+  0,				/* 4E (KSP 9566) */
+  N_jisx0208x02131_ucs_map,	/* 4F (JIS X 0213-1) */
+  N_jisx0212x02132_ucs_map,	/* 50 (JIS X 0213-2) */
+};
+
 static wc_uint16 **cs96w_ucs_map;
+static wc_uint32 *cs96w_ucs_map_size;
 
 static wc_uint16 *pcsw_ucs_map[] = {
   big5_ucs_map,		/* Big5 */
@@ -233,6 +254,42 @@ static wc_uint16 *pcsw_ucs_map[] = {
   hkscs_ucs_map,	/* HKSCS-2 */
 };
 
+static wc_uint32 pcsw_ucs_map_size[] = {
+  N_big5_ucs_map,	/* Big5 */
+  N_big5_ucs_map,	/* Big5-1 */
+  N_big5_ucs_map,	/* Big5-2 */
+  0,			/* CNS 11643-8 */
+  0,			/* CNS 11643-9 */
+  0,			/* CNS 11643-10 */
+  0,			/* CNS 11643-11 */
+  0,			/* CNS 11643-12 */
+  0,			/* CNS 11643-13 */
+  0,			/* CNS 11643-14 */
+  0,			/* CNS 11643-15 */
+  0,			/* CNS 11643-16 */
+  0,			/* CNS 11643-X */
+  N_gb12345_ucs_map,	/* GB 12345 */
+  0,			/* Johab (special conversion) */
+  0,			/* Johab-1 (special conversion) */
+  0,			/* Johab-2 (special conversion) */
+  N_ksx1001_ucs_map,	/* Johab-3 */
+  N_sjis_ext_ucs_map,	/* Shift_JIS(CP932) ext */
+  N_sjis_ext_ucs_map,	/* Shift_JIS(CP932) ext-1 */
+  N_sjis_ext_ucs_map,	/* Shift_JIS(CP932) ext-2 */
+  N_gbk_ucs_map,	/* GBK(CP936) */
+  N_gbk_ucs_map,	/* GBK(CP936)-1 */
+  N_gbk_ucs_map,	/* GBK(CP936)-2 */
+  0,			/* GB18030 GBK-ext (special conversion) */
+  0,			/* GB18030 GBK-ext-1 (special conversion) */
+  0,			/* GB18030 GBK-ext-2 (special conversion) */
+  N_uhc_ucs_map,	/* UHC(CP949) */
+  N_uhc_ucs_map,	/* UHC(CP949)-1 */
+  N_uhc_ucs_map,	/* UHC(CP949)-2 */
+  N_hkscs_ucs_map,	/* HKSCS */
+  N_hkscs_ucs_map,	/* HKSCS-1 */
+  N_hkscs_ucs_map,	/* HKSCS-2 */
+};
+
 static wc_wchar_t
 ucs_cs94_conv(wc_ccs ccs, wc_uint16 c)
 {
diff --git a/linein.c b/linein.c
index b7e81b6..d8f9023 100644
--- a/linein.c
+++ b/linein.c
@@ -714,7 +714,8 @@ _rdcompl(void)
 static void
 next_dcompl(int next)
 {
-    static int col, row, len;
+    static int col, row;
+    static unsigned int len;
     static Str d;
     int i, j, n, y;
     Str f;
@@ -780,9 +781,10 @@ next_dcompl(int next)
 	if (len < n)
 	    len = n;
     }
-    col = COLS / len;
-    if (col == 0)
-	col = 1;
+    if (len > 0 && COLS > len)
+        col = COLS / len;
+    else
+        col = 1;
     row = (NCFileBuf + col - 1) / col;
 
   disp_next:
@@ -1026,7 +1028,7 @@ _prev(void)
 	strCurrentBuf = strBuf;
     }
     if (DecodeURL && (cm_mode & CPL_URL) )
-	p = url_unquote_conv(p, 0);
+	p = url_decode2(p, NULL);
     strBuf = Strnew_charp(p);
     CLen = CPos = setStrType(strBuf, strProp);
     offset = 0;
@@ -1045,7 +1047,7 @@ _next(void)
     p = nextHist(hist);
     if (p) {
 	if (DecodeURL && (cm_mode & CPL_URL) )
-	    p = url_unquote_conv(p, 0);
+	    p = url_decode2(p, NULL);
 	strBuf = Strnew_charp(p);
     }
     else {
diff --git a/local.c b/local.c
index f5a73a2..46ac579 100644
--- a/local.c
+++ b/local.c
@@ -109,6 +109,7 @@ loadLocalDir(char *dname)
 	    n++;
 	}
     }
+    closedir(d);
 
     if (multicolList) {
 	l = COLS / (maxlen + 2);
@@ -167,7 +168,7 @@ loadLocalDir(char *dname)
 	else {
 #if defined(HAVE_LSTAT) && defined(HAVE_READLINK)
 	    if (S_ISLNK(lst.st_mode)) {
-		if ((l = readlink(fbuf->ptr, lbuf, sizeof(lbuf))) > 0) {
+		if ((l = readlink(fbuf->ptr, lbuf, sizeof(lbuf) - 1)) > 0) {
 		    lbuf[l] = '\0';
 		    Strcat_m_charp(tmp, " -> ",
 				   html_quote(conv_from_system(lbuf)), NULL);
@@ -212,18 +213,17 @@ set_environ(char *var, char *value)
     if (var != NULL && value != NULL)
 	setenv(var, value, 1);
 #else				/* not HAVE_SETENV */
-#ifdef HAVE_PUTENV
     static Hash_sv *env_hash = NULL;
     Str tmp = Strnew_m_charp(var, "=", value, NULL);
 
     if (env_hash == NULL)
 	env_hash = newHash_sv(20);
     putHash_sv(env_hash, var, (void *)tmp->ptr);
+#ifdef HAVE_PUTENV
     putenv(tmp->ptr);
 #else				/* not HAVE_PUTENV */
     extern char **environ;
     char **ne;
-    char *p;
     int i, l, el;
     char **e, **newenv;
 
@@ -250,7 +250,7 @@ set_environ(char *var, char *value)
     if (newenv == NULL)
 	return;
     for (e = environ, ne = newenv; *e != NULL; *(ne++) = *(e++)) ;
-    *(ne++) = p;
+    *(ne++) = tmp->ptr;
     *ne = NULL;
     environ = newenv;
 #endif				/* not HAVE_PUTENV */
@@ -359,6 +359,10 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
     int status;
     pid_t pid;
     char *file = uri, *name = uri, *path_info = NULL, *tmpf = NULL;
+#ifdef HAVE_CHDIR
+    char *cgi_dir;
+#endif
+    char *cgi_basename;
 
 #ifdef __MINGW32_VERSION
     return NULL;
@@ -373,18 +377,25 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
 	if (!fw)
 	    return NULL;
     }
+    if (qstr)
+	uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr;
+#ifdef HAVE_CHDIR
+    cgi_dir = mydirname(file);
+#endif
+    cgi_basename = mybasename(file);
     pid = open_pipe_rw(&fr, NULL);
-    if (pid < 0)
+    /* Don't invoke gc after here, or the program might crash in some platforms */
+    if (pid < 0) {
+	if (fw)
+	    fclose(fw);
 	return NULL;
-    else if (pid) {
+    } else if (pid) {
 	if (fw)
 	    fclose(fw);
 	return fr;
     }
     setup_child(TRUE, 2, fw ? fileno(fw) : -1);
 
-    if (qstr)
-	uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr;
     set_cgi_environ(name, file, uri);
     if (path_info)
 	set_environ("PATH_INFO", path_info);
@@ -415,12 +426,11 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
     }
 
 #ifdef HAVE_CHDIR		/* ifndef __EMX__ ? */
-    chdir(mydirname(file));
+    chdir(cgi_dir);
 #endif
-    execl(file, mybasename(file), NULL);
+    execl(file, cgi_basename, NULL);
     fprintf(stderr, "execl(\"%s\", \"%s\", NULL): %s\n",
-	    file, mybasename(file), strerror(errno));
+	    file, cgi_basename, strerror(errno));
     exit(1);
-    return NULL;
 #endif
 }
diff --git a/mailcap.c b/mailcap.c
index c0461df..f0c6242 100644
--- a/mailcap.c
+++ b/mailcap.c
@@ -72,7 +72,7 @@ searchMailcap(struct mailcap *table, char *type)
 }
 
 static int
-matchMailcapAttr(char *p, char *attr, int len, Str *value)
+matchMailcapAttr(char *p, char *attr, size_t len, Str *value)
 {
     int quoted;
     char *q = NULL;
diff --git a/main.c b/main.c
index b421943..bd424de 100644
--- a/main.c
+++ b/main.c
@@ -1,6 +1,7 @@
 /* $Id: main.c,v 1.270 2010/08/24 10:11:51 htrb Exp $ */
 #define MAINPROGRAM
 #include "fm.h"
+#include <stdio.h>
 #include <signal.h>
 #include <setjmp.h>
 #include <sys/stat.h>
@@ -11,6 +12,9 @@
 #include <sys/wait.h>
 #endif
 #include <time.h>
+#if defined(__CYGWIN__) && defined(USE_BINMODE_STREAM)
+#include <io.h>
+#endif
 #include "terms.h"
 #include "myctype.h"
 #include "regex.h"
@@ -119,6 +123,8 @@ static int searchKeyNum(void);
 #define help() fusage(stdout, 0)
 #define usage() fusage(stderr, 1)
 
+int enable_inline_image;	/* 1 == mlterm OSC 5379, 2 == sixel */
+
 static void
 fversion(FILE * f)
 {
@@ -200,10 +206,12 @@ fusage(FILE * f, int err)
 #ifdef USE_M17N
     fprintf(f, "    -I charset       document charset\n");
     fprintf(f, "    -O charset       display/output charset\n");
+#if 0				/* use -O{s|j|e} instead */
     fprintf(f, "    -e               EUC-JP\n");
     fprintf(f, "    -s               Shift_JIS\n");
     fprintf(f, "    -j               JIS\n");
 #endif
+#endif
     fprintf(f, "    -B               load bookmark\n");
     fprintf(f, "    -bookmark file   specify bookmark file\n");
     fprintf(f, "    -T type          specify content-type\n");
@@ -214,7 +222,7 @@ fusage(FILE * f, int err)
 #endif				/* USE_COLOR */
     fprintf(f,
 	    "    -N               open URL of command line on each new tab\n");
-    fprintf(f, "    -F               automatically render frame\n");
+    fprintf(f, "    -F               automatically render frames\n");
     fprintf(f,
 	    "    -cols width      specify column width (used with -dump)\n");
     fprintf(f,
@@ -248,8 +256,12 @@ fusage(FILE * f, int err)
 #endif				/* USE_COOKIE */
     fprintf(f, "    -graph           use DEC special graphics for border of table and menu\n");
     fprintf(f, "    -no-graph        use ACII character for border of table and menu\n");
+#if 1				/* pager requires -s */
+    fprintf(f, "    -s               squeeze multiple blank lines\n");
+#else
     fprintf(f, "    -S               squeeze multiple blank lines\n");
-    fprintf(f, "    -W               toggle wrap search mode\n");
+#endif
+    fprintf(f, "    -W               toggle search wrap mode\n");
     fprintf(f, "    -X               don't use termcap init/deinit\n");
     fprintf(f,
 	    "    -title[=TERM]    set buffer name to terminal title string\n");
@@ -372,6 +384,13 @@ make_optional_header_string(char *s)
     return hs;
 }
 
+static void *
+die_oom(size_t bytes)
+{
+    fprintf(stderr, "Out of memory: %lu bytes unavailable!\n", (unsigned long)bytes);
+    exit(1);
+}
+
 int
 main(int argc, char **argv, char **envp)
 {
@@ -397,7 +416,15 @@ main(int argc, char **argv, char **envp)
     wc_ces CodePage;
 #endif
 #endif
+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
+    char **getimage_args = NULL;
+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
     GC_INIT();
+#if (GC_VERSION_MAJOR>7) || ((GC_VERSION_MAJOR==7) && (GC_VERSION_MINOR>=2))
+    GC_set_oom_fn(die_oom);
+#else
+    GC_oom_fn = die_oom;
+#endif
 #if defined(ENABLE_NLS) || (defined(USE_M17N) && defined(HAVE_LANGINFO_CODESET))
     setlocale(LC_ALL, "");
 #endif
@@ -418,6 +445,10 @@ main(int argc, char **argv, char **envp)
 
     CurrentDir = currentdir();
     CurrentPid = (int)getpid();
+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
+    if (argv[0] && *argv[0])
+	MyProgramName = argv[0];
+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
     BookmarkFile = NULL;
     config_file = NULL;
 
@@ -530,12 +561,14 @@ main(int argc, char **argv, char **envp)
 		    PagerMax = atoi(argv[i]);
 	    }
 #ifdef USE_M17N
+#if 0				/* use -O{s|j|e} instead */
 	    else if (!strcmp("-s", argv[i]))
 		DisplayCharset = WC_CES_SHIFT_JIS;
 	    else if (!strcmp("-j", argv[i]))
 		DisplayCharset = WC_CES_ISO_2022_JP;
 	    else if (!strcmp("-e", argv[i]))
 		DisplayCharset = WC_CES_EUC_JP;
+#endif
 	    else if (!strncmp("-I", argv[i], 2)) {
 		if (argv[i][2] != '\0')
 		    p = argv[i] + 2;
@@ -660,6 +693,12 @@ main(int argc, char **argv, char **envp)
 		}
 	    }
 #endif
+	    else if (!strcmp("-ri", argv[i])) {
+	        enable_inline_image = 1;
+	    }
+	    else if (!strcmp("-sixel", argv[i])) {
+		enable_inline_image = 2;
+	    }
 	    else if (!strcmp("-num", argv[i]))
 		showLineNum = TRUE;
 	    else if (!strcmp("-no-proxy", argv[i]))
@@ -703,7 +742,11 @@ main(int argc, char **argv, char **envp)
 		accept_cookie = TRUE;
 	    }
 #endif				/* USE_COOKIE */
+#if 1				/* pager requires -s */
+	    else if (!strcmp("-s", argv[i]))
+#else
 	    else if (!strcmp("-S", argv[i]))
+#endif
 		squeezeBlankLine = TRUE;
 	    else if (!strcmp("-X", argv[i]))
 		Do_not_use_ti_te = TRUE;
@@ -735,6 +778,15 @@ main(int argc, char **argv, char **envp)
 	    else if (!strcmp("-reqlog",argv[i])) {
 		w3m_reqlog=rcFile("request.log");
 	    }
+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
+	    else if (!strcmp("-$$getimage", argv[i])) {
+		++i;
+		getimage_args = argv + i;
+		i += 4;
+		if (i > argc)
+		    usage();
+	    }
+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
 	    else {
 		usage();
 	    }
@@ -823,6 +875,30 @@ main(int argc, char **argv, char **envp)
 
     if (w3m_backend)
 	backend();
+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
+    if (getimage_args) {
+	char *image_url = conv_from_system(getimage_args[0]);
+	char *base_url = conv_from_system(getimage_args[1]);
+	ParsedURL base_pu;
+	
+	parseURL2(base_url, &base_pu, NULL);
+	image_source = getimage_args[2];
+	newbuf = loadGeneralFile(image_url, &base_pu, NULL, 0, NULL);
+	if (!newbuf || !newbuf->real_type ||
+	    strncasecmp(newbuf->real_type, "image/", 6))
+	    unlink(getimage_args[2]);
+#if defined(HAVE_SYMLINK) && defined(HAVE_LSTAT)
+	symlink(getimage_args[2], getimage_args[3]);
+#else
+	{
+	    FILE *f = fopen(getimage_args[3], "w");
+	    if (f)
+		fclose(f);
+	}
+#endif
+	w3m_exit(0);
+    }
+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
 
     if (w3m_dump)
 	mySignal(SIGINT, SIG_IGN);
@@ -833,7 +909,12 @@ main(int argc, char **argv, char **envp)
     mySignal(SIGPIPE, SigPipe);
 #endif
 
+#if (GC_VERSION_MAJOR>7) || ((GC_VERSION_MAJOR==7) && (GC_VERSION_MINOR>=2))
+    orig_GC_warn_proc = GC_get_warn_proc();
+    GC_set_warn_proc(wrap_GC_warn_proc);
+#else
     orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc);
+#endif
     err_msg = Strnew();
     if (load_argc == 0) {
 	/* no URL specified */
@@ -894,12 +975,17 @@ main(int argc, char **argv, char **envp)
 	if (i >= 0) {
 	    SearchHeader = search_header;
 	    DefaultType = default_type;
+	    char *url;
+	    
+	    url = load_argv[i];
+	    if (getURLScheme(&url) == SCM_MISSING && !ArgvIsURL)
+		url = file_to_url(load_argv[i]);
+	    else
+		url = url_encode(conv_from_system(load_argv[i]), NULL, 0);
 	    if (w3m_dump == DUMP_HEAD) {
 		request = New(FormList);
 		request->method = FORM_METHOD_HEAD;
-		newbuf =
-		    loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0,
-				    request);
+		newbuf = loadGeneralFile(url, NULL, NO_REFERER, 0, request);
 	    }
 	    else {
 		if (post_file && i == 0) {
@@ -928,9 +1014,7 @@ main(int argc, char **argv, char **envp)
 		else {
 		    request = NULL;
 		}
-		newbuf =
-		    loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0,
-				    request);
+		newbuf = loadGeneralFile(url, NULL, NO_REFERER, 0, request);
 	    }
 	    if (newbuf == NULL) {
 		/* FIXME: gettextize? */
@@ -945,7 +1029,7 @@ main(int argc, char **argv, char **envp)
 		break;
 	    case SCM_LOCAL:
 	    case SCM_LOCAL_CGI:
-		unshiftHist(LoadHist, conv_from_system(load_argv[i]));
+		unshiftHist(LoadHist, url);
 	    default:
 		pushHashHist(URLHist, parsedURL2Str(&newbuf->currentURL)->ptr);
 		break;
@@ -1183,13 +1267,13 @@ static void
 dump_source(Buffer *buf)
 {
     FILE *f;
-    char c;
+    int c;
     if (buf->sourcefile == NULL)
 	return;
     f = fopen(buf->sourcefile, "r");
     if (f == NULL)
 	return;
-    while (c = fgetc(f), !feof(f)) {
+    while ((c = fgetc(f)) != EOF) {
 	putchar(c);
     }
     fclose(f);
@@ -1246,6 +1330,12 @@ dump_extra(Buffer *buf)
 #endif
 }
 
+static int
+cmp_anchor_hseq(const void *a, const void *b)
+{
+    return (*((const Anchor **) a))->hseq - (*((const Anchor **) b))->hseq;
+}
+
 static void
 do_dump(Buffer *buf)
 {
@@ -1266,18 +1356,20 @@ do_dump(Buffer *buf)
 	int i;
 	saveBuffer(buf, stdout, FALSE);
 	if (displayLinkNumber && buf->href) {
+	    int nanchor = buf->href->nanchor;
 	    printf("\nReferences:\n\n");
-	    for (i = 0; i < buf->href->nanchor; i++) {
-	        ParsedURL pu;
-	        static Str s = NULL;
-		if (buf->href->anchors[i].slave)
+	    Anchor **in_order = New_N(Anchor *, buf->href->nanchor);
+	    for (i = 0; i < nanchor; i++)
+		in_order[i] = buf->href->anchors + i;
+	    qsort(in_order, nanchor, sizeof(Anchor *), cmp_anchor_hseq);
+	    for (i = 0; i < nanchor; i++) {
+		ParsedURL pu;
+		char *url;
+		if (in_order[i]->slave)
 		    continue;
-	        parseURL2(buf->href->anchors[i].url, &pu, baseURL(buf));
-	        s = parsedURL2Str(&pu);
-    	        if (DecodeURL)
-		    s = Strnew_charp(url_unquote_conv
-				     (s->ptr, Currentbuf->document_charset));
-	        printf("[%d] %s\n", buf->href->anchors[i].hseq + 1, s->ptr);
+		parseURL2(in_order[i]->url, &pu, baseURL(buf));
+		url = url_decode2(parsedURL2Str(&pu)->ptr, Currentbuf);
+		printf("[%d] %s\n", in_order[i]->hseq + 1, url);
 	    }
 	}
     }
@@ -1547,7 +1639,7 @@ nscroll(int n, int mode)
 }
 
 /* Move page forward */
-DEFUN(pgFore, NEXT_PAGE, "Move to next page")
+DEFUN(pgFore, NEXT_PAGE, "Scroll down one page")
 {
     if (vi_prec_num)
 	nscroll(searchKeyNum() * (Currentbuf->LINES - 1), B_NORMAL);
@@ -1557,7 +1649,7 @@ DEFUN(pgFore, NEXT_PAGE, "Move to next page")
 }
 
 /* Move page backward */
-DEFUN(pgBack, PREV_PAGE, "Move to previous page")
+DEFUN(pgBack, PREV_PAGE, "Scroll up one page")
 {
     if (vi_prec_num)
 	nscroll(-searchKeyNum() * (Currentbuf->LINES - 1), B_NORMAL);
@@ -1566,20 +1658,32 @@ DEFUN(pgBack, PREV_PAGE, "Move to previous page")
 		  * (Currentbuf->LINES - 1)), prec_num ? B_SCROLL : B_NORMAL);
 }
 
+/* Move half page forward */
+DEFUN(hpgFore, NEXT_HALF_PAGE, "Scroll down half a page")
+{
+	nscroll(searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL);
+}
+
+/* Move half page backward */
+DEFUN(hpgBack, PREV_HALF_PAGE, "Scroll up half a page")
+{
+	nscroll(-searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL);
+}
+
 /* 1 line up */
-DEFUN(lup1, UP, "Scroll up one line")
+DEFUN(lup1, UP, "Scroll the screen up one line")
 {
     nscroll(searchKeyNum(), B_SCROLL);
 }
 
 /* 1 line down */
-DEFUN(ldown1, DOWN, "Scroll down one line")
+DEFUN(ldown1, DOWN, "Scroll the screen down one line")
 {
     nscroll(-searchKeyNum(), B_SCROLL);
 }
 
 /* move cursor position to the center of screen */
-DEFUN(ctrCsrV, CENTER_V, "Move to the center column")
+DEFUN(ctrCsrV, CENTER_V, "Center on cursor line")
 {
     int offsety;
     if (Currentbuf->firstLine == NULL)
@@ -1598,7 +1702,7 @@ DEFUN(ctrCsrV, CENTER_V, "Move to the center column")
     }
 }
 
-DEFUN(ctrCsrH, CENTER_H, "Move to the center line")
+DEFUN(ctrCsrH, CENTER_H, "Center on cursor column")
 {
     int offsetx;
     if (Currentbuf->firstLine == NULL)
@@ -1612,7 +1716,7 @@ DEFUN(ctrCsrH, CENTER_H, "Move to the center line")
 }
 
 /* Redraw screen */
-DEFUN(rdrwSc, REDRAW, "Redraw screen")
+DEFUN(rdrwSc, REDRAW, "Draw the screen anew")
 {
     clear();
     arrangeCursor(Currentbuf);
@@ -1844,19 +1948,23 @@ srch_nxtprv(int reverse)
     result = srchcore(SearchString, routine[reverse]);
     if (result & SR_FOUND)
 	clear_mark(Currentbuf->currentLine);
+    else {
+	if (reverse == 0)
+	    Currentbuf->pos -= 1;
+    }
     displayBuffer(Currentbuf, B_NORMAL);
     disp_srchresult(result, (reverse ? "Backward: " : "Forward: "),
 		    SearchString);
 }
 
 /* Search next matching */
-DEFUN(srchnxt, SEARCH_NEXT, "Search next regexp")
+DEFUN(srchnxt, SEARCH_NEXT, "Continue search forward")
 {
     srch_nxtprv(0);
 }
 
 /* Search previous matching */
-DEFUN(srchprv, SEARCH_PREV, "Search previous regexp")
+DEFUN(srchprv, SEARCH_PREV, "Continue search backward")
 {
     srch_nxtprv(1);
 }
@@ -1919,7 +2027,7 @@ DEFUN(col1R, RIGHT, "Shift screen one column right")
     displayBuffer(Currentbuf, B_NORMAL);
 }
 
-DEFUN(col1L, LEFT, "Shift screen one column")
+DEFUN(col1L, LEFT, "Shift screen one column left")
 {
     Buffer *buf = Currentbuf;
     Line *l = buf->currentLine;
@@ -1960,7 +2068,7 @@ DEFUN(setEnv, SETENV, "Set environment variable")
     displayBuffer(Currentbuf, B_NORMAL);
 }
 
-DEFUN(pipeBuf, PIPE_BUF, "Send rendered document to pipe")
+DEFUN(pipeBuf, PIPE_BUF, "Pipe current buffer through a shell command and display output")
 {
     Buffer *buf;
     char *cmd, *tmpf;
@@ -2006,7 +2114,7 @@ DEFUN(pipeBuf, PIPE_BUF, "Send rendered document to pipe")
 }
 
 /* Execute shell command and read output ac pipe. */
-DEFUN(pipesh, PIPE_SHELL, "Execute shell command and browse")
+DEFUN(pipesh, PIPE_SHELL, "Execute shell command and display output")
 {
     Buffer *buf;
     char *cmd;
@@ -2037,7 +2145,7 @@ DEFUN(pipesh, PIPE_SHELL, "Execute shell command and browse")
 }
 
 /* Execute shell command and load entire output to buffer */
-DEFUN(readsh, READ_SHELL, "Execute shell command and load")
+DEFUN(readsh, READ_SHELL, "Execute shell command and display output")
 {
     Buffer *buf;
     MySignalHandler(*prevtrap) ();
@@ -2074,7 +2182,7 @@ DEFUN(readsh, READ_SHELL, "Execute shell command and load")
 }
 
 /* Execute shell command */
-DEFUN(execsh, EXEC_SHELL SHELL, "Execute shell command")
+DEFUN(execsh, EXEC_SHELL SHELL, "Execute shell command and display output")
 {
     char *cmd;
 
@@ -2099,7 +2207,7 @@ DEFUN(execsh, EXEC_SHELL SHELL, "Execute shell command")
 }
 
 /* Load file */
-DEFUN(ldfile, LOAD, "Load local file")
+DEFUN(ldfile, LOAD, "Open local file in a new buffer")
 {
     char *fn;
 
@@ -2118,7 +2226,7 @@ DEFUN(ldfile, LOAD, "Load local file")
 }
 
 /* Load help file */
-DEFUN(ldhelp, HELP, "View help")
+DEFUN(ldhelp, HELP, "Show help panel")
 {
 #ifdef USE_HELP_CGI
     char *lang;
@@ -2167,13 +2275,12 @@ _movL(int n)
     displayBuffer(Currentbuf, B_NORMAL);
 }
 
-DEFUN(movL, MOVE_LEFT,
-      "Move cursor left (a half screen shift at the left edge)")
+DEFUN(movL, MOVE_LEFT, "Cursor left")
 {
     _movL(Currentbuf->COLS / 2);
 }
 
-DEFUN(movL1, MOVE_LEFT1, "Move cursor left (1 columns shift at the left edge)")
+DEFUN(movL1, MOVE_LEFT1, "Cursor left. With edge touched, slide")
 {
     _movL(1);
 }
@@ -2190,14 +2297,12 @@ _movD(int n)
     displayBuffer(Currentbuf, B_NORMAL);
 }
 
-DEFUN(movD, MOVE_DOWN,
-      "Move cursor down (a half screen scroll at the end of screen)")
+DEFUN(movD, MOVE_DOWN, "Cursor down")
 {
     _movD((Currentbuf->LINES + 1) / 2);
 }
 
-DEFUN(movD1, MOVE_DOWN1,
-      "Move cursor down (1 line scroll at the end of screen)")
+DEFUN(movD1, MOVE_DOWN1, "Cursor down. With edge touched, slide")
 {
     _movD(1);
 }
@@ -2214,13 +2319,12 @@ _movU(int n)
     displayBuffer(Currentbuf, B_NORMAL);
 }
 
-DEFUN(movU, MOVE_UP,
-      "Move cursor up (a half screen scroll at the top of screen)")
+DEFUN(movU, MOVE_UP, "Cursor up")
 {
     _movU((Currentbuf->LINES + 1) / 2);
 }
 
-DEFUN(movU1, MOVE_UP1, "Move cursor up (1 line scrol at the top of screen)")
+DEFUN(movU1, MOVE_UP1, "Cursor up. With edge touched, slide")
 {
     _movU(1);
 }
@@ -2237,14 +2341,12 @@ _movR(int n)
     displayBuffer(Currentbuf, B_NORMAL);
 }
 
-DEFUN(movR, MOVE_RIGHT,
-      "Move cursor right (a half screen shift at the right edge)")
+DEFUN(movR, MOVE_RIGHT, "Cursor right")
 {
     _movR(Currentbuf->COLS / 2);
 }
 
-DEFUN(movR1, MOVE_RIGHT1,
-      "Move cursor right (1 columns shift at the right edge)")
+DEFUN(movR1, MOVE_RIGHT1, "Cursor right. With edge touched, slide")
 {
     _movR(1);
 }
@@ -2261,7 +2363,7 @@ DEFUN(movR1, MOVE_RIGHT1,
 static wc_uint32
 getChar(char *p)
 {
-    return wc_any_to_ucs(wtf_parse1(&p));
+    return wc_any_to_ucs(wtf_parse1((wc_uchar **)&p));
 }
 
 static int
@@ -2296,7 +2398,7 @@ prev_nonnull_line(Line *line)
     return 0;
 }
 
-DEFUN(movLW, PREV_WORD, "Move to previous word")
+DEFUN(movLW, PREV_WORD, "Move to the previous word")
 {
     char *lb;
     Line *pline, *l;
@@ -2364,7 +2466,7 @@ next_nonnull_line(Line *line)
     return 0;
 }
 
-DEFUN(movRW, NEXT_WORD, "Move to next word")
+DEFUN(movRW, NEXT_WORD, "Move to the next word")
 {
     char *lb;
     Line *pline, *l;
@@ -2442,19 +2544,19 @@ _quitfm(int confirm)
 }
 
 /* Quit */
-DEFUN(quitfm, ABORT EXIT, "Quit w3m without confirmation")
+DEFUN(quitfm, ABORT EXIT, "Quit at once")
 {
     _quitfm(FALSE);
 }
 
 /* Question and Quit */
-DEFUN(qquitfm, QUIT, "Quit w3m")
+DEFUN(qquitfm, QUIT, "Quit with confirmation request")
 {
     _quitfm(confirm_on_quit);
 }
 
 /* Select buffer */
-DEFUN(selBuf, SELECT, "Go to buffer selection panel")
+DEFUN(selBuf, SELECT, "Display buffer-stack panel")
 {
     Buffer *buf;
     int ok;
@@ -2502,7 +2604,7 @@ DEFUN(selBuf, SELECT, "Go to buffer selection panel")
 }
 
 /* Suspend (on BSD), or run interactive shell (on SysV) */
-DEFUN(susp, INTERRUPT SUSPEND, "Stop loading document")
+DEFUN(susp, INTERRUPT SUSPEND, "Suspend w3m to background")
 {
 #ifndef SIGSTOP
     char *shell;
@@ -2550,7 +2652,7 @@ _goLine(char *l)
     displayBuffer(Currentbuf, B_FORCE_REDRAW);
 }
 
-DEFUN(goLine, GOTO_LINE, "Go to specified line")
+DEFUN(goLine, GOTO_LINE, "Go to the specified line")
 {
 
     char *str = searchKeyData();
@@ -2575,7 +2677,7 @@ DEFUN(goLineL, END, "Go to the last line")
 }
 
 /* Go to the beginning of the line */
-DEFUN(linbeg, LINE_BEGIN, "Go to the beginning of line")
+DEFUN(linbeg, LINE_BEGIN, "Go to the beginning of the line")
 {
     if (Currentbuf->firstLine == NULL)
 	return;
@@ -2587,7 +2689,7 @@ DEFUN(linbeg, LINE_BEGIN, "Go to the beginning of line")
 }
 
 /* Go to the bottom of the line */
-DEFUN(linend, LINE_END, "Go to the end of line")
+DEFUN(linend, LINE_END, "Go to the end of the line")
 {
     if (Currentbuf->firstLine == NULL)
 	return;
@@ -2616,7 +2718,7 @@ cur_real_linenumber(Buffer *buf)
 }
 
 /* Run editor on the current buffer */
-DEFUN(editBf, EDIT, "Edit current document")
+DEFUN(editBf, EDIT, "Edit local source")
 {
     char *fn = Currentbuf->filename;
     Str cmd;
@@ -2643,7 +2745,7 @@ DEFUN(editBf, EDIT, "Edit current document")
 }
 
 /* Run editor on the current screen */
-DEFUN(editScr, EDIT_SCREEN, "Edit currently rendered document")
+DEFUN(editScr, EDIT_SCREEN, "Edit rendered copy of document")
 {
     char *tmpf;
     FILE *f;
@@ -2681,7 +2783,7 @@ DEFUN(_mark, MARK, "Set/unset mark")
 }
 
 /* Go to next mark */
-DEFUN(nextMk, NEXT_MARK, "Move to next word")
+DEFUN(nextMk, NEXT_MARK, "Go to the next mark")
 {
     Line *l;
     int i;
@@ -2714,7 +2816,7 @@ DEFUN(nextMk, NEXT_MARK, "Move to next word")
 }
 
 /* Go to previous mark */
-DEFUN(prevMk, PREV_MARK, "Move to previous mark")
+DEFUN(prevMk, PREV_MARK, "Go to the previous mark")
 {
     Line *l;
     int i;
@@ -2749,7 +2851,7 @@ DEFUN(prevMk, PREV_MARK, "Move to previous mark")
 }
 
 /* Mark place to which the regular expression matches */
-DEFUN(reMark, REG_MARK, "Set mark using regexp")
+DEFUN(reMark, REG_MARK, "Mark all occurences of a pattern")
 {
     Line *l;
     char *str;
@@ -2804,12 +2906,15 @@ loadLink(char *url, char *target, char *referer, FormList *request)
     union frameset_element *f_element = NULL;
     int flag = 0;
     ParsedURL *base, pu;
+    const int *no_referer_ptr;
 
     message(Sprintf("loading %s", url)->ptr, 0, 0);
     refresh();
 
+    no_referer_ptr = query_SCONF_NO_REFERER_FROM(&Currentbuf->currentURL);
     base = baseURL(Currentbuf);
-    if (base == NULL ||
+    if ((no_referer_ptr && *no_referer_ptr) ||
+	base == NULL ||
 	base->scheme == SCM_LOCAL || base->scheme == SCM_LOCAL_CGI)
 	referer = NO_REFERER;
     if (referer == NULL)
@@ -2830,7 +2935,7 @@ loadLink(char *url, char *target, char *referer, FormList *request)
     if (!on_target)		/* open link as an indivisual page */
 	return loadNormalBuf(buf, TRUE);
 
-    if (do_download)		/* download (thus no need to render frame) */
+    if (do_download)		/* download (thus no need to render frames) */
 	return loadNormalBuf(buf, FALSE);
 
     if (target == NULL ||	/* no target specified (that means this page is not a frame page) */
@@ -2959,9 +3064,8 @@ handleMailto(char *url)
 }
 
 /* follow HREF link */
-DEFUN(followA, GOTO_LINK, "Go to current link")
+DEFUN(followA, GOTO_LINK, "Follow current hyperlink in a new buffer")
 {
-    Line *l;
     Anchor *a;
     ParsedURL u;
 #ifdef USE_IMAGE
@@ -2971,7 +3075,6 @@ DEFUN(followA, GOTO_LINK, "Go to current link")
 
     if (Currentbuf->firstLine == NULL)
 	return;
-    l = Currentbuf->currentLine;
 
 #ifdef USE_IMAGE
     a = retrieveCurrentImg(Currentbuf);
@@ -3051,15 +3154,13 @@ bufferA(void)
 }
 
 /* view inline image */
-DEFUN(followI, VIEW_IMAGE, "View image")
+DEFUN(followI, VIEW_IMAGE, "Display image in viewer")
 {
-    Line *l;
     Anchor *a;
     Buffer *buf;
 
     if (Currentbuf->firstLine == NULL)
 	return;
-    l = Currentbuf->currentLine;
 
     a = retrieveCurrentImg(Currentbuf);
     if (a == NULL)
@@ -3309,7 +3410,6 @@ followForm(void)
 static void
 _followForm(int submit)
 {
-    Line *l;
     Anchor *a, *a2;
     char *p;
     FormItemList *fi, *f2;
@@ -3318,7 +3418,6 @@ _followForm(int submit)
 
     if (Currentbuf->firstLine == NULL)
 	return;
-    l = Currentbuf->currentLine;
 
     a = retrieveCurrentForm(Currentbuf);
     if (a == NULL)
@@ -3423,7 +3522,6 @@ _followForm(int submit)
     case FORM_INPUT_BUTTON:
       do_submit:
 	tmp = Strnew();
-	tmp2 = Strnew();
 	multipart = (fi->parent->method == FORM_METHOD_POST &&
 		     fi->parent->enctype == FORM_ENCTYPE_MULTIPART);
 	query_from_followform(&tmp, fi, multipart);
@@ -3501,7 +3599,7 @@ _followForm(int submit)
 }
 
 /* go to the top anchor */
-DEFUN(topA, LINK_BEGIN, "Go to the first link")
+DEFUN(topA, LINK_BEGIN, "Move to the first hyperlink")
 {
     HmarkerList *hl = Currentbuf->hmarklist;
     BufferPoint *po;
@@ -3534,7 +3632,7 @@ DEFUN(topA, LINK_BEGIN, "Go to the first link")
 }
 
 /* go to the last anchor */
-DEFUN(lastA, LINK_END, "Go to the last link")
+DEFUN(lastA, LINK_END, "Move to the last hyperlink")
 {
     HmarkerList *hl = Currentbuf->hmarklist;
     BufferPoint *po;
@@ -3568,26 +3666,53 @@ DEFUN(lastA, LINK_END, "Go to the last link")
     displayBuffer(Currentbuf, B_NORMAL);
 }
 
+/* go to the nth anchor */
+DEFUN(nthA, LINK_N, "Go to the nth link")
+{
+    HmarkerList *hl = Currentbuf->hmarklist;
+	BufferPoint *po;
+	Anchor *an;
+
+	int n = searchKeyNum();
+	if (n < 0 || n > hl->nmark) return;
+
+	if (Currentbuf->firstLine == NULL)
+		return;
+    if (!hl || hl->nmark == 0)
+		return;
+
+	po = hl->marks + n-1;
+	an = retrieveAnchor(Currentbuf->href, po->line, po->pos);
+	if (an == NULL)
+		an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos);
+	if (an == NULL) return;
+
+    gotoLine(Currentbuf, po->line);
+    Currentbuf->pos = po->pos;
+    arrangeCursor(Currentbuf);
+    displayBuffer(Currentbuf, B_NORMAL);
+}
+
 /* go to the next anchor */
-DEFUN(nextA, NEXT_LINK, "Move to next link")
+DEFUN(nextA, NEXT_LINK, "Move to the next hyperlink")
 {
     _nextA(FALSE);
 }
 
 /* go to the previous anchor */
-DEFUN(prevA, PREV_LINK, "Move to previous link")
+DEFUN(prevA, PREV_LINK, "Move to the previous hyperlink")
 {
     _prevA(FALSE);
 }
 
 /* go to the next visited anchor */
-DEFUN(nextVA, NEXT_VISITED, "Move to next visited link")
+DEFUN(nextVA, NEXT_VISITED, "Move to the next visited hyperlink")
 {
     _nextA(TRUE);
 }
 
 /* go to the previous visited anchor */
-DEFUN(prevVA, PREV_VISITED, "Move to previous visited link")
+DEFUN(prevVA, PREV_VISITED, "Move to the previous visited hyperlink")
 {
     _prevA(TRUE);
 }
@@ -3863,43 +3988,43 @@ nextY(int d)
 }
 
 /* go to the next left anchor */
-DEFUN(nextL, NEXT_LEFT, "Move to next left link")
+DEFUN(nextL, NEXT_LEFT, "Move left to the next hyperlink")
 {
     nextX(-1, 0);
 }
 
 /* go to the next left-up anchor */
-DEFUN(nextLU, NEXT_LEFT_UP, "Move to next left (or upward) link")
+DEFUN(nextLU, NEXT_LEFT_UP, "Move left or upward to the next hyperlink")
 {
     nextX(-1, -1);
 }
 
 /* go to the next right anchor */
-DEFUN(nextR, NEXT_RIGHT, "Move to next right link")
+DEFUN(nextR, NEXT_RIGHT, "Move right to the next hyperlink")
 {
     nextX(1, 0);
 }
 
 /* go to the next right-down anchor */
-DEFUN(nextRD, NEXT_RIGHT_DOWN, "Move to next right (or downward) link")
+DEFUN(nextRD, NEXT_RIGHT_DOWN, "Move right or downward to the next hyperlink")
 {
     nextX(1, 1);
 }
 
 /* go to the next downward anchor */
-DEFUN(nextD, NEXT_DOWN, "Move to next downward link")
+DEFUN(nextD, NEXT_DOWN, "Move downward to the next hyperlink")
 {
     nextY(1);
 }
 
 /* go to the next upward anchor */
-DEFUN(nextU, NEXT_UP, "Move to next upward link")
+DEFUN(nextU, NEXT_UP, "Move upward to the next hyperlink")
 {
     nextY(-1);
 }
 
 /* go to the next bufferr */
-DEFUN(nextBf, NEXT, "Move to next buffer")
+DEFUN(nextBf, NEXT, "Switch to the next buffer")
 {
     Buffer *buf;
     int i;
@@ -3917,7 +4042,7 @@ DEFUN(nextBf, NEXT, "Move to next buffer")
 }
 
 /* go to the previous bufferr */
-DEFUN(prevBf, PREV, "Move to previous buffer")
+DEFUN(prevBf, PREV, "Switch to the previous buffer")
 {
     Buffer *buf;
     int i;
@@ -3959,7 +4084,7 @@ checkBackBuffer(Buffer *buf)
 }
 
 /* delete current buffer and back to the previous buffer */
-DEFUN(backBf, BACK, "Back to previous buffer")
+DEFUN(backBf, BACK, "Close current buffer and return to the one below in stack")
 {
     Buffer *buf = Currentbuf->linkBuffer[LB_N_FRAME];
 
@@ -4008,8 +4133,7 @@ DEFUN(backBf, BACK, "Back to previous buffer")
     displayBuffer(Currentbuf, B_FORCE_REDRAW);
 }
 
-DEFUN(deletePrevBuf, DELETE_PREVBUF,
-      "Delete previous buffer (mainly for local-CGI)")
+DEFUN(deletePrevBuf, DELETE_PREVBUF, "Delete previous buffer (mainly for local CGI-scripts)")
 {
     Buffer *buf = Currentbuf->nextBuffer;
     if (buf)
@@ -4055,6 +4179,7 @@ goURL0(char *prompt, int relative)
     char *url, *referer;
     ParsedURL p_url, *current;
     Buffer *cur_buf = Currentbuf;
+    const int *no_referer_ptr;
 
     url = searchKeyData();
     if (url == NULL) {
@@ -4064,11 +4189,8 @@ goURL0(char *prompt, int relative)
 	current = baseURL(Currentbuf);
 	if (current) {
 	    char *c_url = parsedURL2Str(current)->ptr;
-	    if (DefaultURLString == DEFAULT_URL_CURRENT) {
-		url = c_url;
-		if (DecodeURL)
-		    url = url_unquote_conv(url, 0);
-	    }
+	    if (DefaultURLString == DEFAULT_URL_CURRENT)
+		url = url_decode2(c_url, NULL);
 	    else
 		pushHist(hist, c_url);
 	}
@@ -4077,11 +4199,8 @@ goURL0(char *prompt, int relative)
 	    char *a_url;
 	    parseURL2(a->url, &p_url, current);
 	    a_url = parsedURL2Str(&p_url)->ptr;
-	    if (DefaultURLString == DEFAULT_URL_LINK) {
-		url = a_url;
-		if (DecodeURL)
-		    url = url_unquote_conv(url, Currentbuf->document_charset);
-	    }
+	    if (DefaultURLString == DEFAULT_URL_LINK)
+		url = url_decode2(a_url, Currentbuf);
 	    else
 		pushHist(hist, a_url);
 	}
@@ -4089,15 +4208,22 @@ goURL0(char *prompt, int relative)
 	if (url != NULL)
 	    SKIP_BLANKS(url);
     }
-#ifdef USE_M17N
-    if (url != NULL) {
-	if ((relative || *url == '#') && Currentbuf->document_charset)
-	    url = wc_conv_strict(url, InnerCharset,
-				 Currentbuf->document_charset)->ptr;
+    if (relative) {
+	no_referer_ptr = query_SCONF_NO_REFERER_FROM(&Currentbuf->currentURL);
+	current = baseURL(Currentbuf);
+	if ((no_referer_ptr && *no_referer_ptr) ||
+	    current == NULL ||
+	    current->scheme == SCM_LOCAL || current->scheme == SCM_LOCAL_CGI)
+	    referer = NO_REFERER;
 	else
-	    url = conv_to_system(url);
+	    referer = parsedURL2Str(&Currentbuf->currentURL)->ptr;
+	url = url_encode(url, current, Currentbuf->document_charset);
+    }
+    else {
+	current = NULL;
+	referer = NULL;
+	url = url_encode(url, NULL, 0);
     }
-#endif
     if (url == NULL || *url == '\0') {
 	displayBuffer(Currentbuf, B_FORCE_REDRAW);
 	return;
@@ -4106,14 +4232,6 @@ goURL0(char *prompt, int relative)
 	gotoLabel(url + 1);
 	return;
     }
-    if (relative) {
-	current = baseURL(Currentbuf);
-	referer = parsedURL2Str(&Currentbuf->currentURL)->ptr;
-    }
-    else {
-	current = NULL;
-	referer = NULL;
-    }
     parseURL2(url, &p_url, current);
     pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr);
     cmd_loadURL(url, current, referer, NULL);
@@ -4121,12 +4239,12 @@ goURL0(char *prompt, int relative)
 	pushHashHist(URLHist, parsedURL2Str(&Currentbuf->currentURL)->ptr);
 }
 
-DEFUN(goURL, GOTO, "Go to URL")
+DEFUN(goURL, GOTO, "Open specified document in a new buffer")
 {
     goURL0("Goto URL: ", FALSE);
 }
 
-DEFUN(gorURL, GOTO_RELATIVE, "Go to relative URL")
+DEFUN(gorURL, GOTO_RELATIVE, "Go to relative address")
 {
     goURL0("Goto relative URL: ", TRUE);
 }
@@ -4151,14 +4269,14 @@ cmd_loadBuffer(Buffer *buf, int prop, int linkid)
 }
 
 /* load bookmark */
-DEFUN(ldBmark, BOOKMARK VIEW_BOOKMARK, "Read bookmark")
+DEFUN(ldBmark, BOOKMARK VIEW_BOOKMARK, "View bookmarks")
 {
     cmd_loadURL(BookmarkFile, NULL, NO_REFERER, NULL);
 }
 
 
 /* Add current to bookmark */
-DEFUN(adBmark, ADD_BOOKMARK, "Add current page to bookmark")
+DEFUN(adBmark, ADD_BOOKMARK, "Add current page to bookmarks")
 {
     Str tmp;
     FormList *request;
@@ -4188,7 +4306,7 @@ DEFUN(adBmark, ADD_BOOKMARK, "Add current page to bookmark")
 }
 
 /* option setting */
-DEFUN(ldOpt, OPTIONS, "Option setting panel")
+DEFUN(ldOpt, OPTIONS, "Display options setting panel")
 {
     cmd_loadBuffer(load_option_panel(), BP_NO_URL, LB_NOLINK);
 }
@@ -4223,7 +4341,7 @@ DEFUN(msgs, MSGS, "Display error messages")
 }
 
 /* page info */
-DEFUN(pginfo, INFO, "View info of current document")
+DEFUN(pginfo, INFO, "Display information about the current document")
 {
     Buffer *buf;
 
@@ -4291,7 +4409,7 @@ follow_map(struct parsed_tagarg *arg)
 
 #ifdef USE_MENU
 /* link menu */
-DEFUN(linkMn, LINK_MENU, "Popup link element menu")
+DEFUN(linkMn, LINK_MENU, "Pop up link element menu")
 {
     LinkList *l = link_menu(Currentbuf);
     ParsedURL p_url;
@@ -4329,26 +4447,25 @@ anchorMn(Anchor *(*menu_func) (Buffer *), int go)
 }
 
 /* accesskey */
-DEFUN(accessKey, ACCESSKEY, "Popup acceskey menu")
+DEFUN(accessKey, ACCESSKEY, "Pop up accesskey menu")
 {
     anchorMn(accesskey_menu, TRUE);
 }
 
 /* list menu */
-DEFUN(listMn, LIST_MENU, "Popup link list menu and go to selected link")
+DEFUN(listMn, LIST_MENU, "Pop up menu for hyperlinks to browse to")
 {
     anchorMn(list_menu, TRUE);
 }
 
-DEFUN(movlistMn, MOVE_LIST_MENU,
-      "Popup link list menu and move cursor to selected link")
+DEFUN(movlistMn, MOVE_LIST_MENU, "Pop up menu to navigate between hyperlinks")
 {
     anchorMn(list_menu, FALSE);
 }
 #endif
 
 /* link,anchor,image list */
-DEFUN(linkLst, LIST, "Show all links and images")
+DEFUN(linkLst, LIST, "Show all URLs referenced")
 {
     Buffer *buf;
 
@@ -4375,14 +4492,14 @@ DEFUN(cooLst, COOKIE, "View cookie list")
 
 #ifdef USE_HISTORY
 /* History page */
-DEFUN(ldHist, HISTORY, "View history of URL")
+DEFUN(ldHist, HISTORY, "Show browsing history")
 {
     cmd_loadBuffer(historyBuffer(URLHist), BP_NO_URL, LB_NOLINK);
 }
 #endif				/* USE_HISTORY */
 
 /* download HREF link */
-DEFUN(svA, SAVE_LINK, "Save link to file")
+DEFUN(svA, SAVE_LINK, "Save hyperlink target")
 {
     CurrentKeyData = NULL;	/* not allowed in w3m-control: */
     do_download = TRUE;
@@ -4391,7 +4508,7 @@ DEFUN(svA, SAVE_LINK, "Save link to file")
 }
 
 /* download IMG link */
-DEFUN(svI, SAVE_IMAGE, "Save image to file")
+DEFUN(svI, SAVE_IMAGE, "Save inline image")
 {
     CurrentKeyData = NULL;	/* not allowed in w3m-control: */
     do_download = TRUE;
@@ -4400,7 +4517,7 @@ DEFUN(svI, SAVE_IMAGE, "Save image to file")
 }
 
 /* save buffer */
-DEFUN(svBuf, PRINT SAVE_SCREEN, "Save rendered document to file")
+DEFUN(svBuf, PRINT SAVE_SCREEN, "Save rendered document")
 {
     char *qfile = NULL, *file;
     FILE *f;
@@ -4449,7 +4566,7 @@ DEFUN(svBuf, PRINT SAVE_SCREEN, "Save rendered document to file")
 }
 
 /* save source */
-DEFUN(svSrc, DOWNLOAD SAVE, "Save document source to file")
+DEFUN(svSrc, DOWNLOAD SAVE, "Save document source")
 {
     char *file;
 
@@ -4510,8 +4627,7 @@ _peekURL(int only_img)
 	s = parsedURL2Str(&pu);
     }
     if (DecodeURL)
-	s = Strnew_charp(url_unquote_conv
-			 (s->ptr, Currentbuf->document_charset));
+	s = Strnew_charp(url_decode2(s->ptr, Currentbuf));
 #ifdef USE_M17N
     s = checkType(s, &pp, NULL);
     p = NewAtom_N(Lineprop, s->length);
@@ -4529,13 +4645,13 @@ _peekURL(int only_img)
 }
 
 /* peek URL */
-DEFUN(peekURL, PEEK_LINK, "Peek link URL")
+DEFUN(peekURL, PEEK_LINK, "Show target address")
 {
     _peekURL(0);
 }
 
 /* peek URL of image */
-DEFUN(peekIMG, PEEK_IMG, "Peek image URL")
+DEFUN(peekIMG, PEEK_IMG, "Show image address")
 {
     _peekURL(1);
 }
@@ -4549,7 +4665,7 @@ currentURL(void)
     return parsedURL2Str(&Currentbuf->currentURL);
 }
 
-DEFUN(curURL, PEEK, "Peek current URL")
+DEFUN(curURL, PEEK, "Show current address")
 {
     static Str s = NULL;
 #ifdef USE_M17N
@@ -4570,7 +4686,7 @@ DEFUN(curURL, PEEK, "Peek current URL")
 	offset = 0;
 	s = currentURL();
 	if (DecodeURL)
-	    s = Strnew_charp(url_unquote_conv(s->ptr, 0));
+	    s = Strnew_charp(url_decode2(s->ptr, NULL));
 #ifdef USE_M17N
 	s = checkType(s, &pp, NULL);
 	p = NewAtom_N(Lineprop, s->length);
@@ -4588,7 +4704,7 @@ DEFUN(curURL, PEEK, "Peek current URL")
 }
 /* view HTML source */
 
-DEFUN(vwSrc, SOURCE VIEW, "View HTML source")
+DEFUN(vwSrc, SOURCE VIEW, "Toggle between HTML shown or processed")
 {
     Buffer *buf;
 
@@ -4679,7 +4795,7 @@ DEFUN(vwSrc, SOURCE VIEW, "View HTML source")
 }
 
 /* reload */
-DEFUN(reload, RELOAD, "Reload buffer")
+DEFUN(reload, RELOAD, "Load current document anew")
 {
     Buffer *buf, *fbuf = NULL, sbuf;
 #ifdef USE_M17N
@@ -4804,7 +4920,7 @@ DEFUN(reload, RELOAD, "Reload buffer")
 }
 
 /* reshape */
-DEFUN(reshape, RESHAPE, "Re-render buffer")
+DEFUN(reshape, RESHAPE, "Re-render document")
 {
     Currentbuf->need_reshape = TRUE;
     reshapeBuffer(Currentbuf);
@@ -4846,7 +4962,7 @@ change_charset(struct parsed_tagarg *arg)
     _docCSet(charset);
 }
 
-DEFUN(docCSet, CHARSET, "Change the current document charset")
+DEFUN(docCSet, CHARSET, "Change the character encoding for the current document")
 {
     char *cs;
     wc_ces charset;
@@ -4864,7 +4980,7 @@ DEFUN(docCSet, CHARSET, "Change the current document charset")
     _docCSet(charset);
 }
 
-DEFUN(defCSet, DEFAULT_CHARSET, "Change the default document charset")
+DEFUN(defCSet, DEFAULT_CHARSET, "Change the default character encoding")
 {
     char *cs;
     wc_ces charset;
@@ -4915,13 +5031,13 @@ chkURLBuffer(Buffer *buf)
     buf->check_url |= CHK_URL;
 }
 
-DEFUN(chkURL, MARK_URL, "Mark URL-like strings as anchors")
+DEFUN(chkURL, MARK_URL, "Turn URL-like strings into hyperlinks")
 {
     chkURLBuffer(Currentbuf);
     displayBuffer(Currentbuf, B_FORCE_REDRAW);
 }
 
-DEFUN(chkWORD, MARK_WORD, "Mark current word as anchor")
+DEFUN(chkWORD, MARK_WORD, "Turn current word into hyperlink")
 {
     char *p;
     int spos, epos;
@@ -4948,15 +5064,15 @@ chkNMIDBuffer(Buffer *buf)
     buf->check_url |= CHK_NMID;
 }
 
-DEFUN(chkNMID, MARK_MID, "Mark Message-ID-like strings as anchors")
+DEFUN(chkNMID, MARK_MID, "Turn Message-ID-like strings into hyperlinks")
 {
     chkNMIDBuffer(Currentbuf);
     displayBuffer(Currentbuf, B_FORCE_REDRAW);
 }
 #endif				/* USE_NNTP */
 
-/* render frame */
-DEFUN(rFrame, FRAME, "Render frame")
+/* render frames */
+DEFUN(rFrame, FRAME, "Toggle rendering HTML frames")
 {
     Buffer *buf;
 
@@ -5010,6 +5126,24 @@ invoke_browser(char *url)
 	case 3:
 	    browser = ExtBrowser3;
 	    break;
+	case 4:
+	    browser = ExtBrowser4;
+	    break;
+	case 5:
+	    browser = ExtBrowser5;
+	    break;
+	case 6:
+	    browser = ExtBrowser6;
+	    break;
+	case 7:
+	    browser = ExtBrowser7;
+	    break;
+	case 8:
+	    browser = ExtBrowser8;
+	    break;
+	case 9:
+	    browser = ExtBrowser9;
+	    break;
 	}
 	if (browser == NULL || *browser == '\0') {
 	    browser = inputStr("Browse command: ", NULL);
@@ -5038,7 +5172,7 @@ invoke_browser(char *url)
     displayBuffer(Currentbuf, B_FORCE_REDRAW);
 }
 
-DEFUN(extbrz, EXTERN, "Execute external browser")
+DEFUN(extbrz, EXTERN, "Display using an external browser")
 {
     if (Currentbuf->bufferprop & BP_INTERNAL) {
 	/* FIXME: gettextize? */
@@ -5055,7 +5189,7 @@ DEFUN(extbrz, EXTERN, "Execute external browser")
     invoke_browser(parsedURL2Str(&Currentbuf->currentURL)->ptr);
 }
 
-DEFUN(linkbrz, EXTERN_LINK, "View current link using external browser")
+DEFUN(linkbrz, EXTERN_LINK, "Display target using an external browser")
 {
     Anchor *a;
     ParsedURL pu;
@@ -5070,7 +5204,7 @@ DEFUN(linkbrz, EXTERN_LINK, "View current link using external browser")
 }
 
 /* show current line number and number of lines in the entire document */
-DEFUN(curlno, LINE_INFO, "Show current line number")
+DEFUN(curlno, LINE_INFO, "Display current position in document")
 {
     Line *l = Currentbuf->currentLine;
     Str tmp;
@@ -5362,7 +5496,7 @@ process_mouse(int btn, int x, int y)
     }
 }
 
-DEFUN(msToggle, MOUSE_TOGGLE, "Toggle activity of mouse")
+DEFUN(msToggle, MOUSE_TOGGLE, "Toggle mouse support")
 {
     if (use_mouse) {
 	use_mouse = FALSE;
@@ -5398,6 +5532,60 @@ DEFUN(mouse, MOUSE, "mouse operation")
     process_mouse(btn, x, y);
 }
 
+DEFUN(sgrmouse, SGRMOUSE, "SGR 1006 mouse operation")
+{
+    int btn = 0, x = 0, y = 0;
+    unsigned char c;
+
+    do {
+	c = getch();
+	if (IS_DIGIT(c))
+	    btn = btn * 10 + c - '0';
+	else if (c == ';')
+	    break;
+	else
+	    return;
+    } while (1);
+
+#if defined(__CYGWIN__) && CYGWIN_VERSION_DLL_MAJOR < 1005
+    if (cygwin_mouse_btn_swapped) {
+	if (btn == MOUSE_BTN2_DOWN)
+	    btn = MOUSE_BTN3_DOWN;
+	else if (btn == MOUSE_BTN3_DOWN)
+	    btn = MOUSE_BTN2_DOWN;
+    };
+#endif
+
+    do {
+	c = getch();
+	if (IS_DIGIT(c))
+	    x = x * 10 + c - '0';
+	else if (c == ';')
+	    break;
+	else
+	  return;
+    } while (1);
+    if (x>0) x--;
+
+    do {
+	c = getch();
+	if (IS_DIGIT(c))
+	    y = y * 10 + c - '0';
+	else if (c == 'M')
+	    break;
+	else if (c == 'm') {
+	    btn |= 3;
+	    break;
+	} else
+    return;
+    } while (1);
+    if (y>0) y--;
+
+    if (x < 0 || x >= COLS || y < 0 || y > LASTLINE)
+	return;
+    process_mouse(btn, x, y);
+}
+
 #ifdef USE_GPM
 int
 gpm_process_mouse(Gpm_Event * event, void *data)
@@ -5451,7 +5639,7 @@ sysm_process_mouse(int x, int y, int nbs, int obs)
 }
 #endif				/* USE_SYSMOUSE */
 
-DEFUN(movMs, MOVE_MOUSE, "Move cursor to mouse cursor (for mouse action)")
+DEFUN(movMs, MOVE_MOUSE, "Move cursor to mouse pointer")
 {
     if (!mouse_action.in_action)
 	return;
@@ -5473,7 +5661,7 @@ DEFUN(movMs, MOVE_MOUSE, "Move cursor to mouse cursor (for mouse action)")
 #define FRAME_WIDTH 1
 #endif
 
-DEFUN(menuMs, MENU_MOUSE, "Popup menu at mouse cursor (for mouse action)")
+DEFUN(menuMs, MENU_MOUSE, "Pop up menu at mouse pointer")
 {
     if (!mouse_action.in_action)
 	return;
@@ -5490,7 +5678,7 @@ DEFUN(menuMs, MENU_MOUSE, "Popup menu at mouse cursor (for mouse action)")
 }
 #endif
 
-DEFUN(tabMs, TAB_MOUSE, "Move to tab on mouse cursor (for mouse action)")
+DEFUN(tabMs, TAB_MOUSE, "Select tab by mouse action")
 {
     TabBuffer *tab;
 
@@ -5503,8 +5691,7 @@ DEFUN(tabMs, TAB_MOUSE, "Move to tab on mouse cursor (for mouse action)")
     displayBuffer(Currentbuf, B_FORCE_REDRAW);
 }
 
-DEFUN(closeTMs, CLOSE_TAB_MOUSE,
-      "Close tab on mouse cursor (for mouse action)")
+DEFUN(closeTMs, CLOSE_TAB_MOUSE, "Close tab at mouse pointer")
 {
     TabBuffer *tab;
 
@@ -5518,12 +5705,12 @@ DEFUN(closeTMs, CLOSE_TAB_MOUSE,
 }
 #endif				/* USE_MOUSE */
 
-DEFUN(dispVer, VERSION, "Display version of w3m")
+DEFUN(dispVer, VERSION, "Display the version of w3m")
 {
     disp_message(Sprintf("w3m version %s", w3m_version)->ptr, TRUE);
 }
 
-DEFUN(wrapToggle, WRAP_TOGGLE, "Toggle wrap search mode")
+DEFUN(wrapToggle, WRAP_TOGGLE, "Toggle wrapping mode in searches")
 {
     if (WrapSearch) {
 	WrapSearch = FALSE;
@@ -5604,7 +5791,7 @@ execdict(char *word)
 	disp_message("Execution failed", TRUE);
 	return;
     }
-    else {
+    else if (buf != NO_BUFFER) {
 	buf->filename = w;
 	buf->buffername = Sprintf("%s %s", DICTBUFFERNAME, word)->ptr;
 	if (buf->type == NULL)
@@ -5671,7 +5858,7 @@ set_buffer_environ(Buffer *buf)
 	    set_environ("W3M_CURRENT_FORM", form2str((FormItemList *)a->url));
 	else
 	    set_environ("W3M_CURRENT_FORM", "");
-	set_environ("W3M_CURRENT_LINE", Sprintf("%d",
+	set_environ("W3M_CURRENT_LINE", Sprintf("%ld",
 						l->real_linenumber)->ptr);
 	set_environ("W3M_CURRENT_COLUMN", Sprintf("%d",
 						  buf->currentColumn +
@@ -5747,8 +5934,14 @@ deleteFiles()
 	    Firstbuf = buf;
 	}
     }
-    while ((f = popText(fileToDelete)) != NULL)
+    while ((f = popText(fileToDelete)) != NULL) {
 	unlink(f);
+	if (enable_inline_image == 2 && strcmp(f+strlen(f)-4, ".gif") == 0) {
+	    Str firstframe = Strnew_charp(f);
+	    Strcat_charp(firstframe, "-1");
+	    unlink(firstframe->ptr);
+        }
+    }
 }
 
 void
@@ -5772,7 +5965,7 @@ w3m_exit(int i)
     exit(i);
 }
 
-DEFUN(execCmd, COMMAND, "Execute w3m command(s)")
+DEFUN(execCmd, COMMAND, "Invoke w3m function(s)")
 {
     char *data, *p;
     int cmd;
@@ -5900,7 +6093,7 @@ setAlarmEvent(AlarmEvent * event, int sec, short status, int cmd, void *data)
 }
 #endif
 
-DEFUN(reinit, REINIT, "Reload configuration files")
+DEFUN(reinit, REINIT, "Reload configuration file")
 {
     char *resource = searchKeyData();
 
@@ -5969,8 +6162,7 @@ DEFUN(reinit, REINIT, "Reload configuration files")
 		     ptr, FALSE);
 }
 
-DEFUN(defKey, DEFINE_KEY,
-      "Define a binding between a key stroke and a user command")
+DEFUN(defKey, DEFINE_KEY, "Define a binding between a key stroke combination and a command")
 {
     char *data;
 
@@ -6031,7 +6223,7 @@ _newT(void)
     nTab++;
 }
 
-DEFUN(newT, NEW_TAB, "Open new tab")
+DEFUN(newT, NEW_TAB, "Open a new tab (with current document)")
 {
     _newT();
     displayBuffer(Currentbuf, B_REDRAW_IMAGE);
@@ -6142,7 +6334,7 @@ deleteTab(TabBuffer * tab)
     return FirstTab;
 }
 
-DEFUN(closeT, CLOSE_TAB, "Close current tab")
+DEFUN(closeT, CLOSE_TAB, "Close tab")
 {
     TabBuffer *tab;
 
@@ -6157,7 +6349,7 @@ DEFUN(closeT, CLOSE_TAB, "Close current tab")
     displayBuffer(Currentbuf, B_REDRAW_IMAGE);
 }
 
-DEFUN(nextT, NEXT_TAB, "Move to next tab")
+DEFUN(nextT, NEXT_TAB, "Switch to the next tab")
 {
     int i;
 
@@ -6172,7 +6364,7 @@ DEFUN(nextT, NEXT_TAB, "Move to next tab")
     displayBuffer(Currentbuf, B_REDRAW_IMAGE);
 }
 
-DEFUN(prevT, PREV_TAB, "Move to previous tab")
+DEFUN(prevT, PREV_TAB, "Switch to the previous tab")
 {
     int i;
 
@@ -6236,7 +6428,7 @@ followTab(TabBuffer * tab)
     displayBuffer(Currentbuf, B_FORCE_REDRAW);
 }
 
-DEFUN(tabA, TAB_LINK, "Open current link on new tab")
+DEFUN(tabA, TAB_LINK, "Follow current hyperlink in a new tab")
 {
     followTab(prec_num ? numTab(PREC_NUM) : NULL);
 }
@@ -6277,13 +6469,13 @@ tabURL0(TabBuffer * tab, char *prompt, int relative)
     displayBuffer(Currentbuf, B_FORCE_REDRAW);
 }
 
-DEFUN(tabURL, TAB_GOTO, "Open URL on new tab")
+DEFUN(tabURL, TAB_GOTO, "Open specified document in a new tab")
 {
     tabURL0(prec_num ? numTab(PREC_NUM) : NULL,
 	    "Goto URL on new tab: ", FALSE);
 }
 
-DEFUN(tabrURL, TAB_GOTO_RELATIVE, "Open relative URL on new tab")
+DEFUN(tabrURL, TAB_GOTO_RELATIVE, "Open relative address in a new tab")
 {
     tabURL0(prec_num ? numTab(PREC_NUM) : NULL,
 	    "Goto relative URL on new tab: ", TRUE);
@@ -6328,7 +6520,7 @@ moveTab(TabBuffer * t, TabBuffer * t2, int right)
     displayBuffer(Currentbuf, B_FORCE_REDRAW);
 }
 
-DEFUN(tabR, TAB_RIGHT, "Move current tab right")
+DEFUN(tabR, TAB_RIGHT, "Move right along the tab bar")
 {
     TabBuffer *tab;
     int i;
@@ -6338,7 +6530,7 @@ DEFUN(tabR, TAB_RIGHT, "Move current tab right")
     moveTab(CurrentTab, tab ? tab : LastTab, TRUE);
 }
 
-DEFUN(tabL, TAB_LEFT, "Move current tab left")
+DEFUN(tabL, TAB_LEFT, "Move left along the tab bar")
 {
     TabBuffer *tab;
     int i;
@@ -6547,7 +6739,7 @@ stopDownload(void)
 }
 
 /* download panel */
-DEFUN(ldDL, DOWNLOAD_LIST, "Display download list panel")
+DEFUN(ldDL, DOWNLOAD_LIST, "Display downloads panel")
 {
     Buffer *buf;
     int replace = FALSE, new_tab = FALSE;
diff --git a/map.c b/map.c
index 90aa35a..bb240ea 100644
--- a/map.c
+++ b/map.c
@@ -279,7 +279,7 @@ follow_map_panel(Buffer *buf, char *name)
 	p = parsedURL2Str(&pu)->ptr;
 	q = html_quote(p);
 	if (DecodeURL)
-	    p = html_quote(url_unquote_conv(p, buf->document_charset));
+	    p = html_quote(url_decode2(p, buf));
 	else
 	    p = q;
 	Strcat_m_charp(mappage, "<tr valign=top><td><a href=\"", q, "\">",
@@ -417,10 +417,7 @@ append_map_info(Buffer *buf, Str tmp, FormItemList *fi)
 	    continue;
 	parseURL2(a->url, &pu, baseURL(buf));
 	q = html_quote(parsedURL2Str(&pu)->ptr);
-	if (DecodeURL)
-	    p = html_quote(url_unquote_conv(a->url, buf->document_charset));
-	else
-	    p = html_quote(a->url);
+	p = html_quote(url_decode2(a->url, buf));
 	Strcat_m_charp(tmp, "<tr valign=top><td>&nbsp;&nbsp;<td><a href=\"",
 		       q, "\">",
 		       html_quote(*a->alt ? a->alt : mybasename(a->url)),
@@ -457,10 +454,8 @@ append_link_info(Buffer *buf, Str html, LinkList * link)
 	    Strcat_charp(html, "[Rev]");
 	if (!l->url)
 	    url = "(empty)";
-	else if (DecodeURL)
-	    url = html_quote(url_unquote_conv(l->url, buf->document_charset));
 	else
-	    url = html_quote(l->url);
+	    url = html_quote(url_decode2(l->url, buf));
 	Strcat_m_charp(html, "<td>", url, NULL);
 	if (l->ctype)
 	    Strcat_m_charp(html, " (", html_quote(l->ctype), ")", NULL);
@@ -498,8 +493,7 @@ append_frame_info(Buffer *buf, Str html, struct frameset *set, int level)
 		    Strcat_charp(html, p);
 		}
 		if (DecodeURL)
-		    p = html_quote(url_unquote_conv(frame.body->url,
-						    buf->document_charset));
+		    p = html_quote(url_decode2(frame.body->url, buf));
 		else
 		    p = q;
 		Strcat_m_charp(html, " ", p, "</a></pre_int><br>\n", NULL);
@@ -550,9 +544,7 @@ page_info_panel(Buffer *buf)
 #ifdef USE_M17N
     Strcat_charp(tmp, "<form method=internal action=charset>");
 #endif
-    p = parsedURL2Str(&buf->currentURL)->ptr;
-    if (DecodeURL)
-	p = url_unquote_conv(p, 0);
+    p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL);
     Strcat_m_charp(tmp, "<table cellpadding=0>",
 		   "<tr valign=top><td nowrap>Title<td>",
 		   html_quote(buf->buffername),
@@ -581,7 +573,7 @@ page_info_panel(Buffer *buf)
 		   "<tr valign=top><td nowrap>Number of lines<td>",
 		   Sprintf("%d", all)->ptr,
 		   "<tr valign=top><td nowrap>Transferred bytes<td>",
-		   Sprintf("%d", buf->trbyte)->ptr, NULL);
+		   Sprintf("%lu", (unsigned long)buf->trbyte)->ptr, NULL);
 
     a = retrieveCurrentAnchor(buf);
     if (a != NULL) {
@@ -589,7 +581,7 @@ page_info_panel(Buffer *buf)
 	p = parsedURL2Str(&pu)->ptr;
 	q = html_quote(p);
 	if (DecodeURL)
-	    p = html_quote(url_unquote_conv(p, buf->document_charset));
+	    p = html_quote(url_decode2(p, buf));
 	else
 	    p = q;
 	Strcat_m_charp(tmp,
@@ -602,7 +594,7 @@ page_info_panel(Buffer *buf)
 	p = parsedURL2Str(&pu)->ptr;
 	q = html_quote(p);
 	if (DecodeURL)
-	    p = html_quote(url_unquote_conv(p, buf->document_charset));
+	    p = html_quote(url_decode2(p, buf));
 	else
 	    p = q;
 	Strcat_m_charp(tmp,
@@ -613,10 +605,7 @@ page_info_panel(Buffer *buf)
     if (a != NULL) {
 	FormItemList *fi = (FormItemList *)a->url;
 	p = form2str(fi);
-	if (DecodeURL)
-	    p = html_quote(url_unquote_conv(p, buf->document_charset));
-	else
-	    p = html_quote(p);
+	p = html_quote(url_decode2(p, buf));
 	Strcat_m_charp(tmp,
 		       "<tr valign=top><td nowrap>Method/type of current form&nbsp;<td>",
 		       p, NULL);
diff --git a/matrix.c b/matrix.c
index 64fd0ad..bc7a5be 100644
--- a/matrix.c
+++ b/matrix.c
@@ -34,18 +34,12 @@
 
 #include "config.h"
 #include "matrix.h"
-#include <gc.h>
+#include "alloc.h"
 
 /* 
  * Macros from "fm.h".
  */
 
-#define New(type)       ((type*)GC_MALLOC(sizeof(type)))
-#define NewAtom(type)   ((type*)GC_MALLOC_ATOMIC(sizeof(type)))
-#define New_N(type,n)   ((type*)GC_MALLOC((n)*sizeof(type)))
-#define NewAtom_N(type,n)       ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type)))
-#define Renew_N(type,ptr,n)   ((type*)GC_REALLOC((ptr),(n)*sizeof(type)))
-
 #define SWAPD(a,b) { double tmp = a; a = b; b = tmp; }
 #define SWAPI(a,b) { int tmp = a; a = b; b = tmp; }
 
diff --git a/menu.c b/menu.c
index 774b1bd..01acc31 100644
--- a/menu.c
+++ b/menu.c
@@ -57,6 +57,7 @@ static int mCancel(char c);
 static int mClose(char c);
 static int mSusp(char c);
 static int mMouse(char c);
+static int mSgrMouse(char c);
 static int mSrchF(char c);
 static int mSrchB(char c);
 static int mSrchN(char c);
@@ -116,15 +117,15 @@ static int (*MenuEscKeymap[128]) (char c) = {
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,
 
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,
-/*  O     */
+/*                                                          O     */
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mEscB,
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,
-/*  [                                     */
+/*                          [                                     */
     mNull,  mNull,  mNull,  mEscB,  mNull,  mNull,  mNull,  mNull,
 
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,
-/*  v             */
+/*                                                  v             */
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mPrev,  mNull,
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,
 };
@@ -137,10 +138,11 @@ static int (*MenuEscBKeymap[128]) (char c) = {
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,
-    mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,
-/*  A       B       C       D       E                     */
+/*  8       9       :       ;       <       =       >       ?     */
+    mNull,  mNull,  mNull,  mNull,  mSgrMouse,mNull,mNull,  mNull,
+/*          A       B       C       D       E                     */
     mNull,  mUp,    mDown,  mOk,    mCancel,mClose, mNull, mNull,
-/*  L       M                     */
+/*                                  L       M                     */
     mNull,  mNull,  mNull,  mNull,  mClose, mMouse, mNull,  mNull,
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,
     mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,  mNull,
@@ -359,7 +361,6 @@ geom_menu(Menu *menu, int x, int y, int mselect)
 	if (win_w > COLS) {
 	    menu->width = COLS - 2 * FRAME_WIDTH;
 	    menu->width -= menu->width % FRAME_WIDTH;
-	    win_w = menu->width + 2 * FRAME_WIDTH;
 	}
     }
     menu->x = win_x + FRAME_WIDTH;
@@ -1203,6 +1204,48 @@ mMouse(char c)
     return process_mMouse(btn, x, y);
 }
 
+static int
+mSgrMouse(char c)
+{
+    int btn = 0, x = 0, y = 0;
+    unsigned char ch;
+
+    for (ch = getch(); IS_DIGIT(ch); ch = getch())
+	btn = btn * 10 + ch - '0';
+    if (ch != ';')
+	return MENU_NOTHING;
+
+#if defined (__CYGWIN__) && CYGWIN_VERSION_DLL_MAJOR < 1005
+    if (cygwin_mouse_btn_swapped) {
+	if (btn == MOUSE_BTN2_DOWN)
+	    btn = MOUSE_BTN3_DOWN;
+	else if (btn == MOUSE_BTN3_DOWN)
+	    btn = MOUSE_BTN2_DOWN;
+    }
+#endif
+
+    for (ch = getch(); IS_DIGIT(ch); ch = getch())
+	x = x * 10 + ch - '0';
+    if (ch != ';')
+	return MENU_NOTHING;
+    if (x > 0)
+	x--;
+
+    for (ch = getch(); IS_DIGIT(ch); ch = getch())
+	y = y * 10 + ch - '0';
+    if (ch == 'm')
+	btn |= 3;
+    else if (ch != 'M' && ch != ';')
+	return MENU_NOTHING;
+    if (y > 0)
+	y--;
+
+    if (x < 0 || x >= COLS || y < 0 || y > LASTLINE)
+	return MENU_NOTHING;
+
+    return process_mMouse(btn, x, y);
+}
+
 #ifdef USE_GPM
 static int
 gpm_process_menu_mouse(Gpm_Event * event, void *data)
@@ -1261,6 +1304,12 @@ mMouse(char c)
 {
     return (MENU_NOTHING);
 }
+
+static int
+mSgrMouse(char c)
+{
+    return (MENU_NOTHING);
+}
 #endif				/* not USE_MOUSE */
 
 /* --- MenuFunctions (END) --- */
@@ -1289,7 +1338,7 @@ mainMenu(int x, int y)
     popupMenu(x, y, &MainMenu);
 }
 
-DEFUN(mainMn, MAIN_MENU MENU, "Popup menu")
+DEFUN(mainMn, MAIN_MENU MENU, "Pop up menu")
 {
     Menu *menu = &MainMenu;
     char *data;
@@ -1317,7 +1366,7 @@ DEFUN(mainMn, MAIN_MENU MENU, "Popup menu")
 
 /* --- SelectMenu --- */
 
-DEFUN(selMn, SELECT_MENU, "Popup buffer selection menu")
+DEFUN(selMn, SELECT_MENU, "Pop up buffer-stack menu")
 {
     int x = Currentbuf->cursorX + Currentbuf->rootX,
 	y = Currentbuf->cursorY + Currentbuf->rootY;
@@ -1365,9 +1414,7 @@ initSelectMenu(void)
 		break;
 	    default:
 		Strcat_char(str, ' ');
-		p = parsedURL2Str(&buf->currentURL)->ptr;
-		if (DecodeURL)
-		    p = url_unquote_conv(p, 0);
+		p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL);
 		Strcat_charp(str, p);
 		break;
 	    }
@@ -1464,7 +1511,7 @@ smDelBuf(char c)
 
 /* --- SelTabMenu --- */
 
-DEFUN(tabMn, TAB_MENU, "Popup tab selection menu")
+DEFUN(tabMn, TAB_MENU, "Pop up tab selection menu")
 {
     int x = Currentbuf->cursorX + Currentbuf->rootX,
 	y = Currentbuf->cursorY + Currentbuf->rootY;
@@ -1513,9 +1560,7 @@ initSelTabMenu(void)
 	    case SCM_MISSING:
 		break;
 	    default:
-		p = parsedURL2Str(&buf->currentURL)->ptr;
-		if (DecodeURL)
-		    p = url_unquote_conv(p, 0);
+		p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL);
 		Strcat_charp(str, p);
 		break;
 	    }
@@ -1845,10 +1890,8 @@ link_menu(Buffer *buf)
 	    Strcat_charp(str, " ");
 	if (!l->url)
 	    p = "";
-	else if (DecodeURL)
-	    p = url_unquote_conv(l->url, buf->document_charset);
 	else
-	    p = l->url;
+	    p = url_decode2(l->url, buf);
 	Strcat_charp(str, p);
 	label[i] = str->ptr;
 	if (len < str->length)
@@ -1913,6 +1956,7 @@ accesskey_menu(Buffer *buf)
     }
     label[nitem] = NULL;
 
+    set_menu_frame();
     new_option_menu(&menu, label, &key, NULL);
 
     menu.initial = 0;
@@ -2025,7 +2069,6 @@ list_menu(Buffer *buf)
     label[nitem] = NULL;
 
     set_menu_frame();
-    set_menu_frame();
     new_option_menu(&menu, label, &key, NULL);
 
     menu.initial = 0;
diff --git a/mimehead.c b/mimehead.c
index 78997e0..d16270c 100644
--- a/mimehead.c
+++ b/mimehead.c
@@ -64,12 +64,22 @@ ha2d(char x, char y)
 Str
 decodeB(char **ww)
 {
+    struct growbuf gb;
+
+    growbuf_init(&gb);
+    decodeB_to_growbuf(&gb, ww);
+    return growbuf_to_Str(&gb);
+}
+
+void
+decodeB_to_growbuf(struct growbuf *gb, char **ww)
+{
     unsigned char c[4];
     char *wp = *ww;
     char d[3];
     int i, n_pad;
-    Str ap = Strnew_size(strlen(wp));
 
+    growbuf_reserve(gb, strlen(wp) + 1);
     n_pad = 0;
     while (1) {
 	for (i = 0; i < 4; i++) {
@@ -93,39 +103,50 @@ decodeB(char **ww)
 	for (i = 0; i < 4; i++) {
 	    c[i] = c2e(c[i]);
 	    if (c[i] == BAD_BASE64) {
-		*ww = wp;
-		return ap;
+		goto last;
 	    }
 	}
 	d[0] = ((c[0] << 2) | (c[1] >> 4));
 	d[1] = ((c[1] << 4) | (c[2] >> 2));
 	d[2] = ((c[2] << 6) | c[3]);
 	for (i = 0; i < 3 - n_pad; i++) {
-	    Strcat_char(ap, d[i]);
+	    GROWBUF_ADD_CHAR(gb, d[i]);
 	}
 	if (n_pad || *wp == '\0' || *wp == '?')
 	    break;
     }
+last:
+    growbuf_reserve(gb, gb->length + 1);
+    gb->ptr[gb->length] = '\0';
     *ww = wp;
-    return ap;
+    return;
 }
 
 Str
 decodeU(char **ww)
 {
+    struct growbuf gb;
+
+    growbuf_init(&gb);
+    decodeU_to_growbuf(&gb, ww);
+    return growbuf_to_Str(&gb);
+}
+
+void
+decodeU_to_growbuf(struct growbuf *gb, char **ww)
+{
     unsigned char c1, c2;
     char *w = *ww;
     int n, i;
-    Str a;
 
     if (*w <= 0x20 || *w >= 0x60)
-	return Strnew_size(0);
+	return;
     n = *w - 0x20;
-    a = Strnew_size(n);
+    growbuf_reserve(gb, n + 1);
     for (w++, i = 2; *w != '\0' && n; n--) {
 	c1 = (w[0] - 0x20) % 0x40;
 	c2 = (w[1] - 0x20) % 0x40;
-	Strcat_char(a, (c1 << i) | (c2 >> (6 - i)));
+	gb->ptr[gb->length++] = (c1 << i) | (c2 >> (6 - i));
 	if (i == 6) {
 	    w += 2;
 	    i = 2;
@@ -135,7 +156,8 @@ decodeU(char **ww)
 	    i += 2;
 	}
     }
-    return a;
+    gb->ptr[gb->length] = '\0';
+    return;
 }
 
 /* RFC2047 (4.2. The "Q" encoding) */
@@ -165,9 +187,19 @@ decodeQ(char **ww)
 Str
 decodeQP(char **ww)
 {
+    struct growbuf gb;
+
+    growbuf_init(&gb);
+    decodeQP_to_growbuf(&gb, ww);
+    return growbuf_to_Str(&gb);
+}
+
+void
+decodeQP_to_growbuf(struct growbuf *gb, char **ww)
+{
     char *w = *ww;
-    Str a = Strnew_size(strlen(w));
 
+    growbuf_reserve(gb, strlen(w) + 1);
     for (; *w != '\0'; w++) {
 	if (*w == '=') {
 	    w++;
@@ -180,15 +212,16 @@ decodeQP(char **ww)
 	    else {
 		if (*w == '\0' || *(w + 1) == '\0')
 		    break;
-		Strcat_char(a, ha2d(*w, *(w + 1)));
+		gb->ptr[gb->length++] = ha2d(*w, *(w + 1));
 		w++;
 	    }
 	}
 	else
-	    Strcat_char(a, *w);
+	    gb->ptr[gb->length++] = *w;
     }
+    gb->ptr[gb->length] = '\0';
     *ww = w;
-    return a;
+    return;
 }
 
 #ifdef USE_M17N
diff --git a/news.c b/news.c
index 8a1f0e8..c0494b7 100644
--- a/news.c
+++ b/news.c
@@ -76,13 +76,15 @@ news_close(News * news)
 static int
 news_open(News * news)
 {
-    int sock, status;
+    int sock, status, fd;
 
     sock = openSocket(news->host, "nntp", news->port);
     if (sock < 0)
 	goto open_err;
     news->rf = newInputStream(sock);
-    news->wf = fdopen(dup(sock), "wb");
+    if ((fd = dup(sock)) < 0)
+	    goto open_err;
+    news->wf = fdopen(fd, "wb");
     if (!news->rf || !news->wf)
 	goto open_err;
     IStype(news->rf) |= IST_UNCLOSE;
diff --git a/parsetagx.c b/parsetagx.c
index 6b627d2..3435f9f 100644
--- a/parsetagx.c
+++ b/parsetagx.c
@@ -221,6 +221,7 @@ parse_tag(char **s, int internal)
          int j, hidden=FALSE;
          for (j=0; j<i; j++) {
            if (tag->attrid[j] == ATTR_TYPE &&
+               tag->value[j] &&
                strcmp("hidden",tag->value[j]) == 0) {
              hidden=TRUE;
              break;
diff --git a/po/LINGUAS b/po/LINGUAS
index 1489115..ddd267b 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1,2 +1,2 @@
 # Set of available languages.
-ja
+ja de zh_CN zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
index 83d8838..ef8bd94 100644
--- a/po/Makefile.in.in
+++ b/po/Makefile.in.in
@@ -153,14 +153,14 @@ $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
 	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
 	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
 	      --files-from=$(srcdir)/POTFILES.in \
-	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	      --copyright-holder="$(COPYRIGHT_HOLDER)" \
 	      --msgid-bugs-address="$$msgid_bugs_address" \
 	    ;; \
 	  *) \
 	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
 	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
 	      --files-from=$(srcdir)/POTFILES.in \
-	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	      --copyright-holder="$(COPYRIGHT_HOLDER)" \
 	      --package-name="$${package_gnu}@PACKAGE@" \
 	      --package-version='@VERSION@' \
 	      --msgid-bugs-address="$$msgid_bugs_address" \
diff --git a/po/Makevars b/po/Makevars
index 2f57810..a60a09d 100644
--- a/po/Makevars
+++ b/po/Makevars
@@ -18,7 +18,7 @@ XGETTEXT_OPTIONS = --from-code=EUC-JP --keyword=_ --keyword=N_
 # or entity, or to disclaim their copyright.  The empty string stands for
 # the public domain; in this case the translators are expected to disclaim
 # their copyright.
-COPYRIGHT_HOLDER = Fumitoshi UKAI
+COPYRIGHT_HOLDER = THE w3m'S COPYRIGHT HOLDER
 
 # This is the email address or URL to which the translators shall report
 # bugs in the untranslated strings:
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..96489c1
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,936 @@
+# German translation of w3m
+# Copyright (C) 2014 THE w3m'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the w3m package.
+# Markus Hiereth <markus.hiereth@freenet.de>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: w3m 0.5.3\n"
+"Report-Msgid-Bugs-To: satodai@w3m.jp\n"
+"POT-Creation-Date: 2016-03-14 19:47+0900\n"
+"PO-Revision-Date: 2016-03-14 19:51+0900\n"
+"Last-Translator: Tatsuya Kinoshita <tats@debian.org>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.1\n"
+
+#: menu.c:269
+msgid " Back         (b) "
+msgstr " Zurück             (b) "
+
+#: menu.c:270
+msgid " Select Buffer(s) "
+msgstr " Puffer auswählen   (s) "
+
+#: menu.c:272
+msgid " Select Tab   (t) "
+msgstr " Reiter auswählen   (t) "
+
+#: menu.c:274
+msgid " View Source  (v) "
+msgstr " Codeansicht        (v) "
+
+#: menu.c:275
+msgid " Edit Source  (e) "
+msgstr " Code bearbeiten    (e) "
+
+#: menu.c:276
+msgid " Save Source  (S) "
+msgstr " Code speichern     (S) "
+
+#: menu.c:277
+msgid " Reload       (r) "
+msgstr " Erneut laden       (r) "
+
+#: menu.c:278 menu.c:285 menu.c:289
+msgid " ---------------- "
+msgstr " ---------------------- "
+
+#: menu.c:279
+msgid " Go Link      (a) "
+msgstr " Ziel öffnen..      (a) "
+
+#: menu.c:280
+msgid "   on New Tab (n) "
+msgstr "  ..in neuem Reiter (n) "
+
+#: menu.c:281
+msgid " Save Link    (A) "
+msgstr " Ziel speichern     (A) "
+
+#: menu.c:282
+msgid " View Image   (i) "
+msgstr " Bild anzeigen      (i) "
+
+#: menu.c:283
+msgid " Save Image   (I) "
+msgstr " Bild speichern     (I) "
+
+#: menu.c:284
+msgid " View Frame   (f) "
+msgstr " Frames zeigen      (f) "
+
+#: menu.c:286
+msgid " Bookmark     (B) "
+msgstr " Lesezeichen        (B) "
+
+#: menu.c:287
+msgid " Help         (h) "
+msgstr " Hilfe              (h) "
+
+#: menu.c:288
+msgid " Option       (o) "
+msgstr " Einstellungen      (o) "
+
+#: menu.c:290
+msgid " Quit         (q) "
+msgstr " Programm verlassen (q) "
+
+#: rc.c:62
+msgid "External Viewer Setup"
+msgstr "Konfiguration für externe Anzeigeprogramme"
+
+#: rc.c:63
+msgid "Tab width in characters"
+msgstr "Tabulatorbreite in Zeichen"
+
+#: rc.c:64
+msgid "Indent for HTML rendering"
+msgstr "Einzug bei HTML-Darstellung"
+
+#: rc.c:65
+msgid "Number of pixels per character (4.0...32.0)"
+msgstr "Anzahl von Pixeln pro Zeichen (4.0 bis 32.0)"
+
+#: rc.c:66
+msgid "Number of pixels per line (4.0...64.0)"
+msgstr "Anzahl von Pixeln pro Zeile (4.0 bis 64.0)"
+
+# entsprechend Bescheibung aus MANUAL.html, mh 14.10.2014
+#: rc.c:67
+msgid "Number of remembered lines when used as a pager"
+msgstr "Anzahl gemerkter, über die Standardeingabe erhaltener Zeilen"
+
+#: rc.c:68
+msgid "Use URL history"
+msgstr "URL-Chronik verwenden"
+
+#: rc.c:69
+msgid "Number of remembered URL"
+msgstr "Anzahl von URLs in Chronik"
+
+#: rc.c:70
+msgid "Save URL history"
+msgstr "URL-Chronik speichern"
+
+#: rc.c:71
+msgid "Render frames automatically"
+msgstr "Frames selbstständig darstellen"
+
+#: rc.c:72
+msgid "Treat argument without scheme as URL"
+msgstr "Eingabe ohne Protokoll-Präfix als URL auffassen"
+
+#: rc.c:73
+msgid "Use _self as default target"
+msgstr "_self als Standard-Zielfenster verwenden"
+
+#: rc.c:74
+msgid "Open link on new tab if target is _blank or _new"
+msgstr ""
+"Link in neuem Reiter öffnen, falls für Zielfenster _blank oder _new "
+"definiert ist"
+
+#: rc.c:75
+msgid "Open download list panel on new tab"
+msgstr "Downloadliste in neuem Reiter öffnen"
+
+#: rc.c:76
+msgid "Display link URL automatically"
+msgstr "URL der Links selbstständig anzeigen"
+
+#: rc.c:77
+msgid "Display link numbers"
+msgstr "Linknummern anzeigen"
+
+#: rc.c:78
+msgid "Display decoded URL"
+msgstr "URL entschlüsselt anzeigen"
+
+#: rc.c:79
+msgid "Display current line number"
+msgstr "Aktuelle Zeilennummer anzeigen"
+
+#: rc.c:80
+msgid "Display inline images"
+msgstr "Eingebettete Bilder anzeigen"
+
+#: rc.c:81
+msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
+msgstr "Pseudo-ALTs zu eingebetteten Bildern ohne ALT oder TITLE anzeigen"
+
+#: rc.c:83
+msgid "Load inline images automatically"
+msgstr "Eingebettete Bilder selbstständig laden"
+
+#: rc.c:84
+msgid "Maximum processes for parallel image loading"
+msgstr "Anzahl zulässiger Prozesse zum gleichzeitigen Laden von Bildern"
+
+#: rc.c:85
+msgid "Use external image viewer"
+msgstr "Externen Bildbetrachter verwenden"
+
+#: rc.c:86
+msgid "Scale of image (%)"
+msgstr "Bilder prozentual skalieren"
+
+#: rc.c:87
+msgid "External command to display image"
+msgstr "Befehl für externen Bildbetrachter"
+
+#: rc.c:88
+msgid "Use link list of image map"
+msgstr "Bei Grafiken mit eingebetteten Links Ziele auflisten"
+
+#: rc.c:90
+msgid "Display file names in multi-column format"
+msgstr "Dateinamen auf Spalten verteilt anzeigen"
+
+#: rc.c:91
+msgid "Use ASCII equivalents to display entities"
+msgstr "ASCII-Ersatz für in HTML benannte Zeichen verwenden"
+
+#: rc.c:92
+msgid "Character type for border of table and menu"
+msgstr "Zeichen zum Einrahmen von Tabellen und Menüs"
+
+#: rc.c:93
+msgid "Display table borders, ignore value of BORDER"
+msgstr "Zeige Tabellen gerahmt, BORDER-Wert ignorieren"
+
+#: rc.c:94
+msgid "Fold lines in TEXTAREA"
+msgstr "In Eingabefeldern vom Typ TEXTAREA Texte umbrechen"
+
+#: rc.c:95
+msgid "Display INS, DEL, S and STRIKE element"
+msgstr "Umsetzung der Elemente INS, DEL, S und STRIKE"
+
+#: rc.c:96
+msgid "Display with color"
+msgstr "In Farbe anzeigen"
+
+#: rc.c:97
+msgid "Color of normal character"
+msgstr "Farbe für normalen Text"
+
+#: rc.c:98
+msgid "Color of anchor"
+msgstr "Farbe für Links / Element A"
+
+#: rc.c:99
+msgid "Color of image link"
+msgstr "Farbe für Bilder / Element IMG"
+
+#: rc.c:100
+msgid "Color of form"
+msgstr "Farbe für Eingaben / Element INPUT"
+
+#: rc.c:101
+msgid "Enable coloring of active link"
+msgstr "Aktiven Link farblich hervorheben"
+
+#: rc.c:102
+msgid "Color of currently active link"
+msgstr "Farbe des derzeit aktiven Links "
+
+#: rc.c:103
+msgid "Use visited link color"
+msgstr "Besuchte Links farblich hervorheben"
+
+#: rc.c:104
+msgid "Color of visited link"
+msgstr "Farbe für besuchte Links"
+
+#: rc.c:105
+msgid "Color of background"
+msgstr "Hintergrundfarbe"
+
+#: rc.c:106
+msgid "Color of mark"
+msgstr "Farbe für Textmarken"
+
+# msgstr "Farbe für Textmarkierungen"
+#: rc.c:107
+msgid "Use proxy"
+msgstr "Proxy verwenden"
+
+#: rc.c:108
+msgid "URL of HTTP proxy host"
+msgstr "URL des HTTP-Proxy-Hosts"
+
+#: rc.c:110
+msgid "URL of HTTPS proxy host"
+msgstr "URL des HTTPS-Proxy-Hosts"
+
+#: rc.c:113
+msgid "URL of GOPHER proxy host"
+msgstr "URL des GOPHER-Proxy-Hosts"
+
+#: rc.c:115
+msgid "URL of FTP proxy host"
+msgstr "URL des FTP-Proxy-Hosts"
+
+#: rc.c:116
+msgid "Domains to be accessed directly (no proxy)"
+msgstr "Ohne Proxy, direkt zu kontaktierende Domains"
+
+#: rc.c:117
+msgid "Check noproxy by network address"
+msgstr ""
+"Direkten Datentransfer ohne Proxy mittels Netzwerkadresse sicherstellen"
+
+#: rc.c:118
+msgid "Disable cache"
+msgstr "Zwischenspeicherung deaktivieren"
+
+#: rc.c:120
+msgid "News server"
+msgstr "News-Server"
+
+#: rc.c:121
+msgid "Mode of news server"
+msgstr "Modus des News-Servers"
+
+#: rc.c:122
+msgid "Number of news messages"
+msgstr "News-Anzahl"
+
+#: rc.c:124
+msgid "Order of name resolution"
+msgstr "Reihenfolge der Namens-Auflösung"
+
+#: rc.c:125
+msgid "Directory corresponding to / (document root)"
+msgstr "Wurzelverzeichnis für Dokumente (/)"
+
+#: rc.c:126
+msgid "Directory corresponding to /~user"
+msgstr "Pfad zum Benutzerverzeichnis (~)"
+
+#: rc.c:127
+msgid "Directory corresponding to /cgi-bin"
+msgstr "Verzeichnis für ausführbare Skripte (cgi-bin)"
+
+#: rc.c:128
+msgid "Confirm when quitting with q"
+msgstr "Das Programm erst nach Bestätigung verlassen"
+
+#: rc.c:129
+msgid "Close tab if buffer is last when back"
+msgstr "Reiter mit nur einem Puffer auf Zurück-Befehl hin schließen"
+
+#: rc.c:131
+msgid "Enable mark operations"
+msgstr "Arbeit mit Textmarken ermöglichen"
+
+# msgstr "Arbeit mit Textmarkierungen ermöglichen"
+#: rc.c:133
+msgid "Enable Emacs-style line editing"
+msgstr "Zeilen wie in Emacs bearbeiten"
+
+#: rc.c:134
+msgid "Enable vi-like numeric prefix"
+msgstr "Vorangestellte Zahlen wie in vi aktivieren"
+
+#: rc.c:135
+msgid "Move cursor to top line when going to label"
+msgstr "Labels nach Aufsuchen immer oben positionieren"
+
+#: rc.c:136
+msgid "Move cursor to top line when moving to next page"
+msgstr "Beim Umblättern Eingabemarke nach oben setzen"
+
+#: rc.c:137
+msgid "Fold lines of plain text file"
+msgstr "Zeilen in Textdateien umbrechen"
+
+#: rc.c:138
+msgid "Show line numbers"
+msgstr "Zeilennummern anzeigen"
+
+#: rc.c:139
+msgid "Show search string"
+msgstr "Suchbegriff anzeigen"
+
+#: rc.c:140
+msgid "List of mime.types files"
+msgstr "Liste der mime.types-Dateien"
+
+#: rc.c:141
+msgid "List of mailcap files"
+msgstr "Liste der mailcap-Dateien"
+
+#: rc.c:142
+msgid "List of urimethodmap files"
+msgstr "Liste von Dateien mit URI-Methode-Zuordnungen"
+
+#: rc.c:143
+msgid "Editor"
+msgstr "Editor"
+
+#: rc.c:144
+msgid "Mailer"
+msgstr "Mail-Programm"
+
+# korrespondiert mit Pulldown-Menü, daher verkürzt. mh 09.10.2014
+#: rc.c:145
+msgid "How to call Mailer for mailto URLs with options"
+msgstr "Umgang mit mailto-URLs"
+
+#: rc.c:146
+msgid "External browser"
+msgstr "Externer browser"
+
+#: rc.c:147
+msgid "2nd external browser"
+msgstr "Zweiter externer browser"
+
+#: rc.c:148
+msgid "3rd external browser"
+msgstr "Dritter externer browser"
+
+#: rc.c:149
+msgid "4th external browser"
+msgstr "Vierter externer browser"
+
+#: rc.c:150
+msgid "5th external browser"
+msgstr "Fünfter externer browser"
+
+#: rc.c:151
+msgid "6th external browser"
+msgstr "Sechster externer browser"
+
+#: rc.c:152
+msgid "7th external browser"
+msgstr "Siebter externer browser"
+
+#: rc.c:153
+msgid "8th external browser"
+msgstr "Achter externer browser"
+
+#: rc.c:154
+msgid "9th external browser"
+msgstr "Neunter externer browser"
+
+# entsprechend file:///usr/share/doc/w3m/README.passwd
+# Prüfung beanstandete auch passwd_file mit Zugriffbytes 600, mh, 05.10.2014
+#: rc.c:155
+msgid "Disable secret file security check"
+msgstr "Keine Prüfung der Sicherheit bei Dateien mit geheimem Inhalt"
+
+#: rc.c:156
+msgid "Password file"
+msgstr "Passwort-Datei"
+
+#: rc.c:157
+msgid "File for setting form on loading"
+msgstr "Datei mit vordefinierten Eingaben für Formulare"
+
+#: rc.c:158
+msgid "File for preferences for each site"
+msgstr "Datei mit adress-spezifischen Voreinstellungen"
+
+#: rc.c:159
+msgid "Password for anonymous FTP (your mail address)"
+msgstr "Passwort für anonyme FTP-Anmeldung (Ihre Mailadresse)"
+
+#: rc.c:160
+msgid "Generate domain part of password for FTP"
+msgstr "Domain-Teil des FTP-Passwortes erzeugen"
+
+#: rc.c:161
+msgid "User-Agent identification string"
+msgstr "Browserkennung übermitteln"
+
+#: rc.c:162
+msgid "Accept-Encoding header"
+msgstr "Accept-Encoding-Kopfzeile"
+
+#: rc.c:163
+msgid "Accept header"
+msgstr "Accept-Kopfzeile"
+
+#: rc.c:164
+msgid "Accept-Language header"
+msgstr "Accept-Language-Kopfzeile"
+
+#: rc.c:165
+msgid "Treat URL-like strings as links in all pages"
+msgstr "URL-artige Zeichenketten auf allen Seiten als Links auffassen"
+
+#: rc.c:166
+msgid "Wrap search"
+msgstr "Im Dokument umlaufend suchen"
+
+#: rc.c:167
+msgid "Display unseen objects (e.g. bgimage tag)"
+msgstr "Nicht gezeigte Objekte melden (z.B. Hintergrundbild)"
+
+#: rc.c:168
+msgid "Uncompress compressed data automatically when downloading"
+msgstr "Komprimierte Daten beim Download selbstständig dekomprimieren"
+
+# String nicht in Optionen-Menü gefunden. mh, 05.10.2014
+#: rc.c:170
+msgid "Run external viewer in a separate session"
+msgstr "Externe Anzeigeprogramme in eigener Sitzung laufen lassen"
+
+#: rc.c:172
+msgid "Run external viewer in the background"
+msgstr "Externe Anzeigeprogramme im Hintergrund laufen lassen"
+
+#: rc.c:174
+msgid "Use external program for directory listing"
+msgstr "Externes Programm zum Auflisten von Verzeichnissen verwenden"
+
+#: rc.c:175
+msgid "URL of directory listing command"
+msgstr "URL des Befehls zum Auflisten von Verzeichnissen"
+
+#: rc.c:177
+msgid "Enable dictionary lookup through CGI"
+msgstr "Wörterbuchabfrage mittels CGI aktivieren"
+
+#: rc.c:178
+msgid "URL of dictionary lookup command"
+msgstr "URL des Befehls zur Wörterbuch-Abfrage"
+
+#: rc.c:180
+msgid "Display link name for images lacking ALT"
+msgstr "Bei Bildern ohne ALT-Angabe Linkziel anzeigen"
+
+#: rc.c:181
+msgid "Index file for directories"
+msgstr "Indexdatei für Verzeichnisse"
+
+#: rc.c:182
+msgid "Prepend http:// to URL automatically"
+msgstr "Ziel-Eingaben gegebenenfalls http:// voranstellen"
+
+#: rc.c:183
+msgid "Default value for open-URL command"
+msgstr "Vorgabewert bei der Adresseneingabe"
+
+#: rc.c:184
+msgid "Decode Content-Transfer-Encoding when saving"
+msgstr "Beim Speichern entsprechend Content-Transfer-Encoding entschlüsseln"
+
+#: rc.c:185
+msgid "Preserve timestamp when saving"
+msgstr "Zeitstempel beim Speichern erhalten"
+
+#: rc.c:187
+msgid "Enable mouse"
+msgstr "Maus aktivieren"
+
+#: rc.c:188
+msgid "Scroll in reverse direction of mouse drag"
+msgstr "Mausbewegungen entgegengesetzt scrollen"
+
+#: rc.c:189
+msgid "Behavior of wheel scroll speed"
+msgstr "Umsetzung der Mausradbewegung"
+
+#: rc.c:190
+msgid "(A only)Scroll by # (%) of screen"
+msgstr "(nur A) Um # % des Fensters scrollen"
+
+#: rc.c:191
+msgid "(B only)Scroll by # lines"
+msgstr "(nur B) Um # Zeilen scrollen"
+
+#: rc.c:193
+msgid "Free memory of undisplayed buffers"
+msgstr "Speicherplatz nicht angezeigter Puffer freigeben"
+
+#: rc.c:194
+msgid "Suppress `Referer:' header"
+msgstr "Referer-Kopfzeile unterdrücken"
+
+#: rc.c:195
+msgid "Search case-insensitively"
+msgstr "Groß- und Kleinschreibung beim Suchen ignorieren"
+
+#: rc.c:196
+msgid "Use LESSOPEN"
+msgstr "LESSOPEN verwenden"
+
+#: rc.c:199
+msgid "Perform SSL server verification"
+msgstr "SSL-Server-Verifizierung durchführen"
+
+#: rc.c:200
+msgid "PEM encoded certificate file of client"
+msgstr "PEM-kodierte Zertifikatsdatei des Clients"
+
+#: rc.c:201
+msgid "PEM encoded private key file of client"
+msgstr "PEM-kodierte private Schlüsseldatei des Clients"
+
+#: rc.c:202
+msgid "Path to directory for PEM encoded certificates of CAs"
+msgstr "Pfad zum Verzeichnis für PEM-kodierte Zertifikate von CAs"
+
+#: rc.c:203
+msgid "File consisting of PEM encoded certificates of CAs"
+msgstr "Datei mit PEM-kodierten Zertifikaten von CAs"
+
+#: rc.c:205
+msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
+msgstr "Liste unzulässiger SSL-Verfahren (2: SSLv2, 3: SSLv3, t: TLSv1)"
+
+#: rc.c:208
+msgid "Enable cookie processing"
+msgstr "Cookie-Verarbeitung aktivieren"
+
+#: rc.c:209
+msgid "Print a message when receiving a cookie"
+msgstr "Den Empfang von Cookies melden"
+
+#: rc.c:210
+msgid "Accept cookies"
+msgstr "Cookies akzeptieren"
+
+#: rc.c:211
+msgid "Action to be taken on invalid cookie"
+msgstr "Reaktion auf ungültiges Cookie"
+
+#: rc.c:212
+msgid "Domains to reject cookies from"
+msgstr "Domains, deren Cookies abzulehnen sind"
+
+#: rc.c:213
+msgid "Domains to accept cookies from"
+msgstr "Domains, deren Cookies akzeptiert werden"
+
+# Variable vom Typ String im Abschnitt Cookies-Einstellungen, mh 10.10.2014
+#: rc.c:214
+msgid "Domains to avoid [wrong number of dots]"
+msgstr "Zu meidende Domains (falsche Anzahl von Punkten)"
+
+#: rc.c:216
+msgid "Number of redirections to follow"
+msgstr "Anzahl zu akzeptierender Umleitungen"
+
+# Konfigurationsvariable vom Typ string, mh, 05.10.2014
+#: rc.c:217
+msgid "Enable processing of meta-refresh tag"
+msgstr "Meta-Refresh-Element verarbeiten"
+
+#: rc.c:220
+msgid "Enable Migemo (Roma-ji search)"
+msgstr "Romaji-Suche mittels Migemo aktivieren"
+
+#: rc.c:221
+msgid "Migemo command"
+msgstr "Migemo-Befehl"
+
+#: rc.c:225
+msgid "Display charset"
+msgstr "Zeichenkodierung der Anzeige"
+
+#: rc.c:226
+msgid "Default document charset"
+msgstr "Zeichenkodierungs-Vorgabe für Dokumente"
+
+#: rc.c:227
+msgid "Automatic charset detect when loading"
+msgstr "Selbstständige Erkennung der Zeichenkodierung beim Laden"
+
+#: rc.c:228
+msgid "System charset"
+msgstr "Zeichenkodierung des Systems"
+
+#: rc.c:229
+msgid "System charset follows locale(LC_CTYPE)"
+msgstr "Zeichenkodierung des Systems entsprechend Locale (LC_CTYPE)"
+
+# war zuvor
+# msgstr "Halfdump mit der zur Anzeige benutzten Zeichenkodierung exportieren"
+#: rc.c:230
+msgid "Output halfdump with display charset"
+msgstr "Halfdump in der zur Anzeige benutzten Kodierung"
+
+# Konfigurationsvariable vom Typ boolean, mh, 05.10.2014
+#: rc.c:231
+msgid "Use multi column characters"
+msgstr "Spaltenübergreifende Zeichen verwenden"
+
+#: rc.c:232
+msgid "Use combining characters"
+msgstr "Kombinationszeichen verwenden"
+
+#: rc.c:233
+msgid "Use double width for some Unicode characters"
+msgstr "Einzelnen Unicode-Zeichen zwei Spalten einräumen"
+
+#: rc.c:234
+msgid "Use Unicode language tags"
+msgstr "Unicode-Sprach-Tags verwenden"
+
+#: rc.c:235
+msgid "Charset conversion using Unicode map"
+msgstr "Zeichen in Unicode kodieren"
+
+#: rc.c:236
+msgid "Charset conversion when loading"
+msgstr "Zeichenkodierung beim Laden anpassen"
+
+#: rc.c:237
+msgid "Adjust search string for document charset"
+msgstr "Zu suchende Zeichenkette der Kodierung des Dokumentes anpassen"
+
+#: rc.c:238
+msgid "Fix character width when conversion"
+msgstr "Bei Umwandlung an der Breite von Zeichen festhalten"
+
+#: rc.c:239
+msgid "Use GB 12345 Unicode map instead of GB 2312's"
+msgstr "GB-12345-Unicode statt GB 2312 verwenden"
+
+#: rc.c:240
+msgid "Use JIS X 0201 Roman for ISO-2022-JP"
+msgstr "JIS X 0201 Roman statt ISO-2022-JP verwenden"
+
+#: rc.c:241
+msgid "Use JIS C 6226:1978 for ISO-2022-JP"
+msgstr "JIS C 6226:1978 statt ISO-2022-JP verwenden"
+
+#: rc.c:242
+msgid "Use JIS X 0201 Katakana"
+msgstr "JIS X 0201 Katakana verwenden"
+
+#: rc.c:243
+msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
+msgstr "JIS X 0212:1990 verwenden (ergänzendes Kanji)"
+
+#: rc.c:244
+msgid "Use JIS X 0213:2000 (2000JIS)"
+msgstr "JIS X 0213:2000 verwenden (2000JIS)"
+
+#: rc.c:245
+msgid "Strict ISO-2022-JP/KR/CN"
+msgstr "Striktes ISO-2022-JP/KR/CN"
+
+#: rc.c:246
+msgid "Treat 4 bytes char. of GB18030 as Unicode"
+msgstr "4-Byte-Zeichen von GB 18030 als Unicode auffassen"
+
+#: rc.c:247
+msgid "Simple Preserve space"
+msgstr "Einfache Platzerhaltung"
+
+#: rc.c:250
+msgid "keymap file"
+msgstr "Tastaturbelegungs-Datei"
+
+#: rc.c:267
+msgid "black"
+msgstr "schwarz"
+
+#: rc.c:268
+msgid "red"
+msgstr "rot"
+
+#: rc.c:269
+msgid "green"
+msgstr "grün"
+
+#: rc.c:270
+msgid "yellow"
+msgstr "gelb"
+
+#: rc.c:271
+msgid "blue"
+msgstr "blau"
+
+#: rc.c:272
+msgid "magenta"
+msgstr "magenta"
+
+#: rc.c:273
+msgid "cyan"
+msgstr "cyan"
+
+#: rc.c:274
+msgid "white"
+msgstr "weiß"
+
+#: rc.c:275
+msgid "terminal"
+msgstr "wie Terminal"
+
+#: rc.c:294
+msgid "none"
+msgstr "keiner"
+
+#: rc.c:295
+msgid "current URL"
+msgstr "aktuelle URL"
+
+#: rc.c:296
+msgid "link URL"
+msgstr "Link-URL"
+
+#: rc.c:301
+msgid "simple"
+msgstr "einfach"
+
+#: rc.c:302
+msgid "use tag"
+msgstr "durch Tags"
+
+#: rc.c:303
+msgid "fontify"
+msgstr "hervorgehoben"
+
+#: rc.c:309
+msgid "A:relative to screen height"
+msgstr "A: relativ zu Fensterhöhe"
+
+#: rc.c:310
+msgid "B:fixed speed"
+msgstr "B: feste Geschwindigkeit"
+
+#: rc.c:317
+msgid "unspecified"
+msgstr "nicht spezifiziert"
+
+#: rc.c:318
+msgid "inet inet6"
+msgstr "inet inet6"
+
+#: rc.c:319
+msgid "inet6 inet"
+msgstr "inet6 inet"
+
+#: rc.c:320
+msgid "inet only"
+msgstr "nur inet"
+
+#: rc.c:321
+msgid "inet6 only"
+msgstr "nur inet6"
+
+#: rc.c:328
+msgid "discard"
+msgstr "verwerfen"
+
+#: rc.c:330
+msgid "accept"
+msgstr "annehmen"
+
+#: rc.c:332
+msgid "ask"
+msgstr "nachfragen"
+
+# gehört zu rc.c:142
+# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014
+#: rc.c:339
+msgid "use internal mailer instead"
+msgstr "Mail intern erstellen"
+
+# gehört zu rc.c:142
+# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014
+#: rc.c:341
+msgid "ignore options and use only the address"
+msgstr "Optionen ignorieren"
+
+# gehört zu rc.c:142
+# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014
+#: rc.c:342
+msgid "use full mailto URL"
+msgstr "komplett verwenden"
+
+#: rc.c:351
+msgid "OFF"
+msgstr "AUS"
+
+#: rc.c:352
+msgid "Only ISO 2022"
+msgstr "Nur ISO-2022"
+
+#: rc.c:353
+msgid "ON"
+msgstr "AN"
+
+# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014 
+#: rc.c:359
+msgid "ASCII"
+msgstr "ASCII"
+
+# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014 
+# hier ist "Zeichensatz" akzeptabel mh, 09.10.2014
+#: rc.c:360
+msgid "charset specific"
+msgstr "zeichensatzspezifisch"
+
+# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014 
+#: rc.c:361
+msgid "DEC special graphics"
+msgstr "mit DEC-Grafiken"
+
+#: rc.c:740
+msgid "Display Settings"
+msgstr "Einstellungen zur Anzeige"
+
+#: rc.c:742
+msgid "Color Settings"
+msgstr "Farbeinstellungen"
+
+#: rc.c:744
+msgid "Miscellaneous Settings"
+msgstr "Weitere Einstellungen"
+
+#: rc.c:745
+msgid "Directory Settings"
+msgstr "Verzeichnis-Einstellungen"
+
+#: rc.c:746
+msgid "External Program Settings"
+msgstr "Einstellungen für externe Programme"
+
+#: rc.c:747
+msgid "Network Settings"
+msgstr "Netzwerk-Einstellungen"
+
+#: rc.c:748
+msgid "Proxy Settings"
+msgstr "Proxy-Einstellungen"
+
+#: rc.c:750
+msgid "SSL Settings"
+msgstr "SSL-Einstellungen"
+
+#: rc.c:753
+msgid "Cookie Settings"
+msgstr "Cookie-Einstellungen"
+
+#: rc.c:756
+msgid "Charset Settings"
+msgstr "Zeichenkodierungs-Einstellungen"
+
+#. TRANSLATORS:
+#. * AcceptLang default: this is used in Accept-Language: HTTP request
+#. * header. For example, ja.po should translate it as
+#. * "ja;q=1.0, en;q=0.5" like that.
+#.
+#: rc.c:1238
+msgid "en;q=1.0"
+msgstr "de;q=1.0, en;q=0.5"
diff --git a/po/ja.po b/po/ja.po
index d67c695..3810d30 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -1,6 +1,6 @@
 # Japanese translations for w3m package
 # w3m パッケージに対する英訳.
-# Copyright (C) 2003 THE w3m'S COPYRIGHT HOLDER
+# Copyright (C) 2015 THE w3m'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the w3m package.
 # Fumitoshi UKAI <ukai@debian.or.jp>, 2003.
 #
@@ -8,865 +8,897 @@ msgid ""
 msgstr ""
 "Project-Id-Version: w3m 0.5.3\n"
 "Report-Msgid-Bugs-To: satodai@w3m.jp\n"
-"POT-Creation-Date: 2010-08-20 18:44+0900\n"
-"PO-Revision-Date: 2010-08-20 18:45+0900\n"
-"Last-Translator: Fumitoshi UKAI <ukai@debian.or.jp>\n"
+"POT-Creation-Date: 2016-03-14 19:47+0900\n"
+"PO-Revision-Date: 2016-03-14 19:51+0900\n"
+"Last-Translator: Tatsuya Kinoshita <tats@debian.org>\n"
 "Language-Team: Japanese\n"
-"Language: \n"
+"Language: ja\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: menu.c:267
+#: menu.c:269
 msgid " Back         (b) "
 msgstr "戻る         (b)"
 
-#: menu.c:268
+#: menu.c:270
 msgid " Select Buffer(s) "
 msgstr "バッファ選択 (s)"
 
-#: menu.c:270
+#: menu.c:272
 msgid " Select Tab   (t) "
 msgstr "タブ選択     (t)"
 
-#: menu.c:272
+#: menu.c:274
 msgid " View Source  (v) "
 msgstr "ソースを表示 (v)"
 
-#: menu.c:273
+#: menu.c:275
 msgid " Edit Source  (e) "
 msgstr "ソースを編集 (e)"
 
-#: menu.c:274
+#: menu.c:276
 msgid " Save Source  (S) "
 msgstr "ソースを保存 (S)"
 
-#: menu.c:275
+#: menu.c:277
 msgid " Reload       (r) "
 msgstr "再読み込み   (r)"
 
-#: menu.c:276 menu.c:283 menu.c:287
+#: menu.c:278 menu.c:285 menu.c:289
 msgid " ---------------- "
 msgstr "----------------"
 
-#: menu.c:277
+#: menu.c:279
 msgid " Go Link      (a) "
 msgstr "リンクを表示 (a)"
 
-#: menu.c:278
+#: menu.c:280
 msgid "   on New Tab (n) "
 msgstr "新タブで表示 (n)"
 
-#: menu.c:279
+#: menu.c:281
 msgid " Save Link    (A) "
 msgstr "リンクを保存 (A)"
 
-#: menu.c:280
+#: menu.c:282
 msgid " View Image   (i) "
 msgstr "画像を表示   (i)"
 
-#: menu.c:281
+#: menu.c:283
 msgid " Save Image   (I) "
 msgstr "画像を保存   (I)"
 
-#: menu.c:282
+#: menu.c:284
 msgid " View Frame   (f) "
 msgstr "フレーム表示 (f)"
 
-#: menu.c:284
+#: menu.c:286
 msgid " Bookmark     (B) "
 msgstr "ブックマーク (B)"
 
-#: menu.c:285
+#: menu.c:287
 msgid " Help         (h) "
 msgstr "ヘルプ       (h)"
 
-#: menu.c:286
+#: menu.c:288
 msgid " Option       (o) "
 msgstr "オプション   (o)"
 
-#: menu.c:288
+#: menu.c:290
 msgid " Quit         (q) "
 msgstr "終了         (q)"
 
-#: rc.c:60
+#: rc.c:62
 msgid "External Viewer Setup"
 msgstr "外部ビューアの編集"
 
-#: rc.c:61
+#: rc.c:63
 msgid "Tab width in characters"
 msgstr "タブ幅"
 
-#: rc.c:62
+#: rc.c:64
 msgid "Indent for HTML rendering"
 msgstr "HTML整形時のインデント幅"
 
-#: rc.c:63
+#: rc.c:65
 msgid "Number of pixels per character (4.0...32.0)"
 msgstr "文字幅 (4.0...32.0)"
 
-#: rc.c:64
+#: rc.c:66
 msgid "Number of pixels per line (4.0...64.0)"
 msgstr "一行の高さ (4.0...64.0)"
 
-#: rc.c:65
+#: rc.c:67
 msgid "Number of remembered lines when used as a pager"
 msgstr "ページャとして利用した時に保存される行数"
 
-#: rc.c:66
+#: rc.c:68
 msgid "Use URL history"
 msgstr "履歴を使う"
 
-#: rc.c:67
+#: rc.c:69
 msgid "Number of remembered URL"
 msgstr "保持するURL履歴の数"
 
-#: rc.c:68
+#: rc.c:70
 msgid "Save URL history"
 msgstr "URL履歴の保存"
 
-#: rc.c:69
+#: rc.c:71
 msgid "Render frames automatically"
 msgstr "フレームの自動表示"
 
-#: rc.c:70
+#: rc.c:72
 msgid "Treat argument without scheme as URL"
 msgstr "scheme のない引数も URL とみなす"
 
-#: rc.c:71
+#: rc.c:73
 msgid "Use _self as default target"
 msgstr "targetが未指定の場合に_selfを使用する"
 
-#: rc.c:72
+#: rc.c:74
 msgid "Open link on new tab if target is _blank or _new"
 msgstr "targetが_blankか_newの場合は新しいタブで開く"
 
-#: rc.c:73
+#: rc.c:75
 msgid "Open download list panel on new tab"
 msgstr "Download list panel を新しいタブで開く"
 
-#: rc.c:74
+#: rc.c:76
 msgid "Display link URL automatically"
 msgstr "リンク先の自動表示"
 
-#: rc.c:75
+#: rc.c:77
 msgid "Display link numbers"
 msgstr "リンク番号の表示"
 
-#: rc.c:76
+#: rc.c:78
 msgid "Display decoded URL"
 msgstr "URLをデコードして表示"
 
-#: rc.c:77
+#: rc.c:79
 msgid "Display current line number"
 msgstr "現在の行番号の表示"
 
-#: rc.c:78
+#: rc.c:80
 msgid "Display inline images"
 msgstr "インライン画像を表示"
 
-#: rc.c:79
+#: rc.c:81
 msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
 msgstr "ALT または TITLE がない画像の代替テキスト表示"
 
-#: rc.c:81
+#: rc.c:83
 msgid "Load inline images automatically"
 msgstr "インライン画像を自動で読み込む"
 
-#: rc.c:82
+#: rc.c:84
 msgid "Maximum processes for parallel image loading"
 msgstr "画像読み込み時の最大プロセス数"
 
-#: rc.c:83
+#: rc.c:85
 msgid "Use external image viewer"
 msgstr "画像を外部ビューワで表示"
 
-#: rc.c:84
+#: rc.c:86
 msgid "Scale of image (%)"
 msgstr "画像のスケール(%)"
 
-#: rc.c:85
+#: rc.c:87
 msgid "External command to display image"
 msgstr "画像を表示するためのコマンド"
 
-#: rc.c:86
+#: rc.c:88
 msgid "Use link list of image map"
 msgstr "イメージマップのリンク先一覧を表示"
 
-#: rc.c:88
+#: rc.c:90
 msgid "Display file names in multi-column format"
 msgstr "ファイル名のマルチカラム表示"
 
-#: rc.c:89
+#: rc.c:91
 msgid "Use ASCII equivalents to display entities"
 msgstr "エンティティを ASCII の代替表現で表す"
 
-#: rc.c:90
+#: rc.c:92
 msgid "Character type for border of table and menu"
 msgstr "テーブルやメニューの枠に使う文字"
 
-#: rc.c:91
+#: rc.c:93
+msgid "Display table borders, ignore value of BORDER"
+msgstr "BORDER の値は無視してテーブル枠を表示"
+
+#: rc.c:94
 msgid "Fold lines in TEXTAREA"
 msgstr "TEXTAREA の行を折り返して表示"
 
-#: rc.c:92
+#: rc.c:95
 msgid "Display INS, DEL, S and STRIKE element"
 msgstr "INS, DEL, S, STRIKE 要素の表示"
 
-#: rc.c:93
+#: rc.c:96
 msgid "Display with color"
 msgstr "カラー表示"
 
-#: rc.c:94
+#: rc.c:97
 msgid "Color of normal character"
 msgstr "文字の色"
 
-#: rc.c:95
+#: rc.c:98
 msgid "Color of anchor"
 msgstr "アンカーの色"
 
-#: rc.c:96
+#: rc.c:99
 msgid "Color of image link"
 msgstr "画像リンクの色"
 
-#: rc.c:97
+#: rc.c:100
 msgid "Color of form"
 msgstr "フォームの色"
 
-#: rc.c:98
+#: rc.c:101
 msgid "Enable coloring of active link"
 msgstr "現在選択されているリンクの色を指定する"
 
-#: rc.c:99
+#: rc.c:102
 msgid "Color of currently active link"
 msgstr "現在選択されているリンクの色"
 
-#: rc.c:100
+#: rc.c:103
 msgid "Use visited link color"
 msgstr "訪れたことがあるリンクは色を変える"
 
-#: rc.c:101
+#: rc.c:104
 msgid "Color of visited link"
 msgstr "訪れたことがあるリンクの色"
 
-#: rc.c:102
+#: rc.c:105
 msgid "Color of background"
 msgstr "背景の色"
 
-#: rc.c:103
+#: rc.c:106
 msgid "Color of mark"
 msgstr "マークの色"
 
-#: rc.c:104
+#: rc.c:107
 msgid "Use proxy"
 msgstr "プロキシを使用する"
 
-#: rc.c:105
+#: rc.c:108
 msgid "URL of HTTP proxy host"
 msgstr "HTTPプロキシ(URLで入力)"
 
-#: rc.c:107
+#: rc.c:110
 msgid "URL of HTTPS proxy host"
 msgstr "HTTPSプロキシ(URLで入力)"
 
-#: rc.c:110
+#: rc.c:113
 msgid "URL of GOPHER proxy host"
 msgstr "GOPHERプロキシ(URLで入力)"
 
-#: rc.c:112
+#: rc.c:115
 msgid "URL of FTP proxy host"
 msgstr "FTPプロキシ(URLで入力)"
 
-#: rc.c:113
+#: rc.c:116
 msgid "Domains to be accessed directly (no proxy)"
 msgstr "プロキシから除外するドメイン"
 
-#: rc.c:114
+#: rc.c:117
 msgid "Check noproxy by network address"
 msgstr "ネットワークアドレスでプロキシ除外のチェック"
 
-#: rc.c:115
+#: rc.c:118
 msgid "Disable cache"
 msgstr "Cache を使わない"
 
-#: rc.c:117
+#: rc.c:120
 msgid "News server"
 msgstr "News サーバ"
 
-#: rc.c:118
+#: rc.c:121
 msgid "Mode of news server"
 msgstr "News サーバのモード"
 
-#: rc.c:119
+#: rc.c:122
 msgid "Number of news messages"
 msgstr "News を一覧表示する時の数"
 
-#: rc.c:121
+#: rc.c:124
 msgid "Order of name resolution"
 msgstr "名前解決の順序"
 
-#: rc.c:122
+#: rc.c:125
 msgid "Directory corresponding to / (document root)"
 msgstr "/ で表されるディレクトリ(document root)"
 
-#: rc.c:123
+#: rc.c:126
 msgid "Directory corresponding to /~user"
 msgstr "/~user で表されるディレクトリ"
 
-#: rc.c:124
+#: rc.c:127
 msgid "Directory corresponding to /cgi-bin"
 msgstr "/cgi-bin で表されるディレクトリ"
 
-#: rc.c:125
+#: rc.c:128
 msgid "Confirm when quitting with q"
 msgstr "q での終了時に確認する"
 
-#: rc.c:126
+#: rc.c:129
 msgid "Close tab if buffer is last when back"
 msgstr "戻る時にバッファが最後ならタブを閉じる"
 
-#: rc.c:128
+#: rc.c:131
 msgid "Enable mark operations"
 msgstr "マーク機能を有効にする"
 
-#: rc.c:130
+#: rc.c:133
 msgid "Enable Emacs-style line editing"
 msgstr "Emacs風の行編集にする"
 
-#: rc.c:131
+#: rc.c:134
 msgid "Enable vi-like numeric prefix"
 msgstr "vi風の数値プレフィクス"
 
-#: rc.c:132
+#: rc.c:135
 msgid "Move cursor to top line when going to label"
 msgstr "ラベルに移動する時にカーソルがトップになるようにする"
 
-#: rc.c:133
+#: rc.c:136
 msgid "Move cursor to top line when moving to next page"
 msgstr "次のページに移動する時にカーソルがトップになるようにする"
 
-#: rc.c:134
+#: rc.c:137
 msgid "Fold lines of plain text file"
 msgstr "plain text ファイルの行を折り返す"
 
-#: rc.c:135
+#: rc.c:138
 msgid "Show line numbers"
 msgstr "行番号を表示する"
 
-#: rc.c:136
+#: rc.c:139
 msgid "Show search string"
 msgstr "検索文字列を表示する"
 
-#: rc.c:137
+#: rc.c:140
 msgid "List of mime.types files"
 msgstr "利用するmime.types"
 
-#: rc.c:138
+#: rc.c:141
 msgid "List of mailcap files"
 msgstr "利用するmailcap"
 
-#: rc.c:139
+#: rc.c:142
 msgid "List of urimethodmap files"
 msgstr "利用するurimethodmap"
 
-#: rc.c:140
+#: rc.c:143
 msgid "Editor"
 msgstr "利用するエディタ"
 
-#: rc.c:141
+#: rc.c:144
 msgid "Mailer"
 msgstr "利用するメーラ"
 
-#: rc.c:142
+#: rc.c:145
 msgid "How to call Mailer for mailto URLs with options"
 msgstr "mailto タグの取り扱い"
 
-#: rc.c:143
-msgid "External Browser"
+#: rc.c:146
+msgid "External browser"
 msgstr "外部ブラウザ"
 
-#: rc.c:144
-msgid "Second External Browser"
+#: rc.c:147
+msgid "2nd external browser"
 msgstr "外部ブラウザその2"
 
-#: rc.c:145
-msgid "Third External Browser"
+#: rc.c:148
+msgid "3rd external browser"
 msgstr "外部ブラウザその3"
 
-#: rc.c:146
+#: rc.c:149
+msgid "4th external browser"
+msgstr "外部ブラウザその4"
+
+#: rc.c:150
+msgid "5th external browser"
+msgstr "外部ブラウザその5"
+
+#: rc.c:151
+msgid "6th external browser"
+msgstr "外部ブラウザその6"
+
+#: rc.c:152
+msgid "7th external browser"
+msgstr "外部ブラウザその7"
+
+#: rc.c:153
+msgid "8th external browser"
+msgstr "外部ブラウザその8"
+
+#: rc.c:154
+msgid "9th external browser"
+msgstr "外部ブラウザその9"
+
+#: rc.c:155
 msgid "Disable secret file security check"
 msgstr "パスワードファイルのパーミッションをチェックしない"
 
-#: rc.c:147
+#: rc.c:156
 msgid "Password file"
 msgstr "パスワードファイル"
 
-#: rc.c:148
+#: rc.c:157
 msgid "File for setting form on loading"
 msgstr "文書読込時のフォーム設定用ファイル"
 
-#: rc.c:149
+#: rc.c:158
+msgid "File for preferences for each site"
+msgstr "サイト別設定のファイル"
+
+#: rc.c:159
 msgid "Password for anonymous FTP (your mail address)"
 msgstr "FTPのパスワード(普通は自分のmail addressを使う)"
 
-#: rc.c:150
+#: rc.c:160
 msgid "Generate domain part of password for FTP"
 msgstr "FTPのパスワードのドメイン名を自動生成する"
 
-#: rc.c:151
+#: rc.c:161
 msgid "User-Agent identification string"
 msgstr "User-Agent"
 
-#: rc.c:152
+#: rc.c:162
 msgid "Accept-Encoding header"
 msgstr "圧縮方法(Accept-Encoding:)"
 
-#: rc.c:153
+#: rc.c:163
 msgid "Accept header"
 msgstr "受けつけるメディアタイプ(Accept:)"
 
-#: rc.c:154
+#: rc.c:164
 msgid "Accept-Language header"
 msgstr "受けつける言語(Accept-Language:)"
 
-#: rc.c:155
+#: rc.c:165
 msgid "Treat URL-like strings as links in all pages"
 msgstr "全てのページのURL風の文字列をリンクにする"
 
-#: rc.c:156
+#: rc.c:166
 msgid "Wrap search"
 msgstr "折り返し検索"
 
-#: rc.c:157
+#: rc.c:167
 msgid "Display unseen objects (e.g. bgimage tag)"
 msgstr "背景画像等へのリンクを作る"
 
-#: rc.c:158
+#: rc.c:168
 msgid "Uncompress compressed data automatically when downloading"
 msgstr "ダウンロード時に自動的に圧縮されたデータを解凍する"
 
-#: rc.c:160
+#: rc.c:170
 msgid "Run external viewer in a separate session"
 msgstr "外部ビューアを別セッションで動かす"
 
-#: rc.c:162
+#: rc.c:172
 msgid "Run external viewer in the background"
 msgstr "外部ビューアをバックグラウンドで動かす"
 
-#: rc.c:164
+#: rc.c:174
 msgid "Use external program for directory listing"
 msgstr "ディレクトリリストに外部コマンドを使う"
 
-#: rc.c:165
+#: rc.c:175
 msgid "URL of directory listing command"
 msgstr "ディレクトリリスト用コマンド"
 
-#: rc.c:167
+#: rc.c:177
 msgid "Enable dictionary lookup through CGI"
 msgstr "辞書引きをCGI経由でおこなう"
 
-#: rc.c:168
+#: rc.c:178
 msgid "URL of dictionary lookup command"
 msgstr "辞書引きコマンドのURL"
 
-#: rc.c:170
+#: rc.c:180
 msgid "Display link name for images lacking ALT"
 msgstr "空のIMG ALT属性の時にリンク名を表示する"
 
-#: rc.c:171
+#: rc.c:181
 msgid "Index file for directories"
 msgstr "各ディレクトリのインデックスファイル"
 
-#: rc.c:172
+#: rc.c:182
 msgid "Prepend http:// to URL automatically"
 msgstr "URLに自動的に http:// を補う"
 
-#: rc.c:173
+#: rc.c:183
 msgid "Default value for open-URL command"
 msgstr "URLを開く時のデフォルト文字列"
 
-#: rc.c:174
+#: rc.c:184
 msgid "Decode Content-Transfer-Encoding when saving"
 msgstr "保存時に Content-Transfer-Encoding をデコードする"
 
-#: rc.c:175
+#: rc.c:185
 msgid "Preserve timestamp when saving"
 msgstr "保存時にタイムスタンプを保持する"
 
-#: rc.c:177
+#: rc.c:187
 msgid "Enable mouse"
 msgstr "マウスを使う"
 
-#: rc.c:178
+#: rc.c:188
 msgid "Scroll in reverse direction of mouse drag"
 msgstr "マウスのドラッグ動作を逆にする"
 
-#: rc.c:179
+#: rc.c:189
 msgid "Behavior of wheel scroll speed"
 msgstr "ホイールでのスクロール速度の扱い"
 
-#: rc.c:180
+#: rc.c:190
 msgid "(A only)Scroll by # (%) of screen"
 msgstr "(Aのみ)画面の何%スクロールするか"
 
-#: rc.c:181
+#: rc.c:191
 msgid "(B only)Scroll by # lines"
 msgstr "(Bのみ)スクロールする行数"
 
-#: rc.c:183
+#: rc.c:193
 msgid "Free memory of undisplayed buffers"
 msgstr "表示されていないバッファのメモリを解放する"
 
-#: rc.c:184
+#: rc.c:194
 msgid "Suppress `Referer:' header"
 msgstr "Referer: を送らないようにする"
 
-#: rc.c:185
+#: rc.c:195
 msgid "Search case-insensitively"
 msgstr "サーチ時に大文字小文字の区別をしない"
 
-#: rc.c:186
+#: rc.c:196
 msgid "Use LESSOPEN"
 msgstr "LESSOPENを使用"
 
-#: rc.c:189
+#: rc.c:199
 msgid "Perform SSL server verification"
 msgstr "SSLのサーバ認証を行う"
 
-#: rc.c:190
+#: rc.c:200
 msgid "PEM encoded certificate file of client"
 msgstr "SSLのクライアント用PEM形式証明書ファイル"
 
-#: rc.c:191
+#: rc.c:201
 msgid "PEM encoded private key file of client"
 msgstr "SSLのクライアント用PEM形式秘密鍵ファイル"
 
-#: rc.c:192
+#: rc.c:202
 msgid "Path to directory for PEM encoded certificates of CAs"
 msgstr "SSLの認証局のPEM形式証明書群のあるディレクトリへのパス"
 
-#: rc.c:193
+#: rc.c:203
 msgid "File consisting of PEM encoded certificates of CAs"
 msgstr "SSLの認証局のPEM形式証明書群のファイル"
 
-#: rc.c:195
+#: rc.c:205
 msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
 msgstr "使わないSSLメソッドのリスト(2: SSLv2, 3: SSLv3, t:TLSv1)"
 
-#: rc.c:198
+#: rc.c:208
 msgid "Enable cookie processing"
 msgstr "クッキーを使用する"
 
-#: rc.c:199
+#: rc.c:209
 msgid "Print a message when receiving a cookie"
 msgstr "クッキーを受け付けたときにメッセージを表示する"
 
-#: rc.c:200
+#: rc.c:210
 msgid "Accept cookies"
 msgstr "クッキーを受け付ける"
 
-#: rc.c:201
+#: rc.c:211
 msgid "Action to be taken on invalid cookie"
 msgstr "問題のあるクッキーでも受け付ける"
 
-#: rc.c:202
+#: rc.c:212
 msgid "Domains to reject cookies from"
 msgstr "クッキーを受け付けないドメイン"
 
-#: rc.c:203
+#: rc.c:213
 msgid "Domains to accept cookies from"
 msgstr "クッキーを受け付けるドメイン"
 
-#: rc.c:204
+#: rc.c:214
 msgid "Domains to avoid [wrong number of dots]"
 msgstr "[wrong number of dots] を無視するドメイン"
 
-#: rc.c:206
+#: rc.c:216
 msgid "Number of redirections to follow"
 msgstr "従うリダイレクトの回数"
 
-#: rc.c:207
+#: rc.c:217
 msgid "Enable processing of meta-refresh tag"
 msgstr "meta refresh に対応する"
 
-#: rc.c:210
+#: rc.c:220
 msgid "Enable Migemo (Roma-ji search)"
 msgstr "Migemo(ローマ字検索)を使用する"
 
-#: rc.c:211
+#: rc.c:221
 msgid "Migemo command"
 msgstr "Migemoコマンド"
 
-#: rc.c:215
+#: rc.c:225
 msgid "Display charset"
 msgstr "表示用文字コード"
 
-#: rc.c:216
+#: rc.c:226
 msgid "Default document charset"
 msgstr "文書の標準の文字コード"
 
-#: rc.c:217
+#: rc.c:227
 msgid "Automatic charset detect when loading"
 msgstr "文書の読み込み時に文字コードの自動判定を行う"
 
-#: rc.c:218
+#: rc.c:228
 msgid "System charset"
 msgstr "システムの文字コード"
 
-#: rc.c:219
+#: rc.c:229
 msgid "System charset follows locale(LC_CTYPE)"
 msgstr "Locale(LC_CTYPE) に従ってシステムの文字コードを設定"
 
-#: rc.c:220
+#: rc.c:230
 msgid "Output halfdump with display charset"
 msgstr "表示用文字コードで halfdump の出力を行う"
 
-#: rc.c:221
+#: rc.c:231
 msgid "Use multi column characters"
 msgstr "複数カラムの文字を使う"
 
-#: rc.c:222
+#: rc.c:232
 msgid "Use combining characters"
 msgstr "結合文字を使う"
 
-#: rc.c:223
+#: rc.c:233
 msgid "Use double width for some Unicode characters"
 msgstr "ある種のUnicode文字を全角にする"
 
-#: rc.c:224
+#: rc.c:234
 msgid "Use Unicode language tags"
 msgstr "Unicode の言語タグを使う"
 
-#: rc.c:225
+#: rc.c:235
 msgid "Charset conversion using Unicode map"
 msgstr "Unicodeを介したコード変換"
 
-#: rc.c:226
+#: rc.c:236
 msgid "Charset conversion when loading"
 msgstr "文書の読み込み時に文字コードを変換する"
 
-#: rc.c:227
+#: rc.c:237
 msgid "Adjust search string for document charset"
 msgstr "検索文字列を文書の文字コードに変換する"
 
-#: rc.c:228
+#: rc.c:238
 msgid "Fix character width when conversion"
 msgstr "文字幅の変わる変換をしない"
 
-#: rc.c:229
+#: rc.c:239
 msgid "Use GB 12345 Unicode map instead of GB 2312's"
 msgstr "GB 12345 の Unicode マップを GB 2312 用に使う"
 
-#: rc.c:230
+#: rc.c:240
 msgid "Use JIS X 0201 Roman for ISO-2022-JP"
 msgstr "ISO-2022-JP で JIS X 0201-Roman を使う"
 
-#: rc.c:231
+#: rc.c:241
 msgid "Use JIS C 6226:1978 for ISO-2022-JP"
 msgstr "ISO-2022-JP で JIS C 6226:1978(旧JIS) を使う"
 
-#: rc.c:232
+#: rc.c:242
 msgid "Use JIS X 0201 Katakana"
 msgstr "JIS X 0201-Katakana を使う"
 
-#: rc.c:233
+#: rc.c:243
 msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
 msgstr "JIS X 0212:1990(補助漢字) を使う"
 
-#: rc.c:234
+#: rc.c:244
 msgid "Use JIS X 0213:2000 (2000JIS)"
 msgstr "JIS X 0213:2000(2000JIS) を使う"
 
-#: rc.c:235
+#: rc.c:245
 msgid "Strict ISO-2022-JP/KR/CN"
 msgstr "厳格な ISO-2022-JP/KR/CN を使う"
 
-#: rc.c:236
+#: rc.c:246
 msgid "Treat 4 bytes char. of GB18030 as Unicode"
 msgstr "GB18030 の 4バイト文字を Unicode として扱う"
 
-#: rc.c:237
+#: rc.c:247
 msgid "Simple Preserve space"
 msgstr "単純な空白の保存"
 
-#: rc.c:240
+#: rc.c:250
 msgid "keymap file"
 msgstr "keymapファイル"
 
-#: rc.c:257
+#: rc.c:267
 msgid "black"
 msgstr "黒"
 
-#: rc.c:258
+#: rc.c:268
 msgid "red"
 msgstr "赤"
 
-#: rc.c:259
+#: rc.c:269
 msgid "green"
 msgstr "緑"
 
-#: rc.c:260
+#: rc.c:270
 msgid "yellow"
 msgstr "黄"
 
-#: rc.c:261
+#: rc.c:271
 msgid "blue"
 msgstr "青"
 
-#: rc.c:262
+#: rc.c:272
 msgid "magenta"
 msgstr "紫"
 
-#: rc.c:263
+#: rc.c:273
 msgid "cyan"
 msgstr "空色"
 
-#: rc.c:264
+#: rc.c:274
 msgid "white"
 msgstr "白"
 
-#: rc.c:265
+#: rc.c:275
 msgid "terminal"
 msgstr "端末"
 
-#: rc.c:284
+#: rc.c:294
 msgid "none"
 msgstr "無し"
 
-#: rc.c:285
+#: rc.c:295
 msgid "current URL"
 msgstr "現在のURL"
 
-#: rc.c:286
+#: rc.c:296
 msgid "link URL"
 msgstr "リンク先のURL"
 
-#: rc.c:291
+#: rc.c:301
 msgid "simple"
 msgstr "シンプル"
 
-#: rc.c:292
+#: rc.c:302
 msgid "use tag"
 msgstr "タグで表示"
 
-#: rc.c:293
+#: rc.c:303
 msgid "fontify"
 msgstr "文字装飾"
 
-#: rc.c:299
+#: rc.c:309
 msgid "A:relative to screen height"
 msgstr "A:画面サイズに比例"
 
-#: rc.c:300
+#: rc.c:310
 msgid "B:fixed speed"
 msgstr "B:一定の行数"
 
-#: rc.c:307
+#: rc.c:317
 msgid "unspecified"
 msgstr "指定しない"
 
-#: rc.c:308
+#: rc.c:318
 msgid "inet inet6"
 msgstr "IPv4優先"
 
-#: rc.c:309
+#: rc.c:319
 msgid "inet6 inet"
 msgstr "IPv6優先"
 
-#: rc.c:310
+#: rc.c:320
 msgid "inet only"
 msgstr "IPv4のみ"
 
-#: rc.c:311
+#: rc.c:321
 msgid "inet6 only"
 msgstr "IPv6のみ"
 
-#: rc.c:318
+#: rc.c:328
 msgid "discard"
 msgstr "破棄する"
 
-#: rc.c:320
+#: rc.c:330
 msgid "accept"
 msgstr "受け入れる"
 
-#: rc.c:322
+#: rc.c:332
 msgid "ask"
 msgstr "確認する"
 
-#: rc.c:329
+#: rc.c:339
 msgid "use internal mailer instead"
 msgstr "内部メーラを使用"
 
-#: rc.c:331
+#: rc.c:341
 msgid "ignore options and use only the address"
 msgstr "アドレスのみ使用"
 
-#: rc.c:332
+#: rc.c:342
 msgid "use full mailto URL"
 msgstr "URL 全体を使用"
 
-#: rc.c:341
+#: rc.c:351
 msgid "OFF"
 msgstr "無効"
 
-#: rc.c:342
+#: rc.c:352
 msgid "Only ISO 2022"
 msgstr "ISO 2022 のみ"
 
-#: rc.c:343
+#: rc.c:353
 msgid "ON"
 msgstr "有効"
 
-#: rc.c:349
+#: rc.c:359
 msgid "ASCII"
 msgstr "ASCII"
 
-#: rc.c:350
+#: rc.c:360
 msgid "charset specific"
 msgstr "文字コード依存"
 
-#: rc.c:351
+#: rc.c:361
 msgid "DEC special graphics"
 msgstr "DEC 特殊文字"
 
-#: rc.c:714
+#: rc.c:740
 msgid "Display Settings"
 msgstr "表示関係"
 
-#: rc.c:716
+#: rc.c:742
 msgid "Color Settings"
 msgstr "表示色"
 
-#: rc.c:718
+#: rc.c:744
 msgid "Miscellaneous Settings"
 msgstr "雑多な設定"
 
-#: rc.c:719
+#: rc.c:745
 msgid "Directory Settings"
 msgstr "ディレクトリ設定"
 
-#: rc.c:720
+#: rc.c:746
 msgid "External Program Settings"
 msgstr "外部プログラム"
 
-#: rc.c:721
+#: rc.c:747
 msgid "Network Settings"
 msgstr "ネットワークの設定"
 
-#: rc.c:722
+#: rc.c:748
 msgid "Proxy Settings"
 msgstr "プロキシの設定"
 
-#: rc.c:724
+#: rc.c:750
 msgid "SSL Settings"
 msgstr "SSLの設定"
 
-#: rc.c:727
+#: rc.c:753
 msgid "Cookie Settings"
 msgstr "クッキーの設定"
 
-#: rc.c:730
+#: rc.c:756
 msgid "Charset Settings"
 msgstr "文字コードの設定"
 
@@ -875,6 +907,6 @@ msgstr "文字コードの設定"
 #. * header. For example, ja.po should translate it as
 #. * "ja;q=1.0, en;q=0.5" like that.
 #.
-#: rc.c:1209
+#: rc.c:1238
 msgid "en;q=1.0"
 msgstr "ja;q=1.0, en;q=0.5"
diff --git a/po/w3m.pot b/po/w3m.pot
index e164b1e..607e26f 100644
--- a/po/w3m.pot
+++ b/po/w3m.pot
@@ -1,6 +1,6 @@
 # SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Fumitoshi UKAI
-# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE w3m'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the w3m package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 #, fuzzy
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: w3m 0.5.3\n"
 "Report-Msgid-Bugs-To: satodai@w3m.jp\n"
-"POT-Creation-Date: 2010-08-20 18:44+0900\n"
+"POT-Creation-Date: 2016-03-14 19:47+0900\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,855 +17,887 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: menu.c:267
+#: menu.c:269
 msgid " Back         (b) "
 msgstr ""
 
-#: menu.c:268
+#: menu.c:270
 msgid " Select Buffer(s) "
 msgstr ""
 
-#: menu.c:270
+#: menu.c:272
 msgid " Select Tab   (t) "
 msgstr ""
 
-#: menu.c:272
+#: menu.c:274
 msgid " View Source  (v) "
 msgstr ""
 
-#: menu.c:273
+#: menu.c:275
 msgid " Edit Source  (e) "
 msgstr ""
 
-#: menu.c:274
+#: menu.c:276
 msgid " Save Source  (S) "
 msgstr ""
 
-#: menu.c:275
+#: menu.c:277
 msgid " Reload       (r) "
 msgstr ""
 
-#: menu.c:276 menu.c:283 menu.c:287
+#: menu.c:278 menu.c:285 menu.c:289
 msgid " ---------------- "
 msgstr ""
 
-#: menu.c:277
+#: menu.c:279
 msgid " Go Link      (a) "
 msgstr ""
 
-#: menu.c:278
+#: menu.c:280
 msgid "   on New Tab (n) "
 msgstr ""
 
-#: menu.c:279
+#: menu.c:281
 msgid " Save Link    (A) "
 msgstr ""
 
-#: menu.c:280
+#: menu.c:282
 msgid " View Image   (i) "
 msgstr ""
 
-#: menu.c:281
+#: menu.c:283
 msgid " Save Image   (I) "
 msgstr ""
 
-#: menu.c:282
+#: menu.c:284
 msgid " View Frame   (f) "
 msgstr ""
 
-#: menu.c:284
+#: menu.c:286
 msgid " Bookmark     (B) "
 msgstr ""
 
-#: menu.c:285
+#: menu.c:287
 msgid " Help         (h) "
 msgstr ""
 
-#: menu.c:286
+#: menu.c:288
 msgid " Option       (o) "
 msgstr ""
 
-#: menu.c:288
+#: menu.c:290
 msgid " Quit         (q) "
 msgstr ""
 
-#: rc.c:60
+#: rc.c:62
 msgid "External Viewer Setup"
 msgstr ""
 
-#: rc.c:61
+#: rc.c:63
 msgid "Tab width in characters"
 msgstr ""
 
-#: rc.c:62
+#: rc.c:64
 msgid "Indent for HTML rendering"
 msgstr ""
 
-#: rc.c:63
+#: rc.c:65
 msgid "Number of pixels per character (4.0...32.0)"
 msgstr ""
 
-#: rc.c:64
+#: rc.c:66
 msgid "Number of pixels per line (4.0...64.0)"
 msgstr ""
 
-#: rc.c:65
+#: rc.c:67
 msgid "Number of remembered lines when used as a pager"
 msgstr ""
 
-#: rc.c:66
+#: rc.c:68
 msgid "Use URL history"
 msgstr ""
 
-#: rc.c:67
+#: rc.c:69
 msgid "Number of remembered URL"
 msgstr ""
 
-#: rc.c:68
+#: rc.c:70
 msgid "Save URL history"
 msgstr ""
 
-#: rc.c:69
+#: rc.c:71
 msgid "Render frames automatically"
 msgstr ""
 
-#: rc.c:70
+#: rc.c:72
 msgid "Treat argument without scheme as URL"
 msgstr ""
 
-#: rc.c:71
+#: rc.c:73
 msgid "Use _self as default target"
 msgstr ""
 
-#: rc.c:72
+#: rc.c:74
 msgid "Open link on new tab if target is _blank or _new"
 msgstr ""
 
-#: rc.c:73
+#: rc.c:75
 msgid "Open download list panel on new tab"
 msgstr ""
 
-#: rc.c:74
+#: rc.c:76
 msgid "Display link URL automatically"
 msgstr ""
 
-#: rc.c:75
+#: rc.c:77
 msgid "Display link numbers"
 msgstr ""
 
-#: rc.c:76
+#: rc.c:78
 msgid "Display decoded URL"
 msgstr ""
 
-#: rc.c:77
+#: rc.c:79
 msgid "Display current line number"
 msgstr ""
 
-#: rc.c:78
+#: rc.c:80
 msgid "Display inline images"
 msgstr ""
 
-#: rc.c:79
+#: rc.c:81
 msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
 msgstr ""
 
-#: rc.c:81
+#: rc.c:83
 msgid "Load inline images automatically"
 msgstr ""
 
-#: rc.c:82
+#: rc.c:84
 msgid "Maximum processes for parallel image loading"
 msgstr ""
 
-#: rc.c:83
+#: rc.c:85
 msgid "Use external image viewer"
 msgstr ""
 
-#: rc.c:84
+#: rc.c:86
 msgid "Scale of image (%)"
 msgstr ""
 
-#: rc.c:85
+#: rc.c:87
 msgid "External command to display image"
 msgstr ""
 
-#: rc.c:86
+#: rc.c:88
 msgid "Use link list of image map"
 msgstr ""
 
-#: rc.c:88
+#: rc.c:90
 msgid "Display file names in multi-column format"
 msgstr ""
 
-#: rc.c:89
+#: rc.c:91
 msgid "Use ASCII equivalents to display entities"
 msgstr ""
 
-#: rc.c:90
+#: rc.c:92
 msgid "Character type for border of table and menu"
 msgstr ""
 
-#: rc.c:91
+#: rc.c:93
+msgid "Display table borders, ignore value of BORDER"
+msgstr ""
+
+#: rc.c:94
 msgid "Fold lines in TEXTAREA"
 msgstr ""
 
-#: rc.c:92
+#: rc.c:95
 msgid "Display INS, DEL, S and STRIKE element"
 msgstr ""
 
-#: rc.c:93
+#: rc.c:96
 msgid "Display with color"
 msgstr ""
 
-#: rc.c:94
+#: rc.c:97
 msgid "Color of normal character"
 msgstr ""
 
-#: rc.c:95
+#: rc.c:98
 msgid "Color of anchor"
 msgstr ""
 
-#: rc.c:96
+#: rc.c:99
 msgid "Color of image link"
 msgstr ""
 
-#: rc.c:97
+#: rc.c:100
 msgid "Color of form"
 msgstr ""
 
-#: rc.c:98
+#: rc.c:101
 msgid "Enable coloring of active link"
 msgstr ""
 
-#: rc.c:99
+#: rc.c:102
 msgid "Color of currently active link"
 msgstr ""
 
-#: rc.c:100
+#: rc.c:103
 msgid "Use visited link color"
 msgstr ""
 
-#: rc.c:101
+#: rc.c:104
 msgid "Color of visited link"
 msgstr ""
 
-#: rc.c:102
+#: rc.c:105
 msgid "Color of background"
 msgstr ""
 
-#: rc.c:103
+#: rc.c:106
 msgid "Color of mark"
 msgstr ""
 
-#: rc.c:104
+#: rc.c:107
 msgid "Use proxy"
 msgstr ""
 
-#: rc.c:105
+#: rc.c:108
 msgid "URL of HTTP proxy host"
 msgstr ""
 
-#: rc.c:107
+#: rc.c:110
 msgid "URL of HTTPS proxy host"
 msgstr ""
 
-#: rc.c:110
+#: rc.c:113
 msgid "URL of GOPHER proxy host"
 msgstr ""
 
-#: rc.c:112
+#: rc.c:115
 msgid "URL of FTP proxy host"
 msgstr ""
 
-#: rc.c:113
+#: rc.c:116
 msgid "Domains to be accessed directly (no proxy)"
 msgstr ""
 
-#: rc.c:114
+#: rc.c:117
 msgid "Check noproxy by network address"
 msgstr ""
 
-#: rc.c:115
+#: rc.c:118
 msgid "Disable cache"
 msgstr ""
 
-#: rc.c:117
+#: rc.c:120
 msgid "News server"
 msgstr ""
 
-#: rc.c:118
+#: rc.c:121
 msgid "Mode of news server"
 msgstr ""
 
-#: rc.c:119
+#: rc.c:122
 msgid "Number of news messages"
 msgstr ""
 
-#: rc.c:121
+#: rc.c:124
 msgid "Order of name resolution"
 msgstr ""
 
-#: rc.c:122
+#: rc.c:125
 msgid "Directory corresponding to / (document root)"
 msgstr ""
 
-#: rc.c:123
+#: rc.c:126
 msgid "Directory corresponding to /~user"
 msgstr ""
 
-#: rc.c:124
+#: rc.c:127
 msgid "Directory corresponding to /cgi-bin"
 msgstr ""
 
-#: rc.c:125
+#: rc.c:128
 msgid "Confirm when quitting with q"
 msgstr ""
 
-#: rc.c:126
+#: rc.c:129
 msgid "Close tab if buffer is last when back"
 msgstr ""
 
-#: rc.c:128
+#: rc.c:131
 msgid "Enable mark operations"
 msgstr ""
 
-#: rc.c:130
+#: rc.c:133
 msgid "Enable Emacs-style line editing"
 msgstr ""
 
-#: rc.c:131
+#: rc.c:134
 msgid "Enable vi-like numeric prefix"
 msgstr ""
 
-#: rc.c:132
+#: rc.c:135
 msgid "Move cursor to top line when going to label"
 msgstr ""
 
-#: rc.c:133
+#: rc.c:136
 msgid "Move cursor to top line when moving to next page"
 msgstr ""
 
-#: rc.c:134
+#: rc.c:137
 msgid "Fold lines of plain text file"
 msgstr ""
 
-#: rc.c:135
+#: rc.c:138
 msgid "Show line numbers"
 msgstr ""
 
-#: rc.c:136
+#: rc.c:139
 msgid "Show search string"
 msgstr ""
 
-#: rc.c:137
+#: rc.c:140
 msgid "List of mime.types files"
 msgstr ""
 
-#: rc.c:138
+#: rc.c:141
 msgid "List of mailcap files"
 msgstr ""
 
-#: rc.c:139
+#: rc.c:142
 msgid "List of urimethodmap files"
 msgstr ""
 
-#: rc.c:140
+#: rc.c:143
 msgid "Editor"
 msgstr ""
 
-#: rc.c:141
+#: rc.c:144
 msgid "Mailer"
 msgstr ""
 
-#: rc.c:142
+#: rc.c:145
 msgid "How to call Mailer for mailto URLs with options"
 msgstr ""
 
-#: rc.c:143
-msgid "External Browser"
+#: rc.c:146
+msgid "External browser"
 msgstr ""
 
-#: rc.c:144
-msgid "Second External Browser"
+#: rc.c:147
+msgid "2nd external browser"
 msgstr ""
 
-#: rc.c:145
-msgid "Third External Browser"
+#: rc.c:148
+msgid "3rd external browser"
 msgstr ""
 
-#: rc.c:146
+#: rc.c:149
+msgid "4th external browser"
+msgstr ""
+
+#: rc.c:150
+msgid "5th external browser"
+msgstr ""
+
+#: rc.c:151
+msgid "6th external browser"
+msgstr ""
+
+#: rc.c:152
+msgid "7th external browser"
+msgstr ""
+
+#: rc.c:153
+msgid "8th external browser"
+msgstr ""
+
+#: rc.c:154
+msgid "9th external browser"
+msgstr ""
+
+#: rc.c:155
 msgid "Disable secret file security check"
 msgstr ""
 
-#: rc.c:147
+#: rc.c:156
 msgid "Password file"
 msgstr ""
 
-#: rc.c:148
+#: rc.c:157
 msgid "File for setting form on loading"
 msgstr ""
 
-#: rc.c:149
+#: rc.c:158
+msgid "File for preferences for each site"
+msgstr ""
+
+#: rc.c:159
 msgid "Password for anonymous FTP (your mail address)"
 msgstr ""
 
-#: rc.c:150
+#: rc.c:160
 msgid "Generate domain part of password for FTP"
 msgstr ""
 
-#: rc.c:151
+#: rc.c:161
 msgid "User-Agent identification string"
 msgstr ""
 
-#: rc.c:152
+#: rc.c:162
 msgid "Accept-Encoding header"
 msgstr ""
 
-#: rc.c:153
+#: rc.c:163
 msgid "Accept header"
 msgstr ""
 
-#: rc.c:154
+#: rc.c:164
 msgid "Accept-Language header"
 msgstr ""
 
-#: rc.c:155
+#: rc.c:165
 msgid "Treat URL-like strings as links in all pages"
 msgstr ""
 
-#: rc.c:156
+#: rc.c:166
 msgid "Wrap search"
 msgstr ""
 
-#: rc.c:157
+#: rc.c:167
 msgid "Display unseen objects (e.g. bgimage tag)"
 msgstr ""
 
-#: rc.c:158
+#: rc.c:168
 msgid "Uncompress compressed data automatically when downloading"
 msgstr ""
 
-#: rc.c:160
+#: rc.c:170
 msgid "Run external viewer in a separate session"
 msgstr ""
 
-#: rc.c:162
+#: rc.c:172
 msgid "Run external viewer in the background"
 msgstr ""
 
-#: rc.c:164
+#: rc.c:174
 msgid "Use external program for directory listing"
 msgstr ""
 
-#: rc.c:165
+#: rc.c:175
 msgid "URL of directory listing command"
 msgstr ""
 
-#: rc.c:167
+#: rc.c:177
 msgid "Enable dictionary lookup through CGI"
 msgstr ""
 
-#: rc.c:168
+#: rc.c:178
 msgid "URL of dictionary lookup command"
 msgstr ""
 
-#: rc.c:170
+#: rc.c:180
 msgid "Display link name for images lacking ALT"
 msgstr ""
 
-#: rc.c:171
+#: rc.c:181
 msgid "Index file for directories"
 msgstr ""
 
-#: rc.c:172
+#: rc.c:182
 msgid "Prepend http:// to URL automatically"
 msgstr ""
 
-#: rc.c:173
+#: rc.c:183
 msgid "Default value for open-URL command"
 msgstr ""
 
-#: rc.c:174
+#: rc.c:184
 msgid "Decode Content-Transfer-Encoding when saving"
 msgstr ""
 
-#: rc.c:175
+#: rc.c:185
 msgid "Preserve timestamp when saving"
 msgstr ""
 
-#: rc.c:177
+#: rc.c:187
 msgid "Enable mouse"
 msgstr ""
 
-#: rc.c:178
+#: rc.c:188
 msgid "Scroll in reverse direction of mouse drag"
 msgstr ""
 
-#: rc.c:179
+#: rc.c:189
 msgid "Behavior of wheel scroll speed"
 msgstr ""
 
-#: rc.c:180
+#: rc.c:190
 msgid "(A only)Scroll by # (%) of screen"
 msgstr ""
 
-#: rc.c:181
+#: rc.c:191
 msgid "(B only)Scroll by # lines"
 msgstr ""
 
-#: rc.c:183
+#: rc.c:193
 msgid "Free memory of undisplayed buffers"
 msgstr ""
 
-#: rc.c:184
+#: rc.c:194
 msgid "Suppress `Referer:' header"
 msgstr ""
 
-#: rc.c:185
+#: rc.c:195
 msgid "Search case-insensitively"
 msgstr ""
 
-#: rc.c:186
+#: rc.c:196
 msgid "Use LESSOPEN"
 msgstr ""
 
-#: rc.c:189
+#: rc.c:199
 msgid "Perform SSL server verification"
 msgstr ""
 
-#: rc.c:190
+#: rc.c:200
 msgid "PEM encoded certificate file of client"
 msgstr ""
 
-#: rc.c:191
+#: rc.c:201
 msgid "PEM encoded private key file of client"
 msgstr ""
 
-#: rc.c:192
+#: rc.c:202
 msgid "Path to directory for PEM encoded certificates of CAs"
 msgstr ""
 
-#: rc.c:193
+#: rc.c:203
 msgid "File consisting of PEM encoded certificates of CAs"
 msgstr ""
 
-#: rc.c:195
+#: rc.c:205
 msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
 msgstr ""
 
-#: rc.c:198
+#: rc.c:208
 msgid "Enable cookie processing"
 msgstr ""
 
-#: rc.c:199
+#: rc.c:209
 msgid "Print a message when receiving a cookie"
 msgstr ""
 
-#: rc.c:200
+#: rc.c:210
 msgid "Accept cookies"
 msgstr ""
 
-#: rc.c:201
+#: rc.c:211
 msgid "Action to be taken on invalid cookie"
 msgstr ""
 
-#: rc.c:202
+#: rc.c:212
 msgid "Domains to reject cookies from"
 msgstr ""
 
-#: rc.c:203
+#: rc.c:213
 msgid "Domains to accept cookies from"
 msgstr ""
 
-#: rc.c:204
+#: rc.c:214
 msgid "Domains to avoid [wrong number of dots]"
 msgstr ""
 
-#: rc.c:206
+#: rc.c:216
 msgid "Number of redirections to follow"
 msgstr ""
 
-#: rc.c:207
+#: rc.c:217
 msgid "Enable processing of meta-refresh tag"
 msgstr ""
 
-#: rc.c:210
+#: rc.c:220
 msgid "Enable Migemo (Roma-ji search)"
 msgstr ""
 
-#: rc.c:211
+#: rc.c:221
 msgid "Migemo command"
 msgstr ""
 
-#: rc.c:215
+#: rc.c:225
 msgid "Display charset"
 msgstr ""
 
-#: rc.c:216
+#: rc.c:226
 msgid "Default document charset"
 msgstr ""
 
-#: rc.c:217
+#: rc.c:227
 msgid "Automatic charset detect when loading"
 msgstr ""
 
-#: rc.c:218
+#: rc.c:228
 msgid "System charset"
 msgstr ""
 
-#: rc.c:219
+#: rc.c:229
 msgid "System charset follows locale(LC_CTYPE)"
 msgstr ""
 
-#: rc.c:220
+#: rc.c:230
 msgid "Output halfdump with display charset"
 msgstr ""
 
-#: rc.c:221
+#: rc.c:231
 msgid "Use multi column characters"
 msgstr ""
 
-#: rc.c:222
+#: rc.c:232
 msgid "Use combining characters"
 msgstr ""
 
-#: rc.c:223
+#: rc.c:233
 msgid "Use double width for some Unicode characters"
 msgstr ""
 
-#: rc.c:224
+#: rc.c:234
 msgid "Use Unicode language tags"
 msgstr ""
 
-#: rc.c:225
+#: rc.c:235
 msgid "Charset conversion using Unicode map"
 msgstr ""
 
-#: rc.c:226
+#: rc.c:236
 msgid "Charset conversion when loading"
 msgstr ""
 
-#: rc.c:227
+#: rc.c:237
 msgid "Adjust search string for document charset"
 msgstr ""
 
-#: rc.c:228
+#: rc.c:238
 msgid "Fix character width when conversion"
 msgstr ""
 
-#: rc.c:229
+#: rc.c:239
 msgid "Use GB 12345 Unicode map instead of GB 2312's"
 msgstr ""
 
-#: rc.c:230
+#: rc.c:240
 msgid "Use JIS X 0201 Roman for ISO-2022-JP"
 msgstr ""
 
-#: rc.c:231
+#: rc.c:241
 msgid "Use JIS C 6226:1978 for ISO-2022-JP"
 msgstr ""
 
-#: rc.c:232
+#: rc.c:242
 msgid "Use JIS X 0201 Katakana"
 msgstr ""
 
-#: rc.c:233
+#: rc.c:243
 msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
 msgstr ""
 
-#: rc.c:234
+#: rc.c:244
 msgid "Use JIS X 0213:2000 (2000JIS)"
 msgstr ""
 
-#: rc.c:235
+#: rc.c:245
 msgid "Strict ISO-2022-JP/KR/CN"
 msgstr ""
 
-#: rc.c:236
+#: rc.c:246
 msgid "Treat 4 bytes char. of GB18030 as Unicode"
 msgstr ""
 
-#: rc.c:237
+#: rc.c:247
 msgid "Simple Preserve space"
 msgstr ""
 
-#: rc.c:240
+#: rc.c:250
 msgid "keymap file"
 msgstr ""
 
-#: rc.c:257
+#: rc.c:267
 msgid "black"
 msgstr ""
 
-#: rc.c:258
+#: rc.c:268
 msgid "red"
 msgstr ""
 
-#: rc.c:259
+#: rc.c:269
 msgid "green"
 msgstr ""
 
-#: rc.c:260
+#: rc.c:270
 msgid "yellow"
 msgstr ""
 
-#: rc.c:261
+#: rc.c:271
 msgid "blue"
 msgstr ""
 
-#: rc.c:262
+#: rc.c:272
 msgid "magenta"
 msgstr ""
 
-#: rc.c:263
+#: rc.c:273
 msgid "cyan"
 msgstr ""
 
-#: rc.c:264
+#: rc.c:274
 msgid "white"
 msgstr ""
 
-#: rc.c:265
+#: rc.c:275
 msgid "terminal"
 msgstr ""
 
-#: rc.c:284
+#: rc.c:294
 msgid "none"
 msgstr ""
 
-#: rc.c:285
+#: rc.c:295
 msgid "current URL"
 msgstr ""
 
-#: rc.c:286
+#: rc.c:296
 msgid "link URL"
 msgstr ""
 
-#: rc.c:291
+#: rc.c:301
 msgid "simple"
 msgstr ""
 
-#: rc.c:292
+#: rc.c:302
 msgid "use tag"
 msgstr ""
 
-#: rc.c:293
+#: rc.c:303
 msgid "fontify"
 msgstr ""
 
-#: rc.c:299
+#: rc.c:309
 msgid "A:relative to screen height"
 msgstr ""
 
-#: rc.c:300
+#: rc.c:310
 msgid "B:fixed speed"
 msgstr ""
 
-#: rc.c:307
+#: rc.c:317
 msgid "unspecified"
 msgstr ""
 
-#: rc.c:308
+#: rc.c:318
 msgid "inet inet6"
 msgstr ""
 
-#: rc.c:309
+#: rc.c:319
 msgid "inet6 inet"
 msgstr ""
 
-#: rc.c:310
+#: rc.c:320
 msgid "inet only"
 msgstr ""
 
-#: rc.c:311
+#: rc.c:321
 msgid "inet6 only"
 msgstr ""
 
-#: rc.c:318
+#: rc.c:328
 msgid "discard"
 msgstr ""
 
-#: rc.c:320
+#: rc.c:330
 msgid "accept"
 msgstr ""
 
-#: rc.c:322
+#: rc.c:332
 msgid "ask"
 msgstr ""
 
-#: rc.c:329
+#: rc.c:339
 msgid "use internal mailer instead"
 msgstr ""
 
-#: rc.c:331
+#: rc.c:341
 msgid "ignore options and use only the address"
 msgstr ""
 
-#: rc.c:332
+#: rc.c:342
 msgid "use full mailto URL"
 msgstr ""
 
-#: rc.c:341
+#: rc.c:351
 msgid "OFF"
 msgstr ""
 
-#: rc.c:342
+#: rc.c:352
 msgid "Only ISO 2022"
 msgstr ""
 
-#: rc.c:343
+#: rc.c:353
 msgid "ON"
 msgstr ""
 
-#: rc.c:349
+#: rc.c:359
 msgid "ASCII"
 msgstr ""
 
-#: rc.c:350
+#: rc.c:360
 msgid "charset specific"
 msgstr ""
 
-#: rc.c:351
+#: rc.c:361
 msgid "DEC special graphics"
 msgstr ""
 
-#: rc.c:714
+#: rc.c:740
 msgid "Display Settings"
 msgstr ""
 
-#: rc.c:716
+#: rc.c:742
 msgid "Color Settings"
 msgstr ""
 
-#: rc.c:718
+#: rc.c:744
 msgid "Miscellaneous Settings"
 msgstr ""
 
-#: rc.c:719
+#: rc.c:745
 msgid "Directory Settings"
 msgstr ""
 
-#: rc.c:720
+#: rc.c:746
 msgid "External Program Settings"
 msgstr ""
 
-#: rc.c:721
+#: rc.c:747
 msgid "Network Settings"
 msgstr ""
 
-#: rc.c:722
+#: rc.c:748
 msgid "Proxy Settings"
 msgstr ""
 
-#: rc.c:724
+#: rc.c:750
 msgid "SSL Settings"
 msgstr ""
 
-#: rc.c:727
+#: rc.c:753
 msgid "Cookie Settings"
 msgstr ""
 
-#: rc.c:730
+#: rc.c:756
 msgid "Charset Settings"
 msgstr ""
 
@@ -874,6 +906,6 @@ msgstr ""
 #. * header. For example, ja.po should translate it as
 #. * "ja;q=1.0, en;q=0.5" like that.
 #.
-#: rc.c:1209
+#: rc.c:1238
 msgid "en;q=1.0"
 msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..8cfa8fd
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,916 @@
+# zh_CN translation for w3m
+# Copyright (C) YEAR THE w3m'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the w3m package.
+# Junde Yi <lmy441900@gmail.com>, 2014.
+# Mingcong Bai <jeffbai@aosc.xyz>, 2014.
+# liushuyu <liushuyu_011@126.com>, 2014.
+# Xingda Zheng <icenowy@outlook.com>, 2014.
+# Mingye Wang (Arthur2e5) <arthur200126@gmail.com>, 2014, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: w3m 0.5.3\n"
+"Report-Msgid-Bugs-To: satodai@w3m.jp\n"
+"POT-Creation-Date: 2016-03-14 19:47+0900\n"
+"PO-Revision-Date: 2016-03-14 19:51+0900\n"
+"Last-Translator: Tatsuya Kinoshita <tats@debian.org>\n"
+"Language-Team: AOSC zh_CN <aosc@members.fsf.org>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.6\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: menu.c:269
+msgid " Back         (b) "
+msgstr " 后退         (b) "
+
+#: menu.c:270
+msgid " Select Buffer(s) "
+msgstr " 选择缓冲区       "
+
+#: menu.c:272
+msgid " Select Tab   (t) "
+msgstr " 选择标签     (t) "
+
+#: menu.c:274
+msgid " View Source  (v) "
+msgstr " 查看源码     (v) "
+
+#: menu.c:275
+msgid " Edit Source  (e) "
+msgstr " 修改源码     (e) "
+
+#: menu.c:276
+msgid " Save Source  (S) "
+msgstr " 保存源码     (S) "
+
+#: menu.c:277
+msgid " Reload       (r) "
+msgstr " 重新载入     (r) "
+
+#: menu.c:278 menu.c:285 menu.c:289
+msgid " ---------------- "
+msgstr " ---------------- "
+
+#: menu.c:279
+msgid " Go Link      (a) "
+msgstr " 转到链接     (a) "
+
+#: menu.c:280
+msgid "   on New Tab (n) "
+msgstr "   在新标签   (n) "
+
+#: menu.c:281
+msgid " Save Link    (A) "
+msgstr " 保存链接     (A) "
+
+#: menu.c:282
+msgid " View Image   (i) "
+msgstr " 查看图片     (i) "
+
+#: menu.c:283
+msgid " Save Image   (I) "
+msgstr " 保存图片     (I) "
+
+#: menu.c:284
+msgid " View Frame   (f) "
+msgstr " 查看框架     (f) "
+
+#: menu.c:286
+msgid " Bookmark     (B) "
+msgstr " 书签         (B) "
+
+#: menu.c:287
+msgid " Help         (h) "
+msgstr " 帮助         (h) "
+
+#: menu.c:288
+msgid " Option       (o) "
+msgstr " 选项         (o) "
+
+#: menu.c:290
+msgid " Quit         (q) "
+msgstr " 退出         (q) "
+
+#: rc.c:62
+msgid "External Viewer Setup"
+msgstr "外部查看器设置"
+
+#: rc.c:63
+msgid "Tab width in characters"
+msgstr "文字中的 TAB 宽度"
+
+#: rc.c:64
+msgid "Indent for HTML rendering"
+msgstr "用于 HTML 渲染"
+
+#: rc.c:65
+msgid "Number of pixels per character (4.0...32.0)"
+msgstr "每字体大小的像素值 (4.0...32.0)"
+
+#: rc.c:66
+msgid "Number of pixels per line (4.0...64.0)"
+msgstr "每行的像素数 (4.0...64.0)"
+
+#: rc.c:67
+msgid "Number of remembered lines when used as a pager"
+msgstr "当作为分页器使用时记忆的行数"
+
+#: rc.c:68
+msgid "Use URL history"
+msgstr "使用 URL 历史记录"
+
+#: rc.c:69
+msgid "Number of remembered URL"
+msgstr "记录的 URL 数量"
+
+#: rc.c:70
+msgid "Save URL history"
+msgstr "保存 URL 历史"
+
+#: rc.c:71
+msgid "Render frames automatically"
+msgstr "自动渲染框架"
+
+#: rc.c:72
+msgid "Treat argument without scheme as URL"
+msgstr "将无格式的参数看作 URL"
+
+#: rc.c:73
+msgid "Use _self as default target"
+msgstr "将自身作为默认目标 (_S)"
+
+#: rc.c:74
+msgid "Open link on new tab if target is _blank or _new"
+msgstr "如果目标为空 (_b) 或新建 (_n) 在新标签打开页面"
+
+#: rc.c:75
+msgid "Open download list panel on new tab"
+msgstr "打开下载列表面板于新标签"
+
+#: rc.c:76
+msgid "Display link URL automatically"
+msgstr "自动显示链接 URL"
+
+#: rc.c:77
+msgid "Display link numbers"
+msgstr "显示链接编号"
+
+#: rc.c:78
+msgid "Display decoded URL"
+msgstr "显示解码后的 URL"
+
+#: rc.c:79
+msgid "Display current line number"
+msgstr "显示当前行数"
+
+#: rc.c:80
+msgid "Display inline images"
+msgstr "显示内联图像"
+
+#: rc.c:81
+msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
+msgstr "为不带有 ALT 或 TITLE 字串的内联图像显示伪 ALT"
+
+#: rc.c:83
+msgid "Load inline images automatically"
+msgstr "自动载入行内图像"
+
+#: rc.c:84
+msgid "Maximum processes for parallel image loading"
+msgstr "多线程图像加载的最大进程数"
+
+#: rc.c:85
+msgid "Use external image viewer"
+msgstr "使用外部图片查看器"
+
+#: rc.c:86
+msgid "Scale of image (%)"
+msgstr "图像比例尺 (%)"
+
+#: rc.c:87
+msgid "External command to display image"
+msgstr "用于显示图像的外部命令"
+
+#: rc.c:88
+msgid "Use link list of image map"
+msgstr "使用图像映射的链接列表"
+
+#: rc.c:90
+msgid "Display file names in multi-column format"
+msgstr "以多列格式显示文件名"
+
+#: rc.c:91
+msgid "Use ASCII equivalents to display entities"
+msgstr "使用对应的 ASCII 编码来显示实体 "
+
+#: rc.c:92
+msgid "Character type for border of table and menu"
+msgstr "表格和菜单边框的字符类型"
+
+#: rc.c:93
+msgid "Display table borders, ignore value of BORDER"
+msgstr "显示表格边框,忽略 BORDER 数值"
+
+#: rc.c:94
+msgid "Fold lines in TEXTAREA"
+msgstr "在文本区 (TEXTAREA) 中折叠行"
+
+#: rc.c:95
+msgid "Display INS, DEL, S and STRIKE element"
+msgstr "显示 INS, DEL, S 及 STRIKE 元素"
+
+#: rc.c:96
+msgid "Display with color"
+msgstr "使用带颜色的显示"
+
+#: rc.c:97
+msgid "Color of normal character"
+msgstr "一般文字颜色"
+
+#: rc.c:98
+msgid "Color of anchor"
+msgstr "链接文字颜色"
+
+#: rc.c:99
+msgid "Color of image link"
+msgstr "图片链接颜色"
+
+#: rc.c:100
+msgid "Color of form"
+msgstr "表格颜色"
+
+#: rc.c:101
+msgid "Enable coloring of active link"
+msgstr "为活动链接开启上色"
+
+#: rc.c:102
+msgid "Color of currently active link"
+msgstr "当前活动链接的颜色"
+
+#: rc.c:103
+msgid "Use visited link color"
+msgstr "为访问过的链接上色"
+
+#: rc.c:104
+msgid "Color of visited link"
+msgstr "已访问链接颜色"
+
+#: rc.c:105
+msgid "Color of background"
+msgstr "背景色"
+
+#: rc.c:106
+msgid "Color of mark"
+msgstr "标记颜色"
+
+#: rc.c:107
+msgid "Use proxy"
+msgstr "使用代理服务器"
+
+#: rc.c:108
+msgid "URL of HTTP proxy host"
+msgstr "HTTP 代理主机地址"
+
+#: rc.c:110
+msgid "URL of HTTPS proxy host"
+msgstr "HTTPS 代理主机地址"
+
+#: rc.c:113
+msgid "URL of GOPHER proxy host"
+msgstr "GOPHER 代理主机地址"
+
+#: rc.c:115
+msgid "URL of FTP proxy host"
+msgstr "FTP 代理主机地址"
+
+#: rc.c:116
+msgid "Domains to be accessed directly (no proxy)"
+msgstr "直接访问而不是用代理服务器访问的 URL"
+
+#: rc.c:117
+msgid "Check noproxy by network address"
+msgstr "根据网络地址检查 noproxy"
+
+#: rc.c:118
+msgid "Disable cache"
+msgstr "禁用缓存"
+
+#: rc.c:120
+msgid "News server"
+msgstr "新闻服务器"
+
+#: rc.c:121
+msgid "Mode of news server"
+msgstr "新闻服务器模式"
+
+#: rc.c:122
+msgid "Number of news messages"
+msgstr "新闻消息的数量"
+
+#: rc.c:124
+msgid "Order of name resolution"
+msgstr "名称解析顺序"
+
+#: rc.c:125
+msgid "Directory corresponding to / (document root)"
+msgstr "对应 / 的目录 (文档根目录)"
+
+#: rc.c:126
+msgid "Directory corresponding to /~user"
+msgstr "对应 /~user 的目录"
+
+#: rc.c:127
+msgid "Directory corresponding to /cgi-bin"
+msgstr "对应 /cgi-bin 的目录"
+
+#: rc.c:128
+msgid "Confirm when quitting with q"
+msgstr "使用 q 键退出时请求确认"
+
+#: rc.c:129
+msgid "Close tab if buffer is last when back"
+msgstr "在返回时缓冲区还是以前状态就关闭标签页"
+
+#: rc.c:131
+msgid "Enable mark operations"
+msgstr "启用标记操作"
+
+#: rc.c:133
+msgid "Enable Emacs-style line editing"
+msgstr "启用 Emacs 风格的行编辑"
+
+#: rc.c:134
+msgid "Enable vi-like numeric prefix"
+msgstr "启动 vi 式的数字跳转"
+
+#: rc.c:135
+msgid "Move cursor to top line when going to label"
+msgstr "当移动到标签时将光标移到最顶行"
+
+#: rc.c:136
+msgid "Move cursor to top line when moving to next page"
+msgstr "当转到下一页时将光标移到最顶行"
+
+#: rc.c:137
+msgid "Fold lines of plain text file"
+msgstr "对纯文本文件实行行折叠"
+
+#: rc.c:138
+msgid "Show line numbers"
+msgstr "显示行号"
+
+#: rc.c:139
+msgid "Show search string"
+msgstr "显示搜索字符串"
+
+#: rc.c:140
+msgid "List of mime.types files"
+msgstr "mime.type 文件列表"
+
+#: rc.c:141
+msgid "List of mailcap files"
+msgstr "mailcap 文件列表"
+
+#: rc.c:142
+msgid "List of urimethodmap files"
+msgstr "urlmethodmap 文件列表"
+
+#: rc.c:143
+msgid "Editor"
+msgstr "编辑器"
+
+#: rc.c:144
+msgid "Mailer"
+msgstr "发送者"
+
+#: rc.c:145
+msgid "How to call Mailer for mailto URLs with options"
+msgstr "启动 mailto 地址时调用电子邮件程序的方式和参数"
+
+#: rc.c:146
+msgid "External browser"
+msgstr "外部浏览器"
+
+#: rc.c:147
+msgid "2nd external browser"
+msgstr "第二外部浏览器"
+
+#: rc.c:148
+msgid "3rd external browser"
+msgstr "第三外部浏览器"
+
+#: rc.c:149
+msgid "4th external browser"
+msgstr "第四外部浏览器"
+
+#: rc.c:150
+msgid "5th external browser"
+msgstr "第五外部浏览器"
+
+#: rc.c:151
+msgid "6th external browser"
+msgstr "第六外部浏览器"
+
+#: rc.c:152
+msgid "7th external browser"
+msgstr "第七外部浏览器"
+
+#: rc.c:153
+msgid "8th external browser"
+msgstr "第八外部浏览器"
+
+#: rc.c:154
+msgid "9th external browser"
+msgstr "第九外部浏览器"
+
+#: rc.c:155
+msgid "Disable secret file security check"
+msgstr "关闭秘密文件安全检查"
+
+#: rc.c:156
+msgid "Password file"
+msgstr "密码文件"
+
+#: rc.c:157
+msgid "File for setting form on loading"
+msgstr "设置窗口加载时的文件"
+
+#: rc.c:158
+msgid "File for preferences for each site"
+msgstr "各个站点的首选项文件"
+
+#: rc.c:159
+msgid "Password for anonymous FTP (your mail address)"
+msgstr "匿名FTP密码(您的邮箱地址)"
+
+#: rc.c:160
+msgid "Generate domain part of password for FTP"
+msgstr "为 FTP 生成密码的域部分"
+
+#: rc.c:161
+msgid "User-Agent identification string"
+msgstr "User-Agent 串"
+
+#: rc.c:162
+msgid "Accept-Encoding header"
+msgstr "接受的编码 (Accept-Encoding) 报头"
+
+#: rc.c:163
+msgid "Accept header"
+msgstr "接受 (Accept) 报头"
+
+#: rc.c:164
+msgid "Accept-Language header"
+msgstr "接受的语言 (Accept-Language) 报头"
+
+#: rc.c:165
+msgid "Treat URL-like strings as links in all pages"
+msgstr "将所有页面中类似于 URL 的字符串当做链接"
+
+#: rc.c:166
+msgid "Wrap search"
+msgstr "包装搜索结果"
+
+#: rc.c:167
+msgid "Display unseen objects (e.g. bgimage tag)"
+msgstr "显示看不到的对象 (例如,bdimage标签)"
+
+#: rc.c:168
+msgid "Uncompress compressed data automatically when downloading"
+msgstr "在下载时自动解压被压缩的数据"
+
+#: rc.c:170
+msgid "Run external viewer in a separate session"
+msgstr "在另一个会话中运行外部查看器"
+
+#: rc.c:172
+msgid "Run external viewer in the background"
+msgstr "在后台运行外部查看器"
+
+#: rc.c:174
+msgid "Use external program for directory listing"
+msgstr "使用外部程序列出目录"
+
+#: rc.c:175
+msgid "URL of directory listing command"
+msgstr "目录列表命令的网址"
+
+#: rc.c:177
+msgid "Enable dictionary lookup through CGI"
+msgstr "启用基于 CGI 的词典查询"
+
+#: rc.c:178
+msgid "URL of dictionary lookup command"
+msgstr "字典查找命令的网址"
+
+#: rc.c:180
+msgid "Display link name for images lacking ALT"
+msgstr "对缺少 ALT 的图片显示链接名称"
+
+#: rc.c:181
+msgid "Index file for directories"
+msgstr "目录的索引文件"
+
+#: rc.c:182
+msgid "Prepend http:// to URL automatically"
+msgstr "自动在 URL 前加入 http://"
+
+#: rc.c:183
+msgid "Default value for open-URL command"
+msgstr "打开网址命令的默认值"
+
+#: rc.c:184
+msgid "Decode Content-Transfer-Encoding when saving"
+msgstr "保存时对内容传输编码信息 (Content-Transfer-Encoding) 进行解码"
+
+#: rc.c:185
+msgid "Preserve timestamp when saving"
+msgstr "在保存时保留时间戳"
+
+#: rc.c:187
+msgid "Enable mouse"
+msgstr "启用鼠标"
+
+#: rc.c:188
+msgid "Scroll in reverse direction of mouse drag"
+msgstr "向鼠标拖动的反方向滚动"
+
+#: rc.c:189
+msgid "Behavior of wheel scroll speed"
+msgstr "滚轮滚动速度行为"
+
+#: rc.c:190
+msgid "(A only)Scroll by # (%) of screen"
+msgstr "(仅 A) 每次滚动 # (%) 的屏幕高度"
+
+#: rc.c:191
+msgid "(B only)Scroll by # lines"
+msgstr "(仅 B) 每次滚动 # 行"
+
+#: rc.c:193
+msgid "Free memory of undisplayed buffers"
+msgstr "释放未显示缓存的存储"
+
+#: rc.c:194
+msgid "Suppress `Referer:' header"
+msgstr "禁止 'Referer:' 文件头"
+
+#: rc.c:195
+msgid "Search case-insensitively"
+msgstr "搜索不区分大小写"
+
+#: rc.c:196
+msgid "Use LESSOPEN"
+msgstr "使用 LESSOPEN"
+
+#: rc.c:199
+msgid "Perform SSL server verification"
+msgstr "进行 SSL 服务器检查"
+
+#: rc.c:200
+msgid "PEM encoded certificate file of client"
+msgstr "客户端的 PEM 编码证书文件"
+
+#: rc.c:201
+msgid "PEM encoded private key file of client"
+msgstr "客户端的 PEM 编码私钥文件"
+
+#: rc.c:202
+msgid "Path to directory for PEM encoded certificates of CAs"
+msgstr "PEM 编码 CA 证书目录的路径"
+
+#: rc.c:203
+msgid "File consisting of PEM encoded certificates of CAs"
+msgstr "包含 PEM 编码 CA 证书的文件"
+
+#: rc.c:205
+msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
+msgstr "被禁止的 SSL 方式列表 (2: SSLv2, 3: SSLv3, t:TLSv1)"
+
+#: rc.c:208
+msgid "Enable cookie processing"
+msgstr "开启 Cookie 处理"
+
+#: rc.c:209
+msgid "Print a message when receiving a cookie"
+msgstr "在接收一个 Cookie 时显示一个消息"
+
+#: rc.c:210
+msgid "Accept cookies"
+msgstr "接受 Cookies"
+
+#: rc.c:211
+msgid "Action to be taken on invalid cookie"
+msgstr "对无效 Cookies 进行的操作"
+
+#: rc.c:212
+msgid "Domains to reject cookies from"
+msgstr "拒绝如下域的 Cookies"
+
+#: rc.c:213
+msgid "Domains to accept cookies from"
+msgstr "接受如下域的 Cookies"
+
+#: rc.c:214
+msgid "Domains to avoid [wrong number of dots]"
+msgstr "避免访问的域 [错误的点数]"
+
+#: rc.c:216
+msgid "Number of redirections to follow"
+msgstr "跟随的重定向数量"
+
+#: rc.c:217
+msgid "Enable processing of meta-refresh tag"
+msgstr "开启 meta-refresh 标签处理"
+
+#: rc.c:220
+msgid "Enable Migemo (Roma-ji search)"
+msgstr "开启 Migemo (罗马字搜索)"
+
+#: rc.c:221
+msgid "Migemo command"
+msgstr "Migemo 命令"
+
+#: rc.c:225
+msgid "Display charset"
+msgstr "显示字符集"
+
+#: rc.c:226
+msgid "Default document charset"
+msgstr "默认文档字符集"
+
+#: rc.c:227
+msgid "Automatic charset detect when loading"
+msgstr "在载入时进行自动字符集探测"
+
+#: rc.c:228
+msgid "System charset"
+msgstr "系统字符集"
+
+#: rc.c:229
+msgid "System charset follows locale(LC_CTYPE)"
+msgstr "根据系统设置 (LC_CTYPE) 选定系统字符集"
+
+#: rc.c:230
+msgid "Output halfdump with display charset"
+msgstr "使用显示字符集输出 halfdump"
+
+#: rc.c:231
+msgid "Use multi column characters"
+msgstr "使用多列字符"
+
+#: rc.c:232
+msgid "Use combining characters"
+msgstr "使用合并字符"
+
+#: rc.c:233
+msgid "Use double width for some Unicode characters"
+msgstr "使 Unicode 字符使用双重宽度"
+
+#: rc.c:234
+msgid "Use Unicode language tags"
+msgstr "使用 Unicode 语言标签"
+
+#: rc.c:235
+msgid "Charset conversion using Unicode map"
+msgstr "使用 Unicode 映射进行字符集转换"
+
+#: rc.c:236
+msgid "Charset conversion when loading"
+msgstr "在载入时进行字符集转换"
+
+#: rc.c:237
+msgid "Adjust search string for document charset"
+msgstr "调整文档字符集的搜索字串"
+
+#: rc.c:238
+msgid "Fix character width when conversion"
+msgstr "在转换时固定字符宽度"
+
+#: rc.c:239
+msgid "Use GB 12345 Unicode map instead of GB 2312's"
+msgstr "使用 GB 12345 Unicode 映射而非 GB 2312"
+
+#: rc.c:240
+msgid "Use JIS X 0201 Roman for ISO-2022-JP"
+msgstr "使用 JIS X 0201 罗马字母于 ISO-2022-JP"
+
+#: rc.c:241
+msgid "Use JIS C 6226:1978 for ISO-2022-JP"
+msgstr "使用 JIS C 6226:1978 于 ISO-2022-JP"
+
+#: rc.c:242
+msgid "Use JIS X 0201 Katakana"
+msgstr "使用 JIS X 0201 片假名"
+
+#: rc.c:243
+msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
+msgstr "使用 JIS X 0212:1990 (补充汉字)"
+
+#: rc.c:244
+msgid "Use JIS X 0213:2000 (2000JIS)"
+msgstr "使用 JIS X 0213:2000 (2000JIS)"
+
+#: rc.c:245
+msgid "Strict ISO-2022-JP/KR/CN"
+msgstr "严格 ISO-2022-JP/KR/CN"
+
+#: rc.c:246
+msgid "Treat 4 bytes char. of GB18030 as Unicode"
+msgstr "视 GB18030 编码的 4 字节字符为 Unicode"
+
+#: rc.c:247
+msgid "Simple Preserve space"
+msgstr "简单的保留空间"
+
+#: rc.c:250
+msgid "keymap file"
+msgstr "键盘映射文件"
+
+#: rc.c:267
+msgid "black"
+msgstr "黑色"
+
+#: rc.c:268
+msgid "red"
+msgstr "红色"
+
+#: rc.c:269
+msgid "green"
+msgstr "绿色"
+
+#: rc.c:270
+msgid "yellow"
+msgstr "黄色"
+
+#: rc.c:271
+msgid "blue"
+msgstr "蓝色"
+
+#: rc.c:272
+msgid "magenta"
+msgstr "品红"
+
+#: rc.c:273
+msgid "cyan"
+msgstr "青色"
+
+#: rc.c:274
+msgid "white"
+msgstr "白色"
+
+#: rc.c:275
+msgid "terminal"
+msgstr "终端"
+
+#: rc.c:294
+msgid "none"
+msgstr "无"
+
+#: rc.c:295
+msgid "current URL"
+msgstr "当前 URL"
+
+#: rc.c:296
+msgid "link URL"
+msgstr "链接 URL"
+
+#: rc.c:301
+msgid "simple"
+msgstr "简单"
+
+#: rc.c:302
+msgid "use tag"
+msgstr "使用标签"
+
+#: rc.c:303
+msgid "fontify"
+msgstr ""
+
+#: rc.c:309
+msgid "A:relative to screen height"
+msgstr "A:相对于屏幕高度"
+
+#: rc.c:310
+msgid "B:fixed speed"
+msgstr "B:固定速度"
+
+#: rc.c:317
+msgid "unspecified"
+msgstr "未指定"
+
+#: rc.c:318
+msgid "inet inet6"
+msgstr ""
+
+#: rc.c:319
+msgid "inet6 inet"
+msgstr ""
+
+#: rc.c:320
+msgid "inet only"
+msgstr "仅 inet"
+
+#: rc.c:321
+msgid "inet6 only"
+msgstr "仅 inet6"
+
+#: rc.c:328
+msgid "discard"
+msgstr "丢弃"
+
+#: rc.c:330
+msgid "accept"
+msgstr "接受"
+
+#: rc.c:332
+msgid "ask"
+msgstr "询问"
+
+#: rc.c:339
+msgid "use internal mailer instead"
+msgstr "使用内建邮件发送器"
+
+#: rc.c:341
+msgid "ignore options and use only the address"
+msgstr "忽略选项而只使用地址"
+
+#: rc.c:342
+msgid "use full mailto URL"
+msgstr "使用整个 mailto URL"
+
+#: rc.c:351
+msgid "OFF"
+msgstr "关"
+
+#: rc.c:352
+msgid "Only ISO 2022"
+msgstr "仅 ISO 2022"
+
+#: rc.c:353
+msgid "ON"
+msgstr "开"
+
+#: rc.c:359
+msgid "ASCII"
+msgstr "ASCII"
+
+#: rc.c:360
+msgid "charset specific"
+msgstr "字符集特定"
+
+#: rc.c:361
+msgid "DEC special graphics"
+msgstr "DEC 特殊图像"
+
+#: rc.c:740
+msgid "Display Settings"
+msgstr "显示设置"
+
+#: rc.c:742
+msgid "Color Settings"
+msgstr "颜色设置"
+
+#: rc.c:744
+msgid "Miscellaneous Settings"
+msgstr "杂项设置"
+
+#: rc.c:745
+msgid "Directory Settings"
+msgstr "目录设置"
+
+#: rc.c:746
+msgid "External Program Settings"
+msgstr "外部程序设置"
+
+#: rc.c:747
+msgid "Network Settings"
+msgstr "网络设置"
+
+#: rc.c:748
+msgid "Proxy Settings"
+msgstr "代理设置"
+
+#: rc.c:750
+msgid "SSL Settings"
+msgstr "SSL 设置"
+
+#: rc.c:753
+msgid "Cookie Settings"
+msgstr "Cookie 设置"
+
+#: rc.c:756
+msgid "Charset Settings"
+msgstr "字符集设置"
+
+#. TRANSLATORS:
+#. * AcceptLang default: this is used in Accept-Language: HTTP request
+#. * header. For example, ja.po should translate it as
+#. * "ja;q=1.0, en;q=0.5" like that.
+#.
+#: rc.c:1238
+msgid "en;q=1.0"
+msgstr "zh-CN;q=1.0, zh-Hans;q=0.9, zh;q=0.8, en;q=0.6"
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..954a4d2
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,916 @@
+# zh_TW translation for w3m, machine converted
+# Copyright (C) YEAR THE w3m'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the w3m package.
+# Junde Yi <lmy441900@gmail.com>, 2014.
+# Mingcong Bai <jeffbai@aosc.xyz>, 2014.
+# liushuyu <liushuyu_011@126.com>, 2014.
+# Xingda Zheng <icenowy@outlook.com>, 2014.
+# Mingye Wang (Arthur2e5) <arthur200126@gmail.com>, 2014, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: w3m 0.5.3\n"
+"Report-Msgid-Bugs-To: satodai@w3m.jp\n"
+"POT-Creation-Date: 2016-03-14 19:47+0900\n"
+"PO-Revision-Date: 2016-03-14 19:51+0900\n"
+"Last-Translator: Tatsuya Kinoshita <tats@debian.org>\n"
+"Language-Team: AOSC zh_TW fuzzy <aosc@members.fsf.org>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.6\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: menu.c:269
+msgid " Back         (b) "
+msgstr " 後退         (b) "
+
+#: menu.c:270
+msgid " Select Buffer(s) "
+msgstr " 選擇緩衝區       "
+
+#: menu.c:272
+msgid " Select Tab   (t) "
+msgstr " 選擇標籤     (t) "
+
+#: menu.c:274
+msgid " View Source  (v) "
+msgstr " 檢視源碼     (v) "
+
+#: menu.c:275
+msgid " Edit Source  (e) "
+msgstr " 修改源碼     (e) "
+
+#: menu.c:276
+msgid " Save Source  (S) "
+msgstr " 儲存源碼     (S) "
+
+#: menu.c:277
+msgid " Reload       (r) "
+msgstr " 重新載入     (r) "
+
+#: menu.c:278 menu.c:285 menu.c:289
+msgid " ---------------- "
+msgstr " ---------------- "
+
+#: menu.c:279
+msgid " Go Link      (a) "
+msgstr " 轉到連結     (a) "
+
+#: menu.c:280
+msgid "   on New Tab (n) "
+msgstr "   在新標籤   (n) "
+
+#: menu.c:281
+msgid " Save Link    (A) "
+msgstr " 儲存連結     (A) "
+
+#: menu.c:282
+msgid " View Image   (i) "
+msgstr " 檢視圖片     (i) "
+
+#: menu.c:283
+msgid " Save Image   (I) "
+msgstr " 儲存圖片     (I) "
+
+#: menu.c:284
+msgid " View Frame   (f) "
+msgstr " 檢視框架     (f) "
+
+#: menu.c:286
+msgid " Bookmark     (B) "
+msgstr " 書籤         (B) "
+
+#: menu.c:287
+msgid " Help         (h) "
+msgstr " 幫助         (h) "
+
+#: menu.c:288
+msgid " Option       (o) "
+msgstr " 選項         (o) "
+
+#: menu.c:290
+msgid " Quit         (q) "
+msgstr " 退出         (q) "
+
+#: rc.c:62
+msgid "External Viewer Setup"
+msgstr "外部檢視器設定"
+
+#: rc.c:63
+msgid "Tab width in characters"
+msgstr "文字中的 TAB 寬度"
+
+#: rc.c:64
+msgid "Indent for HTML rendering"
+msgstr "用於 HTML 渲染"
+
+#: rc.c:65
+msgid "Number of pixels per character (4.0...32.0)"
+msgstr "每字型大小的畫素值 (4.0...32.0)"
+
+#: rc.c:66
+msgid "Number of pixels per line (4.0...64.0)"
+msgstr "每行的畫素數 (4.0...64.0)"
+
+#: rc.c:67
+msgid "Number of remembered lines when used as a pager"
+msgstr "當作為分頁器使用時記憶的行數"
+
+#: rc.c:68
+msgid "Use URL history"
+msgstr "使用 URL 歷史記錄"
+
+#: rc.c:69
+msgid "Number of remembered URL"
+msgstr "記錄的 URL 數量"
+
+#: rc.c:70
+msgid "Save URL history"
+msgstr "儲存 URL 歷史"
+
+#: rc.c:71
+msgid "Render frames automatically"
+msgstr "自動渲染框架"
+
+#: rc.c:72
+msgid "Treat argument without scheme as URL"
+msgstr "將無格式的參數看作 URL"
+
+#: rc.c:73
+msgid "Use _self as default target"
+msgstr "將自身作為預設目標 (_S)"
+
+#: rc.c:74
+msgid "Open link on new tab if target is _blank or _new"
+msgstr "如果目標為空 (_b) 或新建 (_n) 在新標籤開啟頁面"
+
+#: rc.c:75
+msgid "Open download list panel on new tab"
+msgstr "開啟下載列表面板於新標籤"
+
+#: rc.c:76
+msgid "Display link URL automatically"
+msgstr "自動顯示連結 URL"
+
+#: rc.c:77
+msgid "Display link numbers"
+msgstr "顯示連結編號"
+
+#: rc.c:78
+msgid "Display decoded URL"
+msgstr "顯示解碼後的 URL"
+
+#: rc.c:79
+msgid "Display current line number"
+msgstr "顯示當前行數"
+
+#: rc.c:80
+msgid "Display inline images"
+msgstr "顯示內聯影象"
+
+#: rc.c:81
+msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
+msgstr "為不帶有 ALT 或 TITLE 字串的內聯影象顯示偽 ALT"
+
+#: rc.c:83
+msgid "Load inline images automatically"
+msgstr "自動載入行內影象"
+
+#: rc.c:84
+msgid "Maximum processes for parallel image loading"
+msgstr "多執行緒影象載入的最大程序數"
+
+#: rc.c:85
+msgid "Use external image viewer"
+msgstr "使用外部圖片檢視器"
+
+#: rc.c:86
+msgid "Scale of image (%)"
+msgstr "影象比例尺 (%)"
+
+#: rc.c:87
+msgid "External command to display image"
+msgstr "用於顯示影象的外部命令"
+
+#: rc.c:88
+msgid "Use link list of image map"
+msgstr "使用影象對映的連結列表"
+
+#: rc.c:90
+msgid "Display file names in multi-column format"
+msgstr "以多列格式顯示檔名"
+
+#: rc.c:91
+msgid "Use ASCII equivalents to display entities"
+msgstr "使用對應的 ASCII 編碼來顯示實體 "
+
+#: rc.c:92
+msgid "Character type for border of table and menu"
+msgstr "表格和選單邊框的字元類型"
+
+#: rc.c:93
+msgid "Display table borders, ignore value of BORDER"
+msgstr "顯示錶格邊框,忽略 BORDER 數值"
+
+#: rc.c:94
+msgid "Fold lines in TEXTAREA"
+msgstr "在文字區 (TEXTAREA) 中摺疊行"
+
+#: rc.c:95
+msgid "Display INS, DEL, S and STRIKE element"
+msgstr "顯示 INS, DEL, S 及 STRIKE 元素"
+
+#: rc.c:96
+msgid "Display with color"
+msgstr "使用帶顏色的顯示"
+
+#: rc.c:97
+msgid "Color of normal character"
+msgstr "一般文字顏色"
+
+#: rc.c:98
+msgid "Color of anchor"
+msgstr "連結文字顏色"
+
+#: rc.c:99
+msgid "Color of image link"
+msgstr "圖片連結顏色"
+
+#: rc.c:100
+msgid "Color of form"
+msgstr "表格顏色"
+
+#: rc.c:101
+msgid "Enable coloring of active link"
+msgstr "為活動連結開啟上色"
+
+#: rc.c:102
+msgid "Color of currently active link"
+msgstr "當前活動連結的顏色"
+
+#: rc.c:103
+msgid "Use visited link color"
+msgstr "為訪問過的連結上色"
+
+#: rc.c:104
+msgid "Color of visited link"
+msgstr "已訪問連結顏色"
+
+#: rc.c:105
+msgid "Color of background"
+msgstr "背景色"
+
+#: rc.c:106
+msgid "Color of mark"
+msgstr "標記顏色"
+
+#: rc.c:107
+msgid "Use proxy"
+msgstr "使用代理伺服器"
+
+#: rc.c:108
+msgid "URL of HTTP proxy host"
+msgstr "HTTP 代理主機地址"
+
+#: rc.c:110
+msgid "URL of HTTPS proxy host"
+msgstr "HTTPS 代理主機地址"
+
+#: rc.c:113
+msgid "URL of GOPHER proxy host"
+msgstr "GOPHER 代理主機地址"
+
+#: rc.c:115
+msgid "URL of FTP proxy host"
+msgstr "FTP 代理主機地址"
+
+#: rc.c:116
+msgid "Domains to be accessed directly (no proxy)"
+msgstr "直接訪問而不是用代理伺服器訪問的 URL"
+
+#: rc.c:117
+msgid "Check noproxy by network address"
+msgstr "根據網路地址檢查 noproxy"
+
+#: rc.c:118
+msgid "Disable cache"
+msgstr "禁用快取"
+
+#: rc.c:120
+msgid "News server"
+msgstr "新聞伺服器"
+
+#: rc.c:121
+msgid "Mode of news server"
+msgstr "新聞伺服器模式"
+
+#: rc.c:122
+msgid "Number of news messages"
+msgstr "新聞訊息的數量"
+
+#: rc.c:124
+msgid "Order of name resolution"
+msgstr "名稱解析順序"
+
+#: rc.c:125
+msgid "Directory corresponding to / (document root)"
+msgstr "對應 / 的目錄 (文件根目錄)"
+
+#: rc.c:126
+msgid "Directory corresponding to /~user"
+msgstr "對應 /~user 的目錄"
+
+#: rc.c:127
+msgid "Directory corresponding to /cgi-bin"
+msgstr "對應 /cgi-bin 的目錄"
+
+#: rc.c:128
+msgid "Confirm when quitting with q"
+msgstr "使用 q 鍵退出時請求確認"
+
+#: rc.c:129
+msgid "Close tab if buffer is last when back"
+msgstr "在返回時緩衝區還是以前狀態就關閉標籤頁"
+
+#: rc.c:131
+msgid "Enable mark operations"
+msgstr "啟用標記操作"
+
+#: rc.c:133
+msgid "Enable Emacs-style line editing"
+msgstr "啟用 Emacs 風格的行編輯"
+
+#: rc.c:134
+msgid "Enable vi-like numeric prefix"
+msgstr "啟動 vi 式的數字跳轉"
+
+#: rc.c:135
+msgid "Move cursor to top line when going to label"
+msgstr "當移動到標籤時將游標移到最頂行"
+
+#: rc.c:136
+msgid "Move cursor to top line when moving to next page"
+msgstr "當轉到下一頁時將游標移到最頂行"
+
+#: rc.c:137
+msgid "Fold lines of plain text file"
+msgstr "對純文字檔案實行行摺疊"
+
+#: rc.c:138
+msgid "Show line numbers"
+msgstr "顯示行號"
+
+#: rc.c:139
+msgid "Show search string"
+msgstr "顯示搜尋字元串"
+
+#: rc.c:140
+msgid "List of mime.types files"
+msgstr "mime.type 檔案列表"
+
+#: rc.c:141
+msgid "List of mailcap files"
+msgstr "mailcap 檔案列表"
+
+#: rc.c:142
+msgid "List of urimethodmap files"
+msgstr "urlmethodmap 檔案列表"
+
+#: rc.c:143
+msgid "Editor"
+msgstr "編輯器"
+
+#: rc.c:144
+msgid "Mailer"
+msgstr "傳送者"
+
+#: rc.c:145
+msgid "How to call Mailer for mailto URLs with options"
+msgstr "啟動 mailto 地址時呼叫電子郵件程式的方式和參數"
+
+#: rc.c:146
+msgid "External browser"
+msgstr "外部瀏覽器"
+
+#: rc.c:147
+msgid "2nd external browser"
+msgstr "第二外部瀏覽器"
+
+#: rc.c:148
+msgid "3rd external browser"
+msgstr "第三外部瀏覽器"
+
+#: rc.c:149
+msgid "4th external browser"
+msgstr "第四外部瀏覽器"
+
+#: rc.c:150
+msgid "5th external browser"
+msgstr "第五外部瀏覽器"
+
+#: rc.c:151
+msgid "6th external browser"
+msgstr "第六外部瀏覽器"
+
+#: rc.c:152
+msgid "7th external browser"
+msgstr "第七外部瀏覽器"
+
+#: rc.c:153
+msgid "8th external browser"
+msgstr "第八外部瀏覽器"
+
+#: rc.c:154
+msgid "9th external browser"
+msgstr "第九外部瀏覽器"
+
+#: rc.c:155
+msgid "Disable secret file security check"
+msgstr "關閉祕密檔案安全檢查"
+
+#: rc.c:156
+msgid "Password file"
+msgstr "密碼檔案"
+
+#: rc.c:157
+msgid "File for setting form on loading"
+msgstr "設定視窗載入時的檔案"
+
+#: rc.c:158
+msgid "File for preferences for each site"
+msgstr "各個站點的首選項檔案"
+
+#: rc.c:159
+msgid "Password for anonymous FTP (your mail address)"
+msgstr "匿名FTP密碼(您的郵箱地址)"
+
+#: rc.c:160
+msgid "Generate domain part of password for FTP"
+msgstr "為 FTP 生成密碼的域部分"
+
+#: rc.c:161
+msgid "User-Agent identification string"
+msgstr "User-Agent 串"
+
+#: rc.c:162
+msgid "Accept-Encoding header"
+msgstr "接受的編碼 (Accept-Encoding) 報頭"
+
+#: rc.c:163
+msgid "Accept header"
+msgstr "接受 (Accept) 報頭"
+
+#: rc.c:164
+msgid "Accept-Language header"
+msgstr "接受的語言 (Accept-Language) 報頭"
+
+#: rc.c:165
+msgid "Treat URL-like strings as links in all pages"
+msgstr "將所有頁面中類似於 URL 的字元串當做連結"
+
+#: rc.c:166
+msgid "Wrap search"
+msgstr "包裝搜尋結果"
+
+#: rc.c:167
+msgid "Display unseen objects (e.g. bgimage tag)"
+msgstr "顯示看不到的物件 (例如,bdimage標籤)"
+
+#: rc.c:168
+msgid "Uncompress compressed data automatically when downloading"
+msgstr "在下載時自動解壓被壓縮的資料"
+
+#: rc.c:170
+msgid "Run external viewer in a separate session"
+msgstr "在另一個會話中執行外部檢視器"
+
+#: rc.c:172
+msgid "Run external viewer in the background"
+msgstr "在後臺執行外部檢視器"
+
+#: rc.c:174
+msgid "Use external program for directory listing"
+msgstr "使用外部程式列出目錄"
+
+#: rc.c:175
+msgid "URL of directory listing command"
+msgstr "目錄列表命令的網址"
+
+#: rc.c:177
+msgid "Enable dictionary lookup through CGI"
+msgstr "啟用基於 CGI 的詞典查詢"
+
+#: rc.c:178
+msgid "URL of dictionary lookup command"
+msgstr "字典查詢命令的網址"
+
+#: rc.c:180
+msgid "Display link name for images lacking ALT"
+msgstr "對缺少 ALT 的圖片顯示連結名稱"
+
+#: rc.c:181
+msgid "Index file for directories"
+msgstr "目錄的索引檔案"
+
+#: rc.c:182
+msgid "Prepend http:// to URL automatically"
+msgstr "自動在 URL 前加入 http://"
+
+#: rc.c:183
+msgid "Default value for open-URL command"
+msgstr "開啟網址命令的預設值"
+
+#: rc.c:184
+msgid "Decode Content-Transfer-Encoding when saving"
+msgstr "儲存時對內容傳輸編碼資訊 (Content-Transfer-Encoding) 進行解碼"
+
+#: rc.c:185
+msgid "Preserve timestamp when saving"
+msgstr "在儲存時保留時間戳"
+
+#: rc.c:187
+msgid "Enable mouse"
+msgstr "啟用滑鼠"
+
+#: rc.c:188
+msgid "Scroll in reverse direction of mouse drag"
+msgstr "向滑鼠拖動的反方向滾動"
+
+#: rc.c:189
+msgid "Behavior of wheel scroll speed"
+msgstr "滾輪滾動速度行為"
+
+#: rc.c:190
+msgid "(A only)Scroll by # (%) of screen"
+msgstr "(僅 A) 每次滾動 # (%) 的螢幕高度"
+
+#: rc.c:191
+msgid "(B only)Scroll by # lines"
+msgstr "(僅 B) 每次滾動 # 行"
+
+#: rc.c:193
+msgid "Free memory of undisplayed buffers"
+msgstr "釋放未顯示快取的儲存"
+
+#: rc.c:194
+msgid "Suppress `Referer:' header"
+msgstr "禁止 'Referer:' 檔案頭"
+
+#: rc.c:195
+msgid "Search case-insensitively"
+msgstr "搜尋不區分大小寫"
+
+#: rc.c:196
+msgid "Use LESSOPEN"
+msgstr "使用 LESSOPEN"
+
+#: rc.c:199
+msgid "Perform SSL server verification"
+msgstr "進行 SSL 伺服器檢查"
+
+#: rc.c:200
+msgid "PEM encoded certificate file of client"
+msgstr "客戶端的 PEM 編碼證書檔案"
+
+#: rc.c:201
+msgid "PEM encoded private key file of client"
+msgstr "客戶端的 PEM 編碼私鑰檔案"
+
+#: rc.c:202
+msgid "Path to directory for PEM encoded certificates of CAs"
+msgstr "PEM 編碼 CA 證書目錄的路徑"
+
+#: rc.c:203
+msgid "File consisting of PEM encoded certificates of CAs"
+msgstr "包含 PEM 編碼 CA 證書的檔案"
+
+#: rc.c:205
+msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
+msgstr "被禁止的 SSL 方式列表 (2: SSLv2, 3: SSLv3, t:TLSv1)"
+
+#: rc.c:208
+msgid "Enable cookie processing"
+msgstr "開啟 Cookie 處理"
+
+#: rc.c:209
+msgid "Print a message when receiving a cookie"
+msgstr "在接收一個 Cookie 時顯示一個訊息"
+
+#: rc.c:210
+msgid "Accept cookies"
+msgstr "接受 Cookies"
+
+#: rc.c:211
+msgid "Action to be taken on invalid cookie"
+msgstr "對無效 Cookies 進行的操作"
+
+#: rc.c:212
+msgid "Domains to reject cookies from"
+msgstr "拒絕如下域的 Cookies"
+
+#: rc.c:213
+msgid "Domains to accept cookies from"
+msgstr "接受如下域的 Cookies"
+
+#: rc.c:214
+msgid "Domains to avoid [wrong number of dots]"
+msgstr "避免訪問的域 [錯誤的點數]"
+
+#: rc.c:216
+msgid "Number of redirections to follow"
+msgstr "跟隨的重定向數量"
+
+#: rc.c:217
+msgid "Enable processing of meta-refresh tag"
+msgstr "開啟 meta-refresh 標籤處理"
+
+#: rc.c:220
+msgid "Enable Migemo (Roma-ji search)"
+msgstr "開啟 Migemo (羅馬字搜尋)"
+
+#: rc.c:221
+msgid "Migemo command"
+msgstr "Migemo 命令"
+
+#: rc.c:225
+msgid "Display charset"
+msgstr "顯示字符集"
+
+#: rc.c:226
+msgid "Default document charset"
+msgstr "預設文件字符集"
+
+#: rc.c:227
+msgid "Automatic charset detect when loading"
+msgstr "在載入時進行自動字符集探測"
+
+#: rc.c:228
+msgid "System charset"
+msgstr "系統字符集"
+
+#: rc.c:229
+msgid "System charset follows locale(LC_CTYPE)"
+msgstr "根據系統設定 (LC_CTYPE) 選定系統字符集"
+
+#: rc.c:230
+msgid "Output halfdump with display charset"
+msgstr "使用顯示字符集輸出 halfdump"
+
+#: rc.c:231
+msgid "Use multi column characters"
+msgstr "使用多列字元"
+
+#: rc.c:232
+msgid "Use combining characters"
+msgstr "使用合併字元"
+
+#: rc.c:233
+msgid "Use double width for some Unicode characters"
+msgstr "使 Unicode 字元使用雙重寬度"
+
+#: rc.c:234
+msgid "Use Unicode language tags"
+msgstr "使用 Unicode 語言標籤"
+
+#: rc.c:235
+msgid "Charset conversion using Unicode map"
+msgstr "使用 Unicode 對映進行字符集轉換"
+
+#: rc.c:236
+msgid "Charset conversion when loading"
+msgstr "在載入時進行字符集轉換"
+
+#: rc.c:237
+msgid "Adjust search string for document charset"
+msgstr "調整文件字符集的搜尋字串"
+
+#: rc.c:238
+msgid "Fix character width when conversion"
+msgstr "在轉換時固定字元寬度"
+
+#: rc.c:239
+msgid "Use GB 12345 Unicode map instead of GB 2312's"
+msgstr "使用 GB 12345 Unicode 對映而非 GB 2312"
+
+#: rc.c:240
+msgid "Use JIS X 0201 Roman for ISO-2022-JP"
+msgstr "使用 JIS X 0201 羅馬字母於 ISO-2022-JP"
+
+#: rc.c:241
+msgid "Use JIS C 6226:1978 for ISO-2022-JP"
+msgstr "使用 JIS C 6226:1978 於 ISO-2022-JP"
+
+#: rc.c:242
+msgid "Use JIS X 0201 Katakana"
+msgstr "使用 JIS X 0201 片假名"
+
+#: rc.c:243
+msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
+msgstr "使用 JIS X 0212:1990 (補充漢字)"
+
+#: rc.c:244
+msgid "Use JIS X 0213:2000 (2000JIS)"
+msgstr "使用 JIS X 0213:2000 (2000JIS)"
+
+#: rc.c:245
+msgid "Strict ISO-2022-JP/KR/CN"
+msgstr "嚴格 ISO-2022-JP/KR/CN"
+
+#: rc.c:246
+msgid "Treat 4 bytes char. of GB18030 as Unicode"
+msgstr "視 GB18030 編碼的 4 位元組字元為 Unicode"
+
+#: rc.c:247
+msgid "Simple Preserve space"
+msgstr "簡單的保留空間"
+
+#: rc.c:250
+msgid "keymap file"
+msgstr "鍵盤對映檔案"
+
+#: rc.c:267
+msgid "black"
+msgstr "黑色"
+
+#: rc.c:268
+msgid "red"
+msgstr "紅色"
+
+#: rc.c:269
+msgid "green"
+msgstr "綠色"
+
+#: rc.c:270
+msgid "yellow"
+msgstr "黃色"
+
+#: rc.c:271
+msgid "blue"
+msgstr "藍色"
+
+#: rc.c:272
+msgid "magenta"
+msgstr "品紅"
+
+#: rc.c:273
+msgid "cyan"
+msgstr "青色"
+
+#: rc.c:274
+msgid "white"
+msgstr "白色"
+
+#: rc.c:275
+msgid "terminal"
+msgstr "終端"
+
+#: rc.c:294
+msgid "none"
+msgstr "無"
+
+#: rc.c:295
+msgid "current URL"
+msgstr "當前 URL"
+
+#: rc.c:296
+msgid "link URL"
+msgstr "連結 URL"
+
+#: rc.c:301
+msgid "simple"
+msgstr "簡單"
+
+#: rc.c:302
+msgid "use tag"
+msgstr "使用標籤"
+
+#: rc.c:303
+msgid "fontify"
+msgstr ""
+
+#: rc.c:309
+msgid "A:relative to screen height"
+msgstr "A:相對於螢幕高度"
+
+#: rc.c:310
+msgid "B:fixed speed"
+msgstr "B:固定速度"
+
+#: rc.c:317
+msgid "unspecified"
+msgstr "未指定"
+
+#: rc.c:318
+msgid "inet inet6"
+msgstr ""
+
+#: rc.c:319
+msgid "inet6 inet"
+msgstr ""
+
+#: rc.c:320
+msgid "inet only"
+msgstr "僅 inet"
+
+#: rc.c:321
+msgid "inet6 only"
+msgstr "僅 inet6"
+
+#: rc.c:328
+msgid "discard"
+msgstr "丟棄"
+
+#: rc.c:330
+msgid "accept"
+msgstr "接受"
+
+#: rc.c:332
+msgid "ask"
+msgstr "詢問"
+
+#: rc.c:339
+msgid "use internal mailer instead"
+msgstr "使用內建郵件傳送器"
+
+#: rc.c:341
+msgid "ignore options and use only the address"
+msgstr "忽略選項而只使用地址"
+
+#: rc.c:342
+msgid "use full mailto URL"
+msgstr "使用整個 mailto URL"
+
+#: rc.c:351
+msgid "OFF"
+msgstr "關"
+
+#: rc.c:352
+msgid "Only ISO 2022"
+msgstr "僅 ISO 2022"
+
+#: rc.c:353
+msgid "ON"
+msgstr "開"
+
+#: rc.c:359
+msgid "ASCII"
+msgstr "ASCII"
+
+#: rc.c:360
+msgid "charset specific"
+msgstr "字符集特定"
+
+#: rc.c:361
+msgid "DEC special graphics"
+msgstr "DEC 特殊影象"
+
+#: rc.c:740
+msgid "Display Settings"
+msgstr "顯示設定"
+
+#: rc.c:742
+msgid "Color Settings"
+msgstr "顏色設定"
+
+#: rc.c:744
+msgid "Miscellaneous Settings"
+msgstr "雜項設定"
+
+#: rc.c:745
+msgid "Directory Settings"
+msgstr "目錄設定"
+
+#: rc.c:746
+msgid "External Program Settings"
+msgstr "外部程式設定"
+
+#: rc.c:747
+msgid "Network Settings"
+msgstr "網路設定"
+
+#: rc.c:748
+msgid "Proxy Settings"
+msgstr "代理設定"
+
+#: rc.c:750
+msgid "SSL Settings"
+msgstr "SSL 設定"
+
+#: rc.c:753
+msgid "Cookie Settings"
+msgstr "Cookie 設定"
+
+#: rc.c:756
+msgid "Charset Settings"
+msgstr "字符集設定"
+
+#. TRANSLATORS:
+#. * AcceptLang default: this is used in Accept-Language: HTTP request
+#. * header. For example, ja.po should translate it as
+#. * "ja;q=1.0, en;q=0.5" like that.
+#.
+#: rc.c:1238
+msgid "en;q=1.0"
+msgstr "zh-TW;q=1.0, zh-Hants;q=0.9, zh;q=0.8, en;q=0.6"
diff --git a/proto.h b/proto.h
index f8a7345..d744e14 100644
--- a/proto.h
+++ b/proto.h
@@ -11,6 +11,8 @@ extern void pushEvent(int cmd, void *data);
 extern MySignalHandler intTrap(SIGNAL_ARG);
 extern void pgFore(void);
 extern void pgBack(void);
+extern void hpgFore(void);
+extern void hpgBack(void);
 extern void lup1(void);
 extern void ldown1(void);
 extern void ctrCsrV(void);
@@ -61,6 +63,7 @@ extern void submitForm(void);
 extern void followForm(void);
 extern void topA(void);
 extern void lastA(void);
+extern void nthA(void);
 extern void onA(void);
 
 extern void nextA(void);
@@ -162,6 +165,24 @@ extern Str searchURIMethods(ParsedURL *pu);
 extern void chkExternalURIBuffer(Buffer *buf);
 #endif
 extern ParsedURL *schemeToProxy(int scheme);
+#ifdef USE_M17N
+extern wc_ces url_to_charset(const char *url, const ParsedURL *base,
+			     wc_ces doc_charset);
+extern char *url_encode(const char *url, const ParsedURL *base,
+			wc_ces doc_charset);
+#if 0
+extern char *url_decode(const char *url, const ParsedURL *base,
+			wc_ces doc_charset);
+#endif
+extern char *url_decode2(const char *url, const Buffer *buf);
+#else /* !defined(USE_M17N) */
+#define url_encode(url, base, cs) url_quote(url)
+extern char *url_decode0(const char *url);
+#if 0
+#define url_decode(url, base, cs) url_decode0(url)
+#endif
+#define url_decode2(url, buf) url_decode0(url)
+#endif /* !defined(USE_M17N) */
 extern void examineFile(char *path, URLFile *uf);
 extern char *acceptableEncoding();
 extern int dir_exist(char *path);
@@ -180,7 +201,6 @@ extern void push_symbol(Str str, char symbol, int width, int n);
 #ifdef USE_UNICODE
 extern void update_utf8_symbol(void);
 #endif
-extern Buffer *loadFile(char *path);
 extern Buffer *loadGeneralFile(char *path, ParsedURL *current, char *referer,
 			       int flag, FormList *request);
 extern int is_boundary(unsigned char *, unsigned char *);
@@ -207,6 +227,8 @@ extern int getImageSize(ImageCache * cache);
 extern Str process_img(struct parsed_tag *tag, int width);
 extern Str process_anchor(struct parsed_tag *tag, char *tagbuf);
 extern Str process_input(struct parsed_tag *tag);
+extern Str process_button(struct parsed_tag *tag);
+extern Str process_n_button(void);
 extern Str process_select(struct parsed_tag *tag);
 extern Str process_n_select(void);
 extern void feed_select(char *str);
@@ -249,8 +271,7 @@ extern Buffer *openPagerBuffer(InputStream stream, Buffer *buf);
 extern Buffer *openGeneralPagerBuffer(InputStream stream);
 extern Line *getNextPage(Buffer *buf, int plen);
 extern int save2tmp(URLFile uf, char *tmpf);
-extern int doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
-		      Buffer *defaultbuf);
+extern Buffer *doExternal(URLFile uf, char *type, Buffer *defaultbuf);
 extern int _doFileCopy(char *tmpf, char *defstr, int download);
 #define doFileCopy(tmpf, defstr) _doFileCopy(tmpf, defstr, FALSE);
 extern int doFileMove(char *tmpf, char *defstr);
@@ -507,7 +528,7 @@ extern ParsedURL *baseURL(Buffer *buf);
 extern int openSocket(char *hostname, char *remoteport_name,
 		      unsigned short remoteport_num);
 extern void parseURL(char *url, ParsedURL *p_url, ParsedURL *current);
-extern void copyParsedURL(ParsedURL *p, ParsedURL *q);
+extern void copyParsedURL(ParsedURL *p, const ParsedURL *q);
 extern void parseURL2(char *url, ParsedURL *pu, ParsedURL *current);
 extern Str parsedURL2Str(ParsedURL *pu);
 extern int getURLScheme(char **url);
@@ -586,9 +607,12 @@ extern char *getAnchorText(Buffer *buf, AnchorList *al, Anchor *a);
 extern Buffer *link_list_panel(Buffer *buf);
 
 extern Str decodeB(char **ww);
+extern void decodeB_to_growbuf(struct growbuf *gb, char **ww);
 extern Str decodeQ(char **ww);
 extern Str decodeQP(char **ww);
+extern void decodeQP_to_growbuf(struct growbuf *gb, char **ww);
 extern Str decodeU(char **ww);
+extern void decodeU_to_growbuf(struct growbuf *gb, char **ww);
 #ifdef USE_M17N
 extern Str decodeWord(char **ow, wc_ces * charset);
 extern Str decodeMIME(Str orgstr, wc_ces * charset);
@@ -611,6 +635,7 @@ extern char *confFile(char *base);
 extern char *auxbinFile(char *base);
 extern char *libFile(char *base);
 extern char *helpFile(char *base);
+extern const void *querySiteconf(const ParsedURL *query_pu, int field);
 extern Str localCookie(void);
 extern Str loadLocalDir(char *dirname);
 extern void set_environ(char *var, char *value);
@@ -683,6 +708,7 @@ extern void reMark(void);
 
 #ifdef USE_MOUSE
 extern void mouse(void);
+extern void sgrmouse(void);
 extern void mouse_init(void);
 extern void mouse_end(void);
 extern void mouse_active(void);
@@ -698,6 +724,7 @@ extern void tabMs(void);
 extern void closeTMs(void);
 #else				/* not USE_MOUSE */
 #define mouse nulcmd
+#define sgrmouse nulcmd
 #define msToggle nulcmd
 #define movMs nulcmd
 #define menuMs nulcmd
@@ -723,6 +750,8 @@ extern int getKey(char *s);
 extern char *getKeyData(int key);
 extern char *getWord(char **str);
 extern char *getQWord(char **str);
+struct regex;
+extern char *getRegexWord(const char **str, struct regex **regex_ret);
 #ifdef USE_MOUSE
 extern void initMouseAction(void);
 #endif
@@ -786,5 +815,3 @@ extern void dispVer(void);
 void srand48(long);
 long lrand48(void);
 #endif
-
-#include "indep.h"
diff --git a/rc.c b/rc.c
index 8441a39..7de87b8 100644
--- a/rc.c
+++ b/rc.c
@@ -9,7 +9,9 @@
 #include <errno.h>
 #include "parsetag.h"
 #include "local.h"
+#include "regex.h"
 #include <stdlib.h>
+#include <stddef.h>
 
 struct param_ptr {
     char *name;
@@ -88,6 +90,7 @@ static int OptionEncode = FALSE;
 #define CMT_MULTICOL     N_("Display file names in multi-column format")
 #define CMT_ALT_ENTITY   N_("Use ASCII equivalents to display entities")
 #define CMT_GRAPHIC_CHAR N_("Character type for border of table and menu")
+#define CMT_DISP_BORDERS N_("Display table borders, ignore value of BORDER")
 #define CMT_FOLD_TEXTAREA N_("Fold lines in TEXTAREA")
 #define CMT_DISP_INS_DEL N_("Display INS, DEL, S and STRIKE element")
 #define CMT_COLOR        N_("Display with color")
@@ -140,12 +143,19 @@ static int OptionEncode = FALSE;
 #define CMT_EDITOR       N_("Editor")
 #define CMT_MAILER       N_("Mailer")
 #define CMT_MAILTO_OPTIONS N_("How to call Mailer for mailto URLs with options")
-#define CMT_EXTBRZ       N_("External Browser")
-#define CMT_EXTBRZ2      N_("Second External Browser")
-#define CMT_EXTBRZ3      N_("Third External Browser")
+#define CMT_EXTBRZ       N_("External browser")
+#define CMT_EXTBRZ2      N_("2nd external browser")
+#define CMT_EXTBRZ3      N_("3rd external browser")
+#define CMT_EXTBRZ4      N_("4th external browser")
+#define CMT_EXTBRZ5      N_("5th external browser")
+#define CMT_EXTBRZ6      N_("6th external browser")
+#define CMT_EXTBRZ7      N_("7th external browser")
+#define CMT_EXTBRZ8      N_("8th external browser")
+#define CMT_EXTBRZ9      N_("9th external browser")
 #define CMT_DISABLE_SECRET_SECURITY_CHECK	N_("Disable secret file security check")
 #define CMT_PASSWDFILE	 N_("Password file")
 #define CMT_PRE_FORM_FILE	N_("File for setting form on loading")
+#define CMT_SITECONF_FILE	N_("File for preferences for each site")
 #define CMT_FTPPASS      N_("Password for anonymous FTP (your mail address)")
 #define CMT_FTPPASS_HOSTNAMEGEN N_("Generate domain part of password for FTP")
 #define CMT_USERAGENT    N_("User-Agent identification string")
@@ -390,6 +400,8 @@ struct param_ptr params1[] = {
      NULL},
     {"graphic_char", P_CHARINT, PI_SEL_C, (void *)&UseGraphicChar,
      CMT_GRAPHIC_CHAR, (void *)graphic_char_str},
+    {"display_borders", P_CHARINT, PI_ONOFF, (void *)&DisplayBorders,
+     CMT_DISP_BORDERS, NULL},
     {"fold_textarea", P_CHARINT, PI_ONOFF, (void *)&FoldTextarea,
      CMT_FOLD_TEXTAREA, NULL},
     {"display_ins_del", P_INT, PI_SEL_C, (void *)&displayInsDel,
@@ -561,6 +573,18 @@ struct param_ptr params6[] = {
      NULL},
     {"extbrowser3", P_STRING, PI_TEXT, (void *)&ExtBrowser3, CMT_EXTBRZ3,
      NULL},
+    {"extbrowser4", P_STRING, PI_TEXT, (void *)&ExtBrowser4, CMT_EXTBRZ4,
+     NULL},
+    {"extbrowser5", P_STRING, PI_TEXT, (void *)&ExtBrowser5, CMT_EXTBRZ5,
+     NULL},
+    {"extbrowser6", P_STRING, PI_TEXT, (void *)&ExtBrowser6, CMT_EXTBRZ6,
+     NULL},
+    {"extbrowser7", P_STRING, PI_TEXT, (void *)&ExtBrowser7, CMT_EXTBRZ7,
+     NULL},
+    {"extbrowser8", P_STRING, PI_TEXT, (void *)&ExtBrowser8, CMT_EXTBRZ8,
+     NULL},
+    {"extbrowser9", P_STRING, PI_TEXT, (void *)&ExtBrowser9, CMT_EXTBRZ9,
+     NULL},
     {"bgextviewer", P_INT, PI_ONOFF, (void *)&BackgroundExtViewer,
      CMT_BGEXTVIEW, NULL},
     {"use_lessopen", P_INT, PI_ONOFF, (void *)&use_lessopen, CMT_USE_LESSOPEN,
@@ -619,6 +643,8 @@ struct param_ptr params9[] = {
      CMT_FTPPASS_HOSTNAMEGEN, NULL},
     {"pre_form_file", P_STRING, PI_TEXT, (void *)&pre_form_file,
      CMT_PRE_FORM_FILE, NULL},
+    {"siteconf_file", P_STRING, PI_TEXT, (void *)&siteconf_file,
+     CMT_SITECONF_FILE, NULL},
     {"user_agent", P_STRING, PI_TEXT, (void *)&UserAgent, CMT_USERAGENT, NULL},
     {"no_referer", P_INT, PI_ONOFF, (void *)&NoSendReferer, CMT_NOSENDREFERER,
      NULL},
@@ -771,7 +797,7 @@ create_option_search_table()
     qsort(RC_search_table, RC_table_size, sizeof(struct rc_search_table),
 	  (int (*)(const void *, const void *))compare_table);
 
-    diff1 = diff2 = 0;
+    diff2 = 0;
     for (i = 0; i < RC_table_size - 1; i++) {
 	p = RC_search_table[i].param->name;
 	q = RC_search_table[i + 1].param->name;
@@ -829,7 +855,7 @@ void
 show_params(FILE * fp)
 {
     int i, j, l;
-    char *t = NULL;
+    const char *t = "";
     char *cmt;
 
 #ifdef USE_M17N
@@ -1173,6 +1199,8 @@ do_mkdir(const char *dir, long mode)
 #endif				/* not __MINW32_VERSION */
 #endif				/* not __EMX__ */
 
+static void loadSiteconf(void);
+
 void
 sync_with_option(void)
 {
@@ -1199,6 +1227,7 @@ sync_with_option(void)
 #endif
     loadPasswd();
     loadPreForm();
+    loadSiteconf();
 
     if (AcceptLang == NULL || *AcceptLang == '\0') {
 	/* TRANSLATORS: 
@@ -1483,6 +1512,7 @@ panel_set_option(struct parsed_tagarg *arg)
 {
     FILE *f = NULL;
     char *p;
+    Str s = Strnew(), tmp;
 
     if (config_file == NULL) {
 	disp_message("There's no config file... config not saved", FALSE);
@@ -1498,14 +1528,17 @@ panel_set_option(struct parsed_tagarg *arg)
 	if (arg->value) {
 	    p = conv_to_system(arg->value);
 	    if (set_param(arg->arg, p)) {
-		if (f)
-		    fprintf(f, "%s %s\n", arg->arg, p);
+		tmp = Sprintf("%s %s\n", arg->arg, p);
+		Strcat(tmp, s);
+		s = tmp;
 	    }
 	}
 	arg = arg->next;
     }
-    if (f)
+    if (f) {
+	fputs(s->ptr, f);
 	fclose(f);
+    }
     sync_with_option();
     backBf();
 }
@@ -1556,3 +1589,217 @@ helpFile(char *base)
     return expandPath(Strnew_m_charp(w3m_help_dir(), "/", base, NULL)->ptr);
 }
 #endif
+
+/* siteconf */
+/*
+ * url "<url>"|/<re-url>/|m@<re-url>@i [exact]
+ * substitute_url "<destination-url>"
+ * url_charset <charset>
+ * no_referer_from on|off
+ * no_referer_to on|off
+ * 
+ * The last match wins.
+ */
+
+struct siteconf_rec {
+    struct siteconf_rec *next;
+    char *url;
+    Regex *re_url;
+    int url_exact;
+    unsigned char mask[(SCONF_N_FIELD + 7) >> 3];
+
+    char *substitute_url;
+#ifdef USE_M17N
+    wc_ces url_charset;
+#endif
+    int no_referer_from;
+    int no_referer_to;
+};
+#define SCONF_TEST(ent, f) ((ent)->mask[(f)>>3] & (1U<<((f)&7)))
+#define SCONF_SET(ent, f) ((ent)->mask[(f)>>3] |= (1U<<((f)&7)))
+#define SCONF_CLEAR(ent, f) ((ent)->mask[(f)>>3] &= ~(1U<<((f)&7)))
+
+static struct siteconf_rec *siteconf_head = NULL;
+static struct siteconf_rec *newSiteconfRec(void);
+
+static struct siteconf_rec *
+newSiteconfRec(void)
+{
+    struct siteconf_rec *ent;
+
+    ent = New(struct siteconf_rec);
+    ent->next = NULL;
+    ent->url = NULL;
+    ent->re_url = NULL;
+    ent->url_exact = FALSE;
+    memset(ent->mask, 0, sizeof(ent->mask));
+
+    ent->substitute_url = NULL;
+#ifdef USE_M17N
+    ent->url_charset = 0;
+#endif
+    return ent;
+}
+
+static void
+loadSiteconf(void)
+{
+    char *efname;
+    FILE *fp;
+    Str line;
+    struct siteconf_rec *ent = NULL;
+
+    siteconf_head = NULL;
+    if (!siteconf_file)
+	return;
+    if ((efname = expandPath(siteconf_file)) == NULL)
+	return;
+    fp = fopen(efname, "r");
+    if (fp == NULL)
+	return;
+    while (line = Strfgets(fp), line->length > 0) {
+	char *p, *s;
+
+	Strchop(line);
+	p = line->ptr;
+	SKIP_BLANKS(p);
+	if (*p == '#' || *p == '\0')
+	    continue;
+	s = getWord(&p);
+
+	/* The "url" begins a new record. */
+	if (strcmp(s, "url") == 0) {
+	    char *url, *opt;
+	    struct siteconf_rec *newent;
+
+	    /* First, register the current record. */
+	    if (ent) {
+		ent->next = siteconf_head;
+		siteconf_head = ent;
+		ent = NULL;
+	    }
+
+	    /* Second, create a new record. */
+	    newent = newSiteconfRec();
+	    url = getRegexWord((const char **)&p, &newent->re_url);
+	    opt = getWord(&p);
+	    SKIP_BLANKS(p);
+	    if (!newent->re_url) {
+		ParsedURL pu;
+		if (!url || !*url)
+		    continue;
+		parseURL2(url, &pu, NULL);
+		newent->url = parsedURL2Str(&pu)->ptr;
+	    }
+	    /* If we have an extra or unknown option, ignore this record
+	     * for future extensions. */
+	    if (strcmp(opt, "exact") == 0) {
+		newent->url_exact = TRUE;
+	    }
+	    else if (*opt != 0)
+		    continue;
+	    if (*p)
+		continue;
+	    ent = newent;
+	    continue;
+	}
+
+	/* If the current record is broken, skip to the next "url". */
+	if (!ent)
+	    continue;
+
+	/* Fill the new record. */
+	if (strcmp(s, "substitute_url") == 0) {
+	    ent->substitute_url = getQWord(&p);
+	    SCONF_SET(ent, SCONF_SUBSTITUTE_URL);
+	}
+#ifdef USE_M17N
+	else if (strcmp(s, "url_charset") == 0) {
+	    char *charset = getWord(&p);
+	    ent->url_charset = (charset && *charset) ?
+		wc_charset_to_ces(charset) : 0;
+	    SCONF_SET(ent, SCONF_URL_CHARSET);
+	}
+#endif /* USE_M17N */
+	else if (strcmp(s, "no_referer_from") == 0) {
+	    ent->no_referer_from = str_to_bool(getWord(&p), 0);
+	    SCONF_SET(ent, SCONF_NO_REFERER_FROM);
+	}
+	else if (strcmp(s, "no_referer_to") == 0) {
+	    ent->no_referer_to = str_to_bool(getWord(&p), 0);
+	    SCONF_SET(ent, SCONF_NO_REFERER_TO);
+	}
+    }
+    if (ent) {
+	ent->next = siteconf_head;
+	siteconf_head = ent;
+	ent = NULL;
+    }
+    fclose(fp);
+}
+
+const void *
+querySiteconf(const ParsedURL *query_pu, int field)
+{
+    const struct siteconf_rec *ent;
+    Str u;
+    char *firstp, *lastp;
+
+    if (field < 0 || field >= SCONF_N_FIELD)
+	return NULL;
+    if (!query_pu || IS_EMPTY_PARSED_URL(query_pu))
+	return NULL;
+    u = parsedURL2Str((ParsedURL *)query_pu);
+    if (u->length == 0)
+	return NULL;
+
+    for (ent = siteconf_head; ent; ent = ent->next) {
+	if (!SCONF_TEST(ent, field))
+	    continue;
+	if (ent->re_url) {
+	    if (RegexMatch(ent->re_url, u->ptr, u->length, 1)) {
+		MatchedPosition(ent->re_url, &firstp, &lastp);
+		if (!ent->url_exact)
+		    goto url_found;
+		if (firstp != u->ptr || lastp == firstp)
+		    continue;
+		if (*lastp == 0 || *lastp == '?' || *(lastp - 1) == '?' ||
+		    *lastp == '#' || *(lastp - 1) == '#')
+		    goto url_found;
+	    }
+	} else {
+	    int matchlen = strmatchlen(ent->url, u->ptr, u->length);
+	    if (matchlen == 0 || ent->url[matchlen] != 0)
+		continue;
+	    firstp = u->ptr;
+	    lastp = u->ptr + matchlen;
+	    if (*lastp == 0 || *lastp == '?' || *(lastp - 1) == '?' ||
+		*lastp == '#' || *(lastp - 1) == '#')
+		goto url_found;
+	    if (!ent->url_exact && (*lastp == '/' || *(lastp - 1) == '/'))
+		goto url_found;
+	}
+    }
+    return NULL;
+
+url_found:
+    switch (field) {
+    case SCONF_SUBSTITUTE_URL:
+	if (ent->substitute_url && *ent->substitute_url) {
+	    Str tmp = Strnew_charp_n(u->ptr, firstp - u->ptr);
+	    Strcat_charp(tmp, ent->substitute_url);
+	    Strcat_charp(tmp, lastp);
+	    return tmp->ptr;
+	}
+	return NULL;
+#ifdef USE_M17N
+    case SCONF_URL_CHARSET:
+	return &ent->url_charset;
+#endif
+    case SCONF_NO_REFERER_FROM:
+	return &ent->no_referer_from;
+    case SCONF_NO_REFERER_TO:
+	return &ent->no_referer_to;
+    }
+    return NULL;
+}
diff --git a/regex.c b/regex.c
index 5bee4b2..93406e8 100644
--- a/regex.c
+++ b/regex.c
@@ -77,7 +77,7 @@ static longchar
 set_longchar(char *str)
 {
     unsigned char *p = (unsigned char *)str;
-    longchar r;
+    longchar r = { };
 
 #ifdef USE_M17N
     if (*p & 0x80) {
@@ -580,7 +580,7 @@ regmatch_iter(struct MatchingContext1 *c,
     c->lastpos = c->str;
 #ifdef REGEX_DEBUG
     if (verbose)
-	printf("Succeed: %s %d\n", c->str, c->lastpos - c->str);
+	printf("Succeed: %s %ld\n", c->str, (long)(c->lastpos - c->str));
 #endif
     YIELD(1, c, 7);
     return 0;
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
index 4da9ce5..a37d792 100644
--- a/scripts/Makefile.in
+++ b/scripts/Makefile.in
@@ -60,7 +60,7 @@ w3mhelp-funcname.pl: w3mhelp-funcname.pl.in ../funcname.tab $(top_srcdir)/doc/ke
 	@cat $(srcdir)/w3mhelp-funcname.pl.in >> w3mhelp-funcname.pl
 	@echo "done"
 
-w3mhelp-funcdesc-stamp: $(top_srcdir)/doc/README.func $(top_srcdir)/doc-jp/README.func w3mhelp-funcdesc.en.pl.in w3mhelp-funcdesc.ja.pl.in
+w3mhelp-funcdesc-stamp: $(top_srcdir)/doc/README.func $(top_srcdir)/doc-jp/README.func $(top_srcdir)/doc-de/README.func w3mhelp-funcdesc.en.pl.in w3mhelp-funcdesc.ja.pl.in w3mhelp-funcdesc.de.pl.in
 	@echo "generating w3mhelp-funcdesc*.pl..."
 	@for dirlang in $(DOCDIRS); do \
 	  dir=`expr "$$dirlang" : "\(.*\):.*"`; \
diff --git a/scripts/w3mhelp-funcdesc.de.pl.in b/scripts/w3mhelp-funcdesc.de.pl.in
new file mode 100644
index 0000000..11539d1
--- /dev/null
+++ b/scripts/w3mhelp-funcdesc.de.pl.in
@@ -0,0 +1,66 @@
+# charset
+$charset = 'UTF-8';
+
+# Buffer selection mode
+
+%buf_funcdesc = (
+ 'BUF:PREV', 'Gehe zum vorherigen Punkt',
+ 'BUF:NEXT', 'Gehe zum nächsten Punkt',
+ 'BUF:DELETE', 'Lösche den ausgewählten Eintrag',
+ 'BUF:GO', 'Gehe zum ausgewählten Eintrag',
+);
+
+%lineedit_funcdesc = (
+ 'LINEEDIT:FORWARD', 'Bewege Cursor vorwärts',
+ 'LINEEDIT:BACK', 'Bewege Cursor rückwärts',
+ 'LINEEDIT:BS',  'Vorheriges Zeichen löschen',
+ 'LINEEDIT:DEL', 'Aktuelles Zeichen löschen',
+ 'LINEEDIT:KILL_AFTER', 'Lösche alles nach dem Cursor',
+ 'LINEEDIT:KILL_BEFORE', 'Lösche alles vor dem Cursor',
+ 'LINEEDIT:TOP', 'Gehe zum Zeilenanfang',
+ 'LINEEDIT:BOTTOM', 'Gehe zum Zeilenende',
+ 'LINEEDIT:PREV', 'Hole den vorherigen Chronik-Eintrag',
+ 'LINEEDIT:NEXT', 'Hole den nächsten Chronik-Eintrag',
+ 'LINEEDIT:EDITOR', 'Bearbeite mit externem Editor',
+ 'LINEEDIT:COMPLETE', 'Versuche, den Dateinamen zu komplettieren',
+ 'LINEEDIT:ACCEPT', 'Eingabezeile annehmen',
+);
+
+%menu_funcdesc = (
+ 'MENU:SELECT', 'Wähle Eintrag aus',
+ 'MENU:CLOSE', 'Schließe Menü',
+ 'MENU:CANCEL', 'Einen Auswahlschritt zurück',
+ 'MENU:DOWN', 'Gehe zum nächsten Punkt',
+ 'MENU:UP', 'Gehe zum vorherigen Punkt',
+ 'MENU:LINE_UP', 'Scrolle einen Punkt aufwärts',
+ 'MENU:LINE_DOWN', 'Scrolle einen Punkt abwärts',
+ 'MENU:TOP', 'Gehe zum ersten Punkt',
+ 'MENU:LAST', 'Gehe zum letzten Punkt',
+ 'MENU:NEXT', 'Gehe zur nächsten Seite',
+ 'MENU:PREV', 'Gehe zur vorherigen Seite',
+ 'MENU:SEARCH_FORE', 'Suche vorwärts',
+ 'MENU:SEARCH_BACK', 'Suche rückwärts',
+ 'MENU:SEARCH_NEXT', 'Suche weitere Übereinstimmung',
+ 'MENU:SEARCH_PREV', 'Suche frühere Übereinstimmung',
+ 'MENU:SUSPEND', 'Zurückstellen',
+);
+
+%title = (
+ "Current keymap file", 'Aktuelle Datei mit Tastaturbefehlszuordnung',
+ "In-page Navigation", 'Navigation auf der Seite',
+ "Hyperlink Operations", 'Umgang mit Hyperlinks',
+ "File/Stream Operations", 'Umgang mit Dateien und Datenströmen',
+ "Buffer Operations", 'Umgang mit Puffern',
+ "Tab Operations", 'Umgang mit Reitern',
+ "Buffer and Tab Selection Mode", 'Puffer/Reiter-Auswahl-Modus',
+ "Bookmark Management", 'Lesezeichenverwaltung',
+ "Searches", 'Suchen',
+ "Dictionary Lookup", 'Abgleich mit Wörterbuch',
+ "Mark Operations", 'Umgang mit Textmarken',
+ "Miscellaneous", 'Verschiedenes',
+ "User-defined key bindings", 'Benutzerdefinierte Tastaturbefehle',
+ "Input Line Editing Mode", 'Bearbeitung der Eingabezeile',
+ "Popup Menu Mode", 'Navigation in Menüs',
+);
+
+1;
diff --git a/scripts/w3mhelp-funcdesc.en.pl.in b/scripts/w3mhelp-funcdesc.en.pl.in
index d854b59..b9f4ed8 100644
--- a/scripts/w3mhelp-funcdesc.en.pl.in
+++ b/scripts/w3mhelp-funcdesc.en.pl.in
@@ -4,44 +4,44 @@ $charset = 'US-ASCII';
 # Buffer selection mode
 
 %buf_funcdesc = (
- 'BUF:PREV', 'Select previous buffer',
- 'BUF:NEXT', 'Select next buffer',
- 'BUF:DELETE', 'Delete current buffer',
- 'BUF:GO', 'Go to the selected buffer',
+ 'BUF:PREV', 'Previous item',
+ 'BUF:NEXT', 'Next item',
+ 'BUF:DELETE', 'Delete item',
+ 'BUF:GO', 'Select item',
 );
 
 %lineedit_funcdesc = (
- 'LINEEDIT:FORWARD', 'Move cursor forward',
- 'LINEEDIT:BACK', 'Move cursor backward',
+ 'LINEEDIT:FORWARD', 'Cursor forward',
+ 'LINEEDIT:BACK', 'Cursor backward',
  'LINEEDIT:BS',  'Delete previous character',
- 'LINEEDIT:DEL', 'Delete current character',
- 'LINEEDIT:KILL_AFTER', 'Kill everything after cursor',
- 'LINEEDIT:KILL_BEFORE', 'Kill everything before cursor',
- 'LINEEDIT:TOP', 'Move to the top of line',
- 'LINEEDIT:BOTTOM', 'Move to the bottom of line',
+ 'LINEEDIT:DEL', 'Delete character',
+ 'LINEEDIT:KILL_AFTER', 'Delete everything after cursor',
+ 'LINEEDIT:KILL_BEFORE', 'Delete everything before cursor',
+ 'LINEEDIT:TOP', 'Cursor to the beginning of the line',
+ 'LINEEDIT:BOTTOM', 'Cursor to the end of the line',
  'LINEEDIT:PREV', 'Fetch the previous string from the history list',
  'LINEEDIT:NEXT', 'Fetch the next string from the history list',
  'LINEEDIT:EDITOR', 'Edit with external editor',
- 'LINEEDIT:COMPLETE', 'Complete filename',
- 'LINEEDIT:ACCEPT', 'Accept',
+ 'LINEEDIT:COMPLETE', 'Try to complete filename',
+ 'LINEEDIT:ACCEPT', 'Accept input line',
 );
 
 %menu_funcdesc = (
  'MENU:SELECT', 'Select item',
  'MENU:CLOSE', 'Close menu',
- 'MENU:CANCEL', 'Back',
- 'MENU:DOWN', 'Move to next item',
- 'MENU:UP', 'Move to previous item',
+ 'MENU:CANCEL', 'One selection step backward',
+ 'MENU:DOWN', 'Move to the next item',
+ 'MENU:UP', 'Move to the previous item',
  'MENU:LINE_UP', 'Scroll up one item',
  'MENU:LINE_DOWN', 'Scroll down one item',
- 'MENU:TOP', 'Go to top item',
- 'MENU:LAST', 'Go to last item',
- 'MENU:NEXT', 'Go to next page',
- 'MENU:PREV', 'Go to previous page',
- 'MENU:SEARCH_FORE', 'Search foreward',
+ 'MENU:TOP', 'Move to the first item',
+ 'MENU:LAST', 'Move to the final item',
+ 'MENU:NEXT', 'Go to the next page',
+ 'MENU:PREV', 'Go to the previous page',
+ 'MENU:SEARCH_FORE', 'Search forward',
  'MENU:SEARCH_BACK', 'Search backward',
- 'MENU:SEARCH_NEXT', 'Search next regexp',
- 'MENU:SEARCH_PREV', 'Search previous regexp',
+ 'MENU:SEARCH_NEXT', 'Search for the next match',
+ 'MENU:SEARCH_PREV', 'Search for the previous match',
  'MENU:SUSPEND', 'Suspend',
 );
 
diff --git a/scripts/w3mhelp-funcdesc.ja.pl.in b/scripts/w3mhelp-funcdesc.ja.pl.in
index 051c888..4ef476e 100644
--- a/scripts/w3mhelp-funcdesc.ja.pl.in
+++ b/scripts/w3mhelp-funcdesc.ja.pl.in
@@ -46,21 +46,21 @@ $charset = 'EUC-JP';
 );
 
 %title = (
- "Show keymap file", 'keymap �ե�����򸫤�',
- "Page/Cursor motion", '�ڡ���/���������ư',
- "Hyperlink operation", '�ϥ��ѡ�������',
- "File/Stream operation", '�ե�����/���ȥ꡼�����',
- "Buffer operation", '�Хåե����',
- "Tab operation", '�������',
- "Buffer selection mode", '�Хåե�����⡼��',
- "Bookmark operation", '�֥å��ޡ������',
- "Search", '����',
- "Dictionary look-up", '���񸡺�',
- "Mark operation", '�ޡ������',
- "Miscellany", '����¾',
- "User defined keymaps", '�桼�����',
- "Line-edit mode", '���Խ��⡼��',
- "Popup menu", '��˥塼',
+ "Current keymap file", 'keymap �ե�����򸫤�',
+ "In-page Navigation", '�ڡ���/���������ư',
+ "Hyperlink Operations", '�ϥ��ѡ�������',
+ "File/Stream Operations", '�ե�����/���ȥ꡼�����',
+ "Buffer Operations", '�Хåե����',
+ "Tab Operations", '�������',
+ "Buffer and Tab Selection Mode", '�Хåե�����⡼��',
+ "Bookmark Management", '�֥å��ޡ������',
+ "Searches", '����',
+ "Dictionary Lookup", '���񸡺�',
+ "Mark Operations", '�ޡ������',
+ "Miscellaneous", '����¾',
+ "User-defined key bindings", '�桼�����',
+ "Input Line Editing Mode", '���Խ��⡼��',
+ "Popup Menu Mode", '��˥塼',
 );
 
 1;
diff --git a/scripts/w3mhelp.cgi.in b/scripts/w3mhelp.cgi.in
index b2fca8f..503dddc 100644
--- a/scripts/w3mhelp.cgi.in
+++ b/scripts/w3mhelp.cgi.in
@@ -48,7 +48,7 @@ if (defined($ENV{'QUERY_STRING'})) {
 	}
 	# print "tlang=$tlang\n";
 	eval {require "w3mhelp-funcdesc.$tlang.pl";};
-	if (defined(%funcdesc)) {
+	if (%funcdesc) {
 	    $lang = $tlang;
 	}
     }
@@ -102,8 +102,7 @@ Content-Type: text/html; charset=$charset
 ******* 
 <A HREF="http://w3m.sourceforge.net/">w3m</A>
  (WWW-wo-Miru)  Version $version by 
-<A HREF="mailto:aito\@fw.ipsj.or.jp">A.ITO</A> ********<BR>
-             ***** Key assign table *****
+<A HREF="mailto:aito\@fw.ipsj.or.jp">A.ITO</A> ********
 </CENTER>
 
 HEADING
@@ -112,25 +111,25 @@ $q_version = $version;
 $q_version =~ s/[^A-Za-z0-9_\$\.\-]/sprintf('%%%02X', ord($&))/ge;
 $script = "<A HREF=\"$ENV{'SCRIPT_NAME'}?version=$q_version&amp;lang=";
 
-# doc:en_English doc-jp:ja_Japanese
+# doc:en_English doc-jp:ja_Japanese doc-de:de_German
 for $otherlang (@docdirs) {
     local(@d) = split(/[:_]/, $otherlang);
     
     if ($d[1] ne $lang) {
 	$d[1] =~ s/[^A-Za-z0-9_\$\.\-]/sprintf('%%%02X', ord($&))/ge;
-	print $script, $d[1], "\">$d[2] version</A>\n";
+	print $script, $d[1], "\">[$d[2]]</A>\n";
     }
 }
 
 $keymap =~ s/[<>&]/$htmlesc{$&}/ge;
-$head = "Show keymap file";
+$head = 'Current keymap file';
 if (defined($title{$head})) {
 	$head = $title{$head};
 	$head =~ s/[<>&]/$htmlesc{$&}/ge;
 }
 print "<P><A HREF=\"$keymap\">$head</A>\n";
 
-&show_keymap("Page/Cursor motion", 
+&show_keymap('In-page Navigation', 
 	     split(" ", "pgFore pgBack movR movL movD movU
 		movR1 movL1 movD1 movU1 ldown1 lup1
 		shiftl shiftr col1L col1R linbeg linend ctrCsrH ctrCsrV
@@ -139,50 +138,50 @@ print "<P><A HREF=\"$keymap\">$head</A>\n";
 		nextR nextL nextD nextU nextRD nextLU
 		undoPos redoPos"));
 
-&show_keymap("Hyperlink operation",
+&show_keymap('Hyperlink Operations',
 	     split(" ", "followA tabA svA followI svI submitForm
 		curURL peekURL peekIMG pginfo curlno chkURL chkWORD chkNMID
 		rFrame extbrz linkbrz linkLst listMn linkMn accessKey"));
 
-&show_keymap("File/Stream operation",
+&show_keymap('File/Stream Operations',
 	     split(" ", "goURL gorURL tabURL tabrURL ldfile readsh pipesh
 		pipeBuf"));
 
-&show_keymap("Buffer operation",
+&show_keymap('Buffer Operations',
 	     split(" ", "backBf nextBf prevBf selMn selBuf vwSrc svSrc svBuf
 		editBf editScr reload reshape rdrwSc dispI stopI"));
 
-&show_keymap("Tab operation",
+&show_keymap('Tab Operations',
 	     split(" ", "newT closeT nextT prevT tabMn tabR tabL"));
 
-&show_keymap("Bookmark operation",
+&show_keymap('Bookmark Management',
 	     split(" ", "ldBmark adBmark"));
 
-&show_keymap("Search",
+&show_keymap('Searches',
 	     split(" ", "srchfor srchbak srchnxt srchprv isrchfor isrchbak"));
 
-&show_keymap("Dictionary look-up",
+&show_keymap('Dictionary Lookup',
 	     split(" ", "dictword dictwordat"));
 
-&show_keymap("Mark operation",
+&show_keymap('Mark Operations',
 	     split(" ", "_mark nextMk prevMk reMark"));
 
-&show_keymap("Miscellany",
+&show_keymap('Miscellaneous',
 	     split(" ", "mainMn ldhelp ldOpt dispVer cooLst ldHist ldDL
 		docCSet defCSet
 		msgs msToggle wrapToggle execCmd setAlarm setOpt setEnv defKey
 		reinit execsh susp qquitfm quitfm"));
 
-&show_keymap_data("User defined keymaps");
+&show_keymap_data('User-defined key bindings');
 
 print "<BR>\n<HR WIDTH=80%>\n";
 
-&show_keymap("Buffer selection mode",
+&show_keymap('Buffer and Tab Selection Mode',
 	     split(" ", "buffer_next buffer_prev buffer_delete buffer_go"));
 
 print "<BR>\n<HR WIDTH=80%>\n";
 
-&show_keymap("Line-edit mode",
+&show_keymap('Input Line Editing Mode',
 	     split(" ", "lineedit_forward lineedit_back lineedit_backspace 
 		lineedit_delete lineedit_kill_after lineedit_kill_before
 		lineedit_top lineedit_bottom lineedit_prev lineedit_next
@@ -190,7 +189,7 @@ print "<BR>\n<HR WIDTH=80%>\n";
 
 print "<BR>\n<HR WIDTH=80%>\n";
 
-&show_keymap("Popup menu",
+&show_keymap('Popup Menu Mode',
 	     split(" ", "menu_select menu_close menu_cancel menu_down menu_up
 		menu_line_up menu_line_down menu_top menu_last menu_next
 		menu_prev menu_search_fore menu_search_back menu_search_next
diff --git a/scripts/w3mman/w3mman.1.in b/scripts/w3mman/w3mman.1.in
index 1c0361d..1b1d990 100644
--- a/scripts/w3mman/w3mman.1.in
+++ b/scripts/w3mman/w3mman.1.in
@@ -1,4 +1,4 @@
-.TH W3MMAN 1 "Nov 5, 2005"
+.TH W3MMAN 1 "Nov 23, 2014"
 .\" Please adjust this date whenever revising the manpage.
 .\"
 .\" Some roff macros, for reference:
@@ -12,19 +12,19 @@
 .\" .sp <n>    insert n+1 empty lines
 .\" for manpage-specific macros, see man(7)
 .SH NAME
-w3mman \- an interface to the on-line reference manuals by w3m(1)
+w3mman \- an interface to the on-line reference manuals via w3m(1)
 .SH SYNOPSIS
 .B w3mman
-.RI "[-M " path ] " " [ section ] " page"
+.RI "[\-M " path ] " " [ section ] " page"
 .br
 .B w3mman
-.RI "[-M " path "] -k " keyword
+.RI "[\-M " path "] \-k " keyword
 .br
 .B w3mman
-.RI -l " file
+.RI \-l " file
 .SH DESCRIPTION
 .B w3mman
-is the system's manual pager by 
+is a pager for manual pages, using
 .BR w3m (1).
 .SH OPTIONS
 A summary of options is included below.
@@ -42,6 +42,7 @@ Specify
 Specify a  
 .I file.
 .SH ENVIRONMENT
+Two variables are available for debugging.
 .TP
 .B W3MMAN_W3M
 If W3MMAN_W3M is set, its value is used instead of @W3M@.
@@ -51,7 +52,7 @@ If W3MMAN_MAN is set, its value is used instead of @MAN@.
 .SH FILES
 .TP
 .I @libexecdir@/@PACKAGE@/cgi-bin/w3mman2html.cgi
-convert manual page to html.
+manual page to HTML convertor.
 .SH SEE ALSO
 .BR man (1),
 .BR w3m (1).
diff --git a/scripts/w3mman/w3mman2html.cgi.in b/scripts/w3mman/w3mman2html.cgi.in
index f430307..2cd00f9 100644
--- a/scripts/w3mman/w3mman2html.cgi.in
+++ b/scripts/w3mman/w3mman2html.cgi.in
@@ -34,7 +34,6 @@ Content-Type: text/html
 EOF
     $keyword =~ s:([^-\w\200-\377.,])::g;
     open(F, "$MAN -k $keyword 2> /dev/null |");
-    @line = ();
     while(<F>) {
       chop;
       $_ = &html_quote($_);
@@ -126,12 +125,14 @@ while(<F>) {
   s/\&/\&amp;/g;
   s/\</\&lt;/g;
   s/\>/\&gt;/g;
+  # non ASCII UTF-8 codepoint
+  my $utf8="[\300-\337][\200-\277]|[\340-\357][\200-\277]{2}|[\360-\367][\200-\277]{3}|[\370-\373][\200-\277]{4}|[\374\375][\200-\277]{5}";
 
-  s@([\200-\377].)(\010{1,2}\1)+@<b>$1</b>@g;
+  s@($utf8)(\010\1)+@<b>$1</b>@g;
   s@(\&\w+;|.)(\010\1)+@<b>$1</b>@g;
-  s@__\010{1,2}((\<b\>)?[\200-\377].(\</b\>)?)@<u>$1</u>@g;
+  s@_\010((\<b\>)?($utf8)(\</b\>)?)@<u>$1</u>@g;
   s@_\010((\<b\>)?(\&\w+\;|.)(\</b\>)?)@<u>$1</u>@g;
-  s@((\<b\>)?[\200-\377].(\</b\>)?)\010{1,2}__@<u>$1</u>@g;
+  s@((\<b\>)?($utf8)(\</b\>)?)\010_@<u>$1</u>@g;
   s@((\<b\>)?(\&\w+\;|.)(\</b\>)?)\010_@<u>$1</u>@g;
   s@.\010(.)@$1@g;
 
@@ -156,7 +157,7 @@ EOF
   }
 
   s@(http|ftp)://[\w.\-/~]+[\w/]@<a href="$&">$&</a>@g;
-  s@(\W)(mailto:)?(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@$1<a href="mailto:$3">$2$3</a>@g;
+  s@\b(mailto:|)(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@<a href="mailto:$2">$1$2</a>@g;
   s@(\W)(\~?/[\w.][\w.\-/~]*)@$1 . &file_ref($2)@ge;
   s@(include(<\/?[bu]\>|\s)*\&lt;)([\w.\-/]+)@$1 . &include_ref($3)@ge;
   if ($prev && m@^\s*(\<[bu]\>)*(\w[\w.\-]*)(\</[bu]\>)*(\([\dm]\w*\))@) {
@@ -220,7 +221,7 @@ sub is_command {
   local($p);
 
   (! -d && -x) || return 0;
-  if (! defined(%PATH)) {
+  if (! %PATH) {
     for $p (split(":", $ENV{'PATH'})) {
       $p =~ s@/+$@@;
       $PATH{$p} = 1;
diff --git a/table.c b/table.c
index e1243ff..2a0aa8f 100644
--- a/table.c
+++ b/table.c
@@ -188,7 +188,7 @@ dv2sv(double *dv, short *iv, int size)
     indexarray = NewAtom_N(short, size);
     edv = NewAtom_N(double, size);
     for (i = 0; i < size; i++) {
-	iv[i] = ceil(dv[i]);
+	iv[i] = (short) ceil(dv[i]);
 	edv[i] = (double)iv[i] - dv[i];
     }
 
@@ -205,7 +205,7 @@ dv2sv(double *dv, short *iv, int size)
 	indexarray[i] = k;
     }
     iw = min((int)(w + 0.5), size);
-    if (iw == 0)
+    if (iw <= 1)
 	return;
     x = edv[(int)indexarray[iw - 1]];
     for (i = 0; i < size; i++) {
@@ -429,7 +429,6 @@ visible_length(char *str)
     char *t, *r2;
     int amp_len = 0;
 
-    t = str;
     while (*str) {
 	prev_status = status;
 	if (next_status(*str, &status)) {
@@ -1691,7 +1690,7 @@ renderTable(struct table *t, int max_width, struct html_feed_environ *h_env)
 {
     int i, j, w, r, h;
     Str renderbuf;
-    short new_tabwidth[MAXCOL];
+    short new_tabwidth[MAXCOL] = { 0 };
 #ifdef MATRIX
     int itr;
     VEC *newwidth;
@@ -2878,6 +2877,14 @@ feed_table_tag(struct table *tbl, char *line, struct table_mode *mode,
 	tmp = process_input(tag);
 	feed_table1(tbl, tmp, mode, width);
 	break;
+    case HTML_BUTTON:
+       tmp = process_button(tag);
+       feed_table1(tbl, tmp, mode, width);
+       break;
+    case HTML_N_BUTTON:
+       tmp = process_n_button();
+       feed_table1(tbl, tmp, mode, width);
+       break;
     case HTML_SELECT:
 	tmp = process_select(tag);
 	if (tmp)
@@ -3010,7 +3017,6 @@ feed_table_tag(struct table *tbl, char *line, struct table_mode *mode,
 	break;
     case HTML_TABLE_ALT:
 	id = -1;
-	w = 0;
 	parsedtag_get_value(tag, ATTR_TID, &id);
 	if (id >= 0 && id < tbl->ntable) {
 	    struct table *tbl1 = tbl->tables[id].ptr;
diff --git a/table.h b/table.h
index 83b661f..fdcdef3 100644
--- a/table.h
+++ b/table.h
@@ -17,7 +17,7 @@
 #define MAX_TABLE_N 20		/* maximum number of table in same level */
 
 #define MAXROW 50
-#define MAXCOL 50
+#define MAXCOL 256
 
 #define MAX_WIDTH 80
 
diff --git a/tagtable.tab b/tagtable.tab
index f9b7b76..f5a2c30 100644
--- a/tagtable.tab
+++ b/tagtable.tab
@@ -176,6 +176,7 @@ bdo		HTML_BDO
 big		HTML_BIG
 /big		HTML_N_BIG
 button		HTML_BUTTON
+/button		HTML_N_BUTTON
 fieldset	HTML_FIELDSET
 /fieldset	HTML_N_FIELDSET
 iframe		HTML_IFRAME
diff --git a/terms.c b/terms.c
index 7a3c987..3d2ffd7 100644
--- a/terms.c
+++ b/terms.c
@@ -12,6 +12,7 @@
 #include <unistd.h>
 #include "config.h"
 #include <string.h>
+#include <sys/wait.h>
 #ifdef HAVE_SYS_SELECT_H
 #include <sys/select.h>
 #endif
@@ -222,6 +223,7 @@ static void
 check_cygwin_console(void)
 {
     char *term = getenv("TERM");
+    char *ctype;
     HANDLE hWnd;
 
     if (term == NULL)
@@ -236,7 +238,9 @@ check_cygwin_console(void)
 		isLocalConsole = 1;
 	    }
 	}
-	if (strncmp(getenv("LANG"), "ja", 2) == 0) {
+	if (((ctype = getenv("LC_ALL")) ||
+	     (ctype = getenv("LC_CTYPE")) ||
+	     (ctype = getenv("LANG"))) && strncmp(ctype, "ja", 2) == 0) {
 	    isWinConsole = TERM_CYGWIN_RESERVE_IME;
 	}
 #ifdef SUPPORT_WIN9X_CONSOLE_MBCS
@@ -463,6 +467,262 @@ writestr(char *s)
 
 #define MOVE(line,column)       writestr(tgoto(T_cm,column,line));
 
+#ifdef USE_IMAGE
+void
+put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image)
+{
+    Str buf;
+    char *size ;
+
+    if (w > 0 && h > 0)
+	size = Sprintf("%dx%d",w,h)->ptr;
+    else
+	size = "";
+
+    MOVE(y,x);
+    buf = Sprintf("\x1b]5379;show_picture %s %s %dx%d+%d+%d\x07",url,size,sw,sh,sx,sy);
+    writestr(buf->ptr);
+    MOVE(Currentbuf->cursorY,Currentbuf->cursorX);
+}
+
+static void
+save_gif(const char *path, u_char *header, size_t  header_size, u_char *body, size_t body_size)
+{
+    int	fd;
+
+    if ((fd = open(path, O_WRONLY|O_CREAT, 0600)) >= 0) {
+	write(fd, header, header_size) ;
+	write(fd, body, body_size) ;
+	write(fd, "\x3b" , 1) ;
+	close(fd) ;
+    }
+}
+
+static u_char *
+skip_gif_header(u_char *p)
+{
+    /* Header */
+    p += 10;
+
+    if (*(p) & 0x80) {
+	p += (3 * (2 << ((*p) & 0x7)));
+    }
+    p += 3;
+
+    return p;
+}
+
+static Str
+save_first_animation_frame(const char *path)
+{
+    int	fd;
+    struct stat	st;
+    u_char *header;
+    size_t header_size;
+    u_char *body;
+    u_char *p;
+    ssize_t len;
+    Str new_path;
+
+    new_path = Strnew_charp(path);
+    Strcat_charp(new_path, "-1");
+    if (stat(new_path->ptr, &st) == 0) {
+	return new_path;
+    }
+
+    if ((fd = open( path, O_RDONLY)) < 0) {
+	return NULL;
+    }
+
+    if (fstat( fd, &st) != 0 || ! (header = GC_malloc( st.st_size))){
+	close( fd);
+	return NULL;
+    }
+
+    len = read(fd, header, st.st_size);
+    close(fd);
+
+    /* Header */
+
+    if (len != st.st_size || strncmp(header, "GIF89a", 6) != 0) {
+	return NULL;
+    }
+
+    p = skip_gif_header(header);
+    header_size = p - header;
+
+    /* Application Extension */
+    if (p[0] == 0x21 && p[1] == 0xff) {
+	p += 19;
+    }
+
+    /* Other blocks */
+    body = NULL;
+    while (p + 2 < header + st.st_size) {
+	if (*(p++) == 0x21 && *(p++) == 0xf9 && *(p++) == 0x04) {
+	    if( body) {
+		/* Graphic Control Extension */
+		save_gif(new_path->ptr, header, header_size, body, p - 3 - body);
+		return new_path;
+	    }
+	    else {
+		/* skip the first frame. */
+	    }
+	    body = p - 3;
+	}
+    }
+
+    return NULL;
+}
+
+void ttymode_set(int mode, int imode);
+void ttymode_reset(int mode, int imode);
+
+void
+put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image)
+{
+    pid_t pid;
+    int do_anim;
+    MySignalHandler(*volatile previntr) (SIGNAL_ARG);
+    MySignalHandler(*volatile prevquit) (SIGNAL_ARG);
+    MySignalHandler(*volatile prevstop) (SIGNAL_ARG);
+
+    MOVE(y,x);
+    flush_tty();
+
+    do_anim = (n_terminal_image == 1 && x == 0 && y == 0 && sx == 0 && sy == 0);
+
+    previntr = mySignal(SIGINT, SIG_IGN);
+    prevquit = mySignal(SIGQUIT, SIG_IGN);
+    prevstop = mySignal(SIGTSTP, SIG_IGN);
+
+    if ((pid = fork()) == 0) {
+	char *env;
+	int n = 0;
+	char *argv[20];
+	char digit[2][11+1];
+	char clip[44+3+1];
+	Str str_url;
+
+	close(STDERR_FILENO);	/* Don't output error message. */
+	if (do_anim) {
+	    writestr("\x1b[?80h");
+	}
+	else if (!strstr(url, "://") && strcmp(url+strlen(url)-4, ".gif") == 0 &&
+                 (str_url = save_first_animation_frame(url))) {
+	    url = str_url->ptr;
+	}
+	ttymode_set(ISIG, 0);
+
+	if ((env = getenv("W3M_IMG2SIXEL"))) {
+	    char *p;
+	    env = Strnew_charp(env)->ptr;
+	    while (n < 8 && (p = strchr(env, ' '))) {
+		*p = '\0';
+		if (*env != '\0') {
+		    argv[n++] = env;
+		}
+		env = p+1;
+	    }
+	    if (*env != '\0') {
+		argv[n++] = env;
+	    }
+	}
+	else {
+		argv[n++] = "img2sixel";
+	}
+	argv[n++] = "-l";
+	argv[n++] = do_anim ? "auto" : "disable";
+	argv[n++] = "-w";
+	sprintf(digit[0], "%d", w*pixel_per_char_i);
+	argv[n++] = digit[0];
+	argv[n++] = "-h";
+	sprintf(digit[1], "%d", h*pixel_per_line_i);
+	argv[n++] = digit[1];
+	argv[n++] = "-c";
+	sprintf(clip, "%dx%d+%d+%d", sw*pixel_per_char_i, sh*pixel_per_line_i,
+			sx*pixel_per_char_i, sy*pixel_per_line_i);
+	argv[n++] = clip;
+	argv[n++] = url;
+	if (getenv("TERM") && strcmp(getenv("TERM"), "screen") == 0 &&
+	    (!getenv("SCREEN_VARIANT") || strcmp(getenv("SCREEN_VARIANT"), "sixel") != 0)) {
+	    argv[n++] = "-P";
+	}
+	argv[n++] = NULL;
+	execvp(argv[0],argv);
+	exit(0);
+    }
+    else if (pid > 0) {
+	int status;
+	waitpid(pid, &status, 0);
+	ttymode_reset(ISIG, 0);
+	mySignal(SIGINT, previntr);
+	mySignal(SIGQUIT, prevquit);
+	mySignal(SIGTSTP, prevstop);
+	if (do_anim) {
+	    writestr("\x1b[?80l");
+	}
+    }
+
+    MOVE(Currentbuf->cursorY,Currentbuf->cursorX);
+}
+
+int
+get_pixel_per_cell(int *ppc, int *ppl)
+{
+    fd_set  rfd;
+    struct timeval tval;
+    char buf[100];
+    char *p;
+    ssize_t len;
+    ssize_t left;
+    int wp,hp,wc,hc;
+    int i;
+
+#ifdef  TIOCGWINSZ
+    struct winsize ws;
+    if (ioctl(tty, TIOCGWINSZ, &ws) == 0 && ws.ws_ypixel > 0 && ws.ws_row > 0 &&
+        ws.ws_xpixel > 0 && ws.ws_col > 0) {
+	*ppc = ws.ws_xpixel / ws.ws_col;
+	*ppl = ws.ws_ypixel / ws.ws_row;
+	return 1;
+    }
+#endif
+
+    fputs("\x1b[14t\x1b[18t",ttyf); flush_tty();
+
+    p = buf;
+    left = sizeof(buf) - 1;
+    for (i = 0; i < 10; i++) {
+	tval.tv_usec = 200000;	/* 0.2 sec * 10 */
+	tval.tv_sec = 0;
+	FD_ZERO(&rfd);
+	FD_SET(tty,&rfd);
+	if (select(tty+1,&rfd,NULL,NULL,&tval) <= 0 || ! FD_ISSET(tty,&rfd))
+	    continue;
+
+	if ((len = read(tty,p,left)) <= 0)
+	    continue;
+	p[len] = '\0';
+
+	if (sscanf(buf,"\x1b[4;%d;%dt\x1b[8;%d;%dt",&hp,&wp,&hc,&wc) == 4) {
+	    if (wp > 0 && wc > 0 && hp > 0 && hc > 0) {
+		*ppc = wp / wc;
+		*ppl = hp / hc;
+		return 1;
+	    }
+	    else {
+		return 0;
+	    }
+	}
+	p += len;
+	left -= len;
+    }
+
+    return 0;
+}
+#endif				/* USE_IMAGE */
+
 #ifdef USE_MOUSE
 #define W3M_TERM_INFO(name, title, mouse)	name, title, mouse
 #define NEED_XTERM_ON   (1)
@@ -634,7 +894,8 @@ reset_tty(void)
     writestr(T_se);		/* reset terminal */
     flush_tty();
     TerminalSet(tty, &d_ioval);
-    close_tty();
+    if (tty != 2)
+        close_tty();
 }
 
 static MySignalHandler
@@ -953,7 +1214,6 @@ addch(char pc)
 {
     l_prop *pr;
     int dest, i;
-    short *dirty;
 #ifdef USE_M17N
     static Str tmp = NULL;
     char **p;
@@ -975,7 +1235,6 @@ addch(char pc)
 	return;
     p = ScreenImage[CurLine]->lineimage;
     pr = ScreenImage[CurLine]->lineprop;
-    dirty = &ScreenImage[CurLine]->isdirty;
 
 #ifndef USE_M17N
     /* Eliminate unprintables according to * iso-8859-*.
@@ -1986,6 +2245,10 @@ skip_escseq(void)
 	    getch();
 	    getch();
 	    getch();
+	} else if (is_xterm && c == '<') {
+	    c = getch();
+	    while (IS_DIGIT(c) || c == ';')
+		c = getch();
 	}
 	else
 #endif
@@ -2027,8 +2290,8 @@ sleep_till_anykey(int sec, int purge)
 
 #ifdef USE_MOUSE
 
-#define XTERM_ON   {fputs("\033[?1001s\033[?1000h",ttyf); flush_tty();}
-#define XTERM_OFF  {fputs("\033[?1000l\033[?1001r",ttyf); flush_tty();}
+#define XTERM_ON   {fputs("\033[?1001s\033[?1000h\033[?1006h",ttyf); flush_tty();}
+#define XTERM_OFF  {fputs("\033[?1006l\033[?1000l\033[?1001r",ttyf); flush_tty();}
 #define CYGWIN_ON  {fputs("\033[?1000h",ttyf); flush_tty();}
 #define CYGWIN_OFF {fputs("\033[?1000l",ttyf); flush_tty();}
 
diff --git a/url.c b/url.c
index ed6062e..c90cd9f 100644
--- a/url.c
+++ b/url.c
@@ -121,6 +121,7 @@ static struct table2 DefaultGuess[] = {
 };
 
 static void add_index_file(ParsedURL *pu, URLFile *uf);
+static char * schemeNumToName(int scheme);
 
 /* #define HTTP_DEFAULT_FILE    "/index.html" */
 
@@ -326,6 +327,7 @@ openSSLHandle(int sock, char *hostname, char **p_cert)
 	SSL_load_error_strings();
 	if (!(ssl_ctx = SSL_CTX_new(SSLv23_client_method())))
 	    goto eend;
+	SSL_CTX_set_cipher_list(ssl_ctx, "DEFAULT:!LOW:!RC4:!EXP");
 	option = SSL_OP_ALL;
 	if (ssl_forbid_method) {
 	    if (strchr(ssl_forbid_method, '2'))
@@ -337,7 +339,15 @@ openSSLHandle(int sock, char *hostname, char **p_cert)
 	    if (strchr(ssl_forbid_method, 'T'))
 		option |= SSL_OP_NO_TLSv1;
 	}
+#ifdef SSL_OP_NO_COMPRESSION
+	option |= SSL_OP_NO_COMPRESSION;
+#endif
 	SSL_CTX_set_options(ssl_ctx, option);
+
+#ifdef SSL_MODE_RELEASE_BUFFERS
+	SSL_CTX_set_mode (ssl_ctx, SSL_MODE_RELEASE_BUFFERS);
+#endif
+
 #ifdef USE_SSL_VERIFY
 	/* derived from openssl-0.9.5/apps/s_{client,cb}.c */
 #if 1				/* use SSL_get_verify_result() to verify cert */
@@ -444,6 +454,8 @@ baseURL(Buffer *buf)
 	/* <BASE> tag is defined in the document */
 	return buf->baseURL;
     }
+    else if (IS_EMPTY_PARSED_URL(&buf->currentURL))
+	return NULL;
     else
 	return &buf->currentURL;
 }
@@ -638,16 +650,21 @@ openSocket(char *const hostname,
 #define COPYPATH_SPC_ALLOW 0
 #define COPYPATH_SPC_IGNORE 1
 #define COPYPATH_SPC_REPLACE 2
+#define COPYPATH_SPC_MASK 3
+#define COPYPATH_LOWERCASE 4
 
 static char *
 copyPath(char *orgpath, int length, int option)
 {
     Str tmp = Strnew();
-    while (*orgpath && length != 0) {
-	if (IS_SPACE(*orgpath)) {
-	    switch (option) {
+    char ch;
+    while ((ch = *orgpath) != 0 && length != 0) {
+	if (option & COPYPATH_LOWERCASE)
+	    ch = TOLOWER(ch);
+	if (IS_SPACE(ch)) {
+	    switch (option & COPYPATH_SPC_MASK) {
 	    case COPYPATH_SPC_ALLOW:
-		Strcat_char(tmp, *orgpath);
+		Strcat_char(tmp, ch);
 		break;
 	    case COPYPATH_SPC_IGNORE:
 		/* do nothing */
@@ -658,7 +675,7 @@ copyPath(char *orgpath, int length, int option)
 	    }
 	}
 	else
-	    Strcat_char(tmp, *orgpath);
+	    Strcat_char(tmp, ch);
 	orgpath++;
 	length--;
     }
@@ -668,22 +685,14 @@ copyPath(char *orgpath, int length, int option)
 void
 parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
 {
-    char *p, *q;
+    char *p, *q, *qq;
     Str tmp;
 
     url = url_quote(url);	/* quote 0x01-0x20, 0x7F-0xFF */
 
     p = url;
+    copyParsedURL(p_url, NULL);
     p_url->scheme = SCM_MISSING;
-    p_url->port = 0;
-    p_url->user = NULL;
-    p_url->pass = NULL;
-    p_url->host = NULL;
-    p_url->is_nocache = 0;
-    p_url->file = NULL;
-    p_url->real_file = NULL;
-    p_url->query = NULL;
-    p_url->label = NULL;
 
     /* RFC1808: Relative Uniform Resource Locators
      * 4.  Resolving Relative URLs
@@ -694,7 +703,7 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
 	goto do_label;
     }
 #if defined( __EMX__ ) || defined( __CYGWIN__ )
-    if (!strncmp(url, "file://localhost/", 17)) {
+    if (!strncasecmp(url, "file://localhost/", 17)) {
 	p_url->scheme = SCM_LOCAL;
 	p += 17 - 1;
 	url += 17 - 1;
@@ -802,19 +811,20 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
 	/* scheme://user:pass@host or
 	 * scheme://host:port
 	 */
-	p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE);
+	qq = q;
 	q = ++p;
 	while (*p && strchr("@/?#", *p) == NULL)
 	    p++;
 	if (*p == '@') {
 	    /* scheme://user:pass@...       */
+	    p_url->user = copyPath(qq, q - 1 - qq, COPYPATH_SPC_IGNORE);
 	    p_url->pass = copyPath(q, p - q, COPYPATH_SPC_ALLOW);
-	    q = ++p;
-	    p_url->user = p_url->host;
-	    p_url->host = NULL;
+	    p++;
 	    goto analyze_url;
 	}
 	/* scheme://host:port/ */
+	p_url->host = copyPath(qq, q - 1 - qq,
+			       COPYPATH_SPC_IGNORE | COPYPATH_LOWERCASE);
 	tmp = Strnew_charp_n(q, p - q);
 	p_url->port = atoi(tmp->ptr);
 	/* *p is one of ['\0', '/', '?', '#'] */
@@ -822,14 +832,15 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
     case '@':
 	/* scheme://user@...            */
 	p_url->user = copyPath(q, p - q, COPYPATH_SPC_IGNORE);
-	q = ++p;
+	p++;
 	goto analyze_url;
     case '\0':
 	/* scheme://host                */
     case '/':
     case '?':
     case '#':
-	p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE);
+	p_url->host = copyPath(q, p - q,
+			       COPYPATH_SPC_IGNORE | COPYPATH_LOWERCASE);
 	p_url->port = DefaultPort[p_url->scheme];
 	break;
     }
@@ -956,12 +967,16 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
 	p_url->label = NULL;
 }
 
-#define initParsedURL(p) bzero(p,sizeof(ParsedURL))
 #define ALLOC_STR(s) ((s)==NULL?NULL:allocStr(s,-1))
 
 void
-copyParsedURL(ParsedURL *p, ParsedURL *q)
+copyParsedURL(ParsedURL *p, const ParsedURL *q)
 {
+    if (q == NULL) {
+	memset(p, 0, sizeof(ParsedURL));
+	p->scheme = SCM_UNKNOWN;
+	return;
+    }
     p->scheme = q->scheme;
     p->port = q->port;
     p->is_nocache = q->is_nocache;
@@ -1280,9 +1295,23 @@ getURLScheme(char **url)
 }
 
 static char *
+schemeNumToName(int scheme)
+{
+    int i;
+
+    for (i = 0; schemetable[i].cmdname != NULL; i++) {
+	if (schemetable[i].cmd == scheme)
+	    return schemetable[i].cmdname;
+    }
+    return NULL;
+}
+
+static char *
 otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
 {
     Str s = Strnew();
+    const int *no_referer_ptr;
+    int no_referer;
 
     Strcat_charp(s, "User-Agent: ");
     if (UserAgent == NULL || *UserAgent == '\0')
@@ -1306,7 +1335,12 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
 	Strcat_charp(s, "Pragma: no-cache\r\n");
 	Strcat_charp(s, "Cache-control: no-cache\r\n");
     }
-    if (!NoSendReferer) {
+    no_referer = NoSendReferer;
+    no_referer_ptr = query_SCONF_NO_REFERER_FROM(current);
+    no_referer = no_referer || (no_referer_ptr && *no_referer_ptr);
+    no_referer_ptr = query_SCONF_NO_REFERER_TO(target);
+    no_referer = no_referer || (no_referer_ptr && *no_referer_ptr);
+    if (!no_referer) {
 #ifdef USE_SSL
         if (current && current->scheme == SCM_HTTPS && target->scheme != SCM_HTTPS) {
 	  /* Don't send Referer: if https:// -> http:// */
@@ -1314,6 +1348,7 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
 	else
 #endif
 	if (referer == NULL && current && current->scheme != SCM_LOCAL &&
+	    current->scheme != SCM_LOCAL_CGI &&
 	    (current->scheme != SCM_FTP ||
 	     (current->user == NULL && current->pass == NULL))) {
 	    char *p = current->label;
@@ -1384,7 +1419,6 @@ HTTPrequest(ParsedURL *pu, ParsedURL *current, HRequest *hr, TextList *extra)
 {
     Str tmp;
     TextListItem *i;
-    int seen_www_auth = 0;
 #ifdef USE_COOKIE
     Str cookie;
 #endif				/* USE_COOKIE */
@@ -1400,7 +1434,6 @@ HTTPrequest(ParsedURL *pu, ParsedURL *current, HRequest *hr, TextList *extra)
 	for (i = extra->first; i != NULL; i = i->next) {
 	    if (strncasecmp(i->ptr, "Authorization:",
 			    sizeof("Authorization:") - 1) == 0) {
-		seen_www_auth = 1;
 #ifdef USE_SSL
 		if (hr->command == HR_COMMAND_CONNECT)
 		    continue;
@@ -1430,20 +1463,20 @@ HTTPrequest(ParsedURL *pu, ParsedURL *current, HRequest *hr, TextList *extra)
 #endif				/* USE_COOKIE */
     if (hr->command == HR_COMMAND_POST) {
 	if (hr->request->enctype == FORM_ENCTYPE_MULTIPART) {
-	    Strcat_charp(tmp, "Content-type: multipart/form-data; boundary=");
+	    Strcat_charp(tmp, "Content-Type: multipart/form-data; boundary=");
 	    Strcat_charp(tmp, hr->request->boundary);
 	    Strcat_charp(tmp, "\r\n");
 	    Strcat(tmp,
-		   Sprintf("Content-length: %ld\r\n", hr->request->length));
+		   Sprintf("Content-Length: %ld\r\n", hr->request->length));
 	    Strcat_charp(tmp, "\r\n");
 	}
 	else {
 	    if (!override_content_type) {
 		Strcat_charp(tmp,
-			     "Content-type: application/x-www-form-urlencoded\r\n");
+			     "Content-Type: application/x-www-form-urlencoded\r\n");
 	    }
 	    Strcat(tmp,
-		   Sprintf("Content-length: %ld\r\n", hr->request->length));
+		   Sprintf("Content-Length: %ld\r\n", hr->request->length));
 	    if (header_string)
 		Strcat(tmp, header_string);
 	    Strcat_charp(tmp, "\r\n");
@@ -1603,7 +1636,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
 	    pu->host != NULL && !check_no_proxy(pu->host)) {
 	    hr->flag |= HR_FLAG_PROXY;
 	    sock = openSocket(FTP_proxy_parsed.host,
-			      schemetable[FTP_proxy_parsed.scheme].cmdname,
+			      schemeNumToName(FTP_proxy_parsed.scheme),
 			      FTP_proxy_parsed.port);
 	    if (sock < 0)
 		return uf;
@@ -1645,15 +1678,15 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
 	    }
 	    else if (pu->scheme == SCM_HTTPS) {
 		sock = openSocket(HTTPS_proxy_parsed.host,
-				  schemetable[HTTPS_proxy_parsed.scheme].
-				  cmdname, HTTPS_proxy_parsed.port);
+				  schemeNumToName(HTTPS_proxy_parsed.scheme),
+				  HTTPS_proxy_parsed.port);
 		sslh = NULL;
 	    }
 	    else {
 #endif				/* USE_SSL */
 		sock = openSocket(HTTP_proxy_parsed.host,
-				  schemetable[HTTP_proxy_parsed.scheme].
-				  cmdname, HTTP_proxy_parsed.port);
+				  schemeNumToName(HTTP_proxy_parsed.scheme),
+				  HTTP_proxy_parsed.port);
 #ifdef USE_SSL
 		sslh = NULL;
 	    }
@@ -1685,8 +1718,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
 	    }
 	}
 	else {
-	    sock = openSocket(pu->host,
-			      schemetable[pu->scheme].cmdname, pu->port);
+	    sock = openSocket(pu->host, schemeNumToName(pu->scheme), pu->port);
 	    if (sock < 0) {
 		*status = HTST_MISSING;
 		return uf;
@@ -1750,7 +1782,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
 	    pu->host != NULL && !check_no_proxy(pu->host)) {
 	    hr->flag |= HR_FLAG_PROXY;
 	    sock = openSocket(GOPHER_proxy_parsed.host,
-			      schemetable[GOPHER_proxy_parsed.scheme].cmdname,
+			      schemeNumToName(GOPHER_proxy_parsed.scheme),
 			      GOPHER_proxy_parsed.port);
 	    if (sock < 0)
 		return uf;
@@ -1758,8 +1790,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
 	    tmp = HTTPrequest(pu, current, hr, extra_header);
 	}
 	else {
-	    sock = openSocket(pu->host,
-			      schemetable[pu->scheme].cmdname, pu->port);
+	    sock = openSocket(pu->host, schemeNumToName(pu->scheme), pu->port);
 	    if (sock < 0)
 		return uf;
 	    if (pu->file == NULL)
@@ -2049,7 +2080,7 @@ filename_extension(char *path, int is_url)
 	    break;
     }
     if (*last_dot == '.') {
-	for (i = 1; last_dot[i] && i < 8; i++) {
+	for (i = 1; i < 8 && last_dot[i]; i++) {
 	    if (is_url && !IS_ALNUM(last_dot[i]))
 		break;
 	}
@@ -2234,3 +2265,66 @@ schemeToProxy(int scheme)
     }
     return pu;
 }
+
+#ifdef USE_M17N
+wc_ces
+url_to_charset(const char *url, const ParsedURL *base, wc_ces doc_charset)
+{
+    const ParsedURL *pu;
+    ParsedURL pu_buf;
+    const wc_ces *csptr;
+
+    if (url && *url && *url != '#') {
+	parseURL2((char *)url, &pu_buf, (ParsedURL *)base);
+	pu = &pu_buf;
+    } else {
+	pu = base;
+    }
+    if (pu && (pu->scheme == SCM_LOCAL || pu->scheme == SCM_LOCAL_CGI))
+	return SystemCharset;
+    csptr = query_SCONF_URL_CHARSET(pu);
+    return (csptr && *csptr) ? *csptr :
+	doc_charset ? doc_charset : DocumentCharset;
+}
+
+char *
+url_encode(const char *url, const ParsedURL *base, wc_ces doc_charset)
+{
+    return url_quote_conv((char *)url,
+			  url_to_charset(url, base, doc_charset));
+}
+
+#if 0 /* unused */
+char *
+url_decode(const char *url, const ParsedURL *base, wc_ces doc_charset)
+{
+    if (!DecodeURL)
+	return (char *)url;
+    return url_unquote_conv((char *)url,
+			    url_to_charset(url, base, doc_charset));
+}
+#endif
+
+char *
+url_decode2(const char *url, const Buffer *buf)
+{
+    wc_ces url_charset;
+
+    if (!DecodeURL)
+	return (char *)url;
+    url_charset = buf ?
+	url_to_charset(url, baseURL((Buffer *)buf), buf->document_charset) :
+	url_to_charset(url, NULL, 0);
+    return url_unquote_conv((char *)url, url_charset);
+}
+
+#else /* !defined(USE_M17N) */
+
+char *
+url_decode0(const char *url)
+{
+    if (!DecodeURL)
+	return (char *)url;
+    return url_unquote_conv((char *)url, 0);
+}
+#endif /* !defined(USE_M17N) */
diff --git a/version.c.in b/version.c.in
index 31d30e4..ab25163 100644
--- a/version.c.in
+++ b/version.c.in
@@ -1,5 +1,5 @@
 /* $Id: version.c.in,v 1.49 2012/05/22 09:45:56 inu Exp $ */
-#define CURRENT_VERSION "w3m/0.5.3+cvs"
+#define CURRENT_VERSION "w3m/0.5.3+gitYYYYMMDD"
 
 #ifndef FM_H
 char *w3m_version = CURRENT_VERSION;
diff --git a/w3m-doc/outline.html.in b/w3m-doc/outline.html.in
index 60bda47..4ed2a59 100644
--- a/w3m-doc/outline.html.in
+++ b/w3m-doc/outline.html.in
@@ -146,8 +146,8 @@ w3m $B$N(Bmake$B;~$K;XDj$7$?%-!<A`:n$K$h$C$F!"%X%k%W%U%!%$%k$,0[$J$j$^$9!#(B
  <TR> <TD>c</TD> <TD>$B8=%Z!<%8$N(B URL $B$rI=<((B</TD></TR>
  <TR> <TD>=</TD> <TD>$B8=%I%-%e%a%s%H$N>pJs$rI=<((B</TD></TR>
  <TR> <TD>F</TD> <TD>$B%U%l!<%`$rI=<($9$k(B</TD></TR>
- <TR> <TD>M</TD> <TD>$B8=%Z!<%8$r30It%V%i%&%6$GI=<($9$k(B(2M,3M $B$G(B2$BHVL\$H(B3$BHVL\$N%V%i%&%6$r8F$S$@$9(B)</TD></TR>
- <TR> <TD>ESC M</TD> <TD>$B%j%s%/@h$r30It%V%i%&%6$GI=<($9$k(B(2ESC M,3ESC M $B$G(B2$BHVL\$H(B3$BHVL\$N%V%i%&%6$r8F$S$@$9(B)</TD></TR>
+ <TR> <TD>M</TD> <TD>$B8=%Z!<%8$r30It%V%i%&%6$GI=<($9$k(B(2M, 3M, ..., 9M $B$G(B2$BHVL\!$(B3$BHVL\!$(B9$BHVL\$N%V%i%&%6$r8F$S$@$9(B)</TD></TR>
+ <TR> <TD>ESC M</TD> <TD>$B%j%s%/@h$r30It%V%i%&%6$GI=<($9$k(B(2ESC M, 3ESC M, ..., 9ESC M $B$G(B2$BHVL\!$(B3$BHVL\!$(B9$BHVL\$N%V%i%&%6$r8F$S$@$9(B)</TD></TR>
 </TABLE>
 
 <H5>$B%U%!%$%k(B/$B%9%H%j!<%`A`:n(B</H5>
@@ -257,8 +257,8 @@ w3m $B$N(Bmake$B;~$K;XDj$7$?%-!<A`:n$K$h$C$F!"%X%k%W%U%!%$%k$,0[$J$j$^$9!#(B
 <TR><TD>c<TD>$B8=:_$NJ8=q$N(B URL $B$rI=<($7$^$9!%(B
 <TR><TD>=<TD>$B8=:_$NJ8=q$K4X$9$k>pJs$rI=<($7$^$9!%(B
 <TR><TD>F<TD>&lt;FRAMESET&gt; $B$r4^$`J8=q$rI=<($7$F$$$k$H$-$K!$(B&lt;FRAME&gt; $B%?%0$N;X$9J#?t$NJ8=q$r(B1$B$D$NJ8=q$KJQ49$7$FI=<($7$^$9!%(B
-<TR><TD>M<TD>$B8=:_8+$F$$$k%Z!<%8$r!$30It%V%i%&%6$r;H$C$FI=<($7$^$9!%(B 2M, 3M $B$G(B2$BHVL\$H(B3$BHVL\$N%V%i%&%6$r;H$$$^$9!%(B
-<TR><TD>ESC M<TD>$B8=:_$N%j%s%/@h$r!$30It%V%i%&%6$r;H$C$FI=<($7$^$9!%(B 2ESC M, 3ESC M $B$G(B2$BHVL\$H(B3$BHVL\$N%V%i%&%6$r;H$$$^$9!%(B
+<TR><TD>M<TD>$B8=:_8+$F$$$k%Z!<%8$r!$30It%V%i%&%6$r;H$C$FI=<($7$^$9!%(B 2M, 3M, ..., 9M $B$G(B2$BHVL\!$(B3$BHVL\!$(B9$BHVL\$N%V%i%&%6$r;H$$$^$9!%(B
+<TR><TD>ESC M<TD>$B8=:_$N%j%s%/@h$r!$30It%V%i%&%6$r;H$C$FI=<($7$^$9!%(B 2ESC M, 3ESC M, ..., 9ESC M $B$G(B2$BHVL\!$(B3$BHVL\!$(B9$BHVL\$N%V%i%&%6$r;H$$$^$9!%(B
 </table>
 
 <H5>$B%U%!%$%k$H(B URL $B4X78$NA`:n(B</H5>
diff --git a/w3m-doc/sample/keymap.cgi b/w3m-doc/sample/keymap.cgi
index f68f5fb..d92c60f 100755
--- a/w3m-doc/sample/keymap.cgi
+++ b/w3m-doc/sample/keymap.cgi
@@ -203,7 +203,6 @@ GOTO_LINK
 HELP
 HISTORY
 INFO
-INIT_MAILCAP
 INTERRUPT
 LEFT
 LINE_BEGIN
diff --git a/w3mbookmark.c b/w3mbookmark.c
index 4355536..a306f26 100644
--- a/w3mbookmark.c
+++ b/w3mbookmark.c
@@ -79,6 +79,7 @@ print_bookmark_panel(char *bmark, char *url, char *title, char *charset)
 	    }
 	}
 	printf("</select>\n");
+	fclose(f);
     }
     printf(bkmark_src2, html_quote(url), html_quote(title));
 }
@@ -99,7 +100,7 @@ create_new_bookmark(char *bmark, char *section, char *title, char *url,
 	fprintf(f, "<body>\n<h1>Bookmarks</h1>\n");
 	fprintf(f, "<h2>%s</h2>\n<ul>\n", section);
 	fprintf(f, "<li><a href=\"%s\">%s</a>\n", url, title);
-	fprintf(f, end_section);
+	fprintf(f, "%s", end_section);
 	fprintf(f, "</ul>\n</body>\n</html>\n");
 	fclose(f);
     }
@@ -168,7 +169,10 @@ insert_bookmark(char *bmark, struct parsed_tagarg *data)
 	/* In this case, a new bookmark is appeneded after the bookmark file */
 	return create_new_bookmark(bmark, section, title, url, "a");
     }
-    f = fopen(bmark, "w");
+    if ((f = fopen(bmark, "w")) == NULL) {
+	printf("\nCannot open bookmark %s\n", bmark);
+	return FALSE;
+    }
     while (tl->nitem) {
 	fputs(popText(tl), f);
     }
diff --git a/w3mhelp-lynx_en.html.in b/w3mhelp-lynx_en.html.in
index 7448877..d073b0f 100644
--- a/w3mhelp-lynx_en.html.in
+++ b/w3mhelp-lynx_en.html.in
@@ -43,20 +43,20 @@ w3m</A>
 <table cellpadding=0>
 <TR><TD WIDTH=100>RET, C-f, Right arrow<TD>Follow hyperlink
 <TR><TD>d, ESC RET<TD>Save link to file
-<TR><TD>u<TD>Peek link URL
-<TR><TD>i<TD>Peek image URL
+<TR><TD>u<TD>Peek at link URL
+<TR><TD>i<TD>Peek at image URL
 <TR><TD>I<TD>View inline image
 <TR><TD>ESC I<TD>Save inline image to file
-<TR><TD>:<TD>Mark URL-like strings as anchors
-<TR><TD>ESC :<TD>Mark Message-ID-like strings as news anchors
-<TR><TD>c<TD>Peek current URL
+<TR><TD>:<TD>Mark URL-like strings as links
+<TR><TD>ESC :<TD>Mark Message-ID-like strings as links
+<TR><TD>c<TD>Peek at current URL
 <TR><TD>=<TD>Display information about current document
-<TR><TD>C-h<TD>View history of URL
-<TR><TD>F<TD>Render frame
+<TR><TD>C-h<TD>View browser history
+<TR><TD>F<TD>Render frames
 <TR><TD>M<TD>Browse current document using external browser
-(use 2M and 3M to invoke second and third browser)
+(prefix 2, 3, ..., or 9 to invoke alternate configured browsers, e.g. 3 M)
 <TR><TD>ESC M<TD>Browse link using external browser
-(use 2ESC M and 3ESC M to invoke second and third browser)
+(prefixed as above, e.g. 3ESC M)
 </table>
 
 <H2>File/Stream operation</H2>
@@ -98,7 +98,7 @@ w3m</A>
 <table cellpadding=0>
 <TR><TD WIDTH=100>/, C-s<TD>Search forward
 <TR><TD>n<TD>Search next
-<TR><TD>w<TD>Toggle wrap search mode
+<TR><TD>w<TD>Toggle search wrap mode
 </table>
 
 <H2>Mark operation</H2>
@@ -121,7 +121,7 @@ w3m</A>
 <TR><TD>Q<TD>Quit without confirmation
 </table>
 
-<H2>Line-edit mode</H2>
+<H2>Line-editing mode</H2>
 <table cellpadding=0>
 <TR><TD WIDTH=100>C-f<TD>Move cursor forward
 <TR><TD>C-b<TD>Move cursor backward
diff --git a/w3mhelp-lynx_ja.html.in b/w3mhelp-lynx_ja.html.in
index d160984..828b5a3 100644
--- a/w3mhelp-lynx_ja.html.in
+++ b/w3mhelp-lynx_ja.html.in
@@ -58,9 +58,9 @@
 <TR><TD>F<TD>&lt;FRAMESET&gt;��ޤ�ʸ���ɽ�����Ƥ���Ȥ��ˡ�&lt;FRAME&gt;
 �����λؤ�ʣ����ʸ���1�Ĥ�ʸ����Ѵ�����ɽ�����ޤ���
 <TR><TD>M<TD>���߸��Ƥ���ڡ����򡤳����֥饦����Ȥä�ɽ�����ޤ���
-2M, 3M ��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+2M, 3M, ..., 9M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
 <TR><TD>ESC M<TD>���ߤΥ����򡤳����֥饦����Ȥä�ɽ�����ޤ���
-2ESC M, 3ESC M ��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+2ESC M, 3ESC M, ..., 9ESC M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
 </table>
 
 <H3>�ե������URL�ط������</H3>
diff --git a/w3mhelp-w3m_en.html.in b/w3mhelp-w3m_en.html.in
index eb46e8a..a692142 100644
--- a/w3mhelp-w3m_en.html.in
+++ b/w3mhelp-w3m_en.html.in
@@ -47,21 +47,21 @@ w3m</A>
 <table cellpadding=0>
 <TR><TD WIDTH=100>RET<TD>Follow hyperlink
 <TR><TD>a, ESC RET<TD>Save link to file
-<TR><TD>u<TD>Peek link URL
-<TR><TD>i<TD>Peek image URL
+<TR><TD>u<TD>Peek at link URL
+<TR><TD>i<TD>Peek at image URL
 <TR><TD>I<TD>View inline image
 <TR><TD>ESC I<TD>Save inline image to file
-<TR><TD>:<TD>Mark URL-like strings as anchors
-<TR><TD>ESC :<TD>Mark Message-ID-like strings as news anchors
-<TR><TD>c<TD>Peek current URL
+<TR><TD>:<TD>Mark URL-like strings as links
+<TR><TD>ESC :<TD>Mark Message-ID-like strings as links
+<TR><TD>c<TD>Peek at current URL
 <TR><TD>=<TD>Display information about current document
 <TR><TD>C-g<TD>Show current line number
-<TR><TD>C-h<TD>View history of URL
-<TR><TD>F<TD>Render frame
+<TR><TD>C-h<TD>View browser history
+<TR><TD>F<TD>Render frames
 <TR><TD>M<TD>Browse current document using external browser
-(use 2M and 3M to invoke second and third browser)
+(prefix 2, 3, ..., or 9 to invoke alternate configured browsers, e.g. 3 M)
 <TR><TD>ESC M<TD>Browse link using external browser
-(use 2ESC M and 3ESC M to invoke second and third browser)
+(prefixed as above, e.g. 3ESC M)
 </table>
 
 <H2>File/Stream operation</H2>
@@ -105,7 +105,7 @@ w3m</A>
 <TR><TD>?,C-r<TD>Search backward
 <TR><TD>n<TD>Search next
 <TR><TD>N<TD>Search previous
-<TR><TD>C-w<TD>Toggle wrap search mode
+<TR><TD>C-w<TD>Toggle search wrap mode
 </table>
 
 <H2>Dictionary look-up</H2>
@@ -134,7 +134,7 @@ w3m</A>
 <TR><TD>Q<TD>Quit without confirmation
 </table>
 
-<H2>Line-edit mode</H2>
+<H2>Line-editing mode</H2>
 <table cellpadding=0>
 <TR><TD WIDTH=100>C-f<TD>Move cursor forward
 <TR><TD>C-b<TD>Move cursor backward
diff --git a/w3mhelp-w3m_ja.html.in b/w3mhelp-w3m_ja.html.in
index 95464ab..72cb849 100644
--- a/w3mhelp-w3m_ja.html.in
+++ b/w3mhelp-w3m_ja.html.in
@@ -61,8 +61,8 @@
  <TR> <TD>C-g</TD> <TD>�ڡ�����Ǥθ��߰��֤�ɽ��</TD></TR>
  <TR> <TD>C-h</TD> <TD>URL�����ɽ��</TD></TR>
  <TR> <TD>F</TD> <TD>�ե졼���ɽ������</TD></TR>
- <TR> <TD>M</TD> <TD>���ڡ��������֥饦����ɽ������(2M,3M��2���ܤ�3���ܤΥ֥饦����ƤӤ���)</TD></TR>
- <TR> <TD>ESC M</TD> <TD>���������֥饦����ɽ������(2ESC M,3ESC M��2���ܤ�3���ܤΥ֥饦����ƤӤ���)</TD></TR>
+ <TR> <TD>M</TD> <TD>���ڡ��������֥饦����ɽ������(2M, 3M, ..., 9M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����ƤӤ���)</TD></TR>
+ <TR> <TD>ESC M</TD> <TD>���������֥饦����ɽ������(2ESC M, 3ESC M, ..., 9ESC M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����ƤӤ���)</TD></TR>
 </TABLE>
 
 <H2>�ե�����/���ȥ꡼�����</H2>
diff --git a/w3mhelperpanel.c b/w3mhelperpanel.c
index 110794b..96b60a0 100644
--- a/w3mhelperpanel.c
+++ b/w3mhelperpanel.c
@@ -115,6 +115,7 @@ printMailcapPanel(char *mailcap)
     printf("</table>\n<input type=submit name=submit value=\"%s\">\n</form>\n\
 </body>\n</html>\n",
 	   MSG_DOIT);
+    fclose(f);
 }
 
 void
diff --git a/w3mimg/Makefile.in b/w3mimg/Makefile.in
index dfc550c..8e2ad73 100644
--- a/w3mimg/Makefile.in
+++ b/w3mimg/Makefile.in
@@ -16,9 +16,9 @@ IMGCFLAGS=@IMGX11CFLAGS@ @IMGFBCFLAGS@ @IMGWINCFLAGS@
 IMGOBJS=@IMGOBJS@
 
 .PHONY: $(SUBDIRS)
-all: @IMGTARGETS@ w3mimg.a
+all: w3mimg.a
 
-w3mimg.a: $(IMGOBJS)
+w3mimg.a: w3mimg.o @IMGTARGETS@
 	$(AR) rv $@ $(IMGOBJS)
 	$(RANLIB) $@
 
diff --git a/w3mimg/fb/fb.c b/w3mimg/fb/fb.c
index cd11128..7960584 100644
--- a/w3mimg/fb/fb.c
+++ b/w3mimg/fb/fb.c
@@ -12,12 +12,24 @@
 #include <errno.h>
 #include <sys/ioctl.h>
 #include <sys/mman.h>
+#if defined(__linux__)
 #include <linux/fb.h>
+#elif defined(__FreeBSD__)
+#include <sys/fbio.h> 
+#endif
+#if defined(__FreeBSD__)
+#include <sys/types.h>
+#include <machine/param.h>
+#endif
 
 #include "fb.h"
 
 #define FB_ENV		"FRAMEBUFFER"
+#if defined(__linux__)
 #define	FB_DEFDEV	"/dev/fb0"
+#elif defined(__FreeBSD__)
+#define	FB_DEFDEV	"/dev/ttyv0"
+#endif
 
 #define MONO_OFFSET_8BIT  0x40
 #define COLORS_MONO_8BIT  0x40
@@ -38,22 +50,65 @@
 
 #define IMAGE_SIZE_MAX 10000
 
+#if defined(__linux__)
 static struct fb_cmap *fb_cmap_create(struct fb_fix_screeninfo *,
 				      struct fb_var_screeninfo *);
+#elif defined(__FreeBSD__)
+static video_color_palette_t *fb_cmap_create(video_info_t *video_info,
+				video_adapter_info_t *video_adapter_info);
+#endif
+#if defined(__linux__)
 static void fb_cmap_destroy(struct fb_cmap *cmap);
+#elif defined(__FreeBSD__)
+static void fb_cmap_destroy(video_color_palette_t *cmap);
+#endif
+#if defined(__linux__)
 static int fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo);
+#endif
+#if defined(__linux__)
 static void *fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo);
+#elif defined(__FreeBSD__)
+static void *fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info);
+#endif
+#if defined(__linux__)
 static int fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo);
+#elif defined(__FreeBSD__)
+static int fb_munmap(void *buf, video_adapter_info_t *video_adapter_info);
+#endif
+#if defined(__linux__)
 static int fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo);
+#endif
+#if defined(__linux__)
 static int fb_cmap_set(int fbfp, struct fb_cmap *cmap);
+#elif defined(__FreeBSD__)
+static int fb_cmap_set(int fbfp, video_color_palette_t *cmap);
+#endif
+#if defined(__linux__)
 static int fb_cmap_get(int fbfp, struct fb_cmap *cmap);
+#elif defined(__FreeBSD__)
+static int fb_cmap_get(int fbfp, video_color_palette_t *cmap);
+#endif
 static int fb_cmap_init(void);
 static int fb_get_cmap_index(int r, int g, int b);
 static unsigned long fb_get_packed_color(int r, int g, int b);
+#if defined(__FreeBSD__)
+static int fb_video_mode_get(int fbfp, int *video_mode);
+static int fb_video_info_get(int fbfp, video_info_t *video_info);
+static int fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info);
+#endif
 
+#if defined(__linux__)
 static struct fb_fix_screeninfo fscinfo;
 static struct fb_var_screeninfo vscinfo;
+#elif defined(__FreeBSD__)
+static video_info_t video_info;
+static video_adapter_info_t video_adapter_info;
+#endif
+#if defined(__linux__)
 static struct fb_cmap *cmap = NULL, *cmap_org = NULL;
+#elif defined(__FreeBSD__)
+static video_color_palette_t *cmap = NULL, *cmap_org = NULL;
+#endif
 static int is_open = FALSE;
 static int fbfp = -1;
 static size_t pixel_size = 0;
@@ -63,6 +118,9 @@ int
 fb_open(void)
 {
     char *fbdev = { FB_DEFDEV };
+#if defined(__FreeBSD__)
+    int video_mode;
+#endif
 
     if (is_open == TRUE)
 	return 1;
@@ -76,6 +134,7 @@ fb_open(void)
 	goto ERR_END;
     }
 
+#if defined(__linux__)
     if (fb_fscrn_get(fbfp, &fscinfo)) {
 	goto ERR_END;
     }
@@ -83,22 +142,69 @@ fb_open(void)
     if (fb_vscrn_get(fbfp, &vscinfo)) {
 	goto ERR_END;
     }
+#elif defined(__FreeBSD__)
+    if (fb_video_mode_get(fbfp, &video_mode)) {
+	goto ERR_END;
+    }
+    video_info.vi_mode = video_mode;
+
+    if (fb_video_info_get(fbfp, &video_info)) {
+	goto ERR_END;
+    }
 
+    if (fb_video_adapter_info_get(fbfp, &video_adapter_info)) {
+	goto ERR_END;
+    }
+    if (!(video_info.vi_flags & V_INFO_GRAPHICS) ||
+	!(video_info.vi_flags & V_INFO_LINEAR)) {
+	goto ERR_END;
+    }
+#endif
+
+#if defined(__linux__)
     if ((cmap = fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) {
 	goto ERR_END;
     }
+#elif defined(__FreeBSD__)
+    if ((cmap = fb_cmap_create(&video_info, &video_adapter_info)) == (video_color_palette_t *)-1) {
+	goto ERR_END;
+    }
+#endif
 
+#if defined(__linux__)
     if (!(buf = fb_mmap(fbfp, &fscinfo))) {
 	fprintf(stderr, "Can't allocate memory.\n");
 	goto ERR_END;
     }
+#elif defined(__FreeBSD__)
+    if (!(buf = fb_mmap(fbfp, &video_adapter_info))) {
+	fprintf(stderr, "Can't allocate memory.\n");
+	goto ERR_END;
+    }
+#endif
 
+#if defined(__linux__)
     if (fscinfo.type != FB_TYPE_PACKED_PIXELS) {
 	fprintf(stderr, "This type of framebuffer is not supported.\n");
 	goto ERR_END;
     }
+#elif defined(__FreeBSD__)
+    if (!(video_info.vi_mem_model == V_INFO_MM_PACKED || 
+	  video_info.vi_mem_model == V_INFO_MM_DIRECT)) {
+	fprintf(stderr, "This type of framebuffer is not supported.\n");
+	goto ERR_END;
+    }
+#endif
 
+#if defined(__linux__)
     if (fscinfo.visual == FB_VISUAL_PSEUDOCOLOR && vscinfo.bits_per_pixel == 8) {
+#elif defined(__FreeBSD__)
+    if (video_adapter_info.va_flags & V_ADP_PALETTE &&
+	video_info.vi_mem_model == V_INFO_MM_PACKED &&
+	video_info.vi_depth == 8) {
+#else
+    if (0) {
+#endif
 	if (fb_cmap_get(fbfp, cmap)) {
 	    fprintf(stderr, "Can't get color map.\n");
 	    fb_cmap_destroy(cmap);
@@ -111,6 +217,7 @@ fb_open(void)
 
 	pixel_size = 1;
     }
+#if defined(__linux__)
     else if ((fscinfo.visual == FB_VISUAL_TRUECOLOR ||
 	      fscinfo.visual == FB_VISUAL_DIRECTCOLOR) &&
 	     (vscinfo.bits_per_pixel == 15 ||
@@ -118,6 +225,14 @@ fb_open(void)
 	      vscinfo.bits_per_pixel == 24 || vscinfo.bits_per_pixel == 32)) {
 	pixel_size = (vscinfo.bits_per_pixel + 7) / CHAR_BIT;
     }
+#elif defined(__FreeBSD__)
+    else if (video_info.vi_mem_model == V_INFO_MM_DIRECT &&
+	     (video_info.vi_depth == 15 ||
+	      video_info.vi_depth == 16 ||
+	      video_info.vi_depth == 24 || video_info.vi_depth == 32)) {
+	pixel_size = (video_info.vi_depth + 7) / CHAR_BIT;
+    }
+#endif
     else {
 	fprintf(stderr, "This type of framebuffer is not supported.\n");
 	goto ERR_END;
@@ -147,7 +262,11 @@ fb_close(void)
 	cmap = NULL;
     }
     if (buf != NULL) {
+#if defined(__linux__)
 	fb_munmap(buf, &fscinfo);
+#elif defined(__FreeBSD__)
+	fb_munmap(buf, &video_adapter_info);
+#endif
 	buf = NULL;
     }
 
@@ -259,11 +378,19 @@ fb_image_draw(FB_IMAGE * image, int x, int y, int sx, int sy, int width,
     if (y + height > fb_height())
 	height = fb_height() - y;
 
+#if defined(__linux__)
     offset_fb = fscinfo.line_length * y + pixel_size * x;
+#elif defined(__FreeBSD__)
+    offset_fb = video_adapter_info.va_line_width * y + pixel_size * x;
+#endif
     offset_img = image->rowstride * sy + pixel_size * sx;
     for (i = 0; i < height; i++) {
 	memcpy(buf + offset_fb, image->data + offset_img, pixel_size * width);
+#if defined(__linux__)
 	offset_fb += fscinfo.line_length;
+#elif defined(__FreeBSD__)
+	offset_fb += video_adapter_info.va_line_width;
+#endif
 	offset_img += image->rowstride;
     }
 
@@ -336,7 +463,11 @@ fb_width(void)
     if (is_open != TRUE)
 	return 0;
 
+#if defined(__linux__)
     return vscinfo.xres;
+#elif defined(__FreeBSD__)
+    return video_info.vi_width;
+#endif
 }
 
 int
@@ -345,7 +476,11 @@ fb_height(void)
     if (is_open != TRUE)
 	return 0;
 
+#if defined(__linux__)
     return vscinfo.yres;
+#elif defined(__FreeBSD__)
+    return video_info.vi_height;
+#endif
 }
 
 int
@@ -369,7 +504,11 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b)
 	h = fb_height() - y;
 
     if (tmp == NULL) {
+#if defined(__linux__)
 	tmp = malloc(fscinfo.line_length);
+#elif defined(__FreeBSD__)
+	tmp = malloc(video_adapter_info.va_line_width);
+#endif
 	if (tmp == NULL)
 	    return 1;
     }
@@ -384,10 +523,18 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b)
 	gg = g;
 	bb = b;
     }
+#if defined(__linux__)
     offset_fb = fscinfo.line_length * y + pixel_size * x;
+#elif defined(__FreeBSD__)
+    offset_fb = video_adapter_info.va_line_width * y + pixel_size * x;
+#endif
     for (i = 0; i < h; i++) {
 	memcpy(buf + offset_fb, tmp, pixel_size * w);
+#if defined(__linux__)
 	offset_fb += fscinfo.line_length;
+#elif defined(__FreeBSD__)
+	offset_fb += video_adapter_info.va_line_width;
+#endif
     }
     return 0;
 }
@@ -400,11 +547,21 @@ fb_get_packed_color(int r, int g, int b)
 	return fb_get_cmap_index(r, g, b);
     }
     else {
+#if defined(__linux__)
 	return
 	    ((r >> (CHAR_BIT - vscinfo.red.length)) << vscinfo.red.offset) +
 	    ((g >> (CHAR_BIT - vscinfo.green.length)) << vscinfo.green.
 	     offset) +
 	    ((b >> (CHAR_BIT - vscinfo.blue.length)) << vscinfo.blue.offset);
+#elif defined(__FreeBSD__)
+	return
+	    ((r >> (CHAR_BIT - video_info.vi_pixel_fsizes[0])) <<
+	     video_info.vi_pixel_fields[0]) +
+	    ((g >> (CHAR_BIT - video_info.vi_pixel_fsizes[1])) <<
+	     video_info.vi_pixel_fields[1]) +
+	    ((b >> (CHAR_BIT - video_info.vi_pixel_fsizes[2])) <<
+	     video_info.vi_pixel_fields[2]);
+#endif
     }
 }
 
@@ -433,16 +590,31 @@ fb_cmap_init(void)
     if (cmap == NULL)
 	return 1;
 
+#if defined(__linux__)
     if (cmap->len < COLOR_OFFSET_8BIT + COLORS_8BIT) {
 	fprintf(stderr, "Can't allocate enough color.\n");
 	return 1;
     }
+#elif defined(__FreeBSD__)
+    if (cmap->count < COLOR_OFFSET_8BIT + COLORS_8BIT) {
+	fprintf(stderr, "Can't allocate enough color.\n");
+	return 1;
+    }
+#endif
 
     if (cmap_org == NULL) {
+#if defined(__linux__)
 	if ((cmap_org =
 	     fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) {
 	    return 1;
 	}
+#elif defined(__FreeBSD__)
+	if ((cmap_org =
+	     fb_cmap_create(&video_info, &video_adapter_info)) ==
+	     (video_color_palette_t *)-1) {
+	    return 1;
+	}
+#endif
 
 	if (fb_cmap_get(fbfp, cmap_org)) {
 	    fprintf(stderr, "Can't get color map.\n");
@@ -452,8 +624,13 @@ fb_cmap_init(void)
 	}
     }
 
+#if defined(__linux__)
     cmap->start = MONO_OFFSET_8BIT;
     cmap->len = COLORS_8BIT + COLORS_MONO_8BIT;
+#elif defined(__FreeBSD__)
+    cmap->index = MONO_OFFSET_8BIT;
+    cmap->count = COLORS_8BIT + COLORS_MONO_8BIT;
+#endif
 
     for (lp = 0; lp < COLORS_MONO_8BIT; lp++) {
 	int c;
@@ -506,73 +683,223 @@ fb_cmap_init(void)
 
 #define	LUT_MAX		(256)
 
+#if defined(__linux__)
 static struct fb_cmap *
 fb_cmap_create(struct fb_fix_screeninfo *fscinfo,
 	       struct fb_var_screeninfo *vscinfo)
+#elif defined(__FreeBSD__)
+static video_color_palette_t *
+fb_cmap_create(video_info_t *video_info,
+	       video_adapter_info_t *video_adapter_info)
+#endif
 {
+#if defined(__linux__)
     struct fb_cmap *cmap;
+#elif defined(__FreeBSD__)
+    video_color_palette_t *cmap;
+#endif
     int cmaplen = LUT_MAX;
 
     /* check the existence of colormap */
+#if defined(__linux__)
     if (fscinfo->visual == FB_VISUAL_MONO01 ||
 	fscinfo->visual == FB_VISUAL_MONO10 ||
 	fscinfo->visual == FB_VISUAL_TRUECOLOR)
 	return NULL;
+#elif defined(__FreeBSD__)
+    if (!(video_adapter_info->va_flags & V_ADP_PALETTE))
+	return NULL;
+#endif
 
+#if defined(__linux__)
     cmap = (struct fb_cmap *)malloc(sizeof(struct fb_cmap));
+#elif defined(__FreeBSD__)
+    cmap = (video_color_palette_t *)malloc(sizeof(video_color_palette_t));
+#endif
     if (!cmap) {
 	perror("cmap malloc error\n");
+#if defined(__linux__)
 	return (struct fb_cmap *)-1;
+#elif defined(__FreeBSD__)
+	return (video_color_palette_t *)-1;
+#endif
     }
+#if defined(__linux__)
     memset(cmap, 0, sizeof(struct fb_cmap));
+#elif defined(__FreeBSD__)
+    memset(cmap, 0, sizeof(video_color_palette_t));
+#endif
+
+#if defined(__FreeBSD__)
+    if (video_info->vi_mem_model == V_INFO_MM_PACKED) {
+	cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen);
+	if (!cmap->red) {
+	    perror("red lut malloc error\n");
+	    return (video_color_palette_t *)-1;
+	}
+	cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen);
+	if (!cmap->green) {
+	    perror("green lut malloc error\n");
+	    free(cmap->red);
+	    return (video_color_palette_t *)-1;
+	}
+	cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen);
+	if (!cmap->blue) {
+	    perror("blue lut malloc error\n");
+	    free(cmap->red);
+	    free(cmap->green);
+	    return (video_color_palette_t *)-1;
+	}
+	cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen);
+	if (!cmap->transparent) {
+	    perror("transparent lut malloc error\n");
+	    free(cmap->red);
+	    free(cmap->green);
+	    free(cmap->blue);
+	    return (video_color_palette_t *)-1;
+	}
+	cmap->count = cmaplen;
+	return cmap;
+    }
+#endif
 
     /* Allocates memory for a colormap */
+#if defined(__linux__)
     if (vscinfo->red.length) {
 	cmap->red = (__u16 *) malloc(sizeof(__u16) * cmaplen);
+#elif defined(__FreeBSD__)
+    if (video_info->vi_pixel_fsizes[0]) {
+	cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen);
+#else
+    if (0) {
+#endif
 	if (!cmap->red) {
 	    perror("red lut malloc error\n");
+#if defined(__linux__)
 	    return (struct fb_cmap *)-1;
+#elif defined(__FreeBSD__)
+	    return (video_color_palette_t *)-1;
+#endif
 	}
     }
+#if defined(__linux__)
     if (vscinfo->green.length) {
 	cmap->green = (__u16 *) malloc(sizeof(__u16) * cmaplen);
+#elif defined(__FreeBSD__)
+    if (video_info->vi_pixel_fsizes[1]) {
+	cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen);
+#else
+    if (0) {
+#endif
 	if (!cmap->green) {
+#if defined(__linux__)
 	    if (vscinfo->red.length)
 		free(cmap->red);
+#elif defined(__FreeBSD__)
+	    if (video_info->vi_pixel_fsizes[0])
+		free(cmap->red);
+#endif
 	    perror("green lut malloc error\n");
+#if defined(__linux__)
 	    return (struct fb_cmap *)-1;
+#elif defined(__FreeBSD__)
+	    return (video_color_palette_t *)-1;
+#endif
 	}
     }
+#if defined(__linux__)
     if (vscinfo->blue.length) {
 	cmap->blue = (__u16 *) malloc(sizeof(__u16) * cmaplen);
+#elif defined(__FreeBSD__)
+    if (video_info->vi_pixel_fsizes[2]) {
+	cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen);
+#else
+    if (0) {
+#endif
 	if (!cmap->blue) {
+#if defined(__linux__)
 	    if (vscinfo->red.length)
 		free(cmap->red);
+#elif defined(__FreeBSD__)
+	    if (video_info->vi_pixel_fsizes[0])
+		free(cmap->red);
+#endif
+#if defined(__linux__)
 	    if (vscinfo->green.length)
 		free(cmap->green);
+#elif defined(__FreeBSD__)
+	    if (video_info->vi_pixel_fsizes[1])
+		free(cmap->green);
+#endif
 	    perror("blue lut malloc error\n");
+#if defined(__linux__)
 	    return (struct fb_cmap *)-1;
+#elif defined(__FreeBSD__)
+	    return (video_color_palette_t *)-1;
+#endif
 	}
     }
+#if defined(__linux__)
     if (vscinfo->transp.length) {
 	cmap->transp = (__u16 *) malloc(sizeof(__u16) * cmaplen);
+#elif defined(__FreeBSD__)
+    if (video_info->vi_pixel_fsizes[3]) {
+	cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen);
+#else
+    if (0) {
+#endif
+#if defined(__linux__)
 	if (!cmap->transp) {
+#elif defined(__FreeBSD__)
+	if (!cmap->transparent) {
+#else
+	if (0) {
+#endif
+#if defined(__linux__)
 	    if (vscinfo->red.length)
 		free(cmap->red);
+#elif defined(__FreeBSD__)
+	    if (video_info->vi_pixel_fsizes[0])
+		free(cmap->red);
+#endif
+#if defined(__linux__)
 	    if (vscinfo->green.length)
 		free(cmap->green);
+#elif defined(__FreeBSD__)
+	    if (video_info->vi_pixel_fsizes[1])
+		free(cmap->green);
+#endif
+#if defined(__linux__)
 	    if (vscinfo->blue.length)
 		free(cmap->blue);
 	    perror("transp lut malloc error\n");
+#elif defined(__FreeBSD__)
+	    if (video_info->vi_pixel_fsizes[2])
+		free(cmap->blue);
+	    perror("transparent lut malloc error\n");
+#endif
+#if defined(__linux__)
 	    return (struct fb_cmap *)-1;
+#elif defined(__FreeBSD__)
+	    return (video_color_palette_t *)-1;
+#endif
 	}
     }
+#if defined(__linux__)
     cmap->len = cmaplen;
+#elif defined(__FreeBSD__)
+    cmap->count = cmaplen;
+#endif
     return cmap;
 }
 
+#if defined(__linux__)
 static void
 fb_cmap_destroy(struct fb_cmap *cmap)
+#elif defined(__FreeBSD__)
+static void
+fb_cmap_destroy(video_color_palette_t *cmap)
+#endif
 {
     if (cmap->red)
 	free(cmap->red);
@@ -580,28 +907,57 @@ fb_cmap_destroy(struct fb_cmap *cmap)
 	free(cmap->green);
     if (cmap->blue)
 	free(cmap->blue);
+#if defined(__linux__)
     if (cmap->transp)
 	free(cmap->transp);
+#elif defined(__FreeBSD__)
+    if (cmap->transparent)
+	free(cmap->transparent);
+#endif
     free(cmap);
 }
 
+#if defined(__linux__)
 static int
 fb_cmap_get(int fbfp, struct fb_cmap *cmap)
+#elif defined(__FreeBSD__)
+static int
+fb_cmap_get(int fbfp, video_color_palette_t *cmap)
+#endif
 {
+#if defined(__linux__)
     if (ioctl(fbfp, FBIOGETCMAP, cmap)) {
 	perror("ioctl FBIOGETCMAP error\n");
 	return -1;
     }
+#elif defined(__FreeBSD__)
+    if (ioctl(fbfp, FBIO_GETPALETTE, cmap) == -1) {
+	perror("ioctl FBIO_GETPALETTE error\n");
+	return -1;
+    }
+#endif
     return 0;
 }
 
+#if defined(__linux__)
 static int
 fb_cmap_set(int fbfp, struct fb_cmap *cmap)
+#elif defined(__FreeBSD__)
+static int
+fb_cmap_set(int fbfp, video_color_palette_t *cmap)
+#endif
 {
+#if defined(__linux__)
     if (ioctl(fbfp, FBIOPUTCMAP, cmap)) {
 	perror("ioctl FBIOPUTCMAP error\n");
 	return -1;
     }
+#elif defined(__FreeBSD__)
+    if (ioctl(fbfp, FBIO_SETPALETTE, cmap) == -1) {
+	perror("ioctl FBIO_SETPALETTE error\n");
+	return -1;
+    }
+#endif
     return 0;
 }
 
@@ -612,10 +968,16 @@ fb_cmap_set(int fbfp, struct fb_cmap *cmap)
  * fb_munmap()          deletes the mappings
  */
 
+#if defined(__linux__)
 static void *
 fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo)
+#elif defined(__FreeBSD__)
+static void *
+fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info)
+#endif
 {
     void *buf;
+#if defined(__linux__)
     if ((buf = (unsigned char *)
 	 mmap(NULL, scinfo->smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp,
 	      (off_t) 0))
@@ -623,13 +985,41 @@ fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo)
 	perror("mmap error");
 	return NULL;
     }
+#elif defined(__FreeBSD__)
+    size_t mmap_offset;
+    size_t mmap_length;
+    mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK);
+    mmap_length = (size_t)(video_adapter_info->va_window_size +
+			   mmap_offset + PAGE_MASK) & (~PAGE_MASK);
+    if ((buf = (unsigned char *)
+	 mmap(NULL, mmap_length, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp,
+	      (off_t) 0))
+	== MAP_FAILED) {
+	perror("mmap error");
+	return NULL;
+    }
+#endif
     return buf;
 }
 
+#if defined(__linux__)
 static int
 fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo)
+#elif defined(__FreeBSD__)
+static int
+fb_munmap(void *buf, video_adapter_info_t *video_adapter_info)
+#endif
 {
+#if defined(__linux__)
     return munmap(buf, scinfo->smem_len);
+#elif defined(__FreeBSD__)
+    size_t mmap_offset;
+    size_t mmap_length;
+    mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK);
+    mmap_length = (size_t)(video_adapter_info->va_window_size +
+			   mmap_offset + PAGE_MASK) & (~PAGE_MASK);
+    return munmap((void *)((u_long)buf & (~PAGE_MASK)), mmap_length);
+#endif
 }
 
 /*
@@ -637,6 +1027,7 @@ fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo)
  * 
  * fb_fscrn_get()               get information
  */
+#if defined(__linux__)
 static int
 fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo)
 {
@@ -646,12 +1037,14 @@ fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo)
     }
     return 0;
 }
+#endif
 
 /*
  * (struct fb_var_screeninfo) device independent variable information
  * 
  * fb_vscrn_get()               get information
  */
+#if defined(__linux__)
 static int
 fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo)
 {
@@ -661,3 +1054,41 @@ fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo)
     }
     return 0;
 }
+#endif
+
+#if defined(__FreeBSD__)
+static int
+fb_video_mode_get(int fbfp, int *video_mode)
+{
+    if (ioctl(fbfp, FBIO_GETMODE, video_mode) == -1) {
+	perror("ioctl FBIO_GETMODE error\n");
+	return -1;
+    }
+    return 0;
+}
+#endif
+
+#if defined(__FreeBSD__)
+static int
+fb_video_info_get(int fbfp, video_info_t *video_info)
+{
+    if (ioctl(fbfp, FBIO_MODEINFO, video_info) == -1) {
+	perror("ioctl FBIO_MODEINFO error\n");
+	return -1;
+    }
+    return 0;
+}
+#endif
+
+#if defined(__FreeBSD__)
+static int
+fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info)
+{
+    if (ioctl(fbfp, FBIO_ADPINFO, video_adapter_info) == -1) {
+	perror("ioctl FBIO_ADPINFO error\n");
+	return -1;
+    }
+    return 0;
+}
+#endif
+
diff --git a/w3mimg/fb/fb.h b/w3mimg/fb/fb.h
index 1138bb0..5d86454 100644
--- a/w3mimg/fb/fb.h
+++ b/w3mimg/fb/fb.h
@@ -1,7 +1,11 @@
 /* $Id: fb.h,v 1.7 2003/07/07 15:48:17 ukai Exp $ */
 #ifndef fb_header
 #define fb_header
+#if defined(__linux__)
 #include <linux/fb.h>
+#elif defined(__FreeBSD__)
+#include <sys/fbio.h> 
+#endif
 
 typedef struct {
     int num;
diff --git a/w3mimg/fb/fb_gdkpixbuf.c b/w3mimg/fb/fb_gdkpixbuf.c
index 36e3b62..f1e8d97 100644
--- a/w3mimg/fb/fb_gdkpixbuf.c
+++ b/w3mimg/fb/fb_gdkpixbuf.c
@@ -6,7 +6,7 @@
 #include "config.h"
 #if defined(USE_GTK2)
 #include <glib-object.h>
-#include <gdk/gdk.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
 #endif
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include "fb.h"
diff --git a/w3mimg/fb/fb_w3mimg.c b/w3mimg/fb/fb_w3mimg.c
index d3ae5a9..fb323f5 100644
--- a/w3mimg/fb/fb_w3mimg.c
+++ b/w3mimg/fb/fb_w3mimg.c
@@ -153,10 +153,15 @@ check_tty_console(char *tty)
 	return 0;
     if (strncmp(tty, "/dev/", 5) == 0)
 	tty += 5;
+#if defined(__linux__)
     if (strncmp(tty, "tty", 3) == 0 && isdigit(*(tty + 3)))
 	return 1;
     if (strncmp(tty, "vc/", 3) == 0 && isdigit(*(tty + 3)))
 	return 1;
+#elif defined(__FreeBSD__)
+    if (strncmp(tty, "ttyv", 4) == 0 && isxdigit(*(tty + 4)))
+	return 1;
+#endif
     return 0;
 }
 #else
@@ -172,7 +177,9 @@ w3mimg_fbopen()
 	return NULL;
     memset(wop, 0, sizeof(w3mimg_op));
 
-    if (!check_tty_console(getenv("W3M_TTY")) && strcmp("jfbterm", getenv("TERM")) != 0) {
+    if (!check_tty_console(getenv("W3M_TTY")) &&
+	strcmp("jfbterm", getenv("TERM")) != 0 &&
+	strncmp("jfbterm-", getenv("TERM"), 8) != 0) {
 	fprintf(stderr, "w3mimgdisplay/fb: tty is not console\n");
 	goto error;
     }
diff --git a/w3mimg/x11/x11_w3mimg.c b/w3mimg/x11/x11_w3mimg.c
index f5be4a8..9a539de 100644
--- a/w3mimg/x11/x11_w3mimg.c
+++ b/w3mimg/x11/x11_w3mimg.c
@@ -14,7 +14,7 @@
 #elif defined(USE_GDKPIXBUF)
 #if defined(USE_GTK2)
 #include <glib-object.h>
-#include <gdk/gdk.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
 #include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
 #else
 #include <gdk-pixbuf/gdk-pixbuf-xlib.h>
@@ -121,24 +121,32 @@ x11_init(w3mimg_op * self)
     if (self == NULL)
 	return 0;
     xi = (struct x11_info *)self->priv;
+#if defined(USE_IMLIB)
     if (xi == NULL)
 	return 0;
-#if defined(USE_IMLIB)
     if (!xi->id) {
 	xi->id = Imlib_init(xi->display);
 	if (!xi->id)
 	    return 0;
     }
 #elif defined(USE_GDKPIXBUF)
-    if (!xi->init_flag) {
+    if (!xi) {
+#if defined(USE_GTK2)
+	g_type_init();
+#endif
+    }
+    else if (!xi->init_flag) {
+	XWindowAttributes attr;
 #if defined(USE_GTK2)
 	g_type_init();
 #endif
-	gdk_pixbuf_xlib_init(xi->display, 0);
+	XGetWindowAttributes(xi->display, xi->parent, &attr);
+	/* gdk_pixbuf_xlib_init_with_depth() ignores depth, sigh... */
+	gdk_pixbuf_xlib_init_with_depth(xi->display, 0, attr.depth);
 	xi->init_flag = TRUE;
     }
 #endif
-    if (!xi->imageGC) {
+    if (xi && !xi->imageGC) {
 	xi->imageGC = XCreateGC(xi->display, xi->parent, 0, NULL);
 	if (!xi->imageGC)
 	    return 0;
@@ -200,14 +208,16 @@ x11_set_background(w3mimg_op * self, char *background)
 {
     XColor screen_def, exact_def;
     struct x11_info *xi;
+    XWindowAttributes attr;
     if (self == NULL)
 	return;
     xi = (struct x11_info *)self->priv;
     if (xi == NULL)
 	return;
 
+    XGetWindowAttributes(xi->display, xi->window, &attr);
     if (background &&
-	XAllocNamedColor(xi->display, DefaultColormap(xi->display, 0),
+	XAllocNamedColor(xi->display, attr.colormap,
 			 background, &screen_def, &exact_def))
 	xi->background_pixel = screen_def.pixel;
     else {
@@ -216,7 +226,7 @@ x11_set_background(w3mimg_op * self, char *background)
 	XImage *i;
 
 	p = XCreatePixmap(xi->display, xi->window, 1, 1,
-			  DefaultDepth(xi->display, 0));
+			  attr.depth);
 	gc = XCreateGC(xi->display, xi->window, 0, NULL);
 	if (!p || !gc)
 	    exit(1);		/* XXX */
@@ -258,6 +268,7 @@ x11_img_new(struct x11_info *xi, int w, int h, int n)
 {
     struct x11_image *img = NULL;
     int i;
+    XWindowAttributes attr;
 
     img = malloc(sizeof(*img));
     if (!img)
@@ -267,9 +278,10 @@ x11_img_new(struct x11_info *xi, int w, int h, int n)
     if (!img->pixmap)
 	goto ERROR;
 
+    XGetWindowAttributes(xi->display, xi->window, &attr);
     for (i = 0; i < n; i++) {
 	img->pixmap[i] = XCreatePixmap(xi->display, xi->parent, w, h,
-				       DefaultDepth(xi->display, 0));
+				       attr.depth);
 	if (!img->pixmap[i])
 	    goto ERROR;
 
@@ -318,6 +330,41 @@ resize_image(GdkPixbuf * pixbuf, int width, int height)
 	return NULL;
     return resized_pixbuf;
 }
+
+#if defined(USE_GTK2)
+static void
+render_pixbuf_to_pixmap_32(Display *display, GC gc, Pixmap pixmap, GdkPixbuf *  pixbuf)
+{
+    unsigned int x, y, width, height, rowstride, bytes_per_pixel;
+    unsigned char *line;
+    XImage *image;
+
+    width = gdk_pixbuf_get_width(pixbuf) ;
+    height = gdk_pixbuf_get_height(pixbuf) ;
+
+    if (!(image = XGetImage(display, pixmap, 0, 0, width, height, AllPlanes, ZPixmap)))
+	return ;
+
+    bytes_per_pixel = (gdk_pixbuf_get_has_alpha(pixbuf)) ? 4 : 3;
+    rowstride = gdk_pixbuf_get_rowstride(pixbuf);
+    line = gdk_pixbuf_get_pixels(pixbuf);
+
+    for (y = 0; y < height; y++) {
+	u_char *pixel;
+
+	pixel = line;
+	for (x = 0; x < width; x++) {
+	    XPutPixel(image, x, y,
+		(pixel[0] <<16) | (pixel[1] <<8) | pixel[2] | 0xff000000);
+	    pixel += bytes_per_pixel;
+	}
+	line += rowstride;
+    }
+
+    XPutImage(display, pixmap, gc, image, 0, 0, 0, 0, width, height);
+    XDestroyImage(image);
+}
+#endif
 #endif
 
 static int
@@ -342,6 +389,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
     GList *frames;
 #endif
 #endif
+    XWindowAttributes attr;
 
     if (self == NULL)
 	return 0;
@@ -349,6 +397,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
     if (xi == NULL)
 	return 0;
 
+    XGetWindowAttributes(xi->display, xi->window, &attr);
 #if defined(USE_IMLIB)
     im = Imlib_load_image(xi->id, fname);
     if (!im)
@@ -358,7 +407,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
     if (h <= 0)
 	h = im->rgb_height;
     img->pixmap = (void *)XCreatePixmap(xi->display, xi->parent, w, h,
-					DefaultDepth(xi->display, 0));
+					attr.depth);
     if (!img->pixmap)
 	return 0;
     XSetForeground(xi->display, xi->imageGC, xi->background_pixel);
@@ -374,17 +423,21 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
 	w = imlib_image_get_width();
     if (h <= 0)
 	h = imlib_image_get_height();
+
+    im = imlib_create_cropped_scaled_image(0, 0, imlib_image_get_width(), imlib_image_get_height(), w, h);
+    imlib_context_set_image(im);
+
     img->pixmap = (void *)XCreatePixmap(xi->display, xi->parent, w, h,
-					DefaultDepth(xi->display, 0));
+					attr.depth);
     if (!img->pixmap)
 	return 0;
     XSetForeground(xi->display, xi->imageGC, xi->background_pixel);
     XFillRectangle(xi->display, (Pixmap) img->pixmap, xi->imageGC, 0, 0, w, h);
     imlib_context_set_display(xi->display);
-    imlib_context_set_visual(DefaultVisual(xi->display, 0));
-    imlib_context_set_colormap(DefaultColormap(xi->display, 0));
+    imlib_context_set_visual(attr.visual);
+    imlib_context_set_colormap(attr.colormap);
     imlib_context_set_drawable((Drawable) img->pixmap);
-    imlib_render_image_on_drawable_at_size(0, 0, w, h);
+    imlib_render_image_on_drawable(0, 0);
     imlib_free_image();
 #elif defined(USE_GDKPIXBUF)
     max_anim = self->max_anim;
@@ -416,7 +469,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
 	ratio_h = 1.0 * h / ih;
     }
     tmp_pixmap = XCreatePixmap(xi->display, xi->parent, w, h,
-			       DefaultDepth(xi->display, 0));
+			       attr.depth);
     XSetForeground(xi->display, xi->imageGC, xi->background_pixel);
     XFillRectangle(xi->display, (Pixmap) tmp_pixmap, xi->imageGC, 0, 0, w, h);
     if (!tmp_pixmap) {
@@ -459,7 +512,10 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
 	if (delay > ximg->delay)
 	    ximg->delay = delay;
 
-	gdk_pixbuf_xlib_render_to_drawable_alpha(pixbuf,
+	if (attr.depth == 32)
+	    render_pixbuf_to_pixmap_32(xi->display, xi->imageGC, ximg->pixmap[j], pixbuf);
+	else
+	    gdk_pixbuf_xlib_render_to_drawable_alpha(pixbuf,
 						 (Drawable) ximg->pixmap[j], 0,
 						 0, 0, 0, w, h,
 						 GDK_PIXBUF_ALPHA_BILEVEL, 1,
@@ -653,9 +709,11 @@ x11_get_image_size(w3mimg_op * self, W3MImage * img, char *fname, int *w,
 
     if (self == NULL)
 	return 0;
+#if defined(USE_IMLIB) && defined(USE_IMLIB2)
     xi = (struct x11_info *)self->priv;
     if (xi == NULL)
 	return 0;
+#endif
 
 #if defined(USE_IMLIB)
     im = Imlib_load_image(xi->id, fname);
@@ -755,6 +813,9 @@ w3mimg_x11open()
 	return NULL;
     memset(wop, 0, sizeof(w3mimg_op));
 
+    if (getenv("W3M_USE_REMOTE_IMAGE"))
+	goto  end;
+
     xi = (struct x11_info *)malloc(sizeof(struct x11_info));
     if (xi == NULL)
 	goto error;
@@ -807,6 +868,7 @@ w3mimg_x11open()
 
     wop->priv = xi;
 
+  end:
     wop->init = x11_init;
     wop->finish = x11_finish;
     wop->active = x11_active;
diff --git a/w3mimgdisplay.c b/w3mimgdisplay.c
index 5486a47..ccfa373 100644
--- a/w3mimgdisplay.c
+++ b/w3mimgdisplay.c
@@ -281,6 +281,10 @@ DrawImage(char *buf, int redraw)
 	    maxImage = n + 1;
 	imageBuf = (W3MImage *) realloc((void *)imageBuf,
 					sizeof(W3MImage) * maxImage);
+	if (imageBuf == NULL) {
+	    fprintf(stderr, "Out of memory\n");
+	    exit(1);
+	}
 	for (; i < maxImage; i++)
 	    imageBuf[i].pixmap = NULL;
     }