Annotation of capa/capa51/CapaTools/CAPAscreen.pl, revision 1.1.1.1

1.1       albertel    1: #!/usr/local/bin/perl
                      2: 
                      3: # -----------------------------------------------------------------------------
                      4: #    
                      5: #           Some routines to facilitate creation of 
                      6: #            vt100 pseudo-menu driven interface
                      7: # 
                      8: #  Works under xterm, shelltool, but not commandtool. 
                      9: #   
                     10: #  by Isaac Tsai
                     11: # -----------------------------------------------------------------------------
                     12: #  
                     13: sub  C_ClearScreen { print "\e[;H\e[2J"; }
                     14: sub  C_EraseLine   { print "\e[K"; }
                     15: sub  C_MoveTo      { local($y,$x)=@_; print "\e[$y;$x"; print "H"; }
                     16: sub  C_MakeBox     { 
                     17:     local($y1,$x1,$y2,$x2,$title)=@_;
                     18:     local($wd)=$x2-$x1;	
                     19:     local($j,$tlen);
                     20: 
                     21:     if(x2 >= 0 && x2 <= 80) {
                     22:       C_MoveTo($y1,$x1);
                     23:       print "+"; print "-" x ($wd-1); print "+";
                     24:       if( $title ne "" ) {
                     25:         $tlen = length($title); $j = int($x1+($wd - $tlen)/2);
                     26:         C_MoveTo($y1,$j); print $title;
                     27:       }
                     28:       for ($j=$y1+1;$j<$y2;$j++) { 
                     29:         C_MoveTo($j,$x1);
                     30:         print "|"; print " " x ($wd-1) ;  print "|"; 
                     31:       }
                     32:       C_MoveTo($y2,$x1);
                     33:       print "+"; print "-" x ($wd-1); print "+";
                     34:     }
                     35:  }
                     36: 
                     37: # the coordnate of the upper left corner (y, x)
                     38: # the width of the box
                     39: # one line message appear on a separate top box
                     40: # one line title on top of the choice box
                     41: # choice list
                     42: sub  C_MultipleChoice {
                     43:     local($y1,$x1,$wd,$msg,$title,@items)=@_;
                     44:     local($item_cnt)=$#items;
                     45:     local($j,$off_y,$idx,$u_in,$done,$msg_out);
                     46:     $idx="1"; $off_y = 0;
                     47: 
                     48:     C_ClearScreen;
                     49:     if( $msg ne "" ) {
                     50:       # C_MakeBox($y1,$x1,$y1+2,$x1+length($msg)+2);
                     51:       C_MakeBox($y1,$x1,$y1+2,$x1+$wd);
                     52:       C_MoveTo($y1+1,$x1+1); print $msg;
                     53:       $off_y = 4;
                     54:     }
                     55:     C_MakeBox($y1+$off_y,$x1,$y1+$off_y+$item_cnt+5,$x1+$wd,$title);
                     56:     for ($j=0;$j<=$item_cnt;$j++) {
                     57:       C_MoveTo($y1+$off_y+$j+2,$x1+2); printf "%2d: %s", $idx,$items[$j];
                     58:       $idx++;
                     59:     }
                     60:     $off_y = $off_y + 4;
                     61:     $done = 0;
                     62:     while ( $done ne "y" && $done ne "yes" ) {
                     63:       $u_in=0; 
                     64:       while ($u_in < 1 || $u_in > $item_cnt+1 || $u_in =~ /\D/ || $u_in == "") { 
                     65:         C_MoveTo($y1+$off_y+$item_cnt,$x1+1); &C_EraseLine;
                     66:         C_MoveTo($y1+$off_y+$item_cnt,$x1+1); print "SELECT:" . " " x ($wd-8) . "|";
                     67:         C_MoveTo($y1+$off_y+$item_cnt,$x1+8);
                     68:         $u_in=<>; chop($u_in); 
                     69:       }
                     70:       $msg_out = "Selected item: " . $u_in . " $items[$u_in-1]" . ", (Y <RETURN>, or N)? ";
                     71:       $j = length($msg_out);
                     72:       C_MoveTo($y1+$off_y+$item_cnt+2,$x1); &C_EraseLine;
                     73:       C_MoveTo($y1+$off_y+$item_cnt+2,$x1);
                     74:       print $msg_out;
                     75:       C_MoveTo($y1+$off_y+$item_cnt+2,$x1+$j);
                     76:       $done=<>; chop($done); $done =~ tr/A-Z/a-z/;
                     77:       if( length($done) == 0 ) { $done = 'y'; };
                     78:     }
                     79:   return $u_in;
                     80:  }
                     81: 
                     82: sub  C_InputData {
                     83:     local($y,$x,$wd,$title,$limit_len,$prompt,@msgs)=@_;
                     84:     local($line_cnt)=$#msgs;
                     85:     local($done);
                     86:     local($jj,$prom_length);
                     87:     local($input,$in_len,$msgout,$msglen);
                     88:     
                     89:     C_ClearScreen;
                     90:     C_MakeBox($y,$x,$y+$line_cnt+2,$x+$wd,$title);
                     91:     for($jj=0;$jj<=$line_cnt;$jj++) {
                     92:       C_MoveTo($y+$jj+1,$x+1); print " $msgs[$jj]";
                     93:     }
                     94:     C_MakeBox($y+$line_cnt+4,$x,$y+$line_cnt+6,$x+$wd,"");
                     95:     C_MoveTo($y+$line_cnt+5,$x+1); print $prompt;
                     96:     $done = 0; $prom_length = length($prompt);
                     97:     while( $done ne "y" && $done ne "yes" ) {
                     98:       $in_len = 0;
                     99:       while(($in_len < 1) || ($in_len > $limit_len) ) {
                    100:         C_MoveTo($y+$line_cnt+5, $x+length($prompt)+1); &C_EraseLine;
                    101:         C_MoveTo($y+$line_cnt+5, $x+1); 
                    102:         print $prompt . " " x ($wd - $prom_length - 1) . "|";
                    103:         C_MoveTo($y+$line_cnt+5, $x+length($prompt)+1);
                    104:         $input = <>; chop($input); $in_len = length($input);
                    105:       }
                    106:       $msgout = "You entered:\'" . $input . "\', Are you sure (Y or N)? ";
                    107:       C_MoveTo($y+$line_cnt+7,$x); &C_EraseLine;
                    108:       C_MoveTo($y+$line_cnt+7,$x); print $msgout;
                    109:       $msglen = length($msgout);
                    110:       C_MoveTo($y+$line_cnt+7,$x+$msglen);
                    111:       $done = <>; chop($done); $done =~ tr/A-Z/a-z/;
                    112:     }
                    113:     return $input;
                    114:  }
                    115: 
                    116: sub  C_InputSetNum {
                    117:     local($y,$x,$wd,$title,$limit_len,$prompt,@msgs)=@_;
                    118:     local($line_cnt)=$#msgs;
                    119:     local($done);
                    120:     local($jj,$prom_length);
                    121:     local($input,$in_len,$msgout,$msglen);
                    122:     
                    123:     C_ClearScreen;
                    124:     C_MakeBox($y,$x,$y+$line_cnt+2,$x+$wd,$title);
                    125:     for($jj=0;$jj<=$line_cnt;$jj++) {
                    126:       C_MoveTo($y+$jj+1,$x+1); print " $msgs[$jj]";
                    127:     }
                    128:     C_MakeBox($y+$line_cnt+4,$x,$y+$line_cnt+6,$x+$wd,"");
                    129:     C_MoveTo($y+$line_cnt+5,$x+1); print $prompt;
                    130:     $done = 0; $prom_length = length($prompt);
                    131:     while( $done ne "y" && $done ne "yes" ) {
                    132:       $in_len = 0;
                    133:       while(($in_len < 1) || ($in_len > $limit_len) ) {
                    134:         C_MoveTo($y+$line_cnt+5, $x+length($prompt)+1); &C_EraseLine;
                    135:         C_MoveTo($y+$line_cnt+5, $x+1); 
                    136:         print $prompt . " " x ($wd - $prom_length - 1) . "|";
                    137:         C_MoveTo($y+$line_cnt+5, $x+length($prompt)+1);
                    138:         $input = <>; chop($input); $in_len = length($input);
                    139:       }
                    140:       $msgout = "You entered:\'" . $input . "\', Confirm (Y <RETURN> or N)? ";
                    141:       C_MoveTo($y+$line_cnt+7,$x); &C_EraseLine;
                    142:       C_MoveTo($y+$line_cnt+7,$x); print $msgout;
                    143:       $msglen = length($msgout);
                    144:       C_MoveTo($y+$line_cnt+7,$x+$msglen);
                    145:       $done = <>; chop($done); $done =~ tr/A-Z/a-z/;
                    146:       if(length($done)==0) { $done = 'y'; }
                    147:     }
                    148:     return $input;
                    149:  }
                    150: 
                    151: sub  C_InputStudentID {
                    152:     local($y,$x,$wd,$title,$limit_len,$prompt,@msgs)=@_;
                    153:     local($line_cnt)=$#msgs;
                    154:     local($done);
                    155:     local($jj,$prom_length);
                    156:     local($input,$in_len,$msgout,$msglen,$input_ok);
                    157:     
                    158:     C_ClearScreen;
                    159:     C_MakeBox($y,$x,$y+$line_cnt+2,$x+$wd,$title);
                    160:     for($jj=0;$jj<=$line_cnt;$jj++) {
                    161:       C_MoveTo($y+$jj+1,$x+1); print " $msgs[$jj]";
                    162:     }
                    163:     C_MakeBox($y+$line_cnt+4,$x,$y+$line_cnt+6,$x+$wd,"");
                    164:     C_MoveTo($y+$line_cnt+5,$x+1); print $prompt;
                    165:     $done = 0; $prom_length = length($prompt);
                    166:     while( $done ne "y" && $done ne "yes" ) {
                    167:       $in_len = 0; $input_ok = 0;
                    168:       while( ! $input_ok ) {
                    169:         C_MoveTo($y+$line_cnt+5, $x+length($prompt)+1); &C_EraseLine;
                    170:         C_MoveTo($y+$line_cnt+5, $x+1); 
                    171:         print $prompt . " " x ($wd - $prom_length - 1) . "|";
                    172:         C_MoveTo($y+$line_cnt+5, $x+length($prompt)+1);
                    173:         $input = <>; chop($input); $in_len = length($input);
                    174:         if( $in_len <= $limit_len ) { $input_ok = 1; }
                    175:       }
                    176:       if( $in_len == 0 ) {
                    177:         $msgout = "Exit this dialog? Confirm (Y <RETURN> or N)? ";
                    178:       } else {
                    179:         $msgout = "You entered:\'" . $input . "\', Confirm (Y <RETURN> or N)? ";
                    180:       }
                    181:       C_MoveTo($y+$line_cnt+7,$x); &C_EraseLine;
                    182:       C_MoveTo($y+$line_cnt+7,$x); print $msgout;
                    183:       $msglen = length($msgout);
                    184:       C_MoveTo($y+$line_cnt+7,$x+$msglen);
                    185:       $done = <>; chop($done); $done =~ tr/A-Z/a-z/;
                    186:       if(length($done)==0) { $done = 'y'; }
                    187:     }
                    188:     return $input;
                    189:  }
                    190: 
                    191: 
                    192: 
                    193: sub  C_InputFromToNum {
                    194:     local($y,$x,$wd,$title,$limit_len,$prompt,@msgs)=@_;
                    195:     local($line_cnt)=$#msgs;
                    196:     local($done);
                    197:     local($jj,$prom_length);
                    198:     local($input,$in_len,$msgout,$msglen);
                    199:     
                    200:     C_ClearScreen;
                    201:     C_MakeBox($y,$x,$y+$line_cnt+2,$x+$wd,$title);
                    202:     for($jj=0;$jj<=$line_cnt;$jj++) {
                    203:       C_MoveTo($y+$jj+1,$x+1); print " $msgs[$jj]";
                    204:     }
                    205:     C_MakeBox($y+$line_cnt+4,$x,$y+$line_cnt+6,$x+$wd,"");
                    206:     C_MoveTo($y+$line_cnt+5,$x+1); print $prompt;
                    207:     $done = 0; $prom_length = length($prompt);
                    208:     while( $done ne "y" && $done ne "yes" ) {
                    209:       $in_len = 0;
                    210:       while(($in_len < 1) || ($in_len > $limit_len) ) {
                    211:         C_MoveTo($y+$line_cnt+5, $x+length($prompt)+1); &C_EraseLine;
                    212:         C_MoveTo($y+$line_cnt+5, $x+1); 
                    213:         print $prompt . " " x ($wd - $prom_length - 1) . "|";
                    214:         C_MoveTo($y+$line_cnt+5, $x+length($prompt)+1);
                    215:         $input = <>; chop($input); $in_len = length($input);
                    216:       }
                    217:       $msgout = "You entered:\'" . $input . "\', Confirm (Y <RETURN> or N)? ";
                    218:       C_MoveTo($y+$line_cnt+7,$x); &C_EraseLine;
                    219:       C_MoveTo($y+$line_cnt+7,$x); print $msgout;
                    220:       $msglen = length($msgout);
                    221:       C_MoveTo($y+$line_cnt+7,$x+$msglen);
                    222:       $done = <>; chop($done); $done =~ tr/A-Z/a-z/;
                    223:       if(length($done)==0) { $done = 'y'; }
                    224:     }
                    225:     return ($input);
                    226:  }
                    227: 
                    228: 
                    229: 
                    230: sub  C_Warn {
                    231:    local($y,$x,$wd,$title,@items)=@_;
                    232:    local($item_cnt)=$#items;
                    233:    local($j,$done);
                    234:    
                    235:    $wd = 25 if( $wd < 25 );
                    236:    $done = 'n';
                    237:    C_ClearScreen;
                    238:    C_MakeBox($y,$x,$y+$item_cnt+5,$x+$wd,$title);
                    239:     for ($j=0;$j<=$item_cnt;$j++) {
                    240:       C_MoveTo($y+$j+2,$x+1); print " $items[$j]";
                    241:     }
                    242:    while( $done ne 'y' ) {
                    243:      C_MoveTo($y+$item_cnt+4,$x+$wd-25); print "press Return to continue";
                    244:      $done = <>; $done = 'y';
                    245:    }
                    246:    C_ClearScreen;
                    247:    return 1;
                    248:  }
                    249: 
                    250: 
                    251: sub  C_MultilineMsgs {
                    252:     local($y,$x,$wd,$title,$prompt,@msgs)=@_;
                    253:     local($line_cnt)=$#msgs;
                    254:     local($done);
                    255:     local($jj);
                    256:     local($len);
                    257:     
                    258:     C_ClearScreen;
                    259:     $len = length($prompt);
                    260:     C_MakeBox($y,$x,$y+$line_cnt+5,$x+$wd,$title);
                    261:     for($jj=0;$jj<=$line_cnt;$jj++) {
                    262:       C_MoveTo($y+$jj+2,$x+1); print " $msgs[$jj]";
                    263:     }
                    264:     C_MoveTo($y+$line_cnt+4,$x+$wd-$len-1); print $prompt;
                    265:     $done = <>;
                    266:     C_ClearScreen;
                    267:  }
                    268: 
                    269: 
                    270: sub  C_Pause {
                    271:     local($done);
                    272:     
                    273:     print "Press RETURN to continue"; $done=<>;
                    274:  }
                    275: 
                    276: 
                    277: 
                    278: 1;
                    279: 
                    280: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>