Annotation of capa/capa51/CapaTools/CAPAscreen.pl, revision 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>