home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l216 / 1.ddi / REPORT.PRO < prev    next >
Encoding:
Text File  |  1987-03-23  |  2.9 KB  |  114 lines

  1. /****************************************************************
  2.  
  3.      Turbo Prolog Toolbox
  4.      (C) Copyright 1987 Borland International.
  5.  
  6.             Report generation
  7.  
  8. ****************************************************************/
  9.  
  10.  
  11. /*
  12. DOMAINS
  13.   FNAME=SYMBOL
  14.   TYPE = int(); str(); real()
  15.   VALUE    = int(INTEGER); str(STRING); real(REAL)
  16.   FIELD = field(STRING,COL)
  17.   FIELDLIST = FIELD*
  18.  
  19. DATABASE
  20.   /* Database declarations used in scrhnd */
  21.   insmode            /* Global insertmode */
  22.   actfield(FNAME)        /* Actual field */
  23.   screen(SYMBOL,DBASEDOM)    /* Saving different screens */
  24.   value(FNAME,STRING)        /* value of a field */
  25.   field(FNAME,TYPE,ROW,COL,LEN) /* Screen definition */
  26.   txtfield(ROW,COL,LEN,STRING)
  27.   windowsize(ROW,COL).
  28.   notopline
  29.  
  30.   /* DATABASE PREDICATES USED BY VSCRHND */
  31.   windowstart(ROW,COL)
  32.   mycursord(ROW,COL)
  33.  
  34.   /* Database declarations used in lineinp */
  35.   lineinpstate(STRING,COL)
  36.   lineinpflag
  37. */
  38.  
  39.  
  40. /****************************************************************
  41.         USER DEFINED PREDICATE
  42. ****************************************************************/
  43.  
  44. PREDICATES
  45.   field_value(FNAME,STRING)
  46.  
  47.  
  48. /****************************************************************
  49.             INTERMEDIATE PREDICATES
  50. ****************************************************************/
  51.  
  52. PREDICATES
  53.   nondeterm for(ROW,ROW,ROW)
  54.   nondeterm txtfields(ROW,FIELD)
  55.   nondeterm valuefields(ROW,FIELD)
  56.   getline(ROW,STRING)
  57.   append(FIELDLIST,FIELDLIST,FIELDLIST)
  58.   sort(FIELDLIST,FIELDLIST,FIELDLIST)
  59.   split(FIELDLIST,FIELD,FIELDLIST,FIELDLIST)
  60.   list_string(FIELDLIST,STRING,STRING)
  61.  
  62. CLAUSES
  63.   for(X,X,_).
  64.   for(I,A,B):-B>A,A1=A+1,for(I,A1,B).
  65.  
  66.   getline(LNO,STRING):-
  67.     findall(X1,valuefields(LNO,X1),FIELDSLIST),
  68.     findall(X1,txtfields(LNO,X1),TXTFIELDSLIST),
  69.     append(FIELDSLIST,TXTFIELDSLIST,LIST),
  70.     sort(LIST,[],LIST1),
  71.     list_string(LIST1,"",STRING).
  72.  
  73.   txtfields(LNO,field(S,COL)):-txtfield(LNO,COL,_,S).
  74.  
  75.   valuefields(LNO,field(S,COL)):-
  76.     field(FNAME,_,LNO,COL,_),
  77.     field_value(FNAME,S).
  78.  
  79.   append([],L,L).
  80.   append([X|L1],L2,[X|L3]):-append(L1,L2,L3).  
  81.  
  82.   sort( [HEAD|TAIL], SORTEDBIGGER, RESULT )    :-
  83.     split( TAIL, HEAD, LESSLIST, BIGGERLIST ),
  84.     sort( BIGGERLIST, SORTEDBIGGER, NEWSORTEDBIGGER ),
  85.     sort( LESSLIST, [HEAD|NEWSORTEDBIGGER], RESULT ).
  86.   sort( [], SORTED, SORTED ).
  87.     
  88.   split([],_,[],[]).
  89.   split([field(S,Y)|L],field(S1,X),[field(S,Y)|L1],L2):-
  90.         Y<X,!,split(L,field(S1,X),L1,L2).
  91.   split([field(S,Y)|L],field(S1,X),L1,[field(S,Y)|L2]):-
  92.     split(L,field(S1,X),L1,L2).
  93.  
  94.   list_string([field(S,COL)|T],IN,OUT):-
  95.     str_len(IN,LEN),LEN<=COL,!,
  96.     ADD=COL-LEN,
  97.     str_len(ADDS,ADD),
  98.     concat(IN,ADDS,IN1),
  99.     concat(IN1,S,IN2),
  100.     list_string(T,IN2,OUT).
  101.   list_string([field(S,COL)|T],IN,OUT):-
  102.     frontstr(COL,IN,IN1,_),
  103.     concat(IN1,S,IN2),
  104.     list_string(T,IN2,OUT).
  105.   list_string([],S,S).
  106.  
  107. PREDICATES
  108.   report(ROW)
  109.  
  110. CLAUSES
  111.   report(LINES):-
  112.     for(NO,1,LINES),getline(NO,STR),write(STR),nl,fail.
  113.   report(_).
  114.