home *** CD-ROM | disk | FTP | other *** search
/ Education Sampler 1992 [NeXTSTEP] / Education_1992_Sampler.iso / NeXT / GnuSource / emacs-15.0.3 / etc / server.cpp < prev    next >
C/C++ Source or Header  |  1990-07-19  |  14KB  |  2,378 lines

  1. # 1 "server.c"
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29. # 1 "../src/config.h" 1
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56. # 1 "../src/s-mach.h" 1
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78. # 1 "../src/s-bsd4-3.h" 1
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204. # 22 "../src/s-mach.h" 2
  205.  
  206.  
  207.  
  208.  
  209. # 27 "../src/config.h" 2
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217. # 1 "../src/m-NeXT.h" 1
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316. # 34 "../src/config.h" 2
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401. # 28 "server.c" 2
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409. # 45 "server.c"
  410.  
  411.  
  412.  
  413.  
  414.  
  415. # 1 "/usr/include/sys/file.h" 1
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441. # 1 "/usr/include/sys/fcntl.h" 1
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522. struct flock {
  523.         short   l_type;         
  524.         short   l_whence;     
  525.         long    l_start;     
  526.         long    l_len;           
  527.         short   l_pid;         
  528.         short   l_xxx;         
  529. };
  530.  
  531.  
  532. # 26 "/usr/include/sys/file.h" 2
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539. # 1 "/usr/include/kern/queue.h" 1
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607. # 1 "/usr/include/machine/vm_types.h" 1
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617. typedef    unsigned int    vm_offset_t;
  618. typedef    unsigned int    vm_size_t;
  619.  
  620.  
  621.  
  622. # 68 "/usr/include/kern/queue.h" 2
  623.  
  624. # 1 "/usr/include/kern/lock.h" 1
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674.  
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.  
  733.  
  734.  
  735. # 1 "/usr/include/sys/boolean.h" 1
  736.  
  737.  
  738.  
  739.  
  740.  
  741.  
  742.  
  743.  
  744.  
  745.  
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761. # 1 "/usr/include/machine/boolean.h" 1
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776. typedef unsigned int        boolean_t;
  777.  
  778.  
  779. # 26 "/usr/include/sys/boolean.h" 2
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  
  801.  
  802.  
  803. # 111 "/usr/include/kern/lock.h" 2
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813.  
  814. struct slock {
  815.     int        lock_data;     
  816. };
  817.  
  818. typedef struct slock    simple_lock_data_t;
  819. typedef struct slock    *simple_lock_t;
  820.  
  821.  
  822. extern simple_lock_t    simple_lock_alloc();
  823. extern void        simple_lock_free();
  824.  
  825. # 140 "/usr/include/kern/lock.h"
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854. struct lock {
  855. # 179 "/usr/include/kern/lock.h"
  856.  
  857. # 196 "/usr/include/kern/lock.h"
  858.  
  859.      
  860.  
  861.  
  862.  
  863.     boolean_t    want_write;     
  864.     boolean_t    want_upgrade;     
  865.     boolean_t    waiting;     
  866.     boolean_t    can_sleep;     
  867.     int        read_count;     
  868.  
  869.  
  870.     char        *thread;
  871.          
  872.          
  873.  
  874.     int        recursion_depth; 
  875.  
  876.  
  877.      
  878.  
  879.  
  880.  
  881.      simple_lock_data_t interlock; 
  882.  
  883. };
  884.  
  885. typedef struct lock    lock_data_t;
  886. typedef struct lock    *lock_t;
  887.  
  888.  
  889.  
  890.  
  891. extern lock_t        lock_alloc();
  892. extern void        lock_free();
  893.  
  894. extern void        lock_init();
  895. extern void        lock_sleepable();
  896. extern void        lock_write();
  897. extern void        lock_read();
  898. extern void        lock_done();
  899. extern boolean_t    lock_read_to_write();
  900. extern void        lock_write_to_read();
  901. extern boolean_t    lock_try_write();
  902. extern boolean_t    lock_try_read();
  903. extern boolean_t    lock_try_read_to_write();
  904.  
  905.  
  906.  
  907.  
  908. extern void        lock_set_recursive();
  909. extern void        lock_clear_recursive();
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916. # 69 "/usr/include/kern/queue.h" 2
  917.  
  918. # 1 "/usr/include/kern/macro_help.h" 1
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976. # 70 "/usr/include/kern/queue.h" 2
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  
  998.  
  999.  
  1000.  
  1001.  
  1002. struct queue_entry {
  1003.     struct queue_entry    *next;         
  1004.     struct queue_entry    *prev;         
  1005. };
  1006.  
  1007. typedef struct queue_entry    *queue_t;
  1008. typedef    struct queue_entry    queue_head_t;
  1009. typedef    struct queue_entry    queue_chain_t;
  1010. typedef    struct queue_entry    *queue_entry_t;
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023.  
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030.  
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066.  
  1067.  
  1068.  
  1069.  
  1070.  
  1071.  
  1072.  
  1073.  
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.  
  1081.  
  1082. # 192 "/usr/include/kern/queue.h"
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100. # 218 "/usr/include/kern/queue.h"
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134. # 268 "/usr/include/kern/queue.h"
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.  
  1141.  
  1142.  
  1143.  
  1144.  
  1145.  
  1146.  
  1147.  
  1148.  
  1149.  
  1150.  
  1151.  
  1152.  
  1153.  
  1154.  
  1155.  
  1156.  
  1157. struct mpqueue_head {
  1158.     struct queue_entry    head;         
  1159.     struct slock        lock;         
  1160. };
  1161.  
  1162. typedef struct mpqueue_head    mpqueue_head_t;
  1163.  
  1164.  
  1165.  
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180. # 321 "/usr/include/kern/queue.h"
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187. # 32 "/usr/include/sys/file.h" 2
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194. struct    file {
  1195.     queue_chain_t    links;     
  1196.     int    f_flag;         
  1197.     short    f_type;         
  1198.     short    f_count;     
  1199.     short    f_msgcount;     
  1200.     struct    fileops {
  1201.         int    (*fo_rw)();
  1202.         int    (*fo_ioctl)();
  1203.         int    (*fo_select)();
  1204.         int    (*fo_close)();
  1205.     } *f_ops;
  1206.     caddr_t    f_data;      
  1207.     off_t    f_offset;
  1208.      struct    ucred *f_cred;     
  1209. };
  1210.  
  1211. queue_head_t    file_list;
  1212. struct    file *getf();
  1213. struct    file *falloc();
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.  
  1261.  
  1262.  
  1263.  
  1264.  
  1265.  
  1266.  
  1267.  
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.  
  1275. # 50 "server.c" 2
  1276.  
  1277. # 1 "/usr/include/sys/types.h" 1
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.  
  1325.  
  1326.  
  1327.  
  1328.  
  1329.  
  1330.  
  1331.  
  1332.  
  1333.  
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.  
  1347.  
  1348.  
  1349.  
  1350.  
  1351.  
  1352.  
  1353. typedef    unsigned char    u_char;
  1354. typedef    unsigned short    u_short;
  1355. typedef    unsigned int    u_int;
  1356. typedef    unsigned long    u_long;
  1357. typedef    unsigned short    ushort;         
  1358.  
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372. typedef struct  _physadr { short r[1]; } *physadr;
  1373. typedef struct  label_t {
  1374.         int     val[13];
  1375. } label_t;
  1376.  
  1377.  
  1378.  
  1379.  
  1380. typedef    struct    _quad { long val[2]; } quad;
  1381.  
  1382. typedef    long    daddr_t;
  1383. typedef    char *    caddr_t;
  1384. typedef    u_long    ino_t;
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390. typedef unsigned long size_t;
  1391.  
  1392.  
  1393.  
  1394.  
  1395. typedef    long    time_t;
  1396.  
  1397. typedef    short    dev_t;
  1398.  
  1399.  
  1400.  
  1401. typedef    long    off_t;
  1402.  
  1403. typedef    short    uid_t;
  1404. typedef    short    gid_t;
  1405.  
  1406.  
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  
  1413.  
  1414.  
  1415.  
  1416.  
  1417. typedef long    fd_mask;
  1418.  
  1419.  
  1420.  
  1421.  
  1422.  
  1423. typedef    struct fd_set {
  1424.     fd_mask    fds_bits[(((256 )+(( (sizeof(fd_mask) * 8        )    )-1))/( (sizeof(fd_mask) * 8        )    )) ];
  1425. } fd_set;
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435. # 51 "server.c" 2
  1436.  
  1437. # 1 "/usr/include/sys/socket.h" 1
  1438.  
  1439.  
  1440.  
  1441.  
  1442.  
  1443.  
  1444.  
  1445.  
  1446.  
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459.  
  1460.  
  1461.  
  1462.  
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  
  1469.  
  1470.  
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.  
  1526.  
  1527.  
  1528.  
  1529.  
  1530.  
  1531.  
  1532.  
  1533.  
  1534.  
  1535.  
  1536.  
  1537.  
  1538.  
  1539.  
  1540.  
  1541.  
  1542.  
  1543.  
  1544.  
  1545. struct    linger {
  1546.     int    l_onoff;         
  1547.     int    l_linger;         
  1548. };
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.  
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.  
  1579.  
  1580.  
  1581.  
  1582. struct sockaddr {
  1583.     u_short    sa_family;         
  1584.     char    sa_data[14];         
  1585. };
  1586.  
  1587.  
  1588.  
  1589.  
  1590.  
  1591. struct sockproto {
  1592.     u_short    sp_family;         
  1593.     u_short    sp_protocol;         
  1594. };
  1595.  
  1596.  
  1597.  
  1598.  
  1599.  
  1600.  
  1601.  
  1602.  
  1603.  
  1604.  
  1605.  
  1606.  
  1607.  
  1608.  
  1609.  
  1610.  
  1611.  
  1612.  
  1613.  
  1614.  
  1615.  
  1616.  
  1617.  
  1618.  
  1619.  
  1620.  
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626.  
  1627. struct msghdr {
  1628.     caddr_t    msg_name;         
  1629.     int    msg_namelen;         
  1630.     struct    iovec *msg_iov;         
  1631.     int    msg_iovlen;         
  1632.     caddr_t    msg_accrights;         
  1633.     int    msg_accrightslen;
  1634. };
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.  
  1643. extern int accept(int, struct sockaddr *, int *);
  1644. extern int bind(int, struct sockaddr *, int);
  1645. extern int connect(int, struct sockaddr *, int);
  1646. extern int getpeername(int, struct sockaddr *, int *);
  1647. extern int getsockname(int, struct sockaddr *, int *);
  1648. extern int getsockopt(int, int, int, void *optval, int *);
  1649. extern int setsockopt(int, int, int, void *optval, int);
  1650. extern int listen(int, int);
  1651. extern int recv(int, void *, int, int);
  1652. extern int recvfrom(int, void *, int, int, struct sockaddr *, int *);
  1653. extern int recvmsg(int, struct msghdr *, int);
  1654. extern int send(int, void *, int, int);
  1655. extern int sendto(int, void *, int, int, struct sockaddr *, int);
  1656. extern int sendmsg(int, struct msghdr *, int);
  1657. extern int socket(int, int, int);
  1658. extern int socketpair(int, int, int, int *);
  1659.  
  1660.  
  1661.  
  1662.  
  1663. # 52 "server.c" 2
  1664.  
  1665. # 1 "/usr/include/sys/signal.h" 1
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.  
  1681.  
  1682.  
  1683.  
  1684.  
  1685.  
  1686.  
  1687. # 1 "/usr/include/machine/signal.h" 1
  1688.  
  1689.  
  1690.  
  1691.  
  1692.  
  1693.  
  1694.  
  1695.  
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.  
  1709. struct    sigcontext {
  1710.     int    sc_onstack;         
  1711.     int    sc_mask;         
  1712.     int    sc_sp;             
  1713.     int    sc_pc;             
  1714.     int    sc_ps;             
  1715.     int    sc_d0;             
  1716. };
  1717.  
  1718.  
  1719.  
  1720. # 22 "/usr/include/sys/signal.h" 2
  1721.  
  1722.  
  1723.  
  1724.  
  1725.  
  1726.  
  1727.  
  1728.  
  1729.  
  1730.  
  1731.  
  1732.  
  1733.  
  1734.  
  1735.  
  1736.  
  1737.  
  1738.  
  1739.  
  1740.  
  1741.  
  1742.  
  1743.  
  1744.  
  1745.  
  1746.  
  1747.  
  1748.  
  1749.  
  1750.  
  1751.  
  1752.  
  1753.  
  1754.  
  1755.  
  1756.  
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774. struct    sigvec {
  1775.     void    (*sv_handler)();     
  1776.     int    sv_mask;         
  1777.     int    sv_flags;         
  1778. };
  1779.  
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.  
  1787.  
  1788. struct    sigstack {
  1789.     char    *ss_sp;             
  1790.     int    ss_onstack;         
  1791. };
  1792.  
  1793.  
  1794. # 105 "/usr/include/sys/signal.h"
  1795.  
  1796.  
  1797.  
  1798.  
  1799.  
  1800.  
  1801.  
  1802.  
  1803.  
  1804.  
  1805.  
  1806.  
  1807.  
  1808.  
  1809.  
  1810. extern int sigblock(int);
  1811. extern int sigpause(int);
  1812. extern int sigreturn(struct sigcontext *);
  1813. extern int sigsetmask(int);
  1814. extern int sigstack(struct sigstack *, struct sigstack *);
  1815. extern int sigvec(int, struct sigvec *, struct sigvec *);
  1816.  
  1817. extern int siginterrupt(int, int);
  1818.  
  1819.  
  1820.  
  1821. extern void (*signal(int, void (*)(int)))(int);
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840. # 53 "server.c" 2
  1841.  
  1842. # 1 "/usr/include/sys/un.h" 1
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.  
  1853.  
  1854.  
  1855.  
  1856.  
  1857.  
  1858.  
  1859.  
  1860.  
  1861.  
  1862.  
  1863.  
  1864.  
  1865.  
  1866.  
  1867.  
  1868.  
  1869.  
  1870.  
  1871.  
  1872.  
  1873. struct    sockaddr_un {
  1874.     short    sun_family;         
  1875.     char    sun_path[108];         
  1876. };
  1877.  
  1878.  
  1879.  
  1880.  
  1881.  
  1882. # 54 "server.c" 2
  1883.  
  1884. # 1 "/usr/include/stdio.h" 1
  1885.  
  1886.  
  1887.  
  1888.  
  1889.  
  1890.  
  1891.  
  1892.  
  1893.  
  1894.  
  1895.  
  1896.  
  1897.  
  1898.  
  1899.  
  1900.  
  1901. # 1 "/usr/include/stddef.h" 1
  1902.  
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911. typedef long ptrdiff_t;
  1912.  
  1913.  
  1914.  
  1915.  
  1916. typedef unsigned short wchar_t;
  1917.  
  1918.  
  1919.  
  1920.  
  1921. extern int errno;
  1922.  
  1923.  
  1924.  
  1925. # 17 "/usr/include/stdio.h" 2
  1926.  
  1927. # 1 "/usr/include/stdarg.h" 1
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934. typedef char *va_list;
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.  
  1945. void va_end (va_list);         
  1946.  
  1947.  
  1948.  
  1949.  
  1950.  
  1951.  
  1952.  
  1953.  
  1954.  
  1955. # 18 "/usr/include/stdio.h" 2
  1956.  
  1957.  
  1958.  
  1959.  
  1960. extern    struct    _iobuf {
  1961.     int    _cnt;
  1962.     char    *_ptr;         
  1963.     char    *_base;         
  1964.     int    _bufsiz;
  1965.     short    _flag;
  1966.     char    _file;         
  1967.     char    _smallbuf;     
  1968. } _iob[];
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984.  
  1985.  
  1986. # 58 "/usr/include/stdio.h"
  1987.  
  1988. typedef long fpos_t;
  1989.  
  1990.  
  1991.  
  1992.  
  1993.  
  1994.  
  1995.  
  1996.  
  1997.  
  1998.  
  1999. extern int remove(const char *filename);
  2000. extern int rename(const char *old, const char *new);
  2001. extern struct _iobuf  *tmpfile(void);
  2002. extern char *tmpnam(char *s);
  2003. extern int fclose(struct _iobuf  *stream);
  2004. extern int fflush(struct _iobuf  *stream);
  2005. extern void setbuf(struct _iobuf  *stream, char *buf);
  2006. extern int setvbuf(struct _iobuf  *stream, char *buf, int mode, size_t size);
  2007. extern int fprintf(struct _iobuf  *stream, const char *format, ...);
  2008. extern int fscanf(struct _iobuf  *stream, const char *format, ...);
  2009. extern int printf(const char *format, ...);
  2010. extern int scanf(const char *format, ...);
  2011. extern int sprintf(char *s, const char *format, ...);
  2012. extern int sscanf(const char *s, const char *format, ...);
  2013. extern int vfprintf(struct _iobuf  *stream, const char *format, va_list arg);
  2014. extern int vprintf(const char *format, va_list arg);
  2015. extern int vsprintf(char *s, const char *format, va_list arg);
  2016. extern int fgetc(struct _iobuf  *stream);
  2017. extern int fputc(int c, struct _iobuf  *stream);
  2018. extern int fputs(const char *s, struct _iobuf  *stream);
  2019. extern int getc(struct _iobuf  *stream);
  2020. extern int _flsbuf();
  2021. extern int _filbuf();
  2022. extern int getchar(void);
  2023. extern int putc(int c, struct _iobuf  *stream);
  2024. extern int putchar(int c);
  2025. extern int puts(const char *s);
  2026. extern int ungetc(int c, struct _iobuf  *stream);
  2027. extern size_t fread(void *ptr, size_t size, size_t nmemb, struct _iobuf  *stream);
  2028. extern size_t fwrite(const void *ptr, size_t size, size_t nmemb, struct _iobuf  *stream);
  2029. extern int fgetpos(struct _iobuf  *stream, fpos_t *pos);
  2030. extern int fseek(struct _iobuf  *stream, long int offset, int whence);
  2031. extern int fsetpos(struct _iobuf  *stream, const fpos_t *pos);
  2032. extern void rewind(struct _iobuf  *stream);
  2033. extern void clearerr(struct _iobuf  *stream);
  2034. extern int feof(struct _iobuf  *stream);
  2035. extern int ferror(struct _iobuf  *stream);
  2036. extern void perror(const char *s);
  2037. extern struct _iobuf  *fopen(const char *filename, const char *mode);
  2038. extern struct _iobuf  *freopen(const char *filename, const char *mode, struct _iobuf  *stream);
  2039. extern long int ftell(struct _iobuf  *stream);
  2040. extern char *fgets(char *s, int n, struct _iobuf  *stream);
  2041. extern char *gets(char *s);
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050.  
  2051.  
  2052.  
  2053.  
  2054.  
  2055.  
  2056.  
  2057.  
  2058.  
  2059.  
  2060.  
  2061.  
  2062.  
  2063.  
  2064. extern int fileno(struct _iobuf  *stream);
  2065.  
  2066.  
  2067.  
  2068.  
  2069.  
  2070.  
  2071.  
  2072. struct _iobuf     *fdopen(int filedes, const char *mode);
  2073. struct _iobuf     *popen(const char *command, const char *mode);
  2074. extern int pclose(struct _iobuf  *stream);
  2075.  
  2076.  
  2077.  
  2078. # 55 "server.c" 2
  2079.  
  2080. # 1 "/usr/include/errno.h" 1
  2081. # 1 "/usr/include/sys/errno.h" 1
  2082.  
  2083.  
  2084.  
  2085.  
  2086.  
  2087.  
  2088.  
  2089.  
  2090.  
  2091.  
  2092.  
  2093.  
  2094.  
  2095.  
  2096.  
  2097.  
  2098.  
  2099.  
  2100.  
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  
  2106.  
  2107.  
  2108.  
  2109.  
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116.  
  2117.  
  2118.  
  2119.  
  2120.  
  2121.  
  2122.  
  2123.  
  2124.  
  2125.  
  2126.  
  2127.  
  2128.  
  2129.  
  2130.  
  2131.  
  2132.  
  2133.  
  2134.  
  2135.  
  2136.  
  2137.  
  2138.  
  2139.  
  2140.  
  2141.  
  2142.  
  2143.  
  2144.  
  2145.  
  2146.  
  2147.  
  2148.  
  2149.  
  2150.      
  2151.  
  2152.  
  2153.  
  2154.  
  2155.  
  2156.  
  2157.  
  2158.  
  2159.  
  2160.  
  2161.  
  2162.  
  2163.  
  2164.      
  2165.  
  2166.  
  2167.  
  2168.  
  2169.  
  2170.  
  2171.  
  2172.  
  2173.  
  2174.  
  2175.  
  2176.  
  2177.  
  2178.      
  2179.  
  2180.  
  2181.  
  2182.  
  2183.  
  2184.  
  2185.  
  2186.  
  2187.  
  2188.  
  2189.  
  2190.  
  2191.  
  2192.  
  2193.  
  2194.  
  2195.  
  2196.  
  2197.  
  2198.  
  2199.  
  2200.  
  2201.  
  2202.  
  2203.  
  2204.  
  2205.  
  2206.  
  2207.  
  2208.  
  2209.  
  2210.  
  2211.  
  2212.  
  2213.  
  2214.  
  2215.  
  2216.  
  2217.  
  2218. extern void perror(const char *);
  2219. extern char *sys_errlist[];
  2220. extern int sys_nerr;
  2221.  
  2222.  
  2223.  
  2224. # 1 "/usr/include/errno.h" 2
  2225.  
  2226.  
  2227.  
  2228. extern int errno;
  2229.  
  2230. # 56 "server.c" 2
  2231.  
  2232.  
  2233. extern int errno;
  2234.  
  2235. main ()
  2236. {
  2237.   int s, infd, fromlen;
  2238.   struct sockaddr_un server, fromunix;
  2239.   char *homedir;
  2240.   char *str, string[1024 ], code[1024 ];
  2241.   struct _iobuf  *infile;
  2242.   struct _iobuf  **openfiles;
  2243.   int openfiles_size;
  2244.  
  2245.   char *getenv ();
  2246.  
  2247.   openfiles_size = 20;
  2248.   openfiles = (struct _iobuf  **) malloc (openfiles_size * sizeof (struct _iobuf  *));
  2249.   if (openfiles == 0)
  2250.     abort ();
  2251.  
  2252.    
  2253.  
  2254.  
  2255.  
  2256.   if ((s = socket (    1        , 1        , 0)) < 0)
  2257.     {
  2258.       perror ("socket");
  2259.       exit (1);
  2260.     }
  2261.   server.sun_family =     1        ;
  2262.   if ((homedir = getenv ("HOME")) == ((void *)0) )
  2263.     {
  2264.       fprintf ((&_iob[2]) ,"No home directory\n");
  2265.       exit (1);
  2266.     }
  2267.   strcpy (server.sun_path, homedir);
  2268.   strcat (server.sun_path, "/.emacs_server");
  2269.   if (bind (s, &server, strlen (server.sun_path) + 2) < 0)
  2270.     {
  2271.       perror ("bind");
  2272.       exit (1);
  2273.     }
  2274.    
  2275.  
  2276.  
  2277.   if (listen (s, 5) < 0)
  2278.     {
  2279.       perror ("listen");
  2280.       exit (1);
  2281.     }
  2282.  
  2283.    
  2284.   signal (13    ,     (void (*)())1 );
  2285.   for (;;)
  2286.     {
  2287.       int rmask = (1 << s) + 1;
  2288.       if (select (s + 1, &rmask, 0, 0, 0) < 0)
  2289.     perror ("select");
  2290.       if (rmask & (1 << s))     
  2291.     {
  2292.       fromlen = sizeof (fromunix);
  2293.       fromunix.sun_family =     1        ;
  2294.       infd = accept (s, &fromunix, &fromlen);  
  2295.       if (infd < 0)
  2296.         {
  2297.           if (errno ==     24         || errno ==     23        )
  2298.         printf ("Too many clients.\n");
  2299.           else
  2300.         perror ("accept");
  2301.           continue;
  2302.         }
  2303.  
  2304.       if (infd >= openfiles_size)
  2305.         {
  2306.           openfiles_size *= 2;
  2307.           openfiles = (struct _iobuf  **) realloc (openfiles,
  2308.                          openfiles_size * sizeof (struct _iobuf  *));
  2309.           if (openfiles == 0)
  2310.         abort ();
  2311.         }
  2312.  
  2313.       infile = fdopen (infd, "r+");  
  2314.       if (infile == ((void *)0) )
  2315.         {
  2316.           printf ("Too many clients.\n");
  2317.           write (infd, "Too many clients.\n", 18);
  2318.           close (infd);         
  2319.           continue;
  2320.         }
  2321.       str = fgets (string, 1024 , infile);
  2322.       if (str == ((void *)0) )
  2323.         {
  2324.           perror ("fgets");
  2325.           close (infd);         
  2326.           continue;
  2327.         }
  2328.       openfiles[infd] = infile;
  2329.       printf ("Client: %d %s", infd, string);
  2330.        
  2331.  
  2332.  
  2333.       while (string[strlen (string) - 1] != '\n')
  2334.         {
  2335.           if (fgets (string, 1024 , infile) == 0)
  2336.         break;
  2337.           printf ("%s", string);
  2338.         }
  2339.       fflush ((&_iob[1]) );
  2340.       fflush (infile);
  2341.       continue;
  2342.     }
  2343.       else if (rmask & 1)  
  2344.     {
  2345.        
  2346.       scanf ("%s %d%*c", code, &infd);
  2347.  
  2348.        
  2349.       infile = openfiles[infd];
  2350.       while (1)
  2351.         {
  2352.           if (fgets (string, 1024 , (&_iob[0]) ) == 0)
  2353.         break;
  2354.           fprintf (infile, "%s", string);
  2355.           if (string[strlen (string) - 1] == '\n')
  2356.         break;
  2357.         }
  2358.       fflush (infile);
  2359.  
  2360.        
  2361.       if (strncmp (code, "Close:", 6) == 0) 
  2362.         if (infd > 2) 
  2363.           {
  2364.         fclose (infile);
  2365.         close (infd);
  2366.           }
  2367.       continue;
  2368.     } 
  2369.     }
  2370. }
  2371.  
  2372. # 299 "server.c"
  2373.  
  2374.  
  2375.  
  2376.  
  2377.  
  2378.