/* Amos to E test - copyright 1997 Branko Collin Below sources are for educational purposes only. So study and enjoy. :-) */ AMOS source: 01. NAAM$=Fsel$("") 02. Open In 1,NAAM$ 03. BUF=1024 04. FL=Lof(1) 05. If BUF>FL Then BUF=FL 06. A$=Input$(1,BUF) 07. Close 1 08. SUM=0 09. For I=1 To BUF 10. B$=Mid$(A$,I,1) 11. If B$="A" Then Inc B 12. Next I 13. Print "I found";SUM;" As in the first";BUF;"bytes of your file." 14. Print "The file itself was";FL;" bytes long." E destination: 00. %definitions1 PROC main() %definitions2 01. naam_s := fsel_s(NIL,NIL,NIL) 02. filehandle1 := open_in(naam_s) 03. buf_i := 1024 04. fl_i := lof(filehandle1) 05. IF buf_i > fl_i THEN buf_i := fl_i 06. a_s := input_s(filehandle1,buf_i) 07. close_in(filehandle1) 08. sum_i := 0 09. FOR i_i := 1 TO buf_i 10. b_s := mid_s(a_s, i_i, 1) 11. IF StrCmp(b_s,'A') THEN b_i++ 12. ENDFOR 13. WriteF('I found \d As in the first \d bytes of your file.',sum_i,buf_i) 14. WriteF('The file itself was \d bytes long.') ZZ. ENDPROC %helper procedures %definitions1: MODULE 'dos/dos', 'Asl', 'libraries/Asl' ENUM ERR_FSEL_LIB=1, ERR_FSEL_ALLOC, ERR_FSEL_OPEN, ERR_OPEN_IN, ERR_LOF, ERR_INPUTS, ERR_CLOSE_IN, ERR_MID, ERR_STRING DEF naam_s:PTR TO CHAR, a_s:PTR TO CHAR, b_s:PTR TO CHAR %definitions2: DEF buf_i, fl_i, sum_i, i_i, b_i DEF filehandle1 %helper procedures: PROC fsel_s(fsel_path,fsel_pattern,fsel_title) HANDLE /* requires: CONST ERR_STRING CONST ERR_FSEL_LIB CONST ERR_FSEL_ALLOC CONST ERR_FSEL_ALLOC MODULE 'Asl', 'libraries/Asl' */ DEF fsel_out, req:PTR TO filerequester, aslbase, testreq DEF lenfile, lendir, lenpath aslbase := OpenLibrary('asl.library',37) IF (aslbase<>TRUE) THEN Raise(ERR_FSEL_LIB) req := AllocFileRequest() IF (req<>TRUE) THEN Raise(ERR_FSEL_ALLOC) testreq := RequestFile(req) IF (testreq<>TRUE) THEN Raise(ERR_FSEL_OPEN) lenfile := StrLen(req.file) lendir := StrLen(req.drawer) lenpath := lenfile + lendir fsel_out := String(lenpath) IF (fsel_out = NIL) THEN Raise(ERR_STRING) StrCopy(fsel_out,req.drawer) StrAdd(fsel_out,req.file) FreeFileRequest(req) CloseLibrary(aslbase) EXCEPT SELECT exception CASE ERR_STRING WriteF('Error: Could not allocate space for a filename.\n') CASE ERR_FSEL_LIB WriteF('Error: Could not open Asl.library.\n') CASE ERR_FSEL_ALLOC WriteF('Error: Could not allocate space for a filerequester.\n') CASE ERR_FSEL_OPEN WriteF('Error: Could not open filerequester.\n') ENDSELECT CleanUp(0) ENDPROC fsel_out PROC open_in(open_in_fn) HANDLE /* requires: CONST ERR_OPEN_IN */ DEF open_in_fh open_in_fh := Open(open_in_fn, OLDFILE) IF open_in_fh<>TRUE THEN Raise(ERR_OPEN_IN) EXCEPT WriteF('Error: I could not open \s.\n',open_in_fn) CleanUp(0) ENDPROC open_in_fh PROC lof(lof_fh) HANDLE /* requires: CONST ERR_LOF MODULE 'dos/dos' */ DEF lof_out, start, end start := Seek(lof_fh,0,OFFSET_END) end := Seek(lof_fh,0,OFFSET_BEGINNING) lof_out := end - start IF lof_out<1 THEN Raise(ERR_LOF) EXCEPT WriteF('Error: Filesize = \d bytes.\n',lof_out) CleanUp(0) ENDPROC lof_out PROC input_s(input_fh,input_len) HANDLE /* requires: CONST ERR_INPUTS */ DEF input_out:PTR TO CHAR,lenread input_out := String(input_len) lenread := Read(input_fh,input_out,input_len) IF lenread<>input_len THEN Raise(ERR_INPUTS) EXCEPT WriteF('Error: I could only read \d of \d bytes.\n', lenread,input_len) CleanUp(0) ENDPROC input_out PROC close_in(close_in_fh) Close(close_in_fh) ENDPROC PROC mid_s(mid_source,mid_pos,mid_len) HANDLE /* requires: CONST ERR_STRING CONST ERR_MID */ DEF mid_out,test mid_out := String(mid_len) IF (mid_out = NIL) THEN Raise(ERR_STRING) mid_pos-- test := MidStr(mid_out,mid_source,mid_pos,mid_len) IF (test <> mid_out) THEN Raise(ERR_MID) EXCEPT SELECT exception CASE ERR_STRING WriteF('Error: I could not reserve enough space for the ') WriteF('Mid$() operation.\n') CASE ERR_MID WriteF('Error: Something went wrong executing a Mid$().\n') ENDSELECT CleanUp(0) ENDPROC mid_out