--- /dev/null
+import javax.microedition.rms.RecordListener;
+import javax.microedition.rms.RecordStore;
+import javax.microedition.rms.RecordStoreException;
+
+/**
+ * Библиотека для MIDlet Pascal<br/>
+ * Для грамотной работы с RMS
+ * @author Kalter
+ */
+
+public class Lib_rms{
+
+ /**
+ * Хранилище записей
+ */
+ private static RecordStore rms;
+
+ /**
+ * Входные данные
+ */
+ private static StringInputStream input;
+
+ /**
+ * Выходные данные
+ */
+ private static StringOutputStream output;
+
+ /**
+ * Обработчик событий
+ */
+ private static RecordListener listener;
+
+ /**
+ * Открывает хранилище. В случае отсутствия создаёт новое
+ * @param name Имя хранилища
+ */
+ public static void open(String name){
+
+ try{
+
+ rms=RecordStore.openRecordStore(name,true);
+ output=new StringOutputStream();
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ }
+ }
+
+ /**
+ * Удаляет хранилище по имени
+ * @param name Имя удаляемого хранилища
+ */
+ public static void deleterecordstore(String name){
+
+ try{
+
+ RecordStore.deleteRecordStore(name);
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ }
+ }
+
+ /**
+ * @return Время последнего изменения данных в хранилище записей в виде
+ * количества миллисекунд прошедших с 1 января 1970 года до момента
+ * последнего изменения
+ */
+ public static int getlastmodified(){
+
+ try{
+
+ return (int)rms.getLastModified();
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ return -1;
+ }
+ }
+
+ /**
+ * @return Имя хранилища
+ */
+ public static String getname(){
+
+ try{
+
+ return rms.getName();
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ return "-1";
+ }
+ }
+
+ /**
+ * @return Номер, который будет присвоен следующей записи
+ */
+ public static int getnextrecordid(){
+
+ try{
+
+ return rms.getNextRecordID();
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ return -1;
+ }
+ }
+
+ /**
+ * @return Количество записей в хранилище
+ */
+ public static int getnumrecords(){
+
+ try{
+
+ return rms.getNumRecords();
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ return -1;
+ }
+ }
+
+ /**
+ * @param id Номер записи
+ * @return Размер (в байтах) записи по указанному номеру
+ */
+ public static int getrecordsize(int id){
+
+ try{
+
+ return rms.getRecordSize(id);
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ return -1;
+ }
+ }
+
+ /**
+ * @return Размер (в байтах) хранилища
+ */
+ public static int getsize(){
+
+ try{
+
+ return rms.getSize();
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ return -1;
+ }
+ }
+
+ /**
+ * @return Объём памяти (в байтах), доступный для расширения хранилища
+ */
+ public static int getsizeavailable(){
+
+ try{
+
+ return rms.getSizeAvailable();
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ return -1;
+ }
+ }
+
+ /**
+ * @return Номер версии хранилища
+ */
+ public static int getversion(){
+
+ try{
+
+ return rms.getVersion();
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ return -1;
+ }
+ }
+
+ /**
+ * Включить обработчик событий
+ */
+ public static void addlistener(){
+
+ listener=new RMSListener();
+ rms.addRecordListener(listener);
+ }
+
+ /**
+ * Отключить обработчик событий
+ */
+ public static void deletelistener(){
+
+ rms.removeRecordListener(listener);
+ listener=null;
+ }
+
+ /**
+ * Удалить запись по указанному номеру
+ * @param id Номер удаляемой записи
+ */
+ public static void deleterecord(int id){
+
+ try{
+
+ rms.deleteRecord(id);
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ }
+ }
+
+ /**
+ * Прочитать в буфер данные записи по указанному номеру
+ * @param id Номер записи
+ */
+ public static void read(int id){
+
+ try{
+
+ input=new StringInputStream(new String(rms.getRecord(id)));
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ }
+ }
+
+ /**
+ * Добавить данные из буфера в запись
+ */
+ public static void add(){
+
+ try{
+
+ rms.addRecord(output.toString().getBytes(),0,
+ output.toString().length());
+ output=new StringOutputStream();
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ }
+ }
+
+ /**
+ * Добавить данные из буфера в запись по указанному номеру
+ * @param id Номер записи
+ */
+ public static void set(int id){
+
+ try{
+
+ rms.setRecord(id,output.toString().getBytes(),0,
+ output.toString().length());
+ output=new StringOutputStream();
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ }
+ }
+
+ /**
+ * @return Данные из буфера типа Integer
+ */
+ public static int inputinteger(){
+
+ int result=-1;
+ try{
+
+ istype('i');
+ result=Integer.parseInt(input.readString());
+ }catch(IndexOutOfBoundsException ioobe){
+
+ exception(ioobe);
+ }
+ return result;
+ }
+
+ /**
+ * @return Данные из буфера типа String
+ */
+ public static String inputstring(){
+
+ String result="-1";
+ try{
+
+ istype('s');
+ result=input.readString();
+ }catch(IndexOutOfBoundsException ioobe){
+
+ exception(ioobe);
+ }
+ return result;
+ }
+
+ /**
+ * Записывает переменную типа Integer в буфер
+ * @param value Записываемая переменная
+ */
+ public static void printinteger(int value){
+
+ output.write('i',""+value);
+ }
+
+ /**
+ * Записывает переменную типа String в буфер
+ * @param value Записываемая переменная
+ */
+ public static void printstring(String value){
+
+ output.write('s',value);
+ }
+
+ /**
+ * Закрывает хранилище
+ */
+ public static void close(){
+
+ try{
+
+ rms.closeRecordStore();
+ rms=null;
+ input=null;
+ output=null;
+ }catch(RecordStoreException rse){
+
+ exception(rse);
+ }
+ }
+
+ /**
+ * Проверяет на совместимость типа из буфера и читаемого типа
+ * @param c Тип читаемой переменной
+ * @throws IndexOutOfBoundsException При выходе за границы буфера
+ */
+ private static void istype(char c) throws IndexOutOfBoundsException{
+
+ if(c!=input.read()){
+
+ exception(new RecordStoreException("wrong_type"));
+ }
+ }
+
+ /**
+ * Сообщает процедуре rms_exception сообщение об ошибке
+ * @param e Возбужденное исключение
+ */
+ private static void exception(Exception e){
+
+ try{
+
+ M.rms_exception(e.getMessage());
+ }catch(Exception e0){
+
+ System.out.println(e0.getMessage());
+ e0.printStackTrace();
+ }
+ }
+}
\ No newline at end of file