home *** CD-ROM | disk | FTP | other *** search
- # 1 "buffer.dc"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- process spec buffer(int max)
- {
-
- trans void put(char c);
-
-
- trans char get();
- }
-
-
-
-
-
-
-
-
-
- process body buffer(max)
- {
- int n = 0,
- in = 0,
- out = 0;
- char *buf;
-
- buf = (char *) malloc(max + 1);
-
- memset(buf, '\0', max + 1);
-
- while(1) {
- select {
- (n < max):
- accept put(c) {
- buf[in] = c;
- }
- n++;
- in = (in + 1) % max;
- or (n > 0):
- accept get() {
- treturn(buf[out]);
- }
- n--;
- out = (out + 1) % max;
- or
- terminate
- }
- }
- }
-
-
-
-
-
-
-
-
- main()
- {
- int size, op, erg;
- char c, tmp, bufferhost[256];
- process buffer b;
-
-
- puts("This program simulates a FIFO buffer:");
-
-
- printf("buffer size? ");
- scanf("%d%c", &size, &tmp);
-
- printf("location to create buffer? ");
- scanf("%s", bufferhost);
-
- b = create buffer(size) at host(bufferhost);
-
-
- while(1) {
- printf("\nOperation (0 = end, 1 = put, 2 = get) ? ");
- scanf("%d%c", &op, &tmp);
- switch(op) {
- case 0:
-
- exit(0);
-
- case 1:
- printf("character to put into buffer? ");
- scanf("%c%c", &c, &tmp);
- within 5 ? (b@put(c) : puts("buffer is full!"));
- break;
- case 2:
- erg = within 5 ? (b@get() : -1);
- if (erg == -1)
- puts("buffer is empty!");
- else
- printf("result = %c\n", erg);
- break;
- }
- }
- }
-