home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / CLIPPER / NCCLIB.ZIP / NCCCODE.ZIP / NCCPOP.PRG < prev    next >
Text File  |  1992-11-04  |  4KB  |  139 lines

  1. //═══════════════════════════════════════════════════════╕
  2. //  Program .....: Nccpop                                │
  3. //  CopyRight ...: 1992 National Computer Consultants    │
  4. //                 All rights are reserved.              │
  5. //  Author ......: Greg Rice                             │
  6. //═══════════════════════════════════════════════════════╛
  7.  
  8. #include "set.ch"
  9.  
  10. Function Npop_Ask( p_Data, p_Valid, p_Color, p_Padding )
  11.  
  12.  
  13.  
  14.     local a                                     , ;
  15.           i                                     , ;
  16.           pos                                   ,;
  17.           maxlen                                , ;
  18.           StartRow                              , ;
  19.           StartCol                              , ;
  20.           sScreen                               , ;
  21.           sColor   := SetColor()                , ;
  22.           sCursor  := Set( _SET_CURSOR, 1 )     , ;
  23.           sConfirm := Set( _SET_CONFIRM, .t. )
  24.  
  25.     local gets := .f.  ,;
  26.           get_pos      ,;
  27.           get_len      ,;
  28.           get_col      ,;
  29.           get_input    ,;
  30.           get_pict     ,;
  31.           say_pos      ,;
  32.           getlist:={}
  33.  
  34.     p_Padding  := if( p_Padding == NIL, 1, p_Padding )
  35.     if p_Color # NIL
  36.       SetColor( p_Color )
  37.     endif
  38.  
  39.     a      := StrToArray( p_Data, '\n' )
  40.     maxlen := 0
  41.     aeval( a, { |y| maxlen := max( len(y)-if("\"$y,1,0) , maxlen )  } )
  42.     maxlen := maxlen + ( p_Padding * 2 )
  43.  
  44.     Startrow := int( (maxrow() - len(a)) / 2 )
  45.     Startcol := int( (maxcol() - maxlen) / 2 )
  46.  
  47.     sScreen := savescreen( StartRow-1         , ;
  48.                            StartCol-1         , ;
  49.                            StartRow+len(a)+1  , ;
  50.                            StartCol+maxlen+2  )
  51.     WinBox( StartRow-1        , ;
  52.             StartCol-1        , ;
  53.             StartRow+len(a)   , ;
  54.             StartCol+maxlen   , ;
  55.                               , ;
  56.                          5    , ;
  57.                         .t.     ;
  58.           )
  59.  
  60.     for i = 1 to len(a)
  61.        if '\c' $ a[i]
  62.           get_pos := at("\c",a[i])
  63.           pos     := get_pos + 2
  64.           while ( subs(a[i], pos,1) == 'c' )
  65.              pos++
  66.           enddo
  67.           get_len   := pos - (get_pos+1)
  68.           get_input := space( get_len )
  69.  
  70.           say_pos   := StartCol + round((maxlen-len(a[i])+1)/2,0)
  71.           get_Col   := say_pos + get_pos -1
  72.  
  73.           if empty(p_Valid)
  74.              @ StartRow-1+i, Say_pos say subs(a[i],1,get_pos-1)
  75.              @ StartRow-1+i, get_col get get_Input pict "@!"
  76.           else
  77.              @ StartRow-1+i, Say_pos say subs(a[i],1,get_pos-1)
  78.              @ StartRow-1+i, get_col get get_Input pict "@!" valid( get_input $ p_Valid )
  79.           endif
  80.           @ StartRow-1+i, get_col + get_len say subs(a[i],get_pos+get_len+1)
  81.           gets := .t.
  82.  
  83.        elseif '\i' $ a[i]
  84.           get_pos  := at("\i",a[i])
  85.           pos      := get_pos + 2
  86.           while ( subs(a[i], pos,1) == 'i' )
  87.              pos++
  88.           enddo
  89.           get_len := pos-(get_pos+1)
  90.           get_input := 0
  91.           get_pict  := repl("9",get_len)
  92.  
  93.           say_pos   := StartCol + round((maxlen-len(a[i])+1)/2,0)
  94.           get_Col   := say_pos + get_pos -1
  95.  
  96.           if empty(p_Valid)
  97.              @ StartRow-1+i, Say_pos say subs(a[i],1,get_pos-1)
  98.              @ StartRow-1+i, get_col get get_input pict get_pict
  99.           else
  100.              @ StartRow-1+i, Say_pos say subs(a[i],1,get_pos-1)
  101.              @ StartRow-1+i, get_col get get_input pict get_pict
  102.           endif
  103.           @ StartRow-1+i, get_col + get_len say subs(a[i],get_pos+get_len+1)
  104.           gets := .t.
  105.  
  106.        else
  107.           @ StartRow-1+i, StartCol say padc(a[i],maxlen,' ')
  108.  
  109.        endif
  110.     next
  111.  
  112.  
  113.     if gets
  114.        read
  115.     else
  116.        keyboard ''
  117.        inkey(0)
  118.     endif
  119.  
  120.  
  121.     restscreen(;
  122.                StartRow-1         , ;
  123.                StartCol-1         , ;
  124.                StartRow+len(a)+1  , ;
  125.                StartCol+maxlen+2  , ;
  126.                sScreen              ;
  127.               )
  128.  
  129.     SetColor( sColor )
  130.     Set( _SET_CURSOR, sCursor )
  131.     Set( _SET_CONFIRM, sConfirm )
  132.  
  133.     if gets
  134.        return( get_input )
  135.     endif
  136.  
  137. Return( NIL )
  138.  
  139.