home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser 1998 October / STC_CD_10_1998.iso / BASE / BGH / BASIC / BGH.LST < prev   
Encoding:
File List  |  1998-09-26  |  6.4 KB  |  249 lines

  1.  
  2.  DEF FN Malloc%L(Ammount%L)
  3.  {
  4.    LOCAL Adr%L
  5.    GEMDOS Adr%L,72,L Ammount%L
  6.    RETURN Adr%L
  7.  }
  8.  
  9.  DEF FN Mxalloc%L(Ammount%L,Mem_Mode%L)
  10.  {
  11.    LOCAL Adr%L
  12.    GEMDOS Adr%L,68,L Ammount%L,Mem_Mode%L
  13.    RETURN Adr%L
  14.  }
  15.  
  16.  DEF PROC Mfree(Adr%L)
  17.  {
  18.    LOCAL R%L
  19.    GEMDOS R%L,73,L Adr%L
  20.    RETURN R%L
  21.  }
  22.  
  23.  
  24.  DEF FN My_Mxalloc%L(Ammount%L,Mem_Mode%L)
  25.  {
  26.    LOCAL Adr%L,Super%L
  27.  
  28.  '  IF ( COMPILER ) THEN GEMDOS Super,32,L 0
  29.  
  30.    LOCAL Sram%L=FN Mxalloc%L(-1,0)
  31.    LOCAL Sramg%L=FN Mxalloc%L(-1,64)
  32.    LOCAL Aram%L=FN Mxalloc%L(-1,1)
  33.    LOCAL Aramg%L=FN Mxalloc%L(-1,65)
  34.  
  35.  '  IF ( COMPILER ) THEN GEMDOS ,32,L Super
  36.  
  37.    IF (Sram%L=-1) THEN
  38.      Adr%L=FN Malloc%L(Ammount%L)
  39.    ELSE
  40.      IF ((Sram%L+Aram%L)=Sramg%L) AND ((Sram%L+Aram%L)=Aramg%L) THEN
  41.        Adr%L=FN Mxalloc%L(Ammount%L,Mem_Mode%L AND 3)
  42.      ELSE
  43.        Adr%L=FN Mxalloc%L(Ammount%L,Mem_Mode%L)
  44.      ENDIF
  45.    ENDIF
  46.    RETURN Adr%L
  47.  }
  48.  
  49.  DEF FN Strncmp%L(Adr%L,Str2$,N%L)
  50.  {
  51.    LOCAL I%L
  52.    FOR I%L=1 TO N%L
  53.      IF ( PEEK(Adr%L)<> ASC( MID$(Str2$,I%L,1))) THEN RETURN 1
  54.      Adr%L+=1
  55.    NEXT
  56.    RETURN 0
  57.  }
  58.  
  59.  DEF FN Atoi%L(Adr%L)
  60.  {
  61.    LOCAL Val$=" "*50,I%L=1
  62.    WHILE ( PEEK(Adr%L))
  63.      MID$ (Val$,I%L,1)= CHR$( PEEK(Adr%L))
  64.      Adr%L+=1:I%L+=1
  65.    WEND
  66.    I%L= VAL(Val$)
  67.    RETURN I%L
  68.  }
  69.  
  70.  DEF FN Bgh_Load%L(Name$)
  71.  {
  72.  
  73.    OPEN "i",1,Name$
  74.    File_Len%L= LOF(1)
  75.    CLOSE 1
  76.    IF (File_Len%L>16) THEN
  77.    {
  78.      Bgh_Read%L=FN My_Mxalloc%L(File_Len%L+1,$43):Bgh_Head%L=Bgh_Read%L
  79.      BLOAD Name$,Bgh_Head%L
  80.      POKE Bgh_Read%L+File_Len%L,0
  81.      IF ( LPEEK(Bgh_Head%L)=$23424748) THEN
  82.      {
  83.        DIM Last_Gruppen%L(3)
  84.        FOR I%L=0 TO 2
  85.          Last_Gruppen%L(I%L)=0: LPOKE Bgh_Head%L+4+4*I%L,0
  86.        NEXT
  87.  
  88.        Bgh_Read%L+=16
  89.        WHILE ( PEEK(Bgh_Read%L))
  90.        {
  91.          Char%L= PEEK(Bgh_Head%L)
  92.          WHILE (Char%L<>0 AND Char%L<>$A AND Char%L<>$D)
  93.            Bgh_Read%L+=1:Char%L= PEEK(Bgh_Read%L)
  94.          WEND
  95.          WHILE (Char%L=$A OR Char%L=$D)
  96.            POKE Bgh_Read%L,0:Bgh_Read%L+=1:Char%L= PEEK(Bgh_Read%L)
  97.          WEND
  98.          IF (Char%L= ASC("#")) THEN
  99.          {
  100.            I%L=0:Bgh_Read%L+=1:Char%L= PEEK(Bgh_Read%L)
  101.            SELECT Char%L
  102.              CASE ASC("D")
  103.                Egal$="Dial ":I%L=5:Section%L=0
  104.              CASE ASC("A")
  105.                Egal$="Alert ":I%L=6:Section%L=1
  106.              CASE ASC("U")
  107.                Egal$="User ":I%L=5:Section%L=2
  108.              CASE ASC(" ")
  109.  
  110.              DEFAULT
  111.                Last_Gruppe%L=0
  112.            END_SELECT
  113.            IF (I%L<>0 AND ( NOT FN Strncmp%L(Bgh_Read%L,Egal$,I%L))) THEN
  114.            {
  115.              Bgh_Read%L+=I%L:Char%L= PEEK(Bgh_Read%L)
  116.              Egal%L=Bgh_Read%L
  117.              WHILE (Char%L>= ASC("0") AND Char%L<= ASC("9"))
  118.                Bgh_Read%L+=1:Char%L= PEEK(Bgh_Read%L)
  119.              WEND
  120.              IF (Char%L=$A OR Char%L= ASC(" ") OR Char%L=$D OR Char%L=0) THEN
  121.              {
  122.                IF (Char%L) THEN POKE Bgh_Read%L,0:Bgh_Read%L+=1:Char%L= PEEK(Bgh_Read%L)
  123.                IF (Bgh_Read%L-Egal%L>=3) THEN
  124.                {
  125.                  New_Gruppe%L=(Bgh_Read%L-8) AND NOT 1
  126.                  WPOKE New_Gruppe%L,FN Atoi%L(Egal%L)
  127.                  LPOKE New_Gruppe%L+2,0
  128.                  POKE New_Gruppe%L+6,Bgh_Read%L-New_Gruppe%L
  129.  
  130.                  IF (Last_Gruppen%L(Section%L)<>0) THEN
  131.                    WPOKE Last_Gruppen%L(Section%L)+2,New_Gruppe%L-Last_Gruppen%L(Section%L)
  132.                  ELSE
  133.                    LPOKE Bgh_Head%L+4+4*Section%L,New_Gruppe%L
  134.                  ENDIF
  135.                  Last_Gruppe%L=New_Gruppe%L
  136.                  Last_Object%L=0
  137.                }
  138.                ENDIF
  139.              }
  140.              ENDIF
  141.            }
  142.            ELSE
  143.            {
  144.              IF (Last_Gruppe%L<>0) THEN
  145.              {
  146.                Bgh_Read%L+=1:Char%L= PEEK(Bgh_Read%L)
  147.                Egal%L=Bgh_Read%L
  148.                WHILE (Char%L>= ASC("0") AND Char%L<= ASC("9"))
  149.                {
  150.                  Bgh_Read%L+=1:Char%L= PEEK(Bgh_Read%L)
  151.                }
  152.                WEND
  153.                IF (Char%L= ASC(" ") AND Bgh_Read%L>=3) THEN
  154.                {
  155.                  POKE Bgh_Read%L,0:Bgh_Read%L+=1
  156.  
  157.                  New_Object%L=(Bgh_Read%L-5) AND NOT 1
  158.                  WPOKE New_Object%L,FN Atoi%L(Egal%L)
  159.                  WPOKE New_Object%L+2,0
  160.                  POKE New_Object%L+4,Bgh_Read%L-New_Object%L
  161.  
  162.                  IF (Last_Object%L<>0) THEN
  163.                    WPOKE Last_Object%L+2,New_Object%L-Last_Object%L
  164.                  ELSE
  165.                    WPOKE Last_Gruppe%L+4,New_Object%L-Last_Gruppe%L
  166.                  ENDIF
  167.                  Last_Object%L=New_Object%L
  168.                }
  169.                ENDIF
  170.              }
  171.              ENDIF
  172.            }
  173.            ENDIF
  174.          }
  175.          ENDIF
  176.        }
  177.        WEND
  178.      }
  179.      ENDIF
  180.    }
  181.    ENDIF
  182.    RETURN Bgh_Head%L
  183.  }
  184.  
  185.  DEF PROC Bgh_Free(Bgh_Head%L)
  186.  {
  187.    IF (Bgh_Head%L<>0 AND LPEEK(Bgh_Head%L)=$23424748) THEN
  188.    {
  189.      LPOKE Bgh_Head%L,0
  190.      Mfree(Bgh_Head%L)
  191.    }
  192.    ENDIF
  193.  }
  194.  END_PROC
  195.  
  196.  DEF FN Bgh_Gethelpstring%L(Bgh_Head%L,Section%L,Gruppe%L,Index%L)
  197.  {
  198.    LOCAL Result%L=0,Bgh_Gruppe%L,Bgh_Object%L
  199.    IF (Bgh_Head%L<>0 AND LPEEK(Bgh_Head%L)=$23424748 AND Section%L>=1 AND Section%L<=3) THEN
  200.    {
  201.  
  202.      Bgh_Gruppe%L= LPEEK(Bgh_Head%L+4*Section%L)
  203.  
  204.      WHILE (Bgh_Gruppe%L)
  205.      {
  206.        IF ( WPEEK(Bgh_Gruppe%L)=Gruppe%L) THEN
  207.        {
  208.          IF (Index%L=-1) THEN
  209.            Result%L=Bgh_Gruppe%L+ PEEK(Bgh_Gruppe%L+6)
  210.          ELSE
  211.          {
  212.            IF ( WPEEK(Bgh_Gruppe%L+4)) THEN
  213.              Bgh_Object%L=Bgh_Gruppe%L+ WPEEK(Bgh_Gruppe%L+4)
  214.            ELSE
  215.              Bgh_Object%L=0
  216.            ENDIF
  217.            WHILE (Bgh_Object%L)
  218.            {
  219.              IF ( WPEEK(Bgh_Object%L)=Index%L) THEN
  220.              {
  221.                Result%L=Bgh_Object%L+ PEEK(Bgh_Object%L+4)
  222.                EXIT
  223.              }
  224.              ENDIF
  225.              IF ( WPEEK(Bgh_Object%L+2)) THEN
  226.                Bgh_Object%L=Bgh_Objec%L+ WPEEK(Bgh_Object%L+2)
  227.              ELSE
  228.                Bgh_Object%L=0
  229.              ENDIF
  230.            }
  231.            WEND
  232.          }
  233.          ENDIF
  234.          EXIT
  235.        }
  236.        ENDIF
  237.        IF ( WPEEK(Bgh_Gruppe%L+2)) THEN
  238.          Bgh_Gruppe%L=Bgh_Gruppe%L+ WPEEK(Bgh_Gruppe%L+2)
  239.        ELSE
  240.          Bgh_Gruppe%L=0
  241.        ENDIF
  242.      }
  243.      WEND
  244.    }
  245.    ENDIF
  246.    RETURN Result%L
  247.  }
  248.  
  249.