Annotation of 42BSD/usr.lib/learn/editor/L44.1g, revision 1.1

1.1     ! root        1: #print
        !             2: Of course, you can also search for lines that
        !             3: contain backslashes; again, it's simply a matter
        !             4: of doubling the backslash in the search pattern.
        !             5: That is,
        !             6:    /\\/
        !             7: finds the next line with a backslash.
        !             8: 
        !             9: Find the second occurrence of "\n\n" in the file
        !            10: "prog.c", and type "answer N", where N is its
        !            11: line number.
        !            12: #create prog.c
        !            13: 
        !            14: int  nsave  = 0;
        !            15: 
        !            16: selunit()
        !            17: {
        !            18:   char fnam[20], s[50];
        !            19:   static char dobuff[50];
        !            20:   char posslev[20][20];
        !            21:   int diff[20], i, k, m, n, best, alts, statb[20];
        !            22:   FILE *f;
        !            23:   char zb[200];
        !            24:   static char saved[20];
        !            25: 
        !            26:   while (ask) {
        !            27:     printf("What lesson? ");
        !            28:     fflush(stdout);
        !            29:     gets(dobuff);
        !            30:     if (strcmp(dobuff, "bye") == 0)
        !            31:       wrapup(0);
        !            32:     level = todo = dobuff;
        !            33:     sprintf(s, "../L%s", dobuff);
        !            34:     if (access(s, 04) == 0)
        !            35:       return;
        !            36:     printf("no such lesson\n");
        !            37:   }
        !            38:   alts = 0;
        !            39: retry:
        !            40:   f=scrin;
        !            41:   if (f==NULL) {
        !            42:     sprintf(fnam, "../L%s", level);
        !            43:     f = fopen(fnam, "r");
        !            44:     if (f==NULL) {
        !            45:       fprintf(stderr, "No script for lesson %s.\n", level);
        !            46:       wrapup(1);
        !            47:     }
        !            48:     while (fgets(zb, 200, f)) {
        !            49:       trim(zb);
        !            50:       if (strcmp(zb, "#next")==0)
        !            51:         break;
        !            52:     }
        !            53:   }
        !            54:   if (feof(f)) {
        !            55:     printf("Congratulations\n\n.You have finished this sequence.\n");
        !            56:     fflush(stdout);
        !            57:     todo = 0;
        !            58:     return;
        !            59:   }
        !            60:   for(i=0; fgets(s, 50, f); i++) {
        !            61:     sscanf(s, "%s %d", &posslev[i], &diff[i]);
        !            62:   }
        !            63:   best = -1;
        !            64:   /* cycle through lessons from random start */
        !            65:   /* first try the current place, failing that back up to
        !            66:        last place there are untried alternatives (but only one backup) */
        !            67:   n = grand()%i;
        !            68:   for(k=0; k<i; k++) {
        !            69:     m = (n+k)%i;
        !            70:     if (already(posslev[m])) continue;
        !            71:     if (best<0) best=m;
        !            72:     /* real alternatives */
        !            73:     alts++;
        !            74:     if (abs(diff[m]-speed) < abs(diff[best]-speed))
        !            75:       best=m;
        !            76:   }
        !            77:   if (best < 0 && nsave) {
        !            78:     nsave--;
        !            79:     strcpy(level, saved);
        !            80:     goto retry;
        !            81:   }
        !            82:   if (best <0) {
        !            83:     /* lessons exhausted or missing */
        !            84:     printf("Sorry, there are no alternative lessons at this stage.\n");
        !            85:     printf("See someone for help.\n\n");
        !            86:     fflush(stdout);
        !            87:     todo = 0;
        !            88:     return;
        !            89:   }
        !            90:   strcpy (dobuff, posslev[best]);
        !            91:   if (alts>1) {
        !            92:     nsave=1;
        !            93:     strcpy (saved, level);
        !            94:   }
        !            95:   todo = dobuff;
        !            96:   fclose(f);
        !            97: }
        !            98: 
        !            99: abs(x)
        !           100: {
        !           101:   return(x>=0? x: -x);
        !           102: }
        !           103: 
        !           104: grand()
        !           105: {
        !           106:   static int garbage;
        !           107:   int a[2], b;
        !           108: 
        !           109:   time(a);
        !           110:   b = a[1]+10*garbage++;
        !           111:   return(b&077777);
        !           112: }
        !           113: #copyin
        !           114: #user
        !           115: #uncopyin
        !           116: #match 73
        !           117: #bad 43
        !           118: The second______ one.
        !           119: #log
        !           120: #next
        !           121: 44.1h 10

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.