home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / enterprs / c128 / util / 128c.arc / LIB.C < prev    next >
Text File  |  1993-03-04  |  5KB  |  235 lines

  1. /*
  2.     ├REATE AND MANTAIN LIBRARY FILES.
  3.     ╠IBRARY FILE NAMES MUST END
  4.     WITH  ".L"
  5. */
  6.  
  7. #INCLUDE <STDIO.H>
  8.  
  9. #DEFINE  ═┴╪╠╔┬  200
  10. #DEFINE  ═┴╪╔─    20
  11. #DEFINE  ═┴╪╠╔╬┼  81
  12.  
  13. CHAR IDS[═┴╪╠╔┬][═┴╪╔─], FILES[═┴╪╠╔┬][═┴╪╔─];
  14. CHAR SIZE;
  15. CHAR INBUF[═┴╪╠╔╬┼];
  16.  
  17. MAIN()
  18.     SIZE = 0;
  19.     FOR (;;) █
  20.         CLRSCRN();
  21.         PRINTF ("\N\N\N\N\N     ╠OAD LIBRARY\N");
  22.         PRINTF ("     ╙AVE LIBRARY\N");
  23.         PRINTF ("     ├LEAR LIBRARY\N");
  24.         PRINTF ("     ─ISPLAY LIBRARY\N");
  25.         PRINTF ("     ┴DD MODULES TO LIBRARY\N");
  26.         PRINTF ("     ╥EMOVE MODULES FROM LIBRARY\N");
  27.         PRINTF ("     ╤UIT\N\N     ┼NTER ├HOICE: ");
  28.         GETS (INBUF);
  29.         CLRSCRN();
  30.         SWITCH (*INBUF) █
  31.             CASE 'L':
  32.             CASE '╠':
  33.                       LOAD();
  34.                       BREAK;
  35.             CASE 'S':
  36.             CASE '╙':
  37.                       SAVE();
  38.                       BREAK;
  39.             CASE 'D':
  40.             CASE '─':
  41.                       DISPLAY();
  42.                       BREAK;
  43.             CASE 'C':
  44.             CASE '├':
  45.                       SIZE = 0;
  46.                       BREAK;
  47.             CASE 'A':
  48.             CASE '┴':
  49.                       ADD();
  50.                       BREAK;
  51.             CASE 'R':
  52.             CASE '╥':
  53.                       REMOVE();
  54.                       BREAK;
  55.             CASE 'Q':
  56.             CASE '╤':
  57.                       PUTCHAR ('\N');
  58.                       EXIT();
  59.         ▌
  60.     ▌
  61.     PUTCHAR ('\N');
  62.  
  63.  
  64. CLRSCRN()
  65.     PUTCHAR ('ô');
  66.  
  67.  
  68. ╞╔╠┼ OPENLIB (MODE)
  69. CHAR *MODE;
  70.     ╞╔╠┼ F;
  71.  
  72.     PRINTF ("\N\NLIBRARY FILE NAME: ");
  73.     GETS (INBUF);
  74.     F = FOPEN (INBUF, MODE);
  75.     IF (F == ╬╒╠╠ ▀▀ FERROR()) █
  76.         F = ╬╒╠╠;
  77.         PRINTF ("\NCAN'T OPEN %S\N", INBUF);
  78.         WAIT();
  79.     ▌
  80.     RETURN F;
  81.  
  82.  
  83. LOAD()
  84.     ╞╔╠┼ F;
  85.     UNSIGNED I;
  86.  
  87.     IF ((F = OPENLIB ("R")) == ╬╒╠╠)
  88.         RETURN;
  89.     SIZE = GETC(F);
  90.     FOR (I = 0; I < SIZE; I++) █
  91.         GETID (IDS[I], F);
  92.         GETID (FILES[I], F);
  93.     ▌
  94.     FCLOSE(F);
  95.  
  96.  
  97. GETID (S, F)
  98. CHAR *S;
  99. ╞╔╠┼ F;
  100.     WHILE (*S++ = GETC(F))
  101.        ;
  102.  
  103.  
  104. SAVE()
  105.     ╞╔╠┼ F;
  106.     UNSIGNED I;
  107.  
  108.     IF ((F = OPENLIB ("W")) == ╬╒╠╠)
  109.         RETURN;
  110.     PUTC (SIZE, F);
  111.     FOR (I = 0; I < SIZE; I++)
  112.         FPRINTF (F, "%S%C%S%C", IDS[I], 0, FILES[I], 0);
  113.     FCLOSE(F);
  114.  
  115.  
  116. WAIT()
  117.     PRINTF ("\NHIT ╥┼╘╒╥╬ TO CONTINUE");
  118.     WHILE (GETCH() != '\N')
  119.         ;
  120.  
  121.  
  122. DISPLAY()
  123.     UNSIGNED I, LINE;
  124.  
  125.     LINE = 1;
  126.     FOR (I = 0; I < SIZE; I++) █
  127.         IF (LINE == 1) █
  128.             CLRSCRN();
  129.             PRINTF ("%-20S%-19S\N\N", "╔─┼╬╘╔╞╔┼╥", "╞╔╠┼");
  130.             LINE = 3;
  131.         ▌
  132.         PRINTF ("%-20S%-19S\N", IDS[I], FILES[I]);
  133.         LINE++;
  134.         IF (LINE == 24) █
  135.             WAIT();
  136.             LINE = 1;
  137.         ▌
  138.     ▌
  139.     WAIT();
  140.  
  141.  
  142. GETCH()
  143.     CHAR A, X, Y;
  144.  
  145.     DO
  146.         SYS (0XFFE4, &A, &X, &Y);
  147.     WHILE (A == 0);
  148.     RETURN A;
  149.  
  150.  
  151. ADD()
  152.     UNSIGNED N;
  153.     ╞╔╠┼ F;
  154.  
  155.     PRINTF ("\NHIT ╥┼╘╒╥╬ WHEN DONE\N\N");
  156.     FOR (;;) █
  157.         PRINTF ("OBJECT FILE NAME: ");
  158.         GETS (INBUF);
  159.         IF (!ISALPHA(*INBUF))
  160.             RETURN;
  161.         F = FOPEN (INBUF, "R");
  162.         IF (F == ╬╒╠╠ ▀▀ FERROR())
  163.             PRINTF ("CAN'T OPEN %S\N", INBUF);
  164.         ELSE █
  165.             N = GETW(F);
  166.             WHILE (N--)
  167.                 GETC(F);
  168.             N = GETW(F);
  169.             WHILE (N--)
  170.                 GETW(F);
  171.             N = GETW(F);
  172.             WHILE (N-- && SIZE < ═┴╪╠╔┬) █
  173.                 GETID (IDS[SIZE], F);
  174.                 IF (ISALPHA(*IDS[SIZE]) && ISPRINT(IDS[SIZE][1]))
  175.                     STRCPY (FILES[SIZE++], INBUF);
  176.                 GETC(F);
  177.                 GETW(F);
  178.             ▌        
  179.             FCLOSE (F);
  180.             IF (SIZE == ═┴╪╠╔┬) █
  181.                 PRINTF ("\NLIBRARY IS FULL\N");
  182.                 WAIT();
  183.                 RETURN;
  184.             ▌
  185.         ▌
  186.     ▌
  187.  
  188.  
  189. REMOVE()
  190.     UNSIGNED I, J;
  191.  
  192.     PRINTF ("\NHIT ╥┼╘╒╥╬ WHEN DONE\N");
  193.     FOR (;;) █
  194.         PRINTF ("\NFILE TO DELETE: ");
  195.         GETS (INBUF);
  196.         IF (!ISALPHA(*INBUF))
  197.             RETURN;
  198.         FOR (I = 0; I < SIZE && STRCMP(FILES[I], INBUF) != 0; I++)
  199.             ;
  200.         IF (I == SIZE)
  201.             PRINTF ("FILE NOT FOUND\N");
  202.         ELSE █
  203.             WHILE (I < SIZE && STRCMP (FILES[I], INBUF) == 0) █
  204.                 FOR (J = I; J+1 < SIZE; J++) █
  205.                     STRCPY (FILES[J], FILES[J+1]);
  206.                     STRCPY (IDS[J], IDS[J+1]);
  207.                 ▌
  208.                 SIZE--;
  209.             ▌
  210.         ▌
  211.     ▌
  212.  
  213.