# 2.11BSD#431 - /usr/src/usr.bin/learn/selunit.c

##### Functions

    abs               X
    grand             X
    selunit           X

##### Variables

    nsave             X
    review            X

       1: #ifndef lint
       2: static char sccsid[] = "@(#)selunit.c	4.3	(Berkeley)	5/15/86";
       3: #endif not lint
       4:
       5: #include "stdio.h"
       6: #include "lrnref.h"
       7:
       8: int nsave   = 0;
       9: int review  = 0;
      10:
      11: selunit()
      12: {
      13:     static char dobuff[50];
      14:     static char saved[20];
      15:     char fnam[80], s[80], zb[200];
      16:     char posslev[20][20];
      17:     int diff[20], i, k, m, n, best, alts;
      18:     char *getlesson();
      19:     FILE *f;
      20:
      21:     if (again) {
      22:         again = 0;
      23:         if (todo=getlesson()) {
      24:             if (!review)
      25:                 unsetdid(todo);
      26:             return;
      27:         }
      28:         wrapup(1);
      29:     }
      30:     while (ask) {
      31:         printf("What lesson? ");
      32:         fflush(stdout);
      33:         gets(dobuff);
      34:         if (strcmp(dobuff, "bye") == 0)
      35:             wrapup(1);
      36:         level = dobuff;
      37:         if (todo=getlesson())
      38:             return;
      39:     }
      40:     alts = 0;
      41: retry:
      42:     f = scrin;          /* use old lesson to find next */
      43:     if (f==NULL) {
      44:         sprintf(fnam, "%s/%s/L%s", direct, sname, level);
      45:         f = fopen(fnam, "r");
      46:         if (f==NULL) {
      47:             perror(fnam);
      48:             fprintf(stderr, "Selunit:  no script for lesson %s.\n", level);
      49:             wrapup(1);
      50:         }
      51:         while (fgets(zb, 200, f)) {
      52:             trim(zb);
      53:             if (strcmp(zb, "#next")==0)
      54:                 break;
      55:         }
      56:     }
      57:     if (feof(f)) {
      58:         printf("Congratulations; you have finished this sequence.\n");
      59:         fflush(stdout);
      60:         todo = 0;
      61:         wrapup(-1);
      62:     }
      63:     for(i=0; fgets(s, 80, f); i++) {
      64:         sscanf(s, "%s %d", posslev[i], &diff[i]);
      65:     }
      66:     best = -1;
      67:     /* cycle through lessons from random start */
      68:     /* first try the current place, failing that back up to
      69: 	     last place there are untried alternatives (but only one backup) */
      70:     n = grand()%i;
      71:     for(k=0; k<i; k++) {
      72:         m = (n+k)%i;
      73:         if (already(posslev[m]))
      74:             continue;
      75:         if (best<0)
      76:             best = m;
      77:         alts++;             /* real alternatives */
      78:         if (abs(diff[m]-speed) < abs(diff[best]-speed))
      79:             best = m;
      80:     }
      81:     if (best < 0 && nsave) {
      82:         nsave--;
      83:         strcpy(level, saved);
      84:         goto retry;
      85:     }
      86:     if (best < 0) {
      87:         /* lessons exhausted or missing */
      88:         printf("Sorry, there are no alternative lessons at this stage.\n");
      89:         printf("See someone for help.\n");
      90:         fflush(stdout);
      91:         todo = 0;
      92:         return;
      93:     }
      94:     strcpy (dobuff, posslev[best]);
      95:     if (alts>1) {
      96:         nsave = 1;
      97:         strcpy(saved, level);
      98:     }
      99:     todo = dobuff;
     100:     fclose(f);
     101: }
     102:
     103: abs(x)
     104: {
     105:     return(x>=0 ? x : -x);
     106: }
     107:
     108: grand()
     109: {
     110:     static int garbage;
     111:     int a[2], b;
     112:
     113:     time(a);
     114:     b = a[1]+10*garbage++;
     115:     return(b&077777);
     116: }

#### Defined functions

abs defined in line 103; used 2 times

- in line 78(2)

grand defined in line 108; used 1 times

- in line 70

selunit defined in line 11; used 1 times

- in /usr/src/usr.bin/learn/learn.c line 50

#### Defined variables

nsave defined in line 8; used 3 times

- in line 81-82(2), 96

review defined in line 9; used 5 times

- in line 24
- in /usr/src/usr.bin/learn/copy.c line 53, 148-152(2)
- in /usr/src/usr.bin/learn/whatnow.c line 14

sccsid defined in line 2; never used

Last modified: 1986-05-16 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1147 |