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

  1. ;TYPE
  2. ;$STRING255= STRING 255;
  3. ;$STRING80 = STRING 80;
  4. ;$STRING0 = STRING 0;
  5. ;BYTE = 0..255;
  6. ;
  7. ; VAR
  8. ;C:CHAR;
  9. ;NUMBER:INTEGER;
  10. ;
  11. ;FUNCTION LENGTH(X:$STRING255):INTEGER;EXTERNAL;
  12.     EXTD    L168,LENGTH  
  13. ;PROCEDURE SETLENGTH(VAR X:$STRING0; Y:INTEGER);EXTERNAL;
  14.     EXTD    L169,SETLENGT
  15. ;
  16. ;{function to repeat "x" number of times a character"y";  especially
  17. ;useful in write commands...
  18. ;requires pascal/z's external functions length and setlength..}
  19. ;
  20. ;FUNCTION REPEAT_CHAR (X:BYTE; Y:CHAR):$STRING255;
  21. ;LABEL 1;
  22. ;VAR
  23. ;RC:$STRING255;
  24. ;I:INTEGER;
  25. ;
  26. ;BEGIN
  27. L170
  28.     NAME REPEAT_CHAR
  29.     ENTRY REPEAT_CHAR
  30. REPEAT_CHAR: 
  31.     ENTR    D,2,258
  32. ;SETLENGTH(RC,0);
  33.     STMT    D,1
  34.     PUSH    IX
  35.     POP    H
  36.     DCX    H
  37.     DCX    H
  38.     PUSH    H
  39.     MOV    H,A
  40.     MOV    L,A
  41.     PUSH    H
  42.     CALL    L169
  43. ;IF (I < 1) OR (I > 255) THEN GOTO 1;
  44.     STMT    D,2
  45.     MOV    L,-1(IX)
  46.     MOV    H,0(IX)
  47.     LXI    D,1
  48.     LESS    D,0
  49.     JC    L186
  50.     MOV    L,-1(IX)
  51.     MOV    H,0(IX)
  52.     LXI    D,255
  53.     GRET    D,0
  54.     JNC    L185
  55. L184
  56. L186    EQU    L184
  57.     STMT    D,3
  58.     CTRL    M,3
  59.     JMP    L171
  60. L185
  61. ;
  62. ;{note well:  this will permit writing any character, printable or
  63. ; otherwise....e.g. a series of x's or a series of bells ringing!}
  64. ;
  65. ;FOR I:= 1 TO X DO APPEND(RC,Y);
  66.     STMT    D,4
  67.     MOV    0(IX),A
  68.     MVI    -1(IX),1
  69.     PUSH    IX
  70.     MOV    H,A
  71.     MOV    L,9(IX)
  72.     XTHL
  73. L213
  74.     MOV    D,M
  75.     DCX    H
  76.     MOV    E,M
  77.     XTHL
  78.     PUSH    H
  79.     GE    D,0
  80.     JNC    L214
  81.     STMT    D,5
  82.     PUSH    IX
  83.     POP    H
  84.     DCX    H
  85.     DCX    H
  86.     PUSH    H
  87.     LXI    H,255
  88.     PUSH    H
  89.     MOV    H,A
  90.     MOV    L,8(IX)
  91.     INR    H
  92.     PUSH    H
  93.     LXI    H,2
  94.     PUSH    H
  95.     CALL    L137
  96.     CTRL    M,5
  97.     POP    H
  98.     XTHL
  99.     INR    M
  100.     INX    H
  101.     JRNZ    L233
  102.     INR    M
  103.     JV    L234
  104. L233
  105.     JMP    L213
  106. L214
  107.     POP    D
  108. L234
  109.     POP    D
  110. ;
  111. ;1:
  112.     STMT    D,6
  113. L171
  114. ;REPEAT_CHAR:=RC;
  115.     STMT    D,7
  116.     PUSH    IX
  117.     POP    H
  118.     DCX    H
  119.     DCX    H
  120.     RCHK    S,255
  121.     XCHG
  122.     PUSH    IX
  123.     POP    H
  124.     LXI    B,265
  125.     DADD    B
  126.     XCHG
  127.     LXI    B,256
  128.     LDDR
  129. ;END;
  130.     STMT    D,8
  131.     EXIT    D,2
  132.