Annotation of 43BSD/contrib/icon/src/cmd/deal.icn, revision 1.1.1.1

1.1       root        1: #      DEAL(6)
                      2: #
                      3: #      Shuffle and deal bridge hands
                      4: #
                      5: #      Ralph E. Griswold
                      6: #
                      7: #      Last modified 7/10/83
                      8: #
                      9: 
                     10: global deckimage
                     11: 
                     12: procedure main(x)
                     13:    local deck, handsize, Table, hands, bar, i, s
                     14:    deck := deckimage := &lcase || &ucase
                     15:    bar := repl("-",33)
                     16:    handsize := *deck / 4
                     17:    hands := 1
                     18:    i := 0
                     19:    while i < *x do {
                     20:       s := x[i +:= 1] | break
                     21:       case s of {
                     22:          "-h":   hands := integer(x[i +:= 1]) |
                     23:             stop("usage:  deal [-h n] [-s n]")
                     24:          "-s":   &random := integer(x[i +:= 1]) |
                     25:             stop("usage:  deal [-h n] [-s n]")
                     26:          default:   stop("usage:  deal [-h n] [-s n]")
                     27:          }
                     28:       }
                     29:    write(bar,"\n")
                     30:    every 1 to hands do {
                     31:       deck := shuffle(deck)
                     32:       Table := [
                     33:          show(deck[1+:handsize]),
                     34:          show(deck[handsize + 1+:handsize]),
                     35:          show(deck[2 * handsize + 1+:handsize]),
                     36:          show(deck[3 * handsize + 1+:handsize])
                     37:          ]
                     38:       every write(repl(" ",10),!Table[1])
                     39:       write()
                     40:       every i := 1 to 4 do
                     41:          write(left(Table[4][i],20),Table[2][i])
                     42:       write()
                     43:       every write(repl(" ",10),!Table[3])
                     44:       write("\n",bar,"\n")
                     45:       }
                     46: end
                     47: 
                     48: #  shuffle deck
                     49: #
                     50: procedure shuffle(deck)
                     51:    local m
                     52:    every m := *deck to 2 by -1 do
                     53:       deck[?m] :=: deck[m]
                     54:    return deck
                     55: end
                     56: 
                     57: #  display the hands
                     58: #
                     59: procedure show(hand)
                     60:    static clubs, diamonds, hearts, spades, denom, blanker, suitsize
                     61:    initial {
                     62:       suitsize := *deckimage / 4
                     63:       blanker := repl(" ",suitsize)
                     64:       denom := &lcase[1+:suitsize]
                     65:       clubs := denom || repl(blanker,3)
                     66:       diamonds := blanker || denom || repl(blanker,2)
                     67:       hearts := repl(blanker,2) || denom || blanker
                     68:       spades := repl(blanker,3) || denom
                     69:       }
                     70:                                # if a hand consists of all 13 cards of one
                     71:                                # suit, that suit will be misformatted slightly
                     72:    return [
                     73:       "S:" || arrange(hand,spades),
                     74:       "H:" || arrange(hand,hearts),
                     75:       "D:" || arrange(hand,diamonds),
                     76:       "C:" || arrange(hand,clubs)
                     77:       ]
                     78:    write("\n")
                     79: end
                     80: 
                     81: #  arrange hands for presentation
                     82: #
                     83: procedure arrange(hand,suit)
                     84:    static denom, rank, suitsize
                     85:    initial {
                     86:       suitsize := *deckimage / 4
                     87:       denom := &lcase[1+:suitsize]
                     88:       rank := "AKQJT98765432"
                     89:       }
                     90:    return trim(map(cset(map(hand,deckimage,suit)),denom,rank))
                     91: end

unix.superglobalmegacorp.com

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