home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol064 / query.src < prev    next >
Text File  |  1984-04-29  |  2KB  |  174 lines

  1. M    SET              0
  2. C    SET              0
  3. F    SET              0
  4. ;type
  5. ;byte = 0..255;
  6. ;$string255 = string 255;
  7. ;
  8. ;var
  9. ;answer:char;
  10. ;procedure move_cursor(x,y:byte);external;
  11.     EXTD    L156,MOVE_CUR
  12. ;procedure keyin (var cix:char);external;
  13.     EXTD    L157,KEYIN   
  14. ;FUNCTION QUERY(X,Y:BYTE;MESSAGE:$STRING255;BELL:BOOLEAN):BOOLEAN;
  15. ;
  16. ;{function to move the cursor to position x,y, display an interrogative
  17. ; message, ring a bell to alert the operator, if desired, and then accept
  18. ; either an upper or lower case "y" or "n", in answer to the message.
  19. ; This function returns a boolean TRUE if the answer to the question is
  20. ; affirmative (yes).}
  21. ;
  22. ;
  23. ;BEGIN
  24. L158
  25.     NAME QUERY
  26.     ENTRY QUERY
  27. QUERY:
  28.     ENTR    D,2,0
  29. ;    REPEAT
  30.     STMT    D,1
  31. ;    MOVE_CURSOR(X,Y);
  32. L160
  33.     STMT    D,2
  34.     MOV    H,A
  35.     LXI    B,266
  36.     PUSH    IX
  37.     DADX    B
  38.     MOV    L,0(IX)
  39.     POP    IX
  40.     MOV    H,L
  41.     PUSH    H
  42.     INX    S
  43.     MOV    H,A
  44.     RCHK    H,0,255
  45.     MOV    H,A
  46.     LXI    B,265
  47.     PUSH    IX
  48.     DADX    B
  49.     MOV    L,0(IX)
  50.     POP    IX
  51.     MOV    H,L
  52.     PUSH    H
  53.     INX    S
  54.     MOV    H,A
  55.     RCHK    H,0,255
  56.     CALL    L156
  57. ;    IF BELL = TRUE THEN WRITE(CHR(7),MESSAGE) ELSE WRITE(MESSAGE);
  58.     STMT    D,3
  59.     MOV    H,A
  60.     MOV    L,8(IX)
  61.     MOV    A,L
  62.     CMPI    D,1
  63.     MOV    A,H
  64.     JNZ    L174
  65.     STMT    D,4
  66.     LXI    H,7
  67.     STMT    M,4
  68.     PUSH    H
  69.     LXI    H,769
  70.     XTHL
  71.     LXI    B,1
  72.     PUSH    B
  73.     MOV    H,L
  74.     PUSH    H
  75.     INX    S
  76.     LXI    H,1793
  77.     PUSH    H
  78.     LXI    B,256
  79.     PUSH    B
  80.     LXI    H,-256
  81.     DADD    S
  82.     SPHL
  83.     XCHG
  84.     PUSH    IX
  85.     POP    H
  86.     LXI    B,9
  87.     DADD    B
  88.     LXI    B,256
  89.     LDIR
  90.     LXI    B,265
  91.     CALL    L111
  92.     JMP    L199
  93. L174
  94.     STMT    D,5
  95.     LXI    H,1793
  96.     PUSH    H
  97.     LXI    B,256
  98.     PUSH    B
  99.     LXI    H,-256
  100.     DADD    S
  101.     SPHL
  102.     XCHG
  103.     PUSH    IX
  104.     POP    H
  105.     LXI    B,9
  106.     DADD    B
  107.     LXI    B,256
  108.     LDIR
  109.     LXI    B,260
  110.     CALL    L111
  111. L199
  112. ;    KEYIN(ANSWER);
  113.     STMT    D,6
  114.     PUSH    IY
  115.     CALL    L157
  116. ;    WRITE(ANSWER);
  117.     STMT    D,7
  118.     LXI    H,769
  119.     PUSH    H
  120.     LXI    B,1
  121.     PUSH    B
  122.     MOV    H,A
  123.     MOV    L,0(IY)
  124.     MOV    H,L
  125.     PUSH    H
  126.     INX    S
  127.     LXI    B,5
  128.     CALL    L111
  129. ;    UNTIL ANSWER IN ['y','n','Y','N'];
  130.     STMT    D,8
  131.     CTRL    M,8
  132.     MOV    H,A
  133.     MOV    L,0(IY)
  134.     PUSH    H
  135.     CSET    D,0
  136.     LXI    D,121
  137.     CSET    D,1
  138.     LXI    D,110
  139.     CSET    D,1
  140.     LXI    D,89
  141.     CSET    D,1
  142.     LXI    D,78
  143.     CSET    D,1
  144.     MEMB
  145.     JNC    L160
  146. ;    QUERY:= ( (ANSWER = 'Y') or (ANSWER = 'y') );
  147.     STMT    D,9
  148.     MOV    H,A
  149.     MOV    L,0(IY)
  150.     MOV    A,L
  151.     CMPI    D,89
  152.     MOV    A,H
  153.     JZ    L256
  154.     MOV    H,A
  155.     MOV    L,0(IY)
  156.     MOV    A,L
  157.     CMPI    D,121
  158.     MOV    A,H
  159.     JRNZ    L251
  160. L250
  161. L252    EQU    L250
  162. L255    EQU    L252
  163. L256    EQU    L255
  164.     INR    A
  165. L251
  166.     MOV    L,A
  167.     XRA    A
  168.     MOV    H,A
  169.     RCHK    H,0,1
  170.     MOV    2(IX),L
  171. ;END;
  172.     STMT    D,10
  173.     EXIT    D,259
  174.