home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l217 / 2.ddi / PROGRAMS / LINEINP.PRO < prev    next >
Encoding:
Text File  |  1990-03-26  |  5.3 KB  |  199 lines

  1.  /***********************************************************************/
  2.  /*        LINE INPUT DRIVER                       */
  3.  /***********************************************************************/
  4.  
  5. DATABASE - lineinp
  6.   lineinpstate(STRING,COL)
  7.   lineinpflag
  8.   insmode
  9.  
  10.  
  11. PREDICATES
  12.  lineinput(ROW,COL,LEN,ATTR,ATTR,STRING,STRING,STRING)
  13.   lineinput1(ROW,COL,LEN,ATTR,ATTR,STRING,STRING,STRING,KEY)
  14.   inpkeyact(KEY,COL,LEN,COL,COL,STRING,STRING)
  15.   inpendkey(KEY)
  16.   changemode
  17.   inpstate(lineinp)
  18.   setlineinpflag(KEY)
  19.   disp_str(COL,COL,LEN,STRING)
  20.   lineinpcursor(COL,LEN,COL,COL,STRING)
  21.   lin(KEY,COL,STRING,STRING)
  22.   myfrontstr(COL,STRING,STRING,STRING)
  23.   dropchar(STRING,STRING)
  24.  
  25. CLAUSES
  26.   lineinput(ROW,COL,LEN,WATTR,FATTR,CONSTTXT,OLDTXT,NEWTXT):-
  27.     lineinput1(ROW,COL,LEN,WATTR,FATTR,CONSTTXT,OLDTXT,NEWTXT,KEY),
  28.     removewindow,
  29.     not(KEY=esc).
  30.  
  31.   lineinput1(_,_,_,_,_,_,_,_,_):-retract(lineinpflag),fail.
  32.   lineinput1(ROW,COL,LEN,WATTR,FATTR,CONSTTXT,OLDTXT,NEWTXT,KEY):-
  33.     MAXCOL=LEN,
  34.     adjframe(FATTR,1,MAXCOL,DR,DC),
  35.     adjustwindow(ROW,COL,DR,DC,ROW1,COL1),
  36.     makewindow(81,WATTR,FATTR,"",ROW1,COL1,DR,DC),
  37.     str_len(CONSTTXT,MINCOL),
  38.     write(CONSTTXT),
  39.     inpstate(lineinpstate(OLDTXT,0)),
  40.     REST=LEN-MINCOL,
  41.     repeat,
  42.     lineinpstate(CURTEXT,OFFSET),
  43.     disp_str(OFFSET,MINCOL,REST,CURTEXT),
  44.     cursor(_,CC),
  45.     readkey(KEY),
  46.     setlineinpflag(KEY),
  47.     inpkeyact(KEY,CC,MAXCOL,MINCOL,OFFSET,CURTEXT,OLDTXT),
  48.     inpendkey(KEY),
  49.     lineinpstate(NEWTXT,_),!.
  50.  
  51.   inpendkey(fkey(10)):-!.
  52.   inpendkey(cr):-!.
  53.   inpendkey(esc).
  54.  
  55.   setlineinpflag(char(_)):-!.
  56.   setlineinpflag(_):-lineinpflag,!.
  57.   setlineinpflag(_):-assert(lineinpflag).
  58.  
  59.   disp_str(_,_,_,_):-keypressed,!.
  60.   disp_str(0,MINCOL,LEN,TEXT):-!,
  61.     field_str(0,MINCOL,LEN,TEXT).
  62.   disp_str(OFFSET,MINCOL,LEN,TEXT):-
  63.     frontstr(OFFSET,TEXT,_,TXT2),!,
  64.     field_str(0,MINCOL,LEN,TXT2).
  65.   disp_str(_,MINCOL,LEN,_):-
  66.     field_str(0,MINCOL,LEN,"").
  67.  
  68.   inpstate(_):-retract(lineinpstate(_,_)),fail.
  69.   inpstate(T):-assert(T).
  70.  
  71.   lineinpcursor(COL,MAXCOL,MINCOL,_,_):-
  72.     COL<MAXCOL,COL>=MINCOL,!,cursor(0,COL).
  73.   lineinpcursor(COL,MAXCOL,_,OFFSET,TXT):-
  74.     COL>=MAXCOL,!,
  75.     OFFSET1=1+OFFSET+COL-MAXCOL,
  76.     inpstate(lineinpstate(TXT,OFFSET1)),
  77.     COL1=MAXCOL-1,
  78.     cursor(0,COL1).
  79.   lineinpcursor(COL,_,MINCOL,OFFSET,TXT):-
  80.     COL<MINCOL,
  81.     OFFSET1=OFFSET-(1+MINCOL-COL),
  82.     max(0,OFFSET1,OFFSET2),
  83.     inpstate(lineinpstate(TXT,OFFSET2)),
  84.     cursor(0,MINCOL).
  85.  
  86.   myfrontstr(N,STR,S1,S2):-frontstr(N,STR,S1,S2),!.
  87.   myfrontstr(N,STR,S1,""):-
  88.     str_len(STR,NN),
  89.     LEN=N-NN,
  90.     str_len(SS,LEN),
  91.     concat(STR,SS,S1).
  92.  
  93.   changemode:-retract(insmode),!.
  94.   changemode:-assert(insmode).
  95.  
  96.   lin(char(T),POS,STR,STR1):-
  97.     insmode,!,
  98.     myfrontstr(POS,STR,S1,S2),
  99.     frontchar(S22,T,S2),
  100.     concat(S1,S22,STR1).
  101.  
  102.   lin(char(T),POS,STR,STR1):-
  103.     myfrontstr(POS,STR,S1,S2),
  104.     dropchar(S2,S21),
  105.     frontchar(S22,T,S21),
  106.     concat(S1,S22,STR1).
  107.  
  108.   lin(del,POS,STR,STR1):-
  109.     frontstr(POS,STR,S1,S2),
  110.     frontchar(S2,_,S22),!,
  111.     concat(S1,S22,STR1).
  112.   lin(del,_,S,S).
  113.  
  114.   dropchar(S,S1):-frontchar(S,_,S1),!.
  115.   dropchar(S,S).
  116.  
  117.  
  118.  /***********************************************************************/
  119.  /*        inpkeyact                               */
  120.  /***********************************************************************/
  121.  
  122.   inpkeyact(char(T),COL,MAXCOL,MINCOL,OFFSET,TXT,OLDTXT):-
  123.     lineinpflag,!,
  124.     POS=OFFSET+COL-MINCOL,
  125.     lin(char(T),POS,TXT,TXT1),
  126.     inpstate(lineinpstate(TXT1,OFFSET)),
  127.     inpkeyact(right,COL,MAXCOL,MINCOL,OFFSET,TXT1,OLDTXT).
  128.  
  129.   inpkeyact(char(T),_,MAXCOL,MINCOL,_,_,OLDTXT):-
  130.     assert(lineinpflag),
  131.     str_char(TXT1,T),
  132.     inpstate(lineinpstate(TXT1,0)),
  133.     inpkeyact(right,MINCOL,MAXCOL,MINCOL,0,TXT1,OLDTXT).
  134.  
  135.   inpkeyact(del,COL,_,MINCOL,OFFSET,TXT,_):-
  136.     POS=OFFSET+COL-MINCOL,
  137.     lin(del,POS,TXT,TXT1),
  138.     inpstate(lineinpstate(TXT1,OFFSET)).
  139.  
  140.   inpkeyact(bdel,COL,MAXCOL,MINCOL,OFFSET,TXT,OLDTXT):-
  141.     COL>MINCOL,
  142.     POS=OFFSET+COL-1-MINCOL,
  143.     lin(del,POS,TXT,TXT1),
  144.     inpstate(lineinpstate(TXT1,OFFSET)),
  145.     inpkeyact(left,COL,MAXCOL,MINCOL,OFFSET,TXT1,OLDTXT).
  146.  
  147.   inpkeyact(cr,_,_,_,_,_,_).
  148.  
  149.   inpkeyact(fkey(10),_,_,_,_,_,_).
  150.  
  151. /*inpkeyact(fkey(1),_,_,_,_,_,_):-help.  If a help system is used  */
  152.  
  153.   inpkeyact(esc,_,_,_,_,_,_).
  154.  
  155.   inpkeyact(ins,_,_,_,_,_,_):-changemode.
  156.  
  157.   inpkeyact(home,_,_,MINCOL,_,TXT,_):-
  158.     inpstate(lineinpstate(TXT,0)),
  159.     cursor(0,MINCOL).
  160.  
  161.   inpkeyact(end,_,MAXCOL,MINCOL,_,TXT,_):-
  162.     str_len(TXT,STRLEN),
  163.     COL=MINCOL+STRLEN,
  164.     COL<MAXCOL,!,
  165.     inpstate(lineinpstate(TXT,0)),
  166.     cursor(0,COL).
  167.  
  168.   inpkeyact(end,_,MAXCOL,MINCOL,_,TXT,_):-
  169.     str_len(TXT,STRLEN),
  170.     OFFSET=(MINCOL+STRLEN+1)-MAXCOL,
  171.     inpstate(lineinpstate(TXT,OFFSET)),
  172.     COL=MAXCOL-1,
  173.     cursor(0,COL).
  174.  
  175.   inpkeyact(right,COL,MAXCOL,MINCOL,OFFSET,TXT,_):-
  176.     COL1=COL+1,
  177.     lineinpcursor(COL1,MAXCOL,MINCOL,OFFSET,TXT).
  178.  
  179.   inpkeyact(ctrlright,COL,MAXCOL,MINCOL,OFFSET,TXT,_):-
  180.     COL1=COL+5,
  181.     lineinpcursor(COL1,MAXCOL,MINCOL,OFFSET,TXT).
  182.  
  183.   inpkeyact(left,COL,MAXCOL,MINCOL,OFFSET,TXT,_):-
  184.     COL1=COL-1,
  185.     lineinpcursor(COL1,MAXCOL,MINCOL,OFFSET,TXT).
  186.  
  187.   inpkeyact(ctrlleft,COL,MAXCOL,MINCOL,OFFSET,TXT,_):-
  188.     COL1=COL-5,
  189.     lineinpcursor(COL1,MAXCOL,MINCOL,OFFSET,TXT).
  190.  
  191.   inpkeyact(ctrlbdel,_,_,MINCOL,_,_,_):-
  192.     inpstate(lineinpstate("",0)),
  193.     cursor(0,MINCOL).
  194.  
  195.   inpkeyact(fkey(8),_,_,MINCOL,_,_,OLDTXT):-
  196.     OLDTXT><"",
  197.     inpstate(lineinpstate(OLDTXT,0)),
  198.     cursor(0,MINCOL).
  199.